chajn

来自于编程大师的职业建议:别老想着写码

chajn · 2016-07-04翻译 · 1247阅读 原文链接

来自于编程大师的职业建议:别老想着写码

由 Eich,van Rossum, Johnson,Hickey 和 Schleuter 向编程新人提供的专业建议

随着编程语言种类的急速扩张,程序员的需求量在2014到2024会有17%的增长率 ,这是美国劳工统计局的官方数据 -- 而其他职业的增长率只有7%。我们不得不说,软件开发这个行业是越来越火了。

面对如此巨大的需求量,有很多非本专业的人儿和还没毕业的学生们都在积极考虑程序员这个职业(很好就业的样子)。那么,想成为一名合格的编程者需要做哪些准备呢?对此,我们采访了几位软件开发领域的大牛,看看他们对那些刚入职场的码农们都有哪些建议吧。受访者包括 JavaScript 的作者 Brendan Eich, Clojure 的创始人 Rich Hickey, Spring 框架的鼻祖 Rod Johnson, Npm 创始人 Isaac Schlueter, 和 Python 语言的发明者 Guido van Rossum

下面就让我们来看看这些编程大师们在学习编程,选择语言,技能提升几方面给我们提供了哪些建议。

论如何学习编程

拥有某个大学的计算机科学学位或某个培训机构的毕业证书并不能代表什么,编程领袖们纷纷强调全面教育的重要性,而并不仅仅是在毫无灵感来源的shell控制台前死磕。

“人生只有一次,是没办法重来的,” Eich 感叹道,“年轻人不要把时间都荒废在玩电脑上和研究代码有几种写法上去,你们应该多接触跟人类相关的各种知识,比如历史、文学和艺术啊什么的。”

Hickey 也非常赞同,编程并不仅仅只是写写代码就ok的事情,我们应该用更宽阔的视野去看待它。

“相对于人类历史发展进程而言,编程是一种非常奇妙和新鲜的职业,”他说,“我们不应该假定这就是它的完整形态了,是的,这需要我们一起去努力寻找和见证。”

Hickey 提出,“我们应该多去了解其他方面的知识,这样能够更好的理解编程和它的应用能力。”

“真正优秀的程序员是那些专注于认识、理解、沟通和解决问题的人,”他说,“你得明白,软件只是用来增加效率的工具而已。”

Johnson 也这样觉得,想当程序员的话,就应该趁在学校的时候多接触其他学科,而不是把时间都浪费到计算机和算法研究上面。毕竟,“程序是通过人的逻辑编写出来的,人的逻辑应该是活跃的,富有灵性的。不要陷入理论的固有模式中去,那样就没意思了。”

“熟读理论基础和一个专业学位能够让你有很大的优势,但经验这种事情,是只有在真正工作了之后才能慢慢积累出来的,”Johnson 说,“而且有很多有名的程序员都不是专业出身,他们都有各自不同的背景。”

Van Rossum 非常同意这个观点,“我认识的有几个英语专业出身的Web开发人员,他们就通过 Django Girls 教程自学的技术,干起活来和那些通过传统四年计算机专业出身的人没啥区别,甚至比他们更牛逼,哈哈。”

当然,算法还是无可替代的底层基础,Johnson 说,即使在现实世界中也是这样。

“昨天我就新学了一个编译算法,并将它应用到我的项目上,随后便干净利落的解决了令我非常头疼的问题,”他说,“虽然这种情况并不会经常发生,但要真能用得到的话,效率还是很高的。”

Eich 觉得学数学有学数学的价值,并不仅仅是为了学编程。

“编程不全是数学,有的时候甚至像是在搬砖一样(工头说了,一车砖给五毛),”他说,“但如果你数学很好,那编程对你来说就一点问题都没有。我想说的是,数学可是是更抽象更接近于技术原型的一种语言,它适用于很多领域。”

Van Rossum 也推荐大家多关注一些提升数学逻辑思维能力的方法。

Schlueter 说了一个奇特的观点:“大家可以试着养成爱于写作的习惯,写什么都行,我认为这是成为一名好的编程者所必要的。”

“最好是高中之后再继续上四年大学,进行素质教育(或称通识教育),不断的写作,查资料,你会懂得越来越多”他说,“这将会是你人生中最精彩的一段时期,在学习和写作中充分享受着你的美好青春,然后你便会得到社会的充分认可。”

“如果你负担不起高额的学费的话,去公立学校可能会相对便宜一些,不过助学贷款可不是闹着玩的,省着点花,”他说,“你可以试着申请奖学金或助学金,那样生活会过的开朗些。”

“不管你上不上大学,你都要尽量去阅读大量的文学和哲学方面的著作,然后尽你所能的去写作,”他说,“甚至可以花些钱请个写作导师来给你布置作业并帮你批改。网上有很多这种。多和文学论坛里的人交流,通过他们你也会有更快速的成长(大师更爱文学创作的样子)。”

论选择哪种编程语言

一旦你决定走上码农之路,最先面对的问题必然是,你要学习哪种编程语言呢?

“OCaml, Haskell, Rust, C++, TypeScript, JS, Racket 或者 SICP 中提到的语言等等。” Eich 建议,“显然我不希望各位把所有语言都学个遍,当然这里的‘各位’不包括那些天赋异禀的学霸们。”

Hickey 也支持多语言学习的途径,并且提供了一个更好的方案,就是可以针对于语言类型的不同,在各类型中选择一种具有代表性的语言。

“可以根据类型的不同各挑一个来深入了解,能够更好理解计算机是如何工作的的语言(C语言),一个封装特性好的语言(Haskell, Prolog), 一个静态类型的功能性语言(Haskell, again, fine), 和一个重视功能性的动态语言,比如 Clojure。” 他说。

Johnson 认为学习语言要具有针对性。

“语言可以影响编程的思维,所以学习多种语言是一件很必要的事情,不同的语言有不同的处理方式,”他说,“举个例子来说,我建议大家学习一个面向对象的语言和一个功能性的语言,而不是说,Java或C#。”

“Python是一个好的开始,” van Rossum 说,“从零开始的话,毫无疑问你应该直接去学习Python 3。”

Johnson 也推荐年轻的开发者们关注下 Swift.

“这是一个很好的很有思想的现代语言,我认为它会从iOS平台传播出去,”他说,“JavaScript 非常实用,也很容易上手,虽然不是什么太伟大的语言。Java 很有学习的价值,不难理解且一直很受欢迎,JVM 无处不在。”

论编程技能的提升

那么,经历了几个项目之后,你觉得你已经入门了,可接下来要怎么做才能够更上一层楼呢。

Eich 建议多看看别人的代码,特别是行业内比较流行的框架或大牛写的开源项目,其中的逻辑思维和写码风格都很值得去学习。

“多阅读高质量的代码,有必要的话可以打印输出,写笔记,用彩笔高亮,哈哈,跟上课时候一样,”Eich 说,“推荐比较经典的 Kernighan 和 Ritchie 合著的The C Programming Language,等等,我是不是暴露年纪了……算了,另外还有The Unix Programming Environment。最近在读的代码是:Solving Every Sudoku Puzzle。推荐多去 norvig.com看看,有很多值得好好品味的文章。”

Hickey 建议多点耐心做一些准备工作。

“在电脑上写代码应该是最后的才去做的事了,而更多重要的事将在思考与讨论中完成,”他说,“在写码之前,你就应该想好你要做些什么,你想要达成怎样的效果,然后通过哪些方法去做,做的更好。而不是在那儿不过脑子的敲键盘,以至于你都不知道你的逻辑是不是在有效的。一定要记得,你是否优秀不是通过代码行数来决定的,而是通过你的逻辑,你的思想。而你的逻辑和思想,将在你所写的代码中体现。”

但是一旦你坐下来了开始敲代码了,那在未达到目的之前就不要放弃。Eich 建议,我现在还在秉持着 Ken Thompson 所说的“用蛮力解决一切”这样的话来激励自己,不要怂,就是干!

Johnson 提供了另外一种能够提升写码技能的方式:开源。

“你可以创建或参与一个良好的开源项目,从而接触到更多有用的内容,并为平台作出贡献,”他说,“它这可比你在公司做着无聊的工作要有意思的多,不是么,你可以和一起维护开源项目的其他成员产生交流,这也有助于提升你的协作能力。”

对于即将投入到编程事业中的年轻人们,Eich 则建议大家多关注下空间探索、3D打印、3D渲染、生物信息和互联网等新兴行业,都是高科技啊,想想都让人兴奋。

Van Rossum 的建议则是针对于工作的选择上:“一定要避免接受你不感兴趣或会使你不开心的工作。说白了,需求量那么大,还怕愁没工作么。慢慢来,找一些你真正喜欢做的事情,这样你会更有成效和快乐,这样才能皆大欢喜。”

Hickey 表示赞同。他说:“编程最牛逼的一点就是,它几乎能够应用到所有的领域中去。所以你当然可以选择一个你感兴趣的领域咯。”

无论你如何选择,Schlueter 觉得还是保持眼界开阔是最重要的。

“编程呢,只要有耐心和坚持的学习,其实并不难。但所有职业发展路径最终无非两个选择,要么换行业要么做管理(某种程度而言),”他说,“即便你专注于技术,可你工作年限上去了,经验丰富比别人都丰富了,那么大家肯定都会听从你的建议和安排,你也肯定会从更大的范围去做更多更复杂的事情的呢。”

最后,Schlueter 建议大家多读一些关于领导力,沟通和商业方面的书籍。

“这些玩意看起来很无趣复杂,但其实,非常重要。”他说。

相关文章