程序员都需要学习什么

Published: 13 Dec 2014 Category: 技术

程序设计语言

程序员至少要学一门程序设计语言,这样才能开始做点什么。主流的程序设计语言一般都有一本圣经级别的书,例如 C 语言中, K&R 的 The C Programmer Lanugage,C++ 中的 C++ Primer, Java 中的 Thinking in Java。扎扎实实地选一本好好学习一下,把习题都做一遍,反复 阅读,掌握书中的知识点。如果开始学习的时候不认真,图快,早完要把这些时间还回来,还不如一开始就好好学习。

除了圣经级别的书,还有一些书可以增强对这些语言的理解,避免使用的时候踩坑。例如 C 专家编程,C 和指针这些,还有 C++ 中的 Effective C++, Java 中的 Effective Java。

当然,学习程序设计的过程中,其实单纯学习语言是有些无聊的,就像在背字典,在这个过程中,可以做一些有用的小程序。

一个程序员,至少要精通一门语言吧,无论是 C, C++ 还是 Java 还是其它。所以除了掌握这门语言的基本知识外,要做到精通,还需要其它 两个方面的知识。一是语言标准,关于语言核心的一切都在这里面,不熟悉语言标准怎么敢说精通。另一方面是标准库,要经常读语言标准库, 确保自己了解标准库的方方面面,不至于要用到一个东西时,标准库里有而自己不知道。

领域知识

只学程序设计语言本身无法成为出色的程序员,就像你熟悉字典里每一个字,并不说明你是一个优秀作家一样。能用精通的语言写出有用的程序,就要学习领域知识。无论是三大浪漫的操作系统,图形学,编译器,还是做其它领域,总有一些领域知识是必须要掌握的。很多领域知识都有一些基础的文档,要成为领域内的专家,就要反复阅读这些基础的文档。所有的东西,都是从这些基础的文档中演化出来的。例如,你要学习网络编程,那么 《TCP/IP 详解》,各种 RFC 读过没有,读过几次? 你要学习Android,那么官方的开发者中心,所有的文档你读过没有, 读过几次?

无论学习什么,一开始就要抱着成为领域内专家的态度去做。

通用知识

除了程序语言本身以及领域知识外,还有一些通用的知识是非常有必要了解的。假如我们要开发一个软件,现在你已经精通了语言以及领域 知识,那么就意味着一定可以开发出优秀的程序吗?不一定。你还要保证你写的程序是高质量的程序。

什么是高质量的程序呢?我觉得有两个方面需要注意,一是开发效率,二是运行效率。

开发效率

与开发效率相关的东西很多,例如程序的可读性,可维护性,正确性。从这两个方面,又可以衍生出代码风格,高内聚,低耦合,设计良好的测试,设计模式等等问题。需要阅读 《代码大全》,《重构》,《设计模式》,《编写可读代码的艺术》这一类的书籍。光阅读还不行,还需要在编写程序的过程中,不断地思考,实践书中说的内容。

运行效率

与运行效率相关的东西也不少,例如如何写出编译器友好的程序,这一点和精通程序设计语言本身以及了解编译器特性有关系。另一方面,是与并发编程相关的,要提高程序运行效率,除了程序本身之外,如何利用并发提高运行效率是又一个重要的内容。