2016年/12月/25日

首页回退

大神说不要光写码

这篇文章是几个大神对于程序员的建议,这些大神是谁呢?Brendan Eich,Rich Hickey,Rod Johnson,Isac Schlueter,Guido Van Rossum, 他们分别是JavaScript,Clojure,Spring,Npm,Python的爹 大神的建议里面,程序员需要广博的去其他领域获取知识和灵感,Rod Johnson就是个具备音乐学博士的人。

原文

教育背景

“在人生中最大的挑战不是技术可以解决的。”Eich说,“所以我们要学习历史、语言、艺术、还有其它人类的知识,而不是只学习与电脑有关的东西。”

Hickey赞同了Eich的观点。他认为,要把编程放在一个更宽的视野中。“在具有历史性的事物中,编程是一个全新的成果。我们不要以为已经懂得了怎样用最好的方法去追求它。”Hickey建议年轻人应该追求其它的学习兴趣去帮助理解在编程中的各种问题。“最好的程序员是那些在他们所擅长的领域里,有理解能力的,善于沟通的,以及能够解决问题的人。软件只是一个工具而已。”

Johnson认为,要成为程序员的话,应该要探索计算机科学和数学以外的学科。这样可以帮助程序员拓宽他们的教育背景,因为最终“编程是关于人的,而不是关于数学的。”即使是当谈及把计算机科学作为一种学历时,Johnson也有着不同观点。他说:“绝大多数时候,我们学习是为了工作。 良好的计算机科学背景的确是有价值的,但我已见到过有许多优秀的程序员,他们拥有不同的教育背景。”

Van Rossum同意了Johnson的看法。 “你会见过有人拿着英语文凭,但他们去了Django Girls,从此成为了网络开发者。你也会见过有人在大学里接受了四年的传统教育,主修的就是计算机科学。当然,即使是在现实中,理论总是会存在的。我就曾经用过一些我当学生时学过的编译器的理论,它帮助我找到了一个简洁而强大的方法去解决了我碰到的问题。不过这不是经常发生的。”Van说。

Eich认为,要把数学作为数学来学习,而不要用来作为学习计算机科学理论的借口。“编程不是全部都与数学有关,有时候几乎根本与数学无关。”Eich说,“但如果你的数学学得好,在你年轻的时候就要把它作为数学来学习。不用太担心编程。”

Van Rossum的看法更深入些,他建议说,“数学可以开发你的逻辑思维。”

Schlueter对于普罗大众在成为程序员之前的经历有着不同的理论,他说:“如果你有能力负担得起的话,在读完高中后花四年时间去读语言艺术是一个很好的选择,但在你的人生中不会有一个机会可以让你打发时间就能获得社会的认可了。”Schlueter还建议说:“公立学校要便宜得多,学生贷款可不是闹着玩的,所以要节俭,”他说,“努力争取获得任何奖学金或助学金。”

编程语言

一旦你坐下来开始学编程了,哪种语言是首先应该考虑的呢?

“OCaml,Haskell,Rust,C++,TypeScript,JS,Racket 或者Scheme,”Eich说。当然,我不是要求每个人都去学习所有这些语言,但只要在合适的时间和地点学好其中几种就很好了,这对那些有兴趣和能力的大学生尤其有用。”

Hickey也建议要有学习多种语言的计划,但他的观点更具哲学性,他提出要把现有的广泛的编程语言中具有代表性的,整合在一起。“选择一种很有代表性的语言,计算机是如何工作的(C),一种封闭式的语言(Haskell,Prolog),一种静态的函数语言(Haskell),和一个动态的函数语言。我喜欢Clojure,”他说。

Johnson提议学习编程语言要用对比的方法。“语言可以影响编程的思维,所以学习一门以上的语言是很重要的,而且学习不同的语言要有不同的方法,”他说。“例如,一个面向对象的语言和一个函数语言,而不是说Java和C#。”

“Python是一种很好的语言,它可以作为学习编程的开始,”Van Rossum说。”然后问题马上来了,应该学习哪个版本的Python呢?我会说从学习Python 3开始。之后如果你需要完成一些工作或项目而去学习Python 2,就会很简单了。如果你是从零开始的,Python 3是更好的语言,这是毫无疑问的。”

Johnson还建议年轻的开发者应该学习一下Swift。“Swift一个很好的现代语言,它有许多很好的想法,我认为我们将看到它会从从iOS扩展到其他平台。JavaScript是非常有用的,虽然它不是第一伟大的编程语言。Java也是值得学习的,它学起来不会特别难懂,它的普及程度仍在继续,JVM是无处不在的。”

编程实践

一旦你已经开发过了一些项目,你如何把自己的技能提升到更高水平呢?

Eich建议要向早期的或现在的编程大牛们学习如何写出很棒的代码。“阅读高质量的代码,有时候甚至要把它们打印出来,在有需要的地方做好笔记。”Eich说。“说到高质量的代码,我觉得经典的仍然是Kernighan & Ritchie’s The C Programming Language, 还有 The Unix Programming Environment”。近年来值得一读的代码是’Solving Every Sudoku Puzzle,或者是 norvig.com的代码。”

Hickey建议是要有耐心和要有准备。“编程最重要的一部分是从计算机上发生的,”他说。在开始前,要想清楚你自己要做什么,而不是等到你把键盘都敲碎了,才知道自己要做些什么工作。”

但一旦你坐下来敲起键盘的时候,Eich建议,坚持下去:“我仍然记得汤普森所说的‘当你有怀疑时,就用暴力破解’,他这话永远是有帮助的。不要被卡住了!”

Johnson提供了另一个值得学习的代码源,那就是开源。“你可以从优质开源项目的代码中学到许多东西,现在还有很多机会可以让你作出贡献。”Johnson说。“它还有助培养人之人之间的协作能力。我已经看到这是一座宝贵的桥梁,从学校到业界,或者从一份无聊的工作到一份有前景的,从而获得更多令人振奋的工作。

至于有哪些工作可能适合年轻的程序员们将来的职业规划呢?Eich的建议是:空间、3D打印、3D渲染、生物信息学和网络。

谈及工作选择时,Van Rossum的建议是:不要选择安逸。他说:“不要接受那些自己感到无趣的工作。程序员有很多工作可以选择。找到真正让你乐在其中的事情,因为这样你会变得更有效率和快乐。这对每个人都会更好。”

Hickey表示同意。他说:“编程其中一个伟大的地方是,几乎在所有领域都需要软件。选择一个你感兴趣的领域。”

无论你选择的是什么,Schlueter建议程序员要与时并进。“如果你有耐心并坚持学习的话,编程是很容易的。但最终,所有程序员的职业生涯之路要么走入死胡同,要么转入某个管理方向。即使你关注的是技术,但最终你将会带领其他人,因此你会获得一个更大的空间以及取得更多成功。”为了达到这个目的,Schlueter建议,程序员应该读一些有关领导才能,沟通以及业务方面的书籍。“那东西比它看起来的更复杂,它是非常重要的。”他说。