对新程序员的推荐书目
论坛里经常有人要求推荐一些书籍。不过我提出这个问题是希望坛子里的老鸟们从另一个角度来讨论这同一个问题。
假设你的公司新招了一批程序员。作为新员工培训计划的一部分,老板要你为他们推荐一些必读书目。新程序员的水平和背景大致是这样的:
计算机或相关专业本科或研究生毕业,或有不超过两年的工作经验。也就是说专业的基础课程,比如数据结构之类已经学过了。也学过C或JAVA之类的高级语言(本科基本都会学C和JAVA)。工作经验是比较少的,特别是应届毕业生,可能有一些兼职工作的经验。总的来说,编程量是不大的。工作习惯和编程习惯都还在养成中。
对所推荐书的要求是:
1. 暂不考虑具体语言、体系架构或技术方面的书。因为此类书不同的公司有不同的要求,难于讨论。对于具体的语言、技术等,可以另开帖子,或去专门的论坛讨论。所以这里讨论的书可能会是比较“务虚”的。
2. 目的是帮助新程序员提供编程水平、养成良好的工作与编程习惯,更好地胜任程序员的工作;学习并掌握初步的分析、设计知识与能力。为职业上的进一步发展打下扎实的基础。在设计分析、设计方法方面,希望是以面向对象方法为主的。
3. 考虑到程序员的工作负荷,以及学习具体技术知识的需要,我认为推荐的阅读量大约是1年半的时间读完5本这一类“务虚”的书。
闲话少说,言归正传。这里先提出我推荐的书目,权当抛砖引玉:
第一本是:The Pragmatic Programmer, 程序员修炼之道,Andrew Hunt, David Thomas
第二本是:Agile Software Development Principles, Patterns, and Practices, 敏捷软件开发, Robert Cecil Martin
第三本是:Refactoring: Impoving the Design of Existing Code, 重构, Martin Fowler
第四本是:Test-Driven Development,测试驱动开发,Kent Beck
第五本是:?
对第五本我拿不定注意,应该是Design Pattern,还是一本关于UML的书,比如UML Distilled。
另外我不清楚现在的本科毕业生在读“敏捷软件开发”之前,是否还需要一本关于面向对象基础知识的书。
另一个不能很肯定的问题就是,新程序员什么时候开始读软件软件开发过程的书比较好。但我觉得第一步恐怕还是学好如何写程序,然后再学习如何开发软件,这样会更扎实一些。