作为一个程序员,我大概经历下面几个阶段:
第一个阶段,是刚上大学时候的编程课。那时候,主要是学习语法,学习如何将一个问题通过程序实现。这时候我的身份是学生,这时候我的产品的消费者或许是老师,或许什么都不是。对于汇编语言和C语音还是Pasical,一直纠缠于语法合法及程序输入输出正确性。
第二个阶段,是学完《数据结构》和《数据库》之类的课程之后,教科书教我时间复杂度和空间复杂度,主要在这些事情纠缠。另外就是在算法上,如何递归和非递归,如何抽象,如何组装复杂的数据结构,如何编写500行以上的程序,如何debug等等。这时候还是程序的正确性,偶尔会有一两点所谓的“特效”。
第三个阶段,是参加工作后才真正体会到的:是程序的可读性。对我最大的压力是如何读懂别人的程序,如何在几万行代码中找到添加功能的那几行。曾经见过一个函数超过千行的程序,是一个博士写的,里面有200行专供调试的打印代码。另外,就是如何和操作系统或者别的应用程序打交道,还有就是安全性。刚开始的三年,纠结于了解系统原理及理解系统(模块)架构,实现一个系统的小功能。
第四个阶段,是如何和团队合作。这时候,写文档,设计接口这些就变成了一些核心的任务。这时候对于搭建一些超过3个模块或者BS/CS结构的应用程序有点吃力。另外,就是对于应用一些如中间件,框架的事情有点吃力不讨好。进程间通讯、分布式通讯都是难题。
第五个阶段,就是通过实践及在合适阶段读些优秀的书籍如《设计模式》《敏捷开发》之类的,突然对于框架,小组开发有了一定的体会。这时候,或许如何交流和沟通变成了一件很重要的事情。另外,读懂别人的代码,改造代码就变成了一件大事情。
第六个阶段,就是慢慢的对自己的软件作品慢慢的接触到用户,开始关注用户体验了。如何将代码写得优秀,如何将界面设计得好用,如何让小组开发高效,较短时间内完成软件作品,另外,就是如何防盗版之类的有了一定的收获。
第七个阶段,或许就是观察行业动态,面对未来需求,来开发有创造性的产品了。另外,就是考虑小组开发成本,人员搭配的问题了。个人感觉我现在就处在这个阶段。
总之,在这些阶段中,我慢慢的感觉到对于一个程序员来说,除了通常的技能要求之外,需要双重思维:小组开发思维和用户思维。小组开发思维就是一直要想象自己在和一个团队合作,无论目前小组成员就是你自己一个人;用户思维就是一直要用用户的眼光去考察自己的作品,用户用这个东西方便吗?好用吗?
而对于项目经理来讲,也需要双重思维:成本思维和小组建设思维。成本思维就是要考虑时间和人力的搭配;而小组建设思维就是在小组开发过程中促进小组成员的进步…