ref: http://blog.thefirehoseproject.com/posts/learn-to-code-and-be-self-reliant/程序员
当您学习编程时,有一瞬间一切都开始改变。 在Firehose,咱们喜欢将其称为编程的拐点。 在此阶段以后,您做为开发人员的操做方式将大为不一样。 达到拐点的过程是使程序变得自给自足的过程,以致于您再也不须要任何手动操做。 这多是很痛苦的经历,可是一旦你经过了这个拐点,你的编程能力就会使人难以置信地加强。面试
当您开始学习编程时,有不少您尚不了解的信息。 此信息称为特定领域知识。 示例包括:知道如何用Ruby编写循环或如何使用Ruby on Rails从数据库中提取内容。 特定领域的知识包括特定编程环境所独有的协议。算法
成为自给自足的开发人员的第一步是学习如何执行特定任务。 一旦您掌握了某些任务,各个部分如何组合在一块儿的大招就会开始显现出来。 随着时间的流逝,您将开始认识模式,最终,最初看起来使人迷惑的事物和陌生的事物将成为天然而然的事情。数据库
在阅读文档或教程之类的材料时,密切关注细节很是重要。 即便是最轻微的拼写错误和拼写错误,也会致使错误消息或错误。 首先,看到错误消息是很痛苦的经历,但这是学习过程当中相当重要的一步。 在此阶段处理错误消息和问题,能够教会您在安全的环境中编程的最重要技能之一:必定要注重细节。编程
事实是,错误消息只是编程的一部分:无经验和很是有经验的开发人员均可以看到它们。 惟一的区别是,您对错误消息的处理经验越多,花费在修复错误消息上的时间就越少。 缘由以下:安全
刚开始有些人可能就会有一点小信息来挖掘错误,而后构建一些小项目。然而有些其余人却须要继续的学习,由于每一个人学习能力和学习速度不一样,可是无论怎样,通过这么多的错误消息以后,你的debug能力确定经验提高了。ruby
在这一点上,有些人会感到自信-就像他们准备抛弃训练轮并在没有结构化指导的状况下开始建造东西同样-会高兴地跳入深渊。 其余学生将得到更多教程,以寻求更多的特定领域知识,以寻求“全面理解”。 不幸的是,教程只会带您走远,而在教程或指南中却找不到真正的信心。 真正的信心来自于努力解决本身不知道如何解决的问题,并自行找到解决方案。数据结构
You will never know everything you need to know to solve all your problems. Going into the journey, you probably envisioned yourself eventually learning everything you need to learn, and then being squared away. This moment will never happen.app
Programming is a life-long learning experience. Experienced software engineers seek to find solutions to problems they haven’t solved yet because it gives them the opportunity to learn more. If you find yourself waiting for the moment when you finally feel like you know everything there is to know about coding, know this: the day you’re waiting for will never come. And that is a wonderful thing.框架
拐点阶段是学习编码中最使人沮丧的阶段之一,但在许多方面,它是惟一重要的阶段。 这是您逐步使用教程并开始解决没有人为您找到解决方案的问题的关键所在。
在某些时候,您会以为本身尚未准备好解决这个阶段,而且想回到构建具备确切工做要作的轮廓的东西。 不要沦为这种心态。 您会感到沮丧的缘由是:
在变形阶段,您将比上一阶段的编码慢10到20倍。
您可能会开始质疑本身,想知道本身是否真的有能力成为一名程序员。 在此阶段,不安全感和怀疑感很广泛。
尽管您会以为本身正在以慢得多的速度学习和完成事情,但实际上,您正在实现最重要的事情。 当您对特定领域的知识日趋紧张时,您所学的都是关于程序知识。
程序知识是指自学过程当中不了解的知识的能力。 当您须要实施一项新功能时,应该使用哪一种类型的Google搜索? 在这个时候,当您要完成许多事情时,您会感受本身像在“黑暗中”。 学习如何本身找到光源相当重要,由于您永远没法知道所要了解的一切,所以您须要可以教给本身如何解决眼前的问题。
大多数人没有意识到,要学习编码,您须要学习特定领域知识和过程知识。
一旦找到立足点,一些软件工程师就会留在温馨区域内。 这些类型的程序员被称为维护程序员,而不是您应该努力作到的。 相反,您应该天天都努力超越本身的极限。 程序员辞职的最多见缘由是“自从我解决了全部有趣的问题后,它再也不具备挑战性。”
而不是尝试将编码项目拖入您的温馨区域,您应该寻找当前技能以外的问题。 这是创建和扩展技能的惟一方法。
用Firehose学生的话说,当他经过拐点时:
我仍然以为本身处于深渊! 知道那是我必需要作的事,我感到更加自在!
当你可以创建一个以任意数据库驱动的应用时,那就意味着可以构建任意存储着相关信息数据库的不少网站了。网站开发称之为:“mastering CRUD.”在此阶段,只需遵循GitHub或博客文章上提供的文档,您还应该可以与任何第三方库(例如ruby gem)集成。
算法与数据结构的拐点要比网站开发的拐点要更难以琢磨一点,可是它更重要。征服了这一点的人不只会精通所用的编程语言,并且会精通编程的基础知识,并具备解决复杂编码难题的丰富知识。
一个征服了算法和数据结构的拐点,他将可以:
简而言之,一旦您经过了这个拐点,您将掌握数据操做并了解代码决策对性能的影响。 传统的计算机科学学位只专一于让学生超越算法和数据结构的拐点。 许多大学都使用行业中一般不使用的编程语言(例如Scheme,Racket或LISP)来教授这种语言。
在大多数技术面试中,面试官会认为您已经经过了Web开发的转折点,由于这样作比较容易,并将他们的问题集中在评估您在算法和数据结构上的技能。 这些问题一般集中在咱们上面提到的主题上:排序算法,反向连接列表以及使用堆栈,队列和树。
** 一旦开发人员经过了Web开发的拐点以及算法和数据结构的拐点,他们便掌握基本上全部的关键点。**
这些开发人员将可以解决与二者相交的挑战:须要在高级Web应用程序的上下文中构建的复杂算法。 这是专业Web开发人员天天所作工做的核心。
当你经过这些拐点时:
你在学习任意领域的知识的时候,都将融会贯通,你可能一到两周的时间就会学会一项新技能。
最终真正重要的是:
如今招人也但愿开发人员具有扎实的Web开发和算法能力。
当我在PayPal工做时,个人团队聘请了一位没有Rails经验的高级Rails开发人员-他已经在Python,LISP和Perl中进行了大量编码。 在几天以内,他已经产生了巨大的影响。 并在数周内:产生巨大影响。 他很快就升任技术团队主管,这是我参与过的最优秀的招聘决定之一。
不要盲目跟风,有人说最近AngularJS很火啊,JS也在上升期,个人回应通常是:“SO?”,你的目标是发现编程的拐点并且完全弄懂它,一旦你弄清楚了,任何新语言新浪潮都将不是问题。
变得自力更生。 无需结构化指导便可学习新的编码技能的能力意味着您再也不须要等待任何人帮助您。 这意味着,对于您须要学习的大部份内容,您只需搜索互联网并阅读各类您须要了解的材料。
这并不意味着您当即“知道”一切,而只是如今一切都“能够超出数字”,所以从本质上讲,您是没法阻挡的。
做为软件开发人员,最好的参考资料是您已经编写的相似代码。 当您彻底理解所编写的代码时,无需将全部详细信息提交到内存中。 这意味着在构建新功能时,您应该问本身的第一个问题是:“我以前是否构建过相似的东西?” 若是答案是确定的,请从新查看代码并逐行浏览代码。 从新向本身解释正在作什么,并问本身:“我如今可使用相同的方法吗?”
经过看视频没法解释特定于域的细节,由于它们花了很长时间才能观看。 假设您想与Google Maps API集成。 一旦经历过一次,即可以在不到一分钟的时间内在GitHub中打开代码,复制代码并将其粘贴到新项目中。 而视频一般须要10到30分钟才能从新观看。
由于经过拐点是学习编码的最重要部分,因此您应该让本身尽量舒服一点。 这意味着您应该在进入教程阶段时就开始准备,并在此期间保持正确的心态。
在教程阶段,请中止学习结构化材料,并一路给本身挑战难题。
在此阶段得到信心的最好方法是克服任何疑问。 您的情绪可能开始变得像过山车。 有时,您会感到本身在生火,可是在同一个问题上苦苦挣扎15个小时以后,感到对立是很广泛的。
不知道是否是要花5分钟或5个小时才能让您感到沮丧,可是每次您接通电源并成功实施新功能时,急需信心。 在没有任何帮助的状况下解决了一些棘手的问题以后,您会沉迷于在温馨区域以外建造东西的感受。
拐点过程的最后阶段是验收。 接受软件开发是一个不断学习的过程。 接受成功学习一切的感受,意味着您应该开始考虑解决更复杂的问题。