原文链接The Key To Accelerating Your Coding Skills
作者: KEN MAZAIKA

当你开始敲代码的时候,总会有一个时刻所有事情都会开始转变。在Firehose这里,我们喜欢称这个为敲代码的拐点。在下图的这个图表中,你作为一个开发人员的运作方式将大为不同。建立拐点是在编程中变得自给自足的过程,到了你不再需要手持(hand-holding)的过程,这可能会是 一个令人沮丧的经历,但是一旦坚持到了最后,将会难以置信的发挥巨大的作用。

在Firehose,我们的目标不仅仅是教你Ruby、如何构建网站应用或者是如何写测试。尽管我们的确会教这些并且不止这些,但我们的目的在于加速学生尽快经历这个拐点,那样他们才能通过他们自己就能解决任何的问题。我们相信有能力通过自己去解决问题是无价的,并且这样的方法将教会你不仅仅是简单的构建一系列的app。


教程阶段(3-8周的严谨编程)

当你开始学习敲代码,你仍然还有很多信息不知道。这些信息称为特定领域的知识。例如:知道如何用Ruby写一个循环或者如何使用Ruby on Rails从数据库中提取内容。特定领域的知识包括特定领域中的编程环境。

称为一个自给自足的开发人员第一步是学会如何做特定的任务。一旦你掌握了某些任务,那么这些组件组合在一起之后将会变得明显。随着时间的推移,你将开始认识模式,最终,那些最初看起来令人困惑和陌生的事物将成为第二天性。


在学生的最开始阶段,最终的技能就是要对细节给予足够的关注

在阅读文档或教程等材料时,密切关注细节非常重要。即使是最轻微的打字错误和拼写错误也会导致错误信息和bug。一开始,看到错误信息是会令人很沮丧,但这是学习阶段中至关重要的一步。解决错误的信息和问题在这个阶段中将教会你在安全环境中编程的最重要的技能之一:以细节为导向。

追踪错误信息是特别重要的。事实上,错误信息仅仅是编程中的一部分:它们可以被用来区分有经验的开发人员和无经验的开发人员。这唯一的区别是:你解决错误的信息越多,你用来修复它们所花的时间就越少。为什么呢?

  • 随着时间的推移,你将会学习如何阅读错误信息,并且
    快速的从这些错误中提取相关的细节。当你第一次看到错误信息的时候,你的确需要花一些时间去搞清楚它的意思是啥。但当你经历数百次错误信息的时候(甚至成百上千次),你将会直达问题的关键位置和你需要修复的相关细节。

  • 你应该从解决的每个错误中学习。不仅仅只是修复错误,而是真正的解决它;明白你修复的这个代码中的错误信息是什么。通过从你的每一个错误中学习,当下一次发生相同的错误时,你将会修正的更快。

  • 最初,你可能在你看到每一个错误的地方寻求帮助。随着时间的推移,通过反复检查代码,您将不用频繁地寻求帮助,并且聪明的用谷歌搜索。

在本教程阶段,你将遵循指令。首先,您会发现遵循说明很困难,错误消息会频繁出现。随着时间的推移,您将提高调试错误的技能,并更好地关注小细节,并且您将能够更快地取得进展。在结束本教程时,您将会注意到你将以更快的速度写代码。

从这点来说,在这一点上,一些人感到自信——就像他们已经准备好抛弃训练轮,开始在没有结构化指导的情况下构建东西一样——并且会很高兴地潜到最深处。其他学生将接触到更多的教程,试图获得更多特定领域的知识以达到更充分的理解。不幸的是,这个课程只能帮你到这,而真正的自信并不是在课程中找到的。真正的自信来自于当你不知道如何解决一个问题时,通过自己找到了一个解决方案。

编程的小秘密是…

你永远不可能知道解决所有问题所需要知道的一切。在这趟旅途中,你可能会想象自己最终学会了你需要学习的一切,然后被摆平。但这一刻永远不会发生。

编程是需要终身学习的。有经验的软件工程师会去寻找他们还没有解决的问题的方案因为这给了他们学习更多的机会。如果你发现自己在等待某一个时刻,当你最终觉察到你已经知道了关于编程的一切,那么就要知道:你所等待的那一天永远不会到来。而那才是最美妙的事情。

你将准备好进入下一阶段的旅程,当:

  • 你已经看到了足够多的错误信息,以至于它们不再让你吃惊。正相反,你已经知道如何破译它们的信息并且知道如何从你的代码里找到问题。
  • 你是搜索方案解决问题的专家。当你试图添加一个特性或看到一条令人困惑的错误消息时,你知道要搜索什么来查找所需要的信息。
  • 你能够引用在应用程序的其他部分编写的代码,并遵循其中的模式。而不是总是寻找循序渐进的指令。

拐点(用2-4周保持正确的心态)

拐点阶段是学习代码最令人沮丧的阶段之一,但在许多方面,它是唯一重要的阶段。当你逐步停止使用教程,开始解决没有人为你准备解决方案的问题时,这一点就显得尤为重要。

在某些情况下,你会觉得你还没有准备好如何应对这个阶段,并且你想回到简历一个关于该做什么的大纲的事情上来。不要成为这种心态的牺牲品。此时你感到的沮丧的原因是:

在这个拐点,你在敲代码时将会比之前的阶段慢10-20倍

你可能会开始质疑自己,怀疑自己是否真的有能力成为一名程序员。在这个阶段,不安全感和怀疑是很常见的。

尽管你会觉得自己在学习和完成事情的速度慢得多,但事实上,你正在实现最重要的事情。当你的特定领域只是对推杆发出刺耳的声音时,你所学的一切都将于程序知识有关。

程序性知识是一种自学的能力,一路上你不知道什么。当你需要实现一个新功能时,你应该做什么样的谷歌搜索?此时此刻,当涉及到你想要的完成的许多事情时,你会觉得自己“处于某种黑暗之中”。学习如何自己找到光明是至关重要的,因为你永远不可能知道所有需要知道的事情,所以你需要能够教会自己如何解决手头的问题。

大多数人没有意识到,为了学习代码,你需要学习领域特定的知识和过程性的知识

在你的余生里,每天都要超越自己的极限

一些软件工程师一旦找到立足点,就呆在他们的舒适区内。这些类型的程序员被称为维护程序员,却不是你应该努力做到的。相反,你应该每天努力超越自己的极限。程序员辞职的最常见原因是“自从我解决了所有有趣的问题后,它不再具有挑战性。”

与其试图将编程项目拉入舒适区,还不如找出当前技能之外的问题。这是简历和扩展技能的唯一方法。

用Firehose的学生通过拐点时的话来说:

我还觉得自己处于低谷!我只是更舒服地知道我要去的地方!

在web开发中,实际上有两个拐点将一起到来

web开发的拐点是指当你能够构建所需的任何数据库驱动的应用程序时。这意味着能够构建一个包含许多页面的web应用程序,这些页面存储和检索简单数据库中的信息。web开发人员称之为“掌握CRUD”。在这个阶段,你还应该能够通过遵循GitHub或博客文章上提供更多文档,与任何第三方库(例如Ruby Gem)集成。

算法和数据结构的拐点是一个不那么表面化的拐点,但实际上更为重要。攻克这一点的人除了掌握编程的基础知识和解决复杂编码挑战的深度知识外,还将掌握他们所使用的的编程语言。

征服算法和数据结构拐点的人将能:

  • 写排序算法
  • 实现反转链表
  • 了解并编写利用堆栈、队列和树的程序
  • 使用递归或迭代解编写计算机程序

简单来说,一旦你通过这个拐点,你将掌握数据操作,并了解代码决策的性能。传统的计算机科学学位只专注于让学生铜鼓哦算法和数据结构的拐点。许多大学用编程语言来教授这一点,而编程语言通常不在行业中使用,如scheme、racket或lisp。

在大多数技术面试中,面试官会假设你已经通过了web开发的拐点,因为这很容易做到,而且他们的问题集中在评估你在算法和数据结构方面的技能上。这些问题通常集中在我们上面提到的主题上:排序算法、反向链表以及使用堆栈、队列和树。

一旦开发人员通过了Web开发拐点和算法和数据结构拐点,他们就掌握了王国的钥匙。

这些开发人员将能够解决这两个方面的挑战:需要在高级web应用程序环境中构建的复杂算法。这是专业web开发人员每天工作的核心。

拐点的结果

当你第一次听到拐点时,最大的结果听起来有点违反直觉,请深呼吸:

当学习编码时,领域特定的知识在宏观方案中并不重要

是的。我没有在和你开玩笑——这真的没什么关系。一旦你通过了拐点,这些概念将流畅地翻译,只需要一两周的教程,甚至仅需短短几天!

最终真正重要的事情是:

  • 你对web开发框架有很好的了解
  • 你对用任何编程语言编写算法上复杂的代码都有很好的理解。

招聘经理希望开发人员具备扎实的网络开发和算法技能

当我在PayPal工作时,我的团队雇佣了一个资深的Rails开发人员,他们在Rails没有经验,他在Python、Lisp和Perl中进行了大量的编码。几天之内,他已经产生了巨大的影响。几周之内:巨大的影响。他很快晋升为技术团队负责人,是我参与过的最明智的招聘决策之一。

别出汗。很多人会说,“安古拉基斯最近很火爆”,“javascript正在崛起”,或者“最近的流行是……”,我对此的回应是:“那又怎么样?“当你学习如何编程时,你唯一的目标应该是找到拐点并消灭它。一旦你这样做了,学习新的,性感的时尚将不会是一个困难的任务。

** 请自力更生**。如果没有结构化的指导,学习新的编码技能意味着你不再需要等待任何人来帮助你。这意味着对于你需要学习的大部分内容,你可以简单地搜索互联网并阅读关于你需要知道的内容的各种材料。

这并不意味着你立刻“知道”一切,但只是说现在一切都“明白”了,所以本质上,你是不可阻挡的。

你将在拐点期间学会的技能

作为一个软件开发人员,最好的参考资料是你已经编写的类似代码。当你完全理解你写的代码时,你不需要把所有的细节都提交到内存中。这意味着在构建新功能时,你应该问自己的第一个问题是:如果答案是肯定的,请重新访问代码,并在脑海中一行一行地浏览代码。重新向自己解释它在做什么,然后问自己,“我现在能用相同的方法吗?”他说:这是一个很好的选择

视频很难解释特定领域的细节,因为他们要花很长时间才能看到。加入你想与谷歌地图API集成,一旦你经历过一次,在GitHub中打开代码、复制代码并将其粘贴到新项目中可能需要不到一分钟的时间。另一方面,视频通常需要10-30分钟才能重新观看。

尽可能有效地通过拐点的策略

因为通过拐点是学习代码的最重要的部分,所以你应该是自己这个过程尽可能顺利。这意味着你应该在教程开始阶段开始准备,并在这段时间内保持正确的心态。

在教程阶段,从浏览结构化材料中获得一些休息,并在过程中给自己挑战问题。

  • 对于每一刻,尝试做一些超出你所学教程范围的事情。如果你正在学习的教程提供了“挑战”或“自我指导”部分,那么请全部完成。解决非指导性挑战将给你在没有结构化指导的情况下做事情的重要经验
  • 尽量少使用教程。在Firehose,我们经常指导学生如何继承某些gem或使用提供的文档进行操作。而不是简单地按照针对刚开始学习的人的教程中解释的说明进行操作,许多学生将遵循文档并将教程用作备份。请注意,文档将把你视为已经过了拐点的开发人员。在GitHub上轻松阅读和跟踪文档会让你在自己的工作中获得提升。
  • 注意要点,重复使用。学习如何做一些常见的事情,比如从头开始旋转应用程序,将新的应用程序推送到GitHub和Heroku,以及尽早构建数据库迁移。

推过拐点是很有挑战性的。一下是一些可以帮助你度过难关的建议:

  • 理解这是一个困难的过程,并且对自己放松。同时,设定现实的期望。你不能将你的“超人”(学习教程的速度)和你的“蜗牛”(自己学习东西的速度)相比较。记住,你学到了很多东西,但在这个阶段,你正在学习一种全新的技能,可以自己发现新事物。
  • 如果你在自信心上挣扎,要知道你的感觉是完全正常的。继续工作。如果你继续挣扎,试着和最近刚过拐点的人交谈。他们将能够与你所处的职位相关,并向你保证你所经历的只是暂时的。坚持工作,但不要过度劳累自己。在游戏的这个阶段,你要知道你每天最多只能工作6个小时。在精疲力竭的状态下工作只会把你花在建立上的时间延长到拐点。

在这个阶段获得自信的最好方法是通过任何怀疑来获得力量。你的情绪可能开始感觉像过山车。有时候,你会觉得自己像着火了,但在同一个问题上苦苦挣扎了15个小时后,感觉到极性相反是很常见的。

如果不知道某件事情会花费你5分钟或5小时,可能会让人沮丧,但是每次你完成并成功地实现一个新功能时,你所需要的一切都将是信心的冲刺。在没有任何帮助的情况下解决了一些困难的问题之后,你会沉迷于在你的舒适区之外建造东西的感觉。

最后,如何知道你什么时候通过了拐点

拐点过程的最后阶段是验收。承认软件开发是一个持续学习的过程。接受这种感觉,你已经成功地学会了一切,这意味着你应该开始考虑解决更复杂的问题。

加速你编程技能的关键相关推荐

  1. 解决不了bug先放着,这里有40条提升编程技能小妙招

    选自Medium 作者:Kesk 机器之心编译 参与:魔王 这 40 个小贴士,或许可以帮你提升编程技能. 如何提高编程技能?恐怕很多开发者思考过这个问题.最近,拥有将近 15 年开发经验的软件工程师 ...

  2. 全栈工程师15年经验分享:40个改变编程技能的小技巧

    白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 编程如何节省更多的时间,犯更少的错误? 最近,这样一份「心得」火了.这位名叫Kesk Noren的软件工程师在Medium上分享了一篇博文 ...

  3. 15年经验分享:40个改变编程技能的小技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法那些事 编程如何节省更多的时间,犯更少的错误 ...

  4. 40条提升编程技能的小妙招

    作者:Kesk, 翻译自:机器之心 如何提高编程技能?恐怕很多开发者思考过这个问题.最近,拥有将近 15 年开发经验的软件工程师 Kesk 写了一篇博客,列举了 40 条对其职业生涯有所帮助的事项. ...

  5. 15年程序员经验分享:40个改变你编程技能的小技巧!

    编程如何节省更多的时间,犯更少的错误? 最近,这样一份「心得」火了.这位名叫Kesk Noren的软件工程师在Medium上分享了一篇博文--「40 Tips that will change you ...

  6. 40个改变编程技能的小技巧

    40个改变编程技能的小技巧 1.将大块代码分解成小函数 2.今日事今日毕,如果没毕,就留到明天. 如果下班之前还没有解决的问题,那么你需要做的,就是关闭电脑,把它留到明天. 中途不要再想着问题了! 3 ...

  7. 提高python代码能力_解决不了bug先放着,这里有40条提升编程技能小妙招

    点击上方 "Python人工智能技术" 关注,星标或者置顶 22点24分准时推送,第一时间送达 来自:公众号 机器之心 | 编辑:真经君 Python人工智能技术(ID:coder ...

  8. 网络编程中的关键问题总结

    网络编程中的关键问题总结 总结下网络编程中关键的细节问题,包含连接建立.连接断开.消息到达.发送消息等等: 连接建立 包括服务端接受 (accept) 新连接和客户端成功发起 (connect) 连接 ...

  9. 你的编程技能是否与时俱进? TIOBE 4 月榜单出炉

    ‍‍‍‍ 作者 | 苏宓 出品 | CSDN(ID:CSDNnews) 一月一更的 TIOBE 榜单新鲜出炉,快来看看开发者最常用的编程工具都有哪些变化吧! 时隔 7 年,Objective-C  首 ...

最新文章

  1. tcpdump 命令的个常用选项:三
  2. 框架:Spring之Aware相关接口
  3. destoon 屏蔽会员组,让个人,游客不显示
  4. SSL 的 java 实现
  5. CSDN-markdown编辑器语法速查手册
  6. 上海音乐学院计算机考研难吗,上海音乐学院考研难吗?一般要什么水平才可以进入?...
  7. python web开发 网络编程 HTTP协议、Web服务器、WSGI接口
  8. Bootstrap 公布长期支持计划,Bootstrap 3 生命周期结束
  9. Apollo开发平台授权管理的使用
  10. vscode中如何拉取git代码_工具 | 手把手教你在VSCode中使用Git
  11. WEB-INF目录 与 META-INF目录的作用
  12. MySQL中boolean类型设置
  13. $(document).click() 在苹果手机上不能正常运行
  14. iOS开发之UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
  15. UIFont 字体设置
  16. python做考勤表_考勤表下载免费后怎么制作?
  17. lightGBM使用
  18. 数据分析之学术前沿分析 任务1:论文数据统计
  19. springboot启动报Whitelabel Error Page
  20. Windows安装Git cz (commitizen)

热门文章

  1. SingleStore数据库(mysql分布式)-装载TPCH数据
  2. mac 卸载 mysql_Mac OS X苹果系统中怎么将mysql完全卸载掉
  3. ad敷铜后还有部分飞线_AD被喷Knight直播保护/EDG阿布:绝大部分玩家无法成为选手 网友:奈特你太好了...
  4. OSX 安装MacTex Emacs+Auctex
  5. SVM模型应用(四)SVM模型的超参数选择
  6. String类型长度限制问题
  7. 编译型语言和脚本型语言的区别
  8. oracle oaf界面个性化,个性化EBS标准OAF页面(EO,+SQL全版本).doc
  9. 数学建模 典型相关分析Canonical Correlation analysis
  10. LeetCode二叉树系列——145.二叉树的后序遍历