Quora|怎么成为一个优秀的程序员-Gigantic Software CEO回答

作者Vladimir Sedach
签名:Have Emacs, Will Hack
标签:CEO at Gigantic Software (2006-present)and Kiran Kannar, CS grad student, University of California San Diego

首先我很赞同 Michael O. Church对优秀的程序员的准确定义,而且我认为这可能会变成HR选人的参照工具(我猜他会讨厌我这么说)

编程像其他人类活动,总会有天才或神童在正态分布的右边,大部分人都是在中间,也有一些人在最左边。我相信他们学不会编程的只有那些有智力障碍的人,同样他们也不能参与人类其他的智力活动

所以,假设你是在正态分布的中间,你能变成一个卓越的程序员吗?想在一件事上做的好你首先需要一些基本能力。

Jeff Schaffzin对拥有一个良好的逻辑性的重要性有很好的分析,编程的核心活动包括你所用的程序语言的思维模式和你要解决的问题的思维模式。这就是为什么运用Piaget的构造主义理论去教学生去学编程的Seymour Papert会这么成功,它通过让学生自己去设计程序和优化程序来构造学生的思维模式

在我看来,这就是为什么许多计算机科学专业教的Java和C++失败的原因。这些编程语言对构造和拓展思维模式没有一点作用,那些没有挂科的学生通常都是已经拥有编程思维模式的人,其他学生没有机会去开发他们的思维模式然后跟告诉他们不会编程

构造主义编程学习营的另外俩个重要的突出的项目是一个由 Alan Kay,运营的和 PLT TeachScheme! 项目(就是现在大家所知的ProgramByDesign)

我第一次真正接触编程是我在高中时期(撇开小时候完全不知道在输入什么的几个BASIC程序),当时我上过的一个介绍计算机科学的课程也是TeachScheme!的一部分(在Stuyvesant里Mike Zamansky上的课),上完课后我能写程序来解决一些基本问题了,然而当时我没有对编程产生兴趣,几年来都没产生兴趣。

我编程之旅的一个重要开始:一个动机。我的动机是当我发现SICP这本书,才知道程序可以这么的美和逻辑简单

我不是声称自己是一个优秀的程序员或甚至一个卓越的程序员,但是我将会说明一些我用在我走向着优秀程序员这条路的技巧

当我们讨论如何做一件事,这里有个可以帮助你的东西,我推荐你去阅读George Leonard的《掌控》,我提炼出这书的几个重要的点

  1. 如果你想成为一件事的专家你需要不断的练习
  2. 有规律和持续性的练习是最有效的
  3. 原理是全部,最伟大的成功者会花大量精力去完善基础
  4. 一个好的计算机从业者不会停止学习,只要你开始自满于自己的技术,你就开始滑向平庸

在我开始计划我走向优秀的程序员路上之前,我是没有进步的动力,我当时认为我已经够好了,所以我没有去尝试提升自己,我当时还找到了其他的兴趣点,商业和心理学,我甚至尝试去把职业方向转向商业方面,当时我都注册了MBA项目,也就是那个时候我发现了George Leonard的书,才知道我错了。

所以在今年六月从商业学校退学,复兴我的成为好的程序员计划,不同于之前,我评估了为了到达我的目标,目前我做对了什么做错了什么:

我以前做错的事情:
  1. 没有有规律和持续性的练习
  2. 认为我对基础很了解
  3. 没有竞争意识
  4. 没有学好数学

为了解决第一点,我采用“Seinfeld技巧”,我尝试每天我完成一个任务在我参与的开源软件项目,同时我发现最好的方法去做一件事情是采用“Hemingway技巧”,每次把一个任务或者子任务留个尾到第二天做,这样会很更容易做出贡献。

第二点,我决定回炉重新学数据结构原理和算法,花时间去阅读那些对我来说过于“基础”的原理,去重新学习计算机科学领域中我没有涉及到的地方

我还去简化我的编程风格,每个人都同意以简为美,但是现在每当我遇到需要我做出决定去设计我的程序,我都会告诉自己(《掌握》里面的一个技巧):最蠢的实现方法是什么?我发现每当我尝试简化的时候是最聪明的,所以我强制自己去写最蠢的实现所以当我去简化时都能想出最好的方案

假装变笨的练习可以让我舍弃了任何编程范式或者编程禁忌。现在的我写的代码不是那些游行的"聪明“的或教条式的写法而是特别糟糕的写法,但是到编码结束的时候都变成简单和易理解,以前的我认为函数式编程好过面向对象式编程,现在我觉得都很糟糕

第3点对我来说是新鲜事,但应该是显而易见的。毕竟优秀的程序员是相对的,只有跟别人比你才知道你是在正态分布的哪一端,我以前从来没有对编程比赛感兴趣过(我只有去过俩次,最后一次是2007年的国际Lisp会议)现在我计划开始准备参加一次TopCoder比赛,我已经推掉了一些其他的计划,我不知道这会多久才让我变的更好,但是我想我会的(我的ILC07项目统治了最高分和最快运行速度)

第四点应该很明显,我的一个学士学位就是基础数学,我认为在大学我没有做干好的事就俩:性和数学

我做对的事
  1. 从最好的人中学习

  2. 从所有人中学

  3. 花时间做有野心的项目

  4. Niels Abel说过他学习的关键是从导师那学而不是从学生中学

我是MIT的计算机科学课程死忠粉,我认为三本最好的计算机科学书籍是 Abelson and Sussman and Sussman的《计算机程序的构造和解释》,Cormen, Leiserson, Rivest and Stein的《算法概论》,Saltzer and Kaashoek的《计算机设计原理》

一份好的1950年代,60年代,70年代和80年代的计算机科学书籍,论文和专题论文都是充满了深刻理解的是永远不会过时的,在大学期间,我得出了个结论是计算机科学的书籍都是在1990之前出版的,最近的一个计划是阅读《计算机程序设计艺术》四章的全部内容

二这一点貌似跟上一点相悖,但是一旦你知道什么对你重要什么对你不重要,你就可以从评估其他人的思想,从而舍弃或者学习他们的思想,但不幸的是不是每次讨论都会包含一个精彩的论述

第三点这是非常重要的,如果你想做一个项目但是别人告诉你这很难的,你需要去做这个项目。如果你做了个好的项目,在定义来说你将成为一个优秀的程序员,不要优先去写那些又小又简单的项目,在一个大型项目里你需要解决很多又小又简单的项目。

做一个困难又有野心的项目意味着很有可能失败,一个最常见的失败就是超出时间了,你可以通过投身一个长期免费的项目来避免这一点,我是真的花了一年时间在我的免费项目里,在足够长的时间范围内,主要的生活变化和优先事项的变化不会妨碍,如果我陷入了一个技术问题想不出好的解决方法,我会丢一阵子,直到我相处一个满意的解决方法在回来。这样,抛弃一个项目只有一个理由是这东西没必要我去花时间

开源软件的一个的一个坏处阻碍了你的小的简单的程序进步成为开源软件,但是你去做提交一次贡献可以造福很多人,这些都是在做你喜欢的事情同时也会让你变得更好的程序员

我不能说这么做一定会成功或这是最好的途径,如果你有好的注意,一定要分享出来

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 11,088评论 6 244
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,791评论 25 707
  • ⊙教育孩子的八字原则:唤醒、顺应、激励、引导; ⊙合格家长的八字真经:尊重、包容、理解、赞美; ...
    突破就是不断的折腾阅读 313评论 0 0
  • 渐渐地喜欢上一个人走在街道,看不同的人,不同的事…… 小时候看见邻居家的哥哥穿着西装拿着手机,那时候的我特别羡慕他...
    北恋心阅读 673评论 0 0
  • 一开始被自己朋友刷了一篇《北京,有2000万人在假装的活着》的文章,却没想到过了这么多天,在简书里,也被它刷频了。...
    一个人的独角兽阅读 432评论 0 1