声明:关于代码阅读的研究,很多思想和文字是来自《代码阅读》这本书,再加上自己的学习和工作经验。可以说是类似读书笔记的,我把它作为了毕业论文的第8章,并结合了自己的毕设作品进行解释,毕设源代码github下载地址:https://github.com/chinaran/A-LL1-Compiler

最后我想讨论一下非技术因素。

1 态度

不管是编程还是做其他的事,首先,积极、认真的态度是最重要的,它会直接体现在你做的东西上面,进而改变别人对你的直接看法。而且,它会影响你做事情的专注程度,遇到困难如何面对,能否坚持等。在公司每周五都要提交周报,有的人就随便写几句,而有的人认真总结这一周做的事,从而造成上级主管不同的印象,进而也会影响你平日的工作。所以,树立良好的态度是做事情前最重要的。

2 读经典书籍

关于计算机的书已经铺天盖地了,但真正成为经典的不多。我们的时间是有限的,所以要把时间用在经典书籍上,它们都经历了长时间和无数人的考验,价值不菲。想成为优秀的程序员一定要多读书,读好书。关于应该读哪些经典的书,可以去伯乐在线网站。

我把计算机类的书分为两类,一种是原理性的,包括计算机科学、离散数学、语言类、算法类、数据结构类等,这个是我们首先学习的,而且是打基础的,在学校一定要学好;另一种是技能实战性的,能在实际工作中用到的。例如做 C++ 编程要了解 COM 组件,熟悉 STL 库,做网络编程要读《Unix网络编程》、《Unix高级环境编程》等,做Windows开发要读《Windows程序设计》、《Windows核心编程》等。这种书和你想要从事的方向和行业有关,在走向社会工作之前一定要有准备。这也是我一次面试失败得到的经验,自己就是第一种书看的太多,忽略了另一种,这和自己一直方向不明确也有关。所以希望你能够尽早找到自己的兴趣和方向,成为这个领域的专家。

3 编程语言之争

现在,计算机的语言已经有上百种了,而且还在随着技术的发展而推陈出新。究竟要学习什么语言呢?像我学了 C 之后是 C++,然后是 Java,自学了 C#,虽然这都是很流行的语言,但我认为是极不合理的,例如C++、Java、C# 都是面向对象的,实质上差不多。Peter Norvig 在《用十年来学编程中》是这样推荐的,“学会至少半打编程语言。包括一门支持类抽象(class abstraction)的语言(如Java或C++),一门支持函数抽象(functional abstraction)的语言(如Lisp或ML),一门支持句法抽象(syntactic abstraction)的语言(如Lisp),一门支持说明性规约(declarativespecification)的语言(如Prolog或C++模版),一门支持协程(coroutine)的语言(如Icon或Scheme),以及一门支持并行处理(parallelism)的语言(如Sisal)”,最后一门我想补充 Erlang 语言,是一种分布式并行开发语言,笔者公司的服务器端开发用的就是 Erlang。

另一点我想说明的是,不要对语言抱有太大的偏见或宗教主义,除非你非常精通。如果被过多的语言弄花了眼,得不偿失。真正要学习的是一些共性的知识,如底层架构、操作系统、算法、数据结构等等,这些基础的理论和知识是你真正需要掌握的,有了它们你就可以融汇贯通,否则学到的永远是皮毛,在工作中也不容易确定自己的核心竞争力。

4 编程环境

一个好的舒服的编程环境肯定能提高编程效率和编程体验。但我发现即使是工作的同事,有的对于集成开发环境IDE(公司用的是 VisualStudio 2010)用的也不熟练。对于开发环境,首先是熟悉它的界面、功能,然后是有哪些使用技巧,如使用快捷键、按照自己的需要重新布局。熟悉这些当然要先花费些时间,但是磨刀不误砍柴工。

另外,不要局限在一个小的认知圈中,有的同学学C、C++ 一开始用 VC++6.0,之后就只会用它,殊不知好用的编程环境有很多,例如,Windows 上有 Visual Studio 系列,Eclipse C++ 版,Linux上有Vim,Emacs,使用 gcc 编译器。以前自己就不会也不愿尝试新的开发环境,都是同学介绍的。现在慢慢知道了如何去找最适合自己的编程环境。例如,开发项目一般都用相关语言专业的集成开发环境IDE,而自己学习,练习或写些小项目开始用 Sublime Text,这是一种轻量级的代码编辑器,如下图:

Sublime Test 2代码编辑器

5 写在最后

以上两章中提到的有些词我也可能只知道概念,但希望能够开拓视野,如果你恰好对哪个感兴趣,可以深入的去学习研究。还有一些建议是当时或者现在都没有做到的,希望你可以意识到。我们经常会看到或听到前人的经验和教训,但很少有人能够真正去做,最聪明的学习者能用别人的经历帮助自己成长。我毕竟只是学习了四年,工作了几个月,有些地方难免有错,如果你有什么问题或有不同的看法,请联系我gchinaran@gmail.com

相信每个人都能通过每天持续的努力完成自己想要做的事!