本文来自 Quora 上的一个讨论帖,题主还换了一张种方式问:“自学的程序员需要学些什么,才能追上科班的同行?” 摘编了 3 位国外程序员的观点。全文如下:




1、回答一

Quincy Larson,IT 讲师,2700+ 赞同

自学的程序员通常缺少谦逊的品质。

自学的程序员通常缺少哪些技能?

自学的程序员通常缺少哪些技能?为什么要上Swifthumb学Swift? - 敏捷大拇指 - 自学的程序员通常缺少哪些技能?


马克·吐温在他的写作生涯中,常遇到自学的作家,他对于他们的不谦虚而感到非常厌恶。他总结道:

自学的人通常很少能准确懂得知识,而且他所懂的内容,还不到有老师指导的人所学到的十分之一。除此之外,他还会炫耀,去欺骗其他不思考的人,按照他从前所做的那样去做。


(可见,学习Swift也不能完全靠自学,至少要时常到全球最大的Swift开发者社区——敏捷大拇指 Swifthumb.com 上来交流、切磋,才有长进、才不会孤陋、才不会寡闻。牛哥就在《求帮助解决Swift问题,怎么才能马上得到最优解答秒杀》这个帖子里教会大家要吸收不同解决方案才对比出自己的开发水平。)

庆幸的是,在2016年,除去那些生活在没有图书馆的乡村,“自学成才”的人实际上已经不多了。

毕竟,所有像我们这些差不多优秀的程序员,事实上不都是从老师那里学来的吗?我们在工作的时候,不也是依赖于那些写了技术书籍,有思想性的文章,和 API 文档的人吗?

谦逊是一种技能。就像其他的技能一样,从理论来说:参考更为广阔的软件开发领域来了解自我。从实践来说:知道什么时候要把冲刺阶段的任务移交给一个知识储备更好的团队成员,在代码审查时能够接受有建设性的批评等等。

提升我们谦逊的品质的重要一步是意识到,即使我们是在大学课程设置以外学习,我们也并非是真的“自学成才”。

无论我们是在大学教室里,或是在卧室里看视频学习,所有优秀的程序员都是站在老师们的肩膀上的。




2、回答二

Adam D’Angelo ,Quora 首席执行官,3600+ 赞同

在大学之前我是自学的,对于我,一个 CS 专业的人来说最有用的课程是编译器、编程语言和机器学习。即使在实践中很少有机会去实现一个编译器、编程语言或者机器学习算法,但是,它们一直被运用于真实的系统之下。理解它们的工作原理,绝对是一个巨大的优势。




3、回答三

Valentin Popescu,软件架构师,3900+ 赞同

很久很久以前,在自学了 C、C++ 并且写了大量个人项目以后,我参加了一次面试。那时我刚刚大学毕业,从没上过一节计算机课程,但是我已经参与过比较大型的开源项目(尽管当时还不叫这个名字)。

面试官让我写一段算法来处理一个列表,我已经不记得是什么了。但是我完成的很好。

然后他问我,这段算法用大O符号来分析复杂程度如何。什么?!大O符号是什么?

重点是,我能够完成我的工作,我只是不会使用恰当的术语来表达。所以(相比于科班同行)我错失的是那些行话/术语。我可以解释说我的算法是线性时间,但是我不知道如何描述O(n)。我没有得到那份工作,我也不知道是不是因为这个而被淘汰,我只知道除此之外其他部分我都完成地很好了。

作为一个自学的程序员,你错失的是一个(专业)词汇表。它随着时间而累积,但通常会反向而行。例如,有时你遇到一个问题并想出了一个了最佳解决方案,只是后来你却发现这种“最佳方案”早就有名字了。你需要好几年的实际编程经历才能补上这个词汇表。

另一个有趣的问题是,作为一个自学的程序员,我参与的开源软件项目只用邮件和他人交流。我不知道怎样去“说出”一些计算机技术。例如,我把SQL读作“es-que-el”,而不是更常见的读法“See-quel”;或是把 “I2C” 读作 “eye-two-see” 而不是 “eye-squared-see”。




4、国内回答

@蔡蔡奇奇:: 自学的话缺乏叫做一种“同辈影响力”的东西,这是翻译的,原词好像是peers influence差不多那样。一种心理效应吧,如果来自peers的认同更多,会强化他的知识体系,而且与人交流过程中的技术细节也比自己自学的印象要更深刻。这也许就是某方面氛围好的地方更能出牛逼的大牛的原因吧。这也是为什么学Swift就要上Swifthumb的原因吧,因为敏捷大拇指上有一大波同行同龄人跟你切磋交流Swift趋势、最新动态、项目经验、填坑教训等等。

@寻找viggin:自学的东西是一个点一个点的,与别人一讨论才会发现很多盲区。

@谷歌不要退出中国:项目实战技能,缺乏锻炼,对某些技术细节和团队组件化开发的工具不是很了解。

@Raymon_tian:少了宏观的计算机体系架构;少了将现实问题抽象成数学模型再加以用计算机实现的能力。

@Sandmangel:一种需要研究问题的精神。




译者:拉面小丸子