本文转自: http://heikezhi.com/2011/07/03/10-ways-to-improve-your-programming-skills/
英文来源: http://www.antoarts.com/10-ways-to-improve-your-programming-skills/
提高编程能力的10种方法
By Slacken | Published: 2011/07/03
1、学习一种新的编程语言
学习新的编程语言会强迫你运用全新的方法来思考,特别是当这门语言使用一种你还不怎么熟悉的范式。你能够学习到很多将来你会在你熟悉的语言中用到的思考方式,而且甚至你还可能用新的语言来实现一个正式的项目。
能够提供一次极好的学习过程但不仅限于此的优秀编程语言包括:Lisp(Scheme非常好)、Forth、PostScript或者Factor(面向堆栈的编程语言)、J(奇妙的阵列编程语言)、Haskell(强类型、纯粹的函数式编程语言)、Prolog(逻辑程序设计)和Erlang(并行编程典范)。
2、读一本优秀且具有挑战性的程序设计书籍
我们能从书中学到很多东西。尽管实践很重要,读一本真正好且具有挑战性的编程书籍是挑战你的思维并将其提升一个层次的极佳方式。这样具有挑战性的书包括:《计算机程序设计艺术》(如果你想要一个真正的挑战)、《计算机程序设计与解释》(SICP)、《编程学(A Discipline of Programming)》或者著名的《龙书(dragon book)》。
你也可以读没那么具有挑战性的书,但要避免读像《天才班》丛书一样、试图在“24小时”或者“21天”教会你东西的书;你很难从中真正提高编程技能。
3、加入一个开源项目
加入一个开源项目有什么好处呢?你将会同别人合作(当你以前只是在周末从事于个人项目时这尤其不错),而且你必须深入研究和学着理解一个你不熟悉的代码库(这会是非常具有挑战性的)。
你可以在像GitHub、Sourceforge、gitorious、BitBucket或Ohloh的网站上找到不同的项目。
4、解决编程难题
你会经常解决编程难题,而且的确存在很多难题。你可以在Project Euler——可能是关于编程难题的最热门的网站——在上找到各种基于数学的问题。
你也可以尝试代码高尔夫(code golf)——程序员用最少的击键次数来解决一个给定的编程问题。这能教会你很多更隐晦和特殊的语言特性,并且你将必须对编码进行创造性的思考(而这非常有趣)。
编程难题,主要是代码高尔夫,可以在codegolf.stackexchange.com上找到。
5、编码
开始从头到尾写一个程序。设计各种体系架构并实现它,如此往复。
最好的学习编写程序的方法就是编写程序。你会从你自己犯的错误中学习,而且完成一个项目会给人以动力,这比读一本书可有趣的多。
6、读源代码,从中学习
研究著名的软件项目,像Linux内核(提示:它很庞大)。一个适于学习用途的优秀操作系统是MINIX3.你可以从中学到很多新的语言惯用语法,一两种软件体系架构。读不熟悉的代码一开始是令人畏惧的,但报酬也是丰厚的。
你还能够增进对你常用的一些API的理解,或者编程语言——通过读它的实现方式。
7、活跃在编程网站上和多看博客
活跃在像论坛或者Stackoverflow的网站上会将你置于其他程序员及其学识的审视之下。
还有,多看博客,也许这更可取。好的博客有:Joel on Software(尽管Joel不再写博客了,但好的文章可以在存档中找到)、Coding Horror和Lambda the Ultimate。
你还应该订阅news.ycombinator.com。
8、写关于编程的文章
开始在博客上写关于编程的文章,尽管可能写出的文章只有你一个人看。你还可以在不同的问答网站或论坛上回答问题,或者在一些网站(如DreamInCode)上编写教程。在你写关于编程的文章的时候,你得确保使用正确的术语并且知道为什么以便解释问题和技术。这能够让你反省你的编程知识并且提高你的英语语言能力,而这对于编程很重要。
9、学习底层的编程
学习底层的编程及对应语言对于获取对底层机器的更好理解很有用。试试C,也许还可以学学一些处理器的汇编语言。
了解计算机是如何执行一个程序和操作系统是怎么工作(在高一层)。如果你真的想认真尝试低级语言编程,你可以读一些关于计算机组织、操作系统、嵌入式系统、操作系统驱动开发等等方面的书(我现在就在读)。
10、别急着求助于StackOverflow。请认真思考先!
当你遇到一个困难,在试着花半分钟解决无果之后,你是怎么做的?求助于StackOverflow。千万别。而是花一些时间独立试着自己解决。拿一张纸和一支铅笔,草拟出解决办法。假如这没有用,停下来一会儿以保证大脑清醒,然后继续。
如果一个小时(具体时间取决于问题的大小)后还是没有结果,这时你才应求助于StackOverflow,反正求助之前你得自己想清楚