如何量化并加速你的编程能力【译】

ref: http://blog.thefirehoseproject.com/posts/learn-to-code-and-be-self-reliant/程序员

加速编程技能的关键

当您学习编程时,有一瞬间一切都开始改变。 在Firehose,咱们喜欢将其称为编程的拐点。 在此阶段以后,您做为开发人员的操做方式将大为不一样。 达到拐点的过程是使程序变得自给自足的过程,以致于您再也不须要任何手动操做。 这多是很痛苦的经历,可是一旦你经过了这个拐点,你的编程能力就会使人难以置信地加强。面试

The Tutorial Phase (3-8 weeks of serious coding)

当您开始学习编程时,有不少您尚不了解的信息。 此信息称为特定领域知识。 示例包括:知道如何用Ruby编写循环或如何使用Ruby on Rails从数据库中提取内容。 特定领域的知识包括特定编程环境所独有的协议。算法

成为自给自足的开发人员的第一步是学习如何执行特定任务。 一旦您掌握了某些任务,各个部分如何组合在一块儿的大招就会开始显现出来。 随着时间的流逝,您将开始认识模式,最终,最初看起来使人迷惑的事物和陌生的事物将成为天然而然的事情。数据库

对于刚毕业的学生来讲,注意从细节中学习是很重要的技能。

在阅读文档或教程之类的材料时,密切关注细节很是重要。 即便是最轻微的拼写错误和拼写错误,也会致使错误消息或错误。 首先,看到错误消息是很痛苦的经历,但这是学习过程当中相当重要的一步。 在此阶段处理错误消息和问题,能够教会您在安全的环境中编程的最重要技能之一:必定要注重细节。编程

调试错误消息很是重要。

事实是,错误消息只是编程的一部分:无经验和很是有经验的开发人员均可以看到它们。 惟一的区别是,您对错误消息的处理经验越多,花费在修复错误消息上的时间就越少。 缘由以下:安全

  • 随着时间的流逝,您将学习如何读取错误消息并快速提取问题的相关详细信息。 第一次看到错误消息时,您将须要一段时间来解码其实际含义。 可是,当您看到数百条错误消息后,您将可以指出问题的位置以及解决问题所需的相关详细信息。
  • 您应该从解决的每一个错误消息中学习。 不要只是为了解决错误而去解决错误; 你要从中学习,学习您要修复的代码出了什么问题。 经过从每一个错误中学习,下次您再次犯一样的错误时,即可以更快地解决它。
  • 最初,您可能会针对看到的每一个错误消息寻求帮助。 随着时间的流逝,您将须要仔细检查代码并进行智能的Google搜索,以减小寻求帮助的频率。

刚开始有些人可能就会有一点小信息来挖掘错误,而后构建一些小项目。然而有些其余人却须要继续的学习,由于每一个人学习能力和学习速度不一样,可是无论怎样,通过这么多的错误消息以后,你的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.框架

你应该随时准备进入下一个阶段,当你:

  • 您已经看到足够多的错误消息,它们再也不使您感到震惊。 相反,您知道如何理解它们的含义以及在代码中查找问题的位置。
  • 您是Google搜索解决方案专家。 当您尝试添加功能或看到使人困惑的错误消息时,您会知道要搜索什么才能找到所需的信息。
  • 您能够引用在应用程序其余部分编写的代码并遵循其中的模式和规律,而没必要老是寻求逐步说明。

拐点(Inflection Point)(心态正确的2-4周)

拐点阶段是学习编码中最使人沮丧的阶段之一,但在许多方面,它是惟一重要的阶段。 这是您逐步使用教程并开始解决没有人为您找到解决方案的问题的关键所在。

在某些时候,您会以为本身尚未准备好解决这个阶段,而且想回到构建具备确切工做要作的轮廓的东西。 不要沦为这种心态。 您会感到沮丧的缘由是:

在变形阶段,您将比上一阶段的编码慢10到20倍。
您可能会开始质疑本身,想知道本身是否真的有能力成为一名程序员。 在此阶段,不安全感和怀疑感很广泛。

尽管您会以为本身正在以慢得多的速度学习和完成事情,但实际上,您正在实现最重要的事情。 当您对特定领域的知识日趋紧张时,您所学的都是关于程序知识。

程序知识是指自学过程当中不了解的知识的能力。 当您须要实施一项新功能时,应该使用哪一种类型的Google搜索? 在这个时候,当您要完成许多事情时,您会感受本身像在“黑暗中”。 学习如何本身找到光源相当重要,由于您永远没法知道所要了解的一切,所以您须要可以教给本身如何解决眼前的问题。

大多数人没有意识到,要学习编码,您须要学习特定领域知识和过程知识。

在您的余生中,天天都要超越本身的极限

一旦找到立足点,一些软件工程师就会留在温馨区域内。 这些类型的程序员被称为维护程序员,而不是您应该努力作到的。 相反,您应该天天都努力超越本身的极限。 程序员辞职的最多见缘由是“自从我解决了全部有趣的问题后,它再也不具备挑战性。”

而不是尝试将编码项目拖入您的温馨区域,您应该寻找当前技能以外的问题。 这是创建和扩展技能的惟一方法。

用Firehose学生的话说,当他经过拐点时:
我仍然以为本身处于深渊! 知道那是我必需要作的事,我感到更加自在!

网站开发中,可能多个拐点会同时到来

当你可以创建一个以任意数据库驱动的应用时,那就意味着可以构建任意存储着相关信息数据库的不少网站了。网站开发称之为:“mastering CRUD.”在此阶段,只需遵循GitHub或博客文章上提供的文档,您还应该可以与任何第三方库(例如ruby gem)集成。

算法与数据结构的拐点要比网站开发的拐点要更难以琢磨一点,可是它更重要。征服了这一点的人不只会精通所用的编程语言,并且会精通编程的基础知识,并具备解决复杂编码难题的丰富知识。

一个征服了算法和数据结构的拐点,他将可以:

  • 写任意的排序算法
  • 实现任何形式的链表
  • 理解并能应用关于栈,队列和树的相关应用模型
  • 使用递归和迭代来编程

简而言之,一旦您经过了这个拐点,您将掌握数据操做并了解代码决策对性能的影响。 传统的计算机科学学位只专一于让学生超越算法和数据结构的拐点。 许多大学都使用行业中一般不使用的编程语言(例如Scheme,Racket或LISP)来教授这种语言。

在大多数技术面试中,面试官会认为您已经经过了Web开发的转折点,由于这样作比较容易,并将他们的问题集中在评估您在算法和数据结构上的技能。 这些问题一般集中在咱们上面提到的主题上:排序算法,反向连接列表以及使用堆栈,队列和树。

** 一旦开发人员经过了Web开发的拐点以及算法和数据结构的拐点,他们便掌握基本上全部的关键点。**
这些开发人员将可以解决与二者相交的挑战:须要在高级Web应用程序的上下文中构建的复杂算法。 这是专业Web开发人员天天所作工做的核心。

当你经过这些拐点时:
你在学习任意领域的知识的时候,都将融会贯通,你可能一到两周的时间就会学会一项新技能。

最终真正重要的是:

  • 您对Web开发框架有扎实的了解
  • 您能够熟练地使用任何编程语言编写算法复杂的代码

如今招人也但愿开发人员具有扎实的Web开发和算法能力。

当我在PayPal工做时,个人团队聘请了一位没有Rails经验的高级Rails开发人员-他已经在Python,LISP和Perl中进行了大量编码。 在几天以内,他已经产生了巨大的影响。 并在数周内:产生巨大影响。 他很快就升任技术团队主管,这是我参与过的最优秀的招聘决定之一。

不要盲目跟风,有人说最近AngularJS很火啊,JS也在上升期,个人回应通常是:“SO?”,你的目标是发现编程的拐点并且完全弄懂它,一旦你弄清楚了,任何新语言新浪潮都将不是问题。

变得自力更生。 无需结构化指导便可学习新的编码技能的能力意味着您再也不须要等待任何人帮助您。 这意味着,对于您须要学习的大部份内容,您只需搜索互联网并阅读各类您须要了解的材料。

这并不意味着您当即“知道”一切,而只是如今一切都“能够超出数字”,所以从本质上讲,您是没法阻挡的。

在拐点你须要学习的技能

做为软件开发人员,最好的参考资料是您已经编写的相似代码。 当您彻底理解所编写的代码时,无需将全部详细信息提交到内存中。 这意味着在构建新功能时,您应该问本身的第一个问题是:“我以前是否构建过相似的东西?” 若是答案是确定的,请从新查看代码并逐行浏览代码。 从新向本身解释正在作什么,并问本身:“我如今可使用相同的方法吗?”

经过看视频没法解释特定于域的细节,由于它们花了很长时间才能观看。 假设您想与Google Maps API集成。 一旦经历过一次,即可以在不到一分钟的时间内在GitHub中打开代码,复制代码并将其粘贴到新项目中。 而视频一般须要10到30分钟才能从新观看。

尽量有效地经过拐点的方法

由于经过拐点是学习编码的最重要部分,因此您应该让本身尽量舒服一点。 这意味着您应该在进入教程阶段时就开始准备,并在此期间保持正确的心态。

在教程阶段,请中止学习结构化材料,并一路给本身挑战难题。

  • 对于每节课,请尝试作超出您要学习的教程范围以外的事情。 若是您要学习的教程提供了“挑战”或“自我指导”的部分,请所有完成。 在没有结构化指导的状况下,解决无指导的挑战将为您提供重要的工做经验。
  • 尽可能少使用教程。 在Firehose,咱们常常引导学生学习如何集成某些宝石或使用提供的文档进行操做。 许多学生不只会按照针对刚入门者的教程中说明的说明进行操做,还将遵循文档并使用这些教程做为备份。 请注意,文档将把您视为已经过拐点的开发人员。 独自学习时,在GitHub上阅读和遵循文档将变得很轻松,这将助您一臂之力。
  • 专一于基本要素并重复使用。 了解如何执行常见操做,例如从头开始分解应用程序,将新应用程序推送到GitHub和Heroku,以及尽早构建数据库迁移。

推过拐点可能具备挑战性。 如下是一些指导您完成操做的指针:

  • 了解这是一个困难的过程,而且要对本身轻松一点。 另外,设定切合实际的指望。 您没法将学习教程的“超人”水平速度与本身学习事物的“蜗牛”速度相提并论。 请记住,您正在学习不少东西,可是在此阶段,您正在学习一种崭新的技能,能够自行解决新问题。
  • 若是您在自信方面挣扎,请知道您的感受是彻底正常的。 继续工做。 若是您仍在挣扎,请尝试与最近经过拐点的人交谈。 他们将可以与您所处的位置相关联,并向您保证您所经历的只是暂时的。 始终如一地工做,但不要过分劳累。 在游戏的这个阶段,要知道您一天最多只能工做6个小时左右。 在疲惫的状态下工做只会延长您花费在拐点上的时间。

在此阶段得到信心的最好方法是克服任何疑问。 您的情绪可能开始变得像过山车。 有时,您会感到本身在生火,可是在同一个问题上苦苦挣扎15个小时以后,感到对立是很广泛的。

不知道是否是要花5分钟或5个小时才能让您感到沮丧,可是每次您接通电源并成功实施新功能时,急需信心。 在没有任何帮助的状况下解决了一些棘手的问题以后,您会沉迷于在温馨区域以外建造东西的感受。

如何知道本身是否已经经过了拐点

拐点过程的最后阶段是验收。 接受软件开发是一个不断学习的过程。 接受成功学习一切的感受,意味着您应该开始考虑解决更复杂的问题。

相关文章
相关标签/搜索