努力做一名专业的程序员

来源:互联网 发布:矩阵列向量归一化例题 编辑:程序博客网 时间:2024/05/18 05:21

      以前在学校学习的时候,学了那么多的课程,也看了不少的参考书籍,对计算机的体系也有个大致的了解,自认为整个计算机系统就那么回事,感觉什么样的程序,自己都会做出来。怎么地出来就能很快跻身高级职位,指点江山了。现在工作半年了,参考现实,回想当年,不禁觉得汗颜,感觉现实和理想真的是差很多。不过现实也给了我深刻的印象,使得我定下了接下来若干年的事业目标——做一名专业的程序员。

      国内做软件的,人人都很优秀,大家都想做产品,做领导,但是却很少有做技术的。都说做技术的过了30就歇菜了,跟不上技术的发展,不是转管理就是转行。其实,计算机技术的发展是很快。但是快的不是计算机的本质技术,而是快得是若干的库。也就是说,随着时间的推移,许多原先要自己去实现的体系或者功能,现在都被其它人实现好了,拿过来用就是了,所以才会隔三岔五的出现新的软件技术。但是静下心来,就能够发现许多新技术不过是对某些模块的包装和测试,而真正的技术的革新是很少的,同时,真的能够掌握已有的计算机核心技术的人,也不是那么多。再退一步,就是能够合理地把这些模块整合起来做成优秀产品的,相对于庞大的软件行业来说,也是很少的。所以,即使技术上没有创新,一个程序员在相关领域工作10年以上,他对这部分软件的感觉肯定要比绝大多数新入行业的来得深刻。在商业上来说,就是能降低项目的实现风险。

     现在,软件行业中,各种头衔平地而起,软件设计师,软件架构师,系统分析员,软件技术总监等等,各个风光无限,待遇丰厚。所以成了许多人趋之若鹜的目标。其实,真正能够保证软件质量的,不仅要有良好的设计和管理,更应该要有大量专业的软件实现人员——程序员。大概是国人的传统所致,大家都不愿意在底层兢兢业业地做那些实现细节,而希望做那些决策的设计和管理。但是,没有一批专业的程序员,再好的设计和管理,也不能按时地完成软件项目,即使完成了也是一个漏洞百出的半成品。所以,就造成了加班赶进度成了家常便饭。再说,一个软件设计和管理人员如果没有经过专业的程序员的培训与锻炼,谁又能保证他能够出色地完成自己的工作任务呢?

     所以,要想在软件行业做出一番事业和成就,就必须先把自己培养成一名专业的程序员。

     什么样的程序员是专业的程序员?这个问题没有统一的答案,每人都有自己的看法。下面是本人的一点体会:

     1. 要对计算机结构有清晰的认识。无论何种软件,最终都是通过硬件计算设备来实现的,所以,在其之上编写软件要明白硬件结构的信息。至少,程序员要从软件开发的角度去理解硬件结构。大的如硬件的架构,如CPU的设计架构,辅助计算器的架构(如GPU)等。明白哪些计算是硬件是已经提供了的,那就不要用软件去实现它,硬件实现总是要比软件来的快。在这里,了解一下指令会对开发有很大的帮助,尽管高级语言已经为程序员做了很多。

     2.要对使用的编译器要了解。各种各样的语言一般都会有编译器,它把比较容易阅读的,按照一定语法组织成的本文文件,翻译成能够在硬件上执行的代码。同时编译器也会帮程序员合理组织指令的排列。这种帮助在绝大多数的情况下是有利的,但是在极少的情况下也会成为软件bug的根源。如对浮点特性进行不同设置,那么在把整型数地址强转成浮点数地址并赋值的时候,就会出现2种不同的实现:1是把当前的整型数压入到浮点计算器堆栈里面,然后把堆栈弹出到一个浮点变量中去;还有一种是简单地把数据从整型数内存复制到浮点数内存中去。可见了解编译器的特性,不仅能够明白编译器为我们做了什么,怎么做,更能明白为什么这样做。了解编译器并不是会来个编译就行了,那样地话当软件开发人员变多,规模变大之后,会出现很多隐性的错误。同时,了解编译器特性,也能对这种语言的内存模型有个更深入的了解。

      3.要对使用的编程语言熟练掌握。这一点是毫无疑问的,软件开发不可能回退到原来直接与硬件打交道的情况,掌握若干编程语言是成为专业程序员基础。

      4.要对使用的编程语言相关的库充分了解。尽管用基本的编程语言,程序员可以写出任何能够用计算机处理的程序,但是在有限的时间和资金的限制下,还是要利用已有的、经过充分测试地、可以重用的软件模块来进行软件开发。把软件开发的技术重点放到能够体现软件价值的部分上来。可以重用软件模块,不等于程序员就不需要对软件模块置之不理;相反要对软件模块进行合理的分析,总结其优点,缺点,可改经的部分,可借鉴部分。这样才能充分利用已有的部分,创造出高质量,高水平的软件产品来。

      5.要会使用各种开发工具来加快编程的速度和质量。当代软件开发,以不是单凭兴趣和爱好就可以完成的。一个软件开发规模大,时间短,多个程序员协作开发。如果没有一个良好的编程环境来组织和整合各个步骤,那么还没有等软件开发出来,程序员就直接淹没在浩瀚的代码之中了。因此,各种的开发辅助工具,不仅是代码编写的,调试的,检测的,管理的,整合的,还是代码的编译,分布和部署,好的软件开发工具能够加快速度,保证质量。不要认为学工具麻烦,或者是习惯了原有的手工开发的模式了,试试看这些能够帮助开发的工具,肯定能够得到很大的帮助。

      6.要多用软件。不仅对程序员日常开发用的工具要熟悉,对其它领域的软件也要有所了解,要时刻关注软件开发的最新情况。程序员可以不深入新技术,但一定要了解新技术的发展。这样才不会去重复做其它人已经做过的东西(技术验证除外)。看一名程序员是否资深,不仅要看他写过多少软件,更要看他用过多少软件。只有这样,才能从整体去了解软件的本质。

      7.要有良好的设计风格。这里的设计风格包括两个方面,意识代码编写的风格。软件绝大多数工作表现是代码和程序。一个编写的软件代码不仅能够准确保留程序员的意图,还能够为之后的测试,调试和维护带来方便。一些人处于对自己的技术保密态度,故意把代码写的难懂,这是不对的。一般大软件项目中,程序员本人写的代码,一个月之后去看,都要花费不少时间去重新理解,别说之后其它人来维护了。如果代码写的乱,取名晦涩,标记混乱,会给软件开发带来很大阻碍。另一个方面的风格是设计风格。现在各个编程语言社区都有许多经过实践的编程规则和设计风格,遵从这些规定,能给自己的软件开发带来很多好处。以后的风格许多情况可以直接拿来用,出问题了检查也容易。千万不要过于相信自己的能力,设计一套只有自己能用,而且没有经过实践的风格来。

      8.要多与其他程序员交流。程序员绝大多数和计算机打交道,某些程度来说,更愿意与代码和指令交流。但是计算机毕竟是人设计出来的,要用好计算机,最后还是要有人编程才行。编程是很抽象的,也是相当比较难的一门行业,所以许多程序员对自己的技术持绝对保密态度,生怕人家学去了自己的技术。其实这想法是没有道理的。就像上面说的那样,计算机要人去执行。单人的能力有限,多一人就多一种想法,多一种解决之道,这样才能把软件做好,软件也才能尽量少出现问题。在软件开发过程中,所有的目标是为了软件,而不是显示个人能力和保护个人知识。试想,如果一个软件失败了,再好的实现也是徒劳的,因为它带来不了利益,无论是社会利益还是经济利益。同时在这个过程中,保密的人不仅耗费了自己的时间和精力,更耗费了整个团队的时间和精力。想法,如果程序员多多交流,集合众人思维,创造出优秀的软件,那么不仅会给团队带来利益(当然相应程序员自己能力和收益都会得到提高),也能够在交流过程中,彼此之间得到思维的火花,从而提高了整体的水平。那么就会使团队在相关行业中提升一个大的档次,使得团队与个人双丰收。因此,合理的交流是程序员必备的能力,闭门造车的程序员是很容易被淘汰的。再者,当今软件开发难点不仅在于新的技术开发,同时对技术的复杂度的控制也有相同的重要性。所以在复杂度面前,任何技术实现细节都会显得很渺小。而复杂度掌握不是一个人能想出来的,只有通过大量的实践和经验的交流才能体会(也就是说复杂度的掌握是时间越久越有经验)

       以上就是个人对专业程序员要求的几个方面的理解,相信在日后的实践中,会有更多的要求加入其中。