加速编程技能增长的方法
原文作者是Firehose的联合创始人和首席技术官. Firehose 一个网络项目相关的培训机构.
- 原文地址: The Key To Accelerating Your Coding Skills
- 译者: ck
在你学习编程时, 会有那么一刻, 所有事情都开始发生改变. 在Firehose, 我们称他为编程的拐点. 过了这个阶段, 你作为开发者的工作方式将会明显不一样. 积累到转折点是一个在编程方面自给自足的过程, 到了转折点你不再需要辅助. 这可能是一个令人沮丧的过程, 但一旦过去了, 这将是一个难以置信的成长.
在Firehose, 我们的目标不只是教你Ruby, 怎么构造web 应用, 或者写测试. 我们会教这些以及更多的内容. 我们的主要目标是使学生加速通过这个转折点. 这样他们能够解决他们碰到的任何问题. 我们认为能够自己解决问题是一个无价的技能, 并且这个技能会帮你走的比只是开发几个应用要远得多.
辅导阶段(3-8周时间的认真编程)
当你开始编程时, 会有很多知识是不知道的. 它们是特定领域知识. 例如: 使用ruby 编写一个循环, 或者使用Ruby on Rails 从数据库中提取一些数据. 特定领域知识包含和指定编程环境对应的协议.
成长为一个自给自足的开发者的第一步是学会解决特定的任务. 掌握了这些特定任务, 成长就是一件水到渠成的事. 随着时间的推进, 你会了解模式, 最终那些在开始令人困惑并且分散的内容会变成了第二本能.
刚起步阶段, 注意细节非常重要
学习那些文档或者教材等材料, 注意细节很重要. 最小的编排错误或者拼写错误也可能导致错误消息或者bugs. 看到错误消息首先是一个令人沮丧的事情, 但这也是一个学习过程中重要的一步. 这个阶段在一个安全的环境中处理错误消息和问题会教你一个重要的编程技能: 严谨.
调试错误信息非常重要. 事实上, 错误信息只是编程过程的一部分: 是否有经验看到的错误消息都是类似的.不同的是, 有经验时, 处理的错误消息时会花费更少的时间. 原因如下:
- 随着时间的推移, 你将学会阅读错误信息并且快速提取问题的细节.第一次看到一个错误信息, 会花费你一段时间去确定那是什么意思. 但当你看到过上百条错误了信息后(你一定会看到上百条错误消息!), 你能够指出问题的位置和解决该问题的相关信息.
- 你会从每个你解决的问题中学到新东西. 不要只是修复错误并且关闭它, 理解修复的代码出了什么错误. 从每个错误中学习. 如果下次碰到相同的错误, 你能够快速的修复它.
- 刚开始, 你可能会为看到的每个错误信息去求助. 随着时间的推进, 你会学会通过复核代码而减少发问的次数, 你会学会智能谷歌搜索.
在辅导阶段, 你会跟着教材学习, 你会发现跟着教材学习很具有挑战性, 错误消息经常出现. 随着时间推移, 你会学会调试错误, 并且注意到一些细节. 你也能快速的编程. 当你结束了辅导阶段, 你会注意到你能以更快地速度编写代码.
在这一点上, 一些人感到踌躇满志--他们要抛弃训练的轮子, 不需要结构化教材而构建一些东西, 他们很高兴往深处发展. 另外一些学生要寻找更多教材, 获取更多特定领域知识以达到"全部理解". 不幸的是, 教材只能带领到这儿, 真正的自信不是从教材或手册中获得. 真正的自信是从开始没有头绪, 直到自己解决的问题中获取.
程序设计的肮脏小秘密是:
你不会知道所有问题的答案. 开始征程, 你可能希望你最终能学会所有需要的知识, 然后高枕无忧. 这件事永远不会发生.
编程是一个终生学习的事情. 有经验的软件工程师试图寻找未解决的问题答案, 那会给他们更多的学习机会. 如果你在等待那样一个时刻: 你知道所有关于编程的事情. 请记住: "那一天永远不会到来. 这是一件很美妙的事".
当你准备进入下一个阶段时:
- 你已经看到了足够的错误消息, 它们不再能惊吓到你. 相反地, 你知道它们是什么意思并且所在代码的位置.
- 你赞成通过谷歌查找答案. 当你想添加一个功能或者看到一个令人疑惑的错误消息时, 你知道怎么找到相关的错误信息.
- 你能够使用相同模式引用你在当前应用写的其他代码, 而不是一点一点的摸索.
转折点(2-4周的正确心态)
转折点是学习编程的过程中最让人沮丧的阶段之一, 但总的来说, 这是非常重要的阶段, 它是你不再使用教材到自己解决没有现成答案的问题的转折点.
在某些时候, 你会感觉你没有准备好进入新阶段, 并且你想再做那些已经有现成框架的东西. 不要被这种心态困扰, 真正使你沮丧的原因是:在拐点阶段, 你的编码速度会比以前慢上10-20倍.
你开始怀疑自己是否有能力成为一个真正的程序员. 在这个阶段, 不安全感和自我怀疑普遍存在.
尽管你感觉你学习和干完一件事情非常慢. 实际上, 你在完成一件非常重要的事情. 当你的特定领域知识足够丰富时, 你所学的都是过程性知识.
过程性知识就是教会你学习不懂的知识的能力. 当你想要实现一个新功能时, 该怎么进行谷歌搜索呢? 在你想要完成很多事的时间点上, 你会感觉你处在黑暗中. 学着自己去寻找光明至关重要. 因为你永远都不能知道所有的事情, 所以你需要教会自己解决手边的事情.
大多数人都不知道, 为了学会编程, 你需要学会特定领域知识和过程性知识.
在生命中剩下的时间内, 你要不断超越自己的极限
一些软件工程师找到立足点后就停留在了他们的舒适区. 这种程序员就是众所周知的养生性程序员--他们不是你努力的方向. 相反地, 你每天都要扩展自己的知识领域. 程序员离职的最经常原因: "我解决完了所有有趣的问题, 它不再具有挑战性".
而不是将你的程序工程拉入你的舒适区, 你要试着寻找自己技能领域外的问题. 这是唯一能够建立和扩展你的技能的路.
用一个过了转折点的Firehose学生的话就是:"我还是觉得我处在深渊中! 我只是知道了那是我将要去的地方!".
在Web开发中, 两个拐点可能一起到来
web开发的转折点是: 你可以开发出你想要的数据库驱动的应用程序. 这意味着能够开发一个包含很多页面, 并且能够从数据库中存储和查询数据的web应用. Web工程师说这是"掌握了CRUD". 这个阶段, 你能够根据github或者博客文章集成第三方库.
算法和数据结构是一个不那么明显, 但很重要的转折点. 能突破这个点的人就能掌握他所使用的编程知识. 除了掌握基础的编码知识, 也对解决复杂的问题有很深的造诣.
能够跨过算法和数据结构转折点的人能够:
- 写排序算法
- 实现和逆序 linked lists.
- 理解并写出利用stack, queues, trees的程序
- 写出使用递归和迭代的计算机程序
一旦开发者通过了web开发和算法与数据结构的转折点, 他们就掌握了通往编程王国的钥匙.
开发者能够解决这两种问题的交叉问题: 需要在上下文中构建复杂算法的高级web应用. 这是专业的web开发者每天要做的事情.
通过拐点后
当你第一次听到通过转折点后的结果时, 可能有点违反知觉. 请深呼吸:学习编程时, 特定领域知识对大局不重要.
是的. 我不开玩笑-它对大局影响确实很小. 当你通过转折点后, 领域知识之间只用一到两周就可以迅速转换, 甚至只用几天.
最终真正重要的事情是:
- 你扎实的掌握了一个网络开发框架
- 你可以使用不同的语言编写复杂的算法代码.
招聘经理希望开发者有扎实的网络开发和算法技能
我在PayPal工作时, 我的团队聘请了一个高级Rails开发工程师, 他没有Rails的开发经验-只使用过Python,LISP,和Perl. 两天时间, 他给了我们很大影响.几周后, 就有巨大的影响. 他快速的变为技术团队负责人. 那是我参与过的最好的招聘决策之一.
不要拼汗水. 很多人可能会说"AngularJs 这些天很火""javascript排名在增长""最新的流行是...". 我的回答是:"然后呢?".当你学会编程时, 你的唯一目标应该是找到转折点并且战胜它. 一旦你能做到, 学习新的流行趋势就不再是一个难题.
要学会自力更生.能够不使用结构化指导而自学新的编程技术意味着你不再需要等待别人的帮助.也就是很多你需要学习的东西都可以通过网上搜索和阅读相关材料来完成.
这也并不意味着你要知道所有的事情, 只是所有问题都是可以解决的. 事实上, 没有事情能够阻挡你.
在转折点你要学会的技能
作为软件开发者, 最好的参考材料是你写过的类似代码. 当你足够了解你写过的代码, 没有必要把他们全部记下来. 这就是说当你开发一个新功能时要问自己的问题是:"我以前是否做过类似的东西么". 如果答案是"yes", 重新浏览代码并且逐行阅读. 给自己解释代码能做什么并且问自己"我能用相同的方法么".
视频对特定领域的知识解释的很糟糕, 他们需要花费大量的时间观看. 当要整合Google Maps API时, 如果你有做过的经验, 只需要不到一分钟时间打开GitHub, 复制代码, 粘贴到你的项目上. 另一方面, 视频需要观看10-30分钟.
通过拐点的高效策略
因为通过转折点是学习编程中最重要的一部分, 你需要使自己尽可能平滑的通过拐点. 这就意味着你需要在辅导阶段开始做准备, 并且在这段时间保持正确的心态.
在辅导阶段, 在使用教材的过程中适当停留, 并且独自挑战碰到的问题
- 对于每一节课, 做出些超出教材范围的事. 如果你用的教材有"challenges"或者"self-directed", 请全部做完. 做那些没有指导的挑战会给你很重要的解决没有指导的问题的经验.
- 尽可能的少使用教材. 在Firehose, 我们引导学生整合指定的gems, 使用提供的文档做一些事情. 而不是简单跟随为初学者准备的教材的指令, 很多学生使用文档而将教材作为后援. 请注意: 那些文档会将你作为一个通过拐点的开发者. 自己阅读Github上的文档会使您大有裨益.
- 关注本质并且重复运用. 了解如何执行常见操作, 将新开发的app推送到GitHub和Heroku, 以及尽早做一个数据库迁移.
突破拐点很具有挑战性.突破拐点的建议:
- 请理解这个过程很艰难, 但要放松自己. 另外, 设定切合实际的目标. 你不能拿超人级别学习教材的速度和自己的蜗牛级别的学习速度进行比较. 请记住:你要学习的内容很多, 但当前阶段, 你要学会一种自己解决新问题的技能.
- 如果你很自信并且努力. 请相信自己的感觉, 继续工作. 如果你继续努力, 试着和刚走过转折点的人聊天. 他们能体会到你的境遇并且告诉你你所经历的只是暂时的. 始终如一的工作, 但不要过度劳累. 在这个阶段, 一天最多学习6个小时. 疲惫状态下的工作只会延长你通过转折点的时间
在这个时期获取自信的方法是战胜你的所有怀疑.你的情绪开始会像一个过山车. 有时, 你会感觉你在火上煎熬, 在相同的问题上经过15分钟努力后, 可能会有相反的感觉. 这很正常.
解决一个问题需要花费5分钟或者5个小时会让你感觉很沮丧. 但每次成功实现一个新功能, 自信爆棚的感觉会是一种极大的满足. 没有其他帮助而解决一个困难的问题后, 你会沉迷于在舒适区之外创建新东西的感觉.
怎么知道你已经通过了转折点
转折点的最后一个步骤是接受. 接收软件开发是一个不断学习的过程. 接受你成功的学会了所有东西的感觉仅仅是是你需要开始思考更复杂的问题了.
你是否有经过转折点的经验? 分享这篇文章并且和朋友们谈论他--你会吃惊于有很多朋友已经到达或者超越了这个时刻.
如果有空, 请尽可能阅读原文并翻译它. 你会吃惊于自己的能力的