所有称得上称职的程序员通常都有非常高的自学能力及欲望,我将题目理解为“非科班出身程序员比较容易缺乏哪些技能”。
没有系统学习过计算机科学知识的程序员通常是兴趣驱动的,这往往意味着他们以解决问题为出发点,所缺乏的技能通常在理论和基本功方面,比如各类基本算法和数据结构。弥补这一点只需要读两本书,做一些习题即可。
此外他们通常从一种技术起家,有可能对其“母语”的语法、范式、库、社区等等带有强烈的感情,可能会对于“敌对阵营”的技术,或者新鲜事物,产生排斥和轻视,影响到技术迁移和对新概念的掌握。不过这是个性问题,在科班出身的程序员之中也不少见。基本上没法弥补。
第三他们可能会缺乏一些基本的计算机文化常识或曰“乡谣(Lore)”,比如 foo bar 后面的第三个占位符是什么、这些占位符什么来历、Dijkstra 是谁之类,科班出身基本上都知道的事情。这个也是看书就能补的。
再就是英语可能会比较烂,不过也不乏知名英语兼成功学教师学过两行 HTML 就开始 bitching 国内程序员界如何扶不起。请注意我鄙视的不是 HTML。
Update:
补一个书单,仅供参考。
- Introduction to algorithms,作者首字母缩写 CLRS ,讲算法的。
- Structure and Interpretation of Computer Programs, 简称 SICP,一本有些被神化的书,不过的确值得一读。多数人初读此书,两章后会有眼前豁然开朗的感觉。虽然这书已经不再是教材了。封面是魔术师和 lamda 。什么是经典,这就是经典。
- Computer architecture: a quantitative approach,此书我还没看,因为我自己也不是科班出身,而且此前对硬件毫无兴趣(Dijkstra 说过 computer science is no more about computers than astronomy is about telescopes),不过据说讲计算机架构的书里这本很好。
- Concrete Mathematics: A Foundation for Computer Science,高德纳出品,讲述与计算机相关的数学知识。如果数学书只想看一本,这个应该差不多够了。
- Computer Networks,作者Tanenbaum。
- 一本讲数字电路基础的书……可以省略,不过还是挺有趣的。
- TAOCP,若能看下去就看吧,看不下去也没啥,科班的都未必看得去。
- The Art of UNIX Programming,The Cathedral and the Bazaar,这两本是传道书,有些内容现在看来已经是常识了,不过仍旧值得一读。
- Code Complete (2nd Ed) by Steve McConnell,比较系统的软件工业流程认知和编程常识读本。
- The Pragmatic Programmer, 这本书讲授编程实作中的基本套路,过一遍有助于扫清盲点。
- 《人月神话》(The Mythical Man-Month),中文版还不错。
- 《最后期限》(The Deadline),中文版也还不错。
- Refactoring: Improving the Design of Existing Code,“重构”理论的集大成者。
- Design Patterns,“设计模式”的集大成者,作者四人帮,封面是埃舍尔的画。什么是经典,这就是经典。
- Programming Pearls,《编程珠玑》,茶余饭后的鉴赏小品,虽然说不定哪天就用到了。
……待续。如果不脱产,这些书够读两三年的。所以科班出身最大的优势,可能就是有四年的时间可以读这些书,和同样读这些书的人交流,并且不用为别的事情烦恼。
— 完 —
本文作者:涛吴
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有 31 个回答,查看全部。
延伸阅读:
作为一个程序员需要学多少技能?
科班出身的 C++ 程序员都学过哪些主要的相关课程?