Brad Fitzpatrick是一位典型的Web程序员。与普通的程序员不同,他在别人还在学认字读本的时候就开始写程序了。(推荐优秀的儿童英文教材Clifford the Big Red Dog)。他主要的成就是,创办了LiveJournal一 个著名的社交网站。这是Fitzpatrick在大一入学前创立的。高中时期也不乏作品,比如FreeVote。在LiveJournal开发过程中,他 对可伸缩性网站设计有了深刻理解。然后编写了著名的memcached、Perbal和MogileFS(好吧,我承认后面两个我都不知道)
切入正题。
0、从Fitzpatrick身上学到了什么
作为一名很厉害的程序员,从采访的字里行间能读出他是一个很谦虚的人。
“ 我不觉得现在是在和谁竞争,也不太关心别人是不是比我更好,因为我觉得已经有无数人比我好了。我发现我们总是处于中间位置,而且我也很乐意保持在这个位置上。”
突然想起了学车的师父送我的一句话:“每次出车都可以比上次开得更好,只要你谦虚”。
1、对程序员来说,什么才是最重要的技能?
有耐心,像科学家一样一次只改变一样东西,试着去了解问题的实质。
在调试那些不正常东西的时候,停下来看看究竟发生了什么。
学会增量开发,这样每一步都能验证。
回想自己遇到这样的情况,很多时候只有抱怨,然后效率陡然降低。是的,如果慢一点再想一想,也许会做得更好。
2、为什么最好的程序员比最差的程序员效率能相差十倍?
嗯,基本在所有的领域都是如此。不是两个人花同样的时间就能有同样的编程产出。如果不能时刻保持良好的状态,就可能感到疲倦,然后出局。
有些人只是在工作,不能享受编程的乐趣。这没有问题。但与核心程序员比较就不行。
当一个人花的时间多十倍,不停地思考怎么写好这个程序,另一个人只是为了工作而工作,两者的生产力上差距又岂止十倍?
经常听说某位程序员非常厉害,但往往不会想他背后投入的时间以及对编程的态度(看法)。
现在我还是处在工作的阶段,应该可以向享受的方向多走一走。
3、怎么选择你要用的东西并理解透彻?
现在工具和开发库实在太多了,这也是我想要知道的:)
用Google搜索,看看哪个排名高,哪个是人们偏爱的。再去认识这些人,再去看他们的代码。了解哪些人好交流,挑选一个你信任或者钦佩的维护者。
4、有什么好办法可以快速找到满足你需要的东西?
在放进代码之前,先写个程序测试试用几个我知道的函数,确认它们能用。或者为那个库写一个单元测试,用将来要用到的数据测一下。
要通过写些什么来了解库的用法。
5、做好编程要了解多少数学知识?
大多数情况下,日常工作中统计知识更重要一些。如果做图形方面,数学会更重要。
从事Java企业级和Web开发的话,逻辑和统计知识会更有帮助。
好吧,如果真的是这样我要恶补了。
6、自学编程有什么好办法吗?
试着做点更难的东西,超出能力范围的东西,要多读代码。
遇到不理解的模式时,会问:“等下,他们为什么要这么做”。然后再多看看就明白了。
7、如何阅读代码?
把代码检出(checkout)或者下载tar包。
尝试着自己构建起来,这往往是最大的一道坎。
确实很难,但值得去做。
8、如何设计软件?
从接口开始,比如常用方法、常用RPC活着常用查询。思考常用的查询是什么?为什么需要索引?数据是如何存储在磁盘上的?
然后给不同的部分写点实验模型,慢慢充实。
确实如此,但要提出问题和找到答案不简单呢。
9、“隐藏关卡”
Fitzpatrick非常聪明,而且很努力(工作时间超出想象)。在LiveJournal开发的过程中,不断遇到瓶颈。他的做法是尝试各种方法去解决,自己设计需要的软件。喜欢“折腾”,而且乐于解决从“折腾”中得到的问题。
能力不能一下子提升,先改进态度和方法吧。自勉!