转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <[email protected]>
《系统程序员成长计划》的起源应该追溯到六年前了。04年我进入恒基伟业深圳研发部,参与商务通隐形手机开发。在此之前我是做服务 器软件开发的,对嵌入式软件开发非常好奇,所以想方设法进入这个行业。恒基伟业在嵌入式方面的实力也是相当高的,很多在消费类设备方面的开发高手都有在恒 基伟业工作过的经验。原以为做嵌入式开发的程序员都是非常牛的人,动不动都是能写上上万行汇编语言。真正进入这个行业之后,才知道牛人毕竟是少数,大部分 人都和我一样是普通的程序员。
过了几个月,我当了小组长,手下带了几位同事。有刚毕业的,有工作两年的,也有工作经验和我差不多的。有次我让一位同事写一个小程序,过了好几天他 还没有写完。和他讨论了一会儿后,才知道他写的程序动不动就死掉,查了几天没有查出原因来。由于我以前做过两年全职的调试工作,看了一下他的代码,马上发 现问题所在:指针声明之后,没有指向任何有效的内存,就直接使用了!
后来和他们交流多了,才发现有的同事工作几年之后,连一些编程的基本技能都没有掌握,代码写得乱七糟八的。这些代码集成到项目中后,产品越来越不稳 定,整个项目慢慢失去控制。那个项目后来BUG总数超过了10000个,当时大家都知道在做一件不可能完成的任务,士气变得非常低落。经历那一段非常郁闷 的时期之后,我更深刻的体会到高素质的程序员才是软件开发成功的关键。于是我开始对手下的同事进行培训,把一些我认为重要的知识和方法教给他们。虽然没有 收到预期的效果,不过积累了一些素材。
05年我跟着现在的上司进入鼎智通信,我还是小组长,带了几个新手。我根据前面的经验制定了一个培训计划,我的上司看了之后觉得不错,就在软件部推 广。下面是当时我发在博客上的培训计划:
学习的方式:
对于基础性知识,指定几本教材,大家轮流学习,学习完成后给其他讲解。对于较难的知识,由我或者请其他有经验的人讲解。集中学习时间定在周三晚上。
第一阶段:
目标:熟悉常见的算法和调试方法,培养良好的编程风格,从而提高编程 能力。
时间:8周
内容:
1. 编程规范
2. 双向链表
3. 调试方法与调式工具的使用
4. 动态数组
5. 快速排序/归并排 序/堆排序/二分查找
6. 状态机
7. 下推自动机
8. 嵌入式软件开发
9. Unicode基本知识
第二阶段:
目标: 学习如何阅读和改进别人的代 码。
时间: 4周
内容:
1. 代码阅读方法
2. 代码重构
第三阶段:
目标:自动测试
时间:2周
内容:
1. 测试理论
2. 常用的自动测试框架
第四阶段:
目标:软件设计和文档编写
时间:12周
内容:
1. 面向对象的设计与分析
2. 契约式编程
3. 设计模式
4. 软件架构编档
5. 了解常见的软件过程: XP/RUP等
第五阶段:
目标:学习一种脚本语言,能自动化的工作尽量让计算机去做,从而提高 工作效率。
时间:4周
内容:cygwin + bash 或者 python 或者 perl 或者vbscript。
第六阶段:
目标:综合应用所学的知识,完成一个模块的设计、编程、测试。
时间:4周
内容:待定
这个培训坚持了半年,收到一些效果,但是不够理想。主要原因是这个培训计划追求大而全,加上大家工作很忙,还没有消化就进入了下一个阶段。现在来 看,这个计划完全可以作为一个程序员的三年学习计划了。
05年下半年,Broncho团队成立。我改为手把手的培训方式,通过代码评审等方式,发现新手犯的错误,然后纠正他,并把一些典型的错误统一讲 解。慢慢的积累了典型错误和问题的素材,后来我开始思考:能不能搞一系列的题目,让新手把他们该犯的错误犯一遍,让这些典型的错误在他们正式工作之前就被 纠正了呢?
这些题目要有足够的挑战,又不能让人望而生畏。要解决这个难题不容易,记得当时《C++沉思录》给了我一些启示:用一个好的程序的演化过程,逐步深 入的学习各种基本的技术和方法。于是有了第一章双向链表演化的雏形,第二章写得又快又好的秘诀,则是我多年来一直在思考的。
07年下半年正式在Broncho团队起用这套培训课程,记得Broncho团队的吴松是第一位参加这个培训的同事。经过一年多时间,前前后后有十 多位同事的参与,这套培训课程逐渐完善起来,到现在Broncho团队仍然在使用。
08年十月份开始把这些培训资料整理成文字,并在我的博客上发布。这是一项艰苦的工作,虽然这些内容在脑子里都过了几十遍了,但写出来的时候,要讲 清楚还是不容易的。一年多时间,经过读者的建议,又做了些完善。
09年七月底完稿,并确定由人民邮电出版社旗下的图灵出版社出版。我一直强调图书的质量,并多次跟出版社要求,我不要稿费甚至自己拿钱出来补贴工作 人员都可以,但是一定要保证图书的质量。出版的过程中出现了一些波折,到今年三月本书才终于与读者见面。
另外我解释一下,书上为什么没有推荐序之类的东西。在出版之前,一些热心的朋友主动说帮我写或者请名人写推荐序,我都一一婉拒了。我的理由很简单, 那些“名人”都没有仔细读过我的书,帮忙写推荐只是纯粹的吹捧,都是虚假的,对读者不负责的。我希望更多的读者读本书,但是决不能用这种手段来欺骗读者。 只有真正的读者才有资格对书做出评论,如果有机会出第二版,我会请读者写推荐序的。