一个颇有借鉴价值的编程故事(转)

 英文原文:A Cautionary Tale of Learning to Code   node

  这是一个真实的故事,关于我本身的。一个理智的生命个体是怎么一步步走向疯狂?程序员

  我穿着西装,坐在办公室里,脑子里有一个模糊的创业想法。而后,我决定学习编程。我曾经无心中听到过几我的在那吹牛说本身怎么使用一种叫 Ruby 的语言轻松实现自动办公。我想“呵,Ruby”。我回到家,谷歌 Ruby。15 秒以后,我随机选择了一个 Ruby 教程,开始学习。web

  一周之后,我参加人生中的第一次黑客聚会。在场的每一个人都在讨论什么 Scala,Clojure,Go。我想,他们学得还真是多。转身我就借了三本O'reilly 的书,每本书看了大概 50 页。面试

  什么?你问我为何没有完整地看完一本书?那还不是由于每本书开始的时候简单易懂,而后就开始作假设,假设你具有这个知识,假设你会使用那种工具,但是这些我都不会好吗?编程

  个人一个朋友告诉我应该学 Emacs,而且给了我他的配置文件。我又花了几个小时学习基本的 Lisp 语法,以便我能本身设置配置文件。服务器

  而后一我的从我身边通过,看见我正在使用 Emacs,就问“你怎么还在用 Emacs(表情自行脑补),你不知道 Vim 更好吗?”我想“呵,Vim”,因而我开始背诵 Vim 成堆的键盘快捷键。框架

  工程师们常常讨论这样一个话题,文本编辑器哪家强?而且,工程师们将这当作是一场宗教战争——评判的标准不在于客观的准则,而在于历史分歧。编程语言

  那时候,我认为若是我打字越快,我编程的速度也会越快。因此我抛弃了传统的键盘布局,用上了程序员必备的 Dvorak 键盘布局(就像下面这样)。客观上来讲,对程序员而言,这是最高效的一种键盘布局。编辑器

  看着上面的键盘布局,你能告诉我有多少字母键,数字键,特殊字符键的位置没有变更吗?答案是个位数。工具

  等我可以成功启动 Linux,一分钟可以敲出十个单词的时候,我开始经过看书和 Udacity 的课程学习 Python。

  通过七个月的艰苦奋战,我获得了第一份软件工程师的工做。

  CTO 面试个人时候,我告诉他全部我学过的工具和我正在使用的高大上的配置文件。CTO 礼貌地听我说着,时不时点点头。等我吹嘘完本身渊博的知识以后,他看了我一眼,而后说“其实,大部分事情都有不少解决的办法,可是只有其中的极小一部分是有意义的”。

  四年之前,我所在的公司决定使用 Ruby on Rails 构建他们的产品。对于语言的选择,全部的工程师都没有意见,如今,他们的许多原始代码还在工做。全部的工程师都用 MacBook,由于 MacBook 不只可靠,而且和他们在产品中使用的 Ubuntu Linux 服务器很是相似。这里的工程师不讨 Vim 和 Emacs 哪家强,每一个人使用的文本编辑器都是 RubyMine,这是一个强大的集成开发环境,默认配置很是好用。这里的每一个工程师使用的工具彻底一致,意味着每一个人能够随便挑选本身的座位,而后立马和左边或右边的同事开始结对编程,而不须要纠结开发环境的配置问题。使用彻底相同的配置能极大地方便两个开发者之间的合做。

  虽然我不会 Ruby on Rails,公司也以为我能胜任工做。由于我会 Python 和 Django,而且赢得了黑客马拉松的比赛,公司认为这些能够说明问题。

  最开始的几周真是艰难,这种艰难不只仅来自于我来到一个新的团队,使用一种新的语言,新的框架和新的代码库,而是由于我发现身边的人都是以一种自虐的态度在学习编程。

  我独自在图书馆、咖啡厅坐了几个月,天天就是盲目的经过命令行安装各类工具,调试 Linux 驱动,解决一些细枝末节的问题,好比说括号不匹配。我涉足每个能想到的在线课程,报了无数的 MOOC 课程。我认为实际上我什么都没学到,直到在某个月的考核中,我上升至第五位。这些经历给个人印象是,编程是一场你永远没法取得胜利的战斗。我开始明白那些看起来正常的程序员他们的过往其实是那么灰暗,他们经历过太多,又压抑得过久,不得不说,学习编程简直就是一个反社会的活儿。

  辞掉上一份工做的第一个周末,我上传了这张自拍。那天我起了个大早,穿了件体面的西装,穿西装是为了提醒本身:我但是要去学习编程的人。Facebook 的标语“个人新办公室——餐桌上。我天天过着朝 8 晚 6 的生活,只有在必需要休息的时候才休息”。在生活中,我学程序员说话,像他们同样思考,如今,我已经习惯了这个词。

  个人同事几乎从没遇到过语法错误,由于他们的 IDE 替他们解决这个问题。而当他们遇到一个错误信息,若是在几分钟内不能解决问题,他们就会给其余同事发送一条即时消息,请求其余人的帮助。他们会随意跳到别人的桌旁,而后开始结对编程。这里的程序员不会太自我,也不自夸为精英。他们也不认为编程是一件痛苦的事。有的只是成年朋友之间的建设性的对话。

  一个团队中的成员使用的工具是高度一致的。在 Passion Project 和黑客马拉松中,开发者可能会使用新的 JavaScript 框架,好比说 Angular.js。而在一个真正的团队里,成员把精力主要放在使用现有的技术提高产品之上。从这个角度来讲,他们是保守的。

  在 ThoughtBot 你也会看到相似的状况,在 ThoughtBot 中,每一个人都坚持使用一个小且高效的工具集(Rails,Vim,Postgres 和 Redis)。由于工具集小,因此工程师容易成为该领域专家,又由于每一个人使用的工具集都是同样的,因此相互之间进行互操做就变得很容易。

  因此真正的问题是,若是高效的团队在使用一个小且固定的工具集的时候最高效,那么是否是人们在学习编程的时候使用一个小且固定的工具集是最好的。那些在线编程课程和编程训练营显然是这么想的。

  可是做为一个个体,能够选择的工具那么多,真的很难决定到底该怎么选。我知道这一点是由于我经历过。一个好的程序员的技能集合能够用T形来表示——涉猎的领域不少,可是真正擅长的领域很少。可是,通过经年累月的积累,T形将会慢慢变成下划线形。

  我遇到过许多学习编程的人,上来就想什么都学,什么都会,最终,他们都失败了,放弃了他们成为一个程序员的梦想。我不想这种状况也发生在你的身上。

  你须要专一更多方面

  事不宜迟,下面给出一些新手容易犯的大错误:

  • 从这种语言转到那种语言,又从那框架跳到这个框架,或者骗本身能够精通全部的语言或框架
  • 使用小众的工具来搭建本身的开发环境,而不是选择传统的、可信赖的工具。
  • 学习像 Docker 和 Famo.us 这样的工具,仅仅由于它们新奇,虽然更加基础的技术都还没掌握好。

  若是非得用一个词来总结个人建议,我会说:专一。

  我问你,你会用专一这个词来描述你的编程学习计划吗?若是你认为你的计划够专一,好,你如今能够中止阅读,回到你的计划开始学习,由于我不想说任何可能致使你失去专一的事情。

  若是你还的计划不够专一,那你也有福了——照我说的去作,你也能专一,可是这须要花费你几分钟的时候作几个艰难的决定。等等,大家别走啊!

  好的,你还没走。下面就是你须要作出的艰难的决定。

  1. 选择一种软件类型,能够是 Web 应用,手机应用,游戏,或者嵌入式。我推荐 web 应用,由于它够灵活。学习的资源也不少,工做机会更是数不胜数。若是你的兴趣点不在 web 应用上,关掉这个页面,在 Google 搜索框里面输入“getting started in _____ development”,将返回的结果一条条点进去看。
  2. 选择一种编程语言:JavaScript,Ruby 或者 Python。每种语言有本身的强项,都有与之相对的用于构建 web 应用的工具(分别是 Node.js,Rails 或 Django)。除非你本身明确知道本身该学哪一种语言,不然我推荐你学习 JavaScript,由于它使用最普遍。
  3. 选择一门在线课程。这里有一些选项供你选择:若是对 JavaScript 感兴趣,去 FreeCodeCamp.com 或者 NodeSchool.io 上找;若是对 Ruby 感兴趣,去TheOdinProject.com 或者 TeamTreehouse.com 上找;若是对 Python 感兴趣,去Udacity.com 上找。相信设计这些课程的老师们的智慧,按照建议的顺序完成这门课程,不要跳来跳去。
  4. 买一个新的/旧的 MacBook,或者在你如今的电脑上安装 Ubuntu Linux。至于其余你可能须要的工具,按照在线课程的建议安装便可。

  一旦你作出了这些决定,剩下的路就太简单了。你只要保持清醒,不要被周围的新工具所迷惑。一周七天,天天学一点在线课程,哪怕一次只有半小时。相信你今天作出的决定。最后,请记住:只要有耐心,任何能干的人都能成为绝世 coder,固然也包括你。

 

http://news.cnblogs.com/n/509554/

相关文章
相关标签/搜索