最近收到一封朋友(不是软件工程师,可是在一家有名的硅谷科技公司工做)的邮件,问我可否给她提供任何好的“基础编程教程”供她学习。javascript
做为一个自学成才(绝大多数都这样)的工程师,一样的问题我已经碰到好几回了。 “learning to code” 的概念在校外得到了普遍的认同,甚至连奥巴马也推荐它。相似 Codecademy 和 Khan Academy 的工具还有在线教程像 Stanford’s CS106A 会帮助你踏实得走好每一步。html
令开发者们喜闻乐见的是人们已经将视角转向了科技和软件以及思考“我应不该该在大学里学习计算机科学”。咱们已经将 “learn to code” 比做颂歌通常,当朋友和亲人或是同事向咱们咨询关于新的软件应用,或者向学生建议开发相关的重要技能时,咱们会重复这一点。java
可是简单的推荐 “learn to code” 让我感受有点偏离它的初衷, 由于它没有说明编程和编写软件实际都和“建造实际的东西“有关。python
词语 “learn to code” 微妙得暗示 “coding” 或者 “programming” 自己就是一个有价值的结果,但实际上并不都是,咱们也不该该把这种印象带给那些刚刚开始从事软件开发的人。学习如何用 python 实现求3和4之和或者学习用 javascript 写一个 if 语句的想法让人感受荒谬。编程
我意思也不是说学习基础不重要,不是必须的。建立一个有用的软件某种程度上是一个复杂的过程,而作菜却不是。 “Learn to cook” 你只需遵循烹饪书中某个基础的教程,还有一些简单的诀窍就能在作菜方面提高一大步。函数
其实许多行业遇到的问题偏偏相反。 开发一种新药须要花费数年来研究、训练和实践。这也是为何咱们不曾见过哪一个总统鼓励每一个人花费1小时来 “learning chemistry” 。软件开发拥有一种魔法,能让人很容易上手,即使如此,其依然存在大量有趣和复杂的问题等待着解决方案的出现。工具
对此咱们没必要忌讳。做为 “learn to code” 的替代,咱们应该鼓励新人去 “learn to build” 。代码仅仅是一个构建事物的工具。因为软件是我的能构建的最强大的事物之一,这说明愈来愈多的人应该学会构建它。 Learning to code 是学会构建软件的第一步,可是学习不能止步于此。学习
学习构建的问题在于它不能在课堂上被真正的传授。你能够传授技能,但构建不是技能。它是一种心态。将周围的软件当作可操控的,并找到操控它的方法。这种心态只能来自于亲身实践的经验。ui
因此我建议个人朋友多多亲身实践,具体以下所述:设计
从基础开始。 选择一个基础编程教程。熟悉变量和数据类型以及控制结构和函数。加深对编程语法的理解会帮助你发现更深层的问题,这会在你遇到坑的时候起到相当重要的做用(坑可能会不少哦)。
找一个项目。 与此同时,在工做或者在学校寻找一些已经设计好的软件系统或者是你常用软件,可是你认为它在某些简单的地方处理的不够好。它能够小到像一个让人感受不爽的错误提示消息,你总是看到它以致于你想去掉它。尝试去解决一个已知系统中的一些小问题。
解决一些小问题。 不要花费超过两周的时间在基础编程概念上,除非你真的乐意(即使乐意,最好放到一个月以后)。一旦你熟悉了基础编程,能够去作一些接近商业的编程: 试着去解决你遇到过的小问题。学习曲线在这里很容易就搁浅,并且很容易让人感受沮丧,和你认识的懂软件的朋友聊一聊将会有很大帮助。
不要辍步。 一旦你解决了一个问题,或者以前在电脑上没法运行的软件在你的尝试下运行起来了,你会感受到一种胜利的召唤。 和困扰决斗,拍拍本身的大腿,而后继续战斗。Bite off a bigger chunk. 若是对如今的项目感受厌倦了,那么找一个新项目。和人们分享你在作在学的事情,得到下一步作什么的想法。
发明一些东西。 最终你会拥有足够的经验从零开始构建项目。这是一个使人惊奇的高度,你绝对会从中受益若是你有足够的时间和对它的渴望。不过即使没有达到这个条件,你依然会提高辨识问题的技能,找到解决的方法而后搞定它。但愿你能帮助下个只身一人而且想要 learn to build 的家伙。
我也提醒她可能会面对的问题:
软件的做者不但愿让你得到它的源代码副本。千方百计得找到破解的办法。一般在学校或者工做中改进一个内部工具活系统会比改善一个外部事件致使的政治问题要容易的多。开源项目看起来是一个好地方,由于代码很容易获取,可是请当心它们严格的保护而且入门比想象的要难的多。
起先你不知道如何进行一项小的改变。由于一般任何有用的系统都很复杂。不要担忧,这太正常了。 从整个项目文件中搜索关键接口的名称开始。一旦你找到了,修改它来证实你有能力操做电脑,使它按你的意图行事。
你可能会变得沮丧。固然,大多数的事物是十分复杂的。向懂这个系统工做原理的人请教来弄明白你纠结的地方。确保你获得了一个解释,而不只仅是一个解决方案。只要你尝试作出一些积极的改变,大多数的人会很乐意帮你来解决问题。而且若是你能代表本身作了许多的努力来尽量的理解问题,那么应该很容易就会有人来帮你。固然也有例外,不过那些人都是傻逼,过着勉强糊口的日子,不要理他们。
假设个人朋友遵循了上面的步骤而且 learns to build ,接下来是我下一步要告诉她的:
你作了一次又一次。你学会了迭代。你明白不存在已完成的事物,一切的事物都是能够被改进的。你学会了在资源有限的状况下决定哪件事物更值得被改进。和周围的伙伴分享构建的知识,这样大家能够一块儿参与构建。
myBlog:http://wtser.com
from: http://benton.io/tech/2014/03/28/learn-to-build.html