编程人生(2):Brad Fitzpatrick

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开发的过程中,不断遇到瓶颈。他的做法是尝试各种方法去解决,自己设计需要的软件。喜欢“折腾”,而且乐于解决从“折腾”中得到的问题。

能力不能一下子提升,先改进态度和方法吧。自勉!

时间: 2024-10-01 22:55:37

编程人生(2):Brad Fitzpatrick的相关文章

编程人生读书笔记(6):Joe Armstrong

Joe Armstrong发明了Erlang语言,并用它开发了开放电信平台(OTP). Joe的学习生涯很特别,开始学习物理,后来因为没钱念博士转而学习计算机.学习期间接触了人工智能并撰写了机器人视觉的论文. 接下来由于行业的变故,人工智能也搞不下去了.辗转到了瑞典空间研究中心,最后加入了爱立信计算机科学实验室,发明Erlang. 0.编程启蒙 中学时代学习Fortran,苦于每次只能提交一个程序,于是想到“偷懒”的办法——并发执行. 期间为同学们调试程序,标准开价居然是一杯啤酒. 1.对开发工

编程人生(1)Jamie Zawinski

0.总结一直不清楚自己的编程水平为什么没啥长进?Jamie Zawinski的经历告诉我:书读少了.手册看少了.代码读少了.代码写少了.归结到一点,壮士还需继续努力啊. 1.为什么要读这本书?很早就发现这本有意思的书“Coders at Work”,虽然看了一点英文版,但毕竟不如中文那么流畅.重读这本书源自最近在做的一件事情:想了解中外编程高手都是怎样学习和编程的.通过搜索的方式进行了一些调查,但结果非常有限.很多时候得到的就是类似个人简介式的内容.兜了一圈最后又回到了原点,原来<编程人生>就

编程人生(3):Douglas Crockford

Douglas Crockford是Yahoo!的资深JavaScript架构师,发明了JSON这一应用广泛的数据交换格式.从电视专业到偶然接触了编程,在后来的职业生涯中穿梭在媒体和编程之间. 0.收获读到编程人生第三位,发现以下共同点:- 读书很多.- 读代码也很多.- 善于把学到的知识找到应用的地方. Crockford的访谈还包含下面的内容,值得思考和学习:- 了解编程的历史,有助于在技术领域的探索.- 通过清理学习别人的代码.- 拜访客户,才能真正知道客户是怎么使用程序的.- 编程不论年

编程人生读书笔记(4):Bredan Eich

Bredan Eich是JavaScript设计者,Mozilla首席技术官,ECMAScript标准的制定者.Breda有着坚实的理论基础和较强的工程实践能力,本科物理专业,数学底子很好.在学校里主要做科研编程,毕业后从事网络.系统内核开发.专长是编译器,内核开发,设计了JavaScript语言. 0.总结从语言设计者的角度看待编程.学习和实践的关系:- 编程要实践,选择合适的工具(语言),有自己的态度(动力)坚持练习.- 设计代码的方法:用伪代码理清思路,再着手底层实践.实践多了,最后总结成

我的经历——致岁月摧残的编程人生

2012年我怀着当初的梦想离开了陆良,来到了云南省红河哈尼彝族自治州红河学院,来到这个学校一个人也不认识,还记得那天是一个带着我是一个学长,学长带着我们一直送到了金达的宿舍三楼,就这样开始了我的大学生活,大一大二的生活很忙碌,活动很少参与,加入的家教机构,我也没有去过一次.社费可以说是白交了,大一的时候不带电脑去学校,怕影响自己学习,因为还没有从高中的忙碌时期过度过来. 然而到大二的时候,我拿了属于自己的第一台电脑,拿到了宿舍,那个时候我连怎样装软件都不会,连基本的查看电脑系统信息都不会,因为我

编程同写作,写代码只是在码字

编程同写作,写代码只是在码字 作者: Phodal Huang  发布时间: 2016-06-30 21:51  阅读: 12842 次  推荐: 43   原文链接   [收藏] 看到一篇文章<We Are Typists First, Programmers Second>,日期是2008年,好早的一篇文章.当现在打算以一个新人的身份重新进入编程领域,或许是受<重来>的影响,或者只是在重新思考——我们究竟应该如何去编程. 写代码只相当于写字 编程这件事情实际上一点儿也不难,当我

向自由的人生前行

向自由的人生前行 最近,由于自己有了MBA,觉得为了成为一个熟练的用户,应该看点介绍mac使用的东西,一搜之下就看了<Mac Talk:人生元编程>,这本书不仅仅讲了很多使用mac的技巧以及苹果的历史,而且还有很多我觉得很有道理的看法.在<Mac Talk>的某一节中,推荐了前几年很火的网络小说<悟空传>,本着对西游的热爱,把这本书也捎带看了. 悟空传是前几年网络小说很火的时候今何在写的一本书,据传是今何在的巅峰之作,这本书极尽厚黑之能事,将三界轮回系统描述的极其黑暗,

C语言/C++编程学习:不做C/C++工作也要学C/C++的原因!

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制. 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样.之所以说C++比C更先进,是因为" 设计这个概念已经被融入到C++之中

《实用Common Lisp编程》pdf格式下载电子书免费下载

<实用Common Lisp编程>pdf格式下载电子书免费下载 https://u253469.ctfile.com/fs/253469-302448499 内容简介 由塞贝尔编著的<实用Common Lisp编程>是一本不同寻常的Common Lisp入门书.<实用Common Lisp编程>首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL及Common Lisp的各种实现.S-表达式.函数与变量.标准宏与自定义宏.数字与字符