从事软件业也有几年了,经历几多个不同的公司、不同企业文化、不同的开发流程,不变的身边总是有零星高手和多数的普通程序员。我总是苦苦思索,一个刚入行的程序员如何才能成为一个软件高手呢?在这里我们不讨论那些奇才怪才,比如几岁或十几岁就接触电脑、初中高中就会编程,或者大学期间就积累了一些经验和人脉,或者辍学开公司去了的牛人们。我们只讨论一个普通的或相对优秀的程序员,在公司里工作的过程中如何成长为一个高手。
近几年国内的大学,计算机专业毕业的学生,上学期间只有几名学生有过软件业相关的实践,大多数可能连编程还不懂,即使学过c、c++、java课程。我一直反对大学毕业考研或者保研、直博或者考博然后留校任教。因为上学期间即使做过实习,与真正的商业上的开发也是有区别的,一般公司不会把重要的任务交给一个实习生去做。何况大部分人没有实习经历,你可以想象这样的老师能教出什么样水平的学生。
在几年的工作过程中,我发现很少公司有很好的培训体系,能够为自己员工的职业生涯发展做出系统规划和扎实培训的公司。一方面有些公司并不想去做这些,因为投入很大,并且效果不见得好,更可能为竞争对手做嫁衣裳;另一方面即使想去做,也很难找到合适的人去做。这里面很大一部分原因是国内搞软件的整体风气比较沉闷、缺乏交流,跟管理咨询行业的培训根本没法比。
写这个系列的目的是与大家探讨从小工到专家的成长路线,这是一个地图,是一个导航,条条大路通罗马,我愿意选择相对省力又高效的途径。至少不要南辕北辙。并不是说我就是高手,也不认为不是高手就没有资格说这个话题。太多人沉默不会有好的结果的。各方面都是这样,大家只要看看我们生活的人文社会环境就知道了。
这篇作为这一系列的序言,总体介绍一下我认为初学者成为软件高手需要掌握的必备技能,这些不是充分条件而是必要条件。
1. 一门语言的语法,SDK的常用API,算法与数据结构
有了上面的知识,再加上一点实践,再从网上找一些笔试题做几套,基本可以过笔试这一关。
2. 编码规范、高性能编码经验技巧。
要成为一个职业化的、专业化的程序员,首先要养成良好的习惯,良好的习惯从规范化的点滴日常工作开始。
3. 熟练掌握IDE、常用工具的使用
工具可以提高生产力,用一把小刀去砍树很困难,用电锯立刻变得很简单。
4. 面向对象的原则
这里重点掌握面向对象的原则,比如:单一职责原则 SRP、开放-封闭原则、替换原则LSP、依赖倒置原则DIP等,明白了这些原则,对后面内容理解的深入会有很大的帮助。其实这才是根本,不了解这些原则去学设计模式有种空中楼阁、头重脚轻的感觉。根基不牢上层建筑就好像浮云一样。
5. 重构
重构就是在不改变软件功能的前提下改善代码的设计以提高可维护性。修改别人的代码或者优化自己的代码都需要用到重构技术
6. 设计模式
基于一些常用的模式来学习如何使用设计模式。设计模式对于做框架开发的程序员比较有帮助。我们会选择一些常用的来讲解。
7. 最重要、最难,看上去却最简单的功夫:修改代码的艺术
我看到很多新员工进入大公司都是从这步做起,但我认为代价是很大的,无论对公司还是员工本身。对公司来讲,一个没经验的人修改了一个bug,可能会引出几个问题,然后再去修改,如此恶性循环。对于员工来讲,赶鸭子上架,不了解代码的逻辑、针对表象简单粗暴的修改,有时我看了真的很是心痛。对程序员本身的能力提高也是缓慢的。其实修改别人的代码开始是功夫,之后就是艺术。就好像你要给一个人治病,你要成为医生,先要掌握人体基本结构、各个脏器的特点、各种药物的功能、常用的诊治方法等等,医院不会让一个医学院毕业的学生去给病人看病,总要有段实习,由经验丰富的医生带一段时间。然后从难度较低的做起。
8. 架构设计
这一点我是不太自信的,一是感觉资历不够,二是在这一点上能忽悠的人太多,而这又不是我的强项,我诚实的说出自己的看法可能被误解,不过这是成为高手必不可少的部分,这里就与大家共同探讨。
9. 软件工程
开发软件的过程,我经历过公司从CMM到敏捷的转变,我个人是比较推崇敏捷开发的,这里想与大家站在工程的角度聊一聊软件开发。
10. 质量管理
越往后其实越偏向管理了,开始是个人修炼,后面是站在组织、站在公司的角度来看软件。质量是说得多、做得少,尤其在软件领域,我一直觉得很邪门的事情是不懂软件开发的人甚至被淘汰出去的人去从事软件行业的质量管理,真是令人担忧。质量管理中有很多很好的理论和工具,是值得我们学习的,不只可以应用到软件开发上,生活中也很有用的。
国内很多IT培训机构基本上也是停留在应试教育,就是以通过笔试面试为目的,再往后整个行业的职业培训几乎没有。这里原因很多,我不想多谈,这是中国软件从业人员的悲哀。
希望通过这个系列的文章,能够帮助一部分程序员成长,同时也希望更多老鸟高手给我一些指导,因为你们不站出来才有我的看似有点张狂,实际上我是很谦虚的。
分享到:
相关推荐
成为一名单片机高手,需要掌握一系列的学习方法、心态调整、实际操作和资源利用技巧。以下内容将详细解析如何走上成为单片机高手之路。 首先,学习态度对个人成长至关重要。单片机高手的秘诀之一是不急于求成,不要...
"编程高手之路—vb、C、C++、API、批处理系列教程汇总"是一个全面的学习资源包,旨在帮助程序员深入理解并熟练运用VB(Visual Basic)、C、C++以及API(应用程序接口)和批处理技术。下面将详细阐述这些知识点及其...
为了成为一名真正的Java高手,需要掌握一系列核心技能与知识体系。以下根据给定的信息,对成为Java高手所需掌握的25个学习要点进行详细阐述: #### 1. 掌握面向对象分析与设计(OOA/OOD)及设计模式 了解并熟练...
在成为PPT高手的路上,你需要掌握一系列关键技能和知识,这些都将帮助你在设计、制作和展示演示文稿时更加得心应手。标题"成為ppt高手之路"暗示了这一过程的挑战与成就,而标签也进一步强调了这个主题。通过学习和...
对于希望成为Layout高手的设计师来说,至少需要精通这三种工具之一。 **Protel、PADS和ZUKEN**:虽然这些工具可能不如Allegro、WG和EN那样强大,但对于了解不同工具的特点、文件格式转换和封装库设计仍然非常重要。...
第三,特效制作是AE高手之路中的亮点之一。AE内建有强大的特效库,用户可以利用这些预设特效轻松地为视频添加视觉冲击力。同时,高级用户还可以通过掌握表达式,编写自定义的动画效果,或利用第三方插件进行特效创作...
出版,该出版社以其高质量的技术书籍和教程闻名于世,是许多技术爱好者和专业人士信赖的信息来源之一。 #### 六、版权信息 - **版权持有者**:David H. Hoover与Adewale Oshineye共同拥有本书的所有权。 - **印刷...
在当今的电子技术领域中,单片机作为核心器件之一,在自动化控制、智能仪器仪表以及消费类电子产品中扮演着极其重要的角色。要成为一名优秀的单片机开发者,需要系统地掌握一系列专业知识,并通过实践不断积累经验。...
良好的编程习惯是编程高手的标志之一。遵循编码规范、注重代码可读性、及时注释、合理命名变量等,都是提高代码质量的关键。此外,定期复习和更新知识,保持对新技术的关注,也是持续进步的重要保障。 ### 第九条...
控制结构是程序设计的核心概念之一,主要包括条件语句(如 `if...else`)和循环语句(如 `for`、`while`)。合理使用这些控制结构可以使程序逻辑更加清晰、高效。 #### 1.3 函数与模块 函数是代码复用的重要手段,...
在维修领域,成为高手并非一蹴而就的事情,它需要一系列的知识积累、技能训练和实践经验。以下是一些关键要点,帮助你逐步提升为维修专家。 首先,面对未知的问题,要有谨慎的态度。不要在不了解状况的情况下随意...
李涛老师,作为一个在Photoshop领域有着深厚造诣的专家,他的教学内容深受广大用户喜爱,其“Photoshop高手之路”系列讲座为学习者提供了丰富的实践和理论知识。 本压缩包文件“李涛老师的Photoshop高手之路练习...
总之,《软件开发者路线图》为有志于成为软件工匠的读者提供了一条明确的成长路径,它不仅关注技术技能的提升,更注重培养适应变化、解决问题和与人协作的能力。通过学习和实践书中的模式,开发者可以更好地适应行业...
"编程高手之路 vb、C、C++、API、批处理系列教程汇总"是一个针对Windows平台的综合学习资源,旨在帮助程序员提升技能并拓宽知识面。这个资源集合涵盖了VB(Visual Basic)、C、C++三种不同的编程语言,以及API应用和...
标题中的“媒体制作,让你成为高手”意味着我们将探讨的是一些可以帮助用户提升媒体制作技能的工具或技术。描述中提到的“软件相当好用”,暗示我们可能会涉及一款易上手且功能强大的媒体编辑软件,适合新手使用,...
从“电脑菜鸟”成长为“高手”,需要经历一系列的学习和实践过程。这份"电脑菜鸟TO高手TXT文档"就是为此目的而设计的资源,它涵盖了广泛的基础到高级的电脑知识,旨在帮助初学者快速提升自己的计算机操作能力。 ...