非科班出身程序员比较容易缺乏哪些技能?用什么方法弥补比较好?

所有称得上称职的程序员通常都有非常高的自学能力及欲望,我将题目理解为“非科班出身程序员比较容易缺乏哪些技能”。

没有系统学习过计算机科学知识的程序员通常是兴趣驱动的,这往往意味着他们以解决问题为出发点,所缺乏的技能通常在理论和基本功方面,比如各类基本算法和数据结构。弥补这一点只需要读两本书,做一些习题即可。

此外他们通常从一种技术起家,有可能对其“母语”的语法、范式、库、社区等等带有强烈的感情,可能会对于“敌对阵营”的技术,或者新鲜事物,产生排斥和轻视,影响到技术迁移和对新概念的掌握。不过这是个性问题,在科班出身的程序员之中也不少见。基本上没法弥补。

第三他们可能会缺乏一些基本的计算机文化常识或曰“乡谣(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,《编程珠玑》,茶余饭后的鉴赏小品,虽然说不定哪天就用到了。


……待续。如果不脱产,这些书够读两三年的。所以科班出身最大的优势,可能就是有四年的时间可以读这些书,和同样读这些书的人交流,并且不用为别的事情烦恼。
原发布于 https://www.zhihu.com/question/19599607/answer/12336376