加快编码技能的关键
当您学习编码时,有一瞬间一切都开始改变。在Firehose,我们喜欢将其称为编码的拐点。 在此阶段之后,您作为开发人员的操作方式将大为不同。达到拐点的过程是使程序自给自足的过程,以至您不再需要任何握力。这可能是令人沮丧的体验,但是一旦它落在您身后,它就会令人难以置信地增强力量。
在Firehose,我们的目标不仅是教您Ruby,如何构建Web应用程序或如何编写测试。尽管我们确实教授这些技能,但我们的主要目标是使学生加速超越拐点,从而使他们能够解决遇到的任何问题。我们相信能够自行解决问题是一项宝贵的技能,这种教学方法将带给您更多的知识,而不仅仅是学习如何构建一组应用程序。
辅导阶段(认真编码3-8周)
当您开始学习编码时,有很多您不知道的信息。此信息称为特定领域知识。 示例包括:知道如何用Ruby编写循环或如何使用Ruby on Rails从数据库中提取内容。特定领域的知识涵盖特定编程环境所独有的协议。
成为自给自足的开发人员的第一步是学习如何执行特定任务。一旦掌握了某些任务,各个部分如何组合在一起的大招就会开始显现出来。随着时间的流逝,您将开始认识到模式,最终,最初看起来令人迷惑的事物和外来事物将成为第二自然。
对于刚起步的学生来说,获得最重要的技能是注意细节。
在阅读文档或教程之类的材料时,密切关注细节非常重要。即使是最轻微的拼写错误和拼写错误,也会导致错误消息或错误。首先,看到错误消息是令人沮丧的经历,但这是学习过程中至关重要的一步。在此阶段处理错误消息和问题,可以教会您在安全的环境中编程的最重要技能之一:注重细节。
调试错误消息非常重要。事实是,错误消息只是编程的一部分:无经验和非常有经验的开发人员都可以看到它们。唯一的区别是,您对错误消息的处理经验越多,花费在修复错误消息上的时间就越少。原因如下:
- 随着时间的流逝,您将学习如何读取错误消息并快速提取问题的相关详细信息。第一次看到错误消息时,您将需要一段时间来解码其实际含义。但是,在您看到数百条错误消息之后(并且您将看到数百条!),您将能够指出问题的位置以及修复该问题所需的相关详细信息。
- 您应该从解决的每个错误消息中学习。不要只是解决错误并加以解决;了解您要修复的代码出了什么问题。通过从每个错误中学习,下次再犯相同的错误时,您将可以更快地解决它。
- 最初,您可能会针对看到的每个错误消息寻求帮助。随着时间的流逝,您将需要仔细检查代码并进行智能的Google搜索,以减少寻求帮助的频率。
在教程阶段,您将按照说明进行操作。首先,您会发现遵循说明具有挑战性,并且错误消息会经常发生。随着时间的流逝,您将开发出调试错误的技巧,并更加注重小细节,并且可以更快地取得进展。在结束本教程阶段时,您会注意到您能够以更快的速度编写代码。
在这一点上,有些人会感到自信-就像他们准备抛弃训练轮并在没有结构化指导的情况下开始建造东西一样-会高兴地跳入深渊。其他学生将寻求更多教程,以寻求更多的特定领域知识,以寻求“全面的理解”。不幸的是,教程只会带您走那么远,而在教程或指南中却找不到真正的信心。真正的信心来自于努力解决自己不知道如何解决的问题,并自行找到解决方案。
编程的肮脏小秘密是……
您将永远不会知道解决所有问题所需的一切。在旅途中,您可能会设想自己最终会学习所需学习的所有内容,然后被淘汰。这一刻将永远不会发生。
编程是毕生的学习经验。经验丰富的软件工程师寻求找到尚未解决的问题的解决方案,因为这使他们有机会学习更多。如果您发现自己正在等待片刻,直到最终感觉自己对编码有了一切了解,那就知道这一点:等待的日子永远不会过去。这是一件了不起的事情。
在以下情况下,您将准备好进入下一阶段的旅程:
- 您已经看到足够多的错误消息,它们不再使您感到震惊。相反,您知道如何解释它们的含义以及在代码中查找问题的位置。
- 您是Google搜寻解决方案的专家。当您尝试添加功能或看到令人困惑的错误消息时,您知道要搜索什么才能找到所需的信息。
- 您可以引用在应用程序其他部分编写的代码,并遵循其中的模式,而不必总是寻求逐步的说明。
拐点(心态正确的2-4周)
拐点阶段是学习编码中最令人沮丧的阶段之一,但在许多方面,它是唯一重要的阶段。这是您逐步使用教程并开始解决没有人为您找到解决方案的问题的关键所在。
在某些时候,您会觉得您还没有准备好解决这个阶段,并且想回到构建具有确切操作概述的对象。不要沦为这种心态。您会感到沮丧的原因是:
在变形阶段,您的编码将比上一阶段慢10到20倍。
您可能会开始质疑自己,想知道您是否真的有能力成为一名程序员。在此阶段,不安全感和怀疑感很普遍。
尽管您会觉得自己正在以慢得多的速度学习和完成事情,但实际上,您正在实现最重要的事情。当您的特定于领域的知识在推销员面前步履蹒跚时,您所学的一切都将与程序知识有关。
程序知识是指自学过程中不了解的知识的能力。当您需要实施一项新功能时,应该执行哪种类型的Google搜索?在这个时间点上,当您要完成许多事情时,您会感觉自己像在“黑暗中”。学习如何自行找到光源至关重要,因为您永远无法知道所要了解的一切,因此您需要能够教自己如何解决眼前的问题。
大多数人没有意识到,要学习编码,您需要学习特定领域知识和过程知识。
在您的余生中,每天都要超越自己的极限
一旦找到立足点,一些软件工程师就会留在舒适区域内。这些类型的程序员被称为维护程序员,而不是您应该努力做到的。相反,您应该每天努力超越自己的极限。程序员辞职的最常见原因是“自从我解决了所有有趣的问题后,它不再具有挑战性。”
而不是尝试将编码项目拖入您的舒适区域,您应该寻找当前技能之外的问题。这是建立和扩展技能的唯一方法。
用Firehose学生的话说:
我仍然觉得自己处于深渊!知道这就是我要做的事,这让我感到更加自在!
在Web开发中,实际上存在两个拐点。
Web开发的转折点是您能够构建所需的任何数据库驱动的应用程序的时候。这意味着能够构建具有许多页面的Web应用程序,这些页面用于存储和检索来自简单数据库的信息。Web开发人员称之为:“掌握CRUD”。在此阶段,只需遵循GitHub或博客文章上提供的文档,您还应该能够与任何第三方库(例如ruby gem)集成。
算法和数据结构拐点是一个表面上的拐点,但实际上更重要。征服了这一点的人将精通他们正在使用的编程语言,不仅精通编程的基础知识,而且具有解决复杂编码难题的丰富知识。
克服了算法和数据结构拐点的人们将能够:
- 写排序算法
- 实现和反向链接列表
- 利用堆栈,队列和树来理解和编写程序
- 使用递归或迭代解决方案编写计算机程序
简而言之,一旦您越过了这个拐点,您将掌握数据操作并了解代码决策对性能的影响。传统的计算机科学学位只专注于让学生超越算法和数据结构的拐点。许多大学都使用行业中通常不使用的编程语言(例如Scheme,Racket或LISP)来教授这种语言。
在大多数技术面试中,面试官会假设您已经通过了Web开发的转折点,因为这样做更容易,并将他们的问题集中在评估您在算法和数据结构上的技能。这些问题通常集中在我们上面提到的主题上:排序算法,反向链接列表以及使用堆栈,队列和树。
一旦开发人员通过了Web开发的拐点以及算法和数据结构的拐点,他们便掌握了王国的关键。
这些开发人员将能够解决与两者相交的挑战:需要在高级Web应用程序的上下文中构建的复杂算法。这是专业Web开发人员每天所做工作的核心。
拐点的后果
当您第一次听到拐点时,最大的后果是听起来有点违反直觉。深呼吸:
在学习编码时,特定领域的知识与事物的宏大计划无关紧要。
对。我不是在开玩笑-真的没关系。一旦通过拐点,这些概念将仅用一两个星期的教程,甚至几天就可以流畅地翻译!
最终真正重要的是:
- 您对Web开发框架有扎实的了解
- 您可以熟练地使用任何编程语言编写算法复杂的代码
招聘经理希望开发人员具备扎实的Web开发和算法能力。
当我在PayPal工作时,我的团队聘请了一位没有Rails经验的高级Rails开发人员-他已经使用Python,LISP和Perl进行了大量编程。在几天之内,他已经产生了巨大的影响。在几周内:巨大的影响。他很快就升任技术团队负责人,这是我参与过的最出色的招聘决定之一。
不要汗流the背。很多人会说诸如“ AngularJS如今很热”,“ JavaScript正在兴起”或“最新风尚……”之类的回答:“是吗?”当您学习如何编程时,您的唯一目标应该是找到拐点并消除它。一旦完成,学习新的性感风尚就不会是一件困难的事情。
变得自强不息。无需结构化指导即可学习新的编码技能的能力意味着您不再需要等待任何人帮助您。这意味着对于您需要学习的大部分内容,您只需搜索互联网并阅读各种您需要了解的材料。
这并不意味着您立即“知道”所有事情,而只是现在一切都“可以超出数字”,因此从本质上讲,您是无法阻止的。
拐点期间您将开发的技能
作为软件开发人员,最好的参考资料是您已经编写的类似代码。当您完全理解所编写的代码时,无需将所有详细信息提交到内存中。这意味着在构建新功能时,您应该问自己的第一个问题是:“我之前是否构建过类似的东西?”。如果是,请重新访问代码并逐行浏览代码。重新向自己解释它在做什么,并问自己:“我现在可以使用相同的方法吗?”
视频很烂,无法解释特定于域的细节,因为它们花了很长时间才能观看。假设您要与Google Maps API集成。一旦经历过一次,就可以在不到一分钟的时间内在GitHub中打开代码,复制代码并将其粘贴到新项目中。另一方面,视频通常需要10到30分钟才能重新观看。
尽可能有效地通过拐点的策略
因为通过拐点是学习编码的最重要部分,所以您应该设置自己,以使过程尽可能平滑。这意味着您应该在进入教程阶段时就开始准备,并在此期间保持正确的心态。
在教程阶段,请停止学习结构化材料,并在此过程中挑战自己。
- 对于每节课,请尝试做超出您正在学习的教程范围之外的事情。如果您要学习的教程提供了“挑战”或“自我指导”的部分,请全部完成。在没有结构化指导的情况下,解决无指导的挑战将为您提供重要的工作经验。
- 尽量少使用教程。在Firehose,我们经常引导学生学习如何集成某些宝石或使用提供的文档进行操作。许多学生不仅会按照针对刚入门者的教程中说明的说明进行操作,还将遵循文档并使用这些教程作为备份。请注意,文档将把您视为已通过拐点的开发人员。独自阅读时,在GitHub上阅读和遵循文档会变得很轻松,这将使您有所建树。
- 专注于基本要素并重复使用。了解如何执行常见操作,例如从头开始分解应用程序,将新应用程序推送到GitHub和Heroku,以及尽早构建数据库迁移。
推过拐点可能具有挑战性。以下是一些指导您完成操作的指针:
- 了解这是一个困难的过程,对自己要轻松一点。此外,设定切合实际的期望。您无法将学习教程的“超人”水平速度与自己学习事物的“蜗牛”速度相提并论。请记住,您正在学习很多东西,但是在此阶段,您正在学习一种崭新的技能,可以自行解决新问题。
- 如果您在自信方面挣扎,请知道您的感觉是完全正常的。继续工作。如果您仍在挣扎,请尝试与最近通过拐点的人交谈。他们将能够与您所处的职位相关,并向您保证您所经历的只是暂时的。始终如一地工作,但不要过度劳累。在游戏的这个阶段,要知道您一天最多只能工作6个小时左右。在疲惫的状态下工作只会延长您花费在拐点上的时间。
在这个阶段获得信心的最好方法是克服任何疑问。您的情绪可能开始变得像过山车。有时,您会感到自己在生火,但是在同一个问题上苦苦挣扎15个小时之后,感到对立是很普遍的。
不知道是否需要花费5分钟或5个小时才能使您感到沮丧,但是每次您接通电源并成功实施一项新功能时,急需充满信心。在没有任何帮助的情况下解决了一些棘手的问题之后,您会沉迷于在舒适区域之外建造东西的感觉。
如何知道何时通过拐点
拐点过程的最后阶段是验收。接受软件开发是一个不断学习的过程。接受已成功学完一切的感觉,这意味着您应该开始考虑解决更复杂的问题。
你经历过拐点了吗?分享这篇文章并与您的朋友开始对话–您会惊讶地发现有多少人已经达到并超越了这一刻。
作者Ken Mazaika
Ken Mazaika是Firehose的CTO和联合创始人。之前,他是WHERE.com(被PayPal收购)的技术负责人,并且是波士顿PayPal / eBay开发团队的成员。