提高编程水平的秘籍

总览

    在编程学习曲线中,存在一个拐点,在拐点之后,你会发现一切都与之前不同,比起向其他人借力,自我驱动是更为有效的,通往拐点的学习曲线十分陡峭,但是一旦成功通过,会大大增强你的编程能力。
    学习编程的目的并不是学一门语言、如何搭建一个网站、也不是怎么写测试用例,学习编程的目标是帮助你更快的到达拐点,让你拥有自己去解决问题的能力。

练习阶段(3-8周的认真coding)

    当开始学习编程时,你不了解的内容会很多,这些内容一般都是“特定领域的知识”,比如怎么用ruby写循环,怎么用ruby从数据库中读取数据,它们与特定的编程环境相关。
    成为一个自驱动的开发者的第一步就是去学习怎么去完成特定的任务,在完成这些特定任务的时候,会慢慢的培养你的大局观。经过一段时间,你最终会意识到这些特定任务背后统一的模式,那些你之前觉得疑惑和陌生的东西会变得很自然。

对初学者来说,学习知识最重要的是关注细节

    当你看文档或者教程的时候,关注细节是很重要的,很小的拼写错误都会造成bug,但看错误信息可能会让你感觉一头雾水。学习处理error是特别重要的一步,在处理error和problem的过程中,你会学会一项重要的技能——面向细节编程。
    对错误信息进行Debug是及其重要的。事实上,error也是编程的一部分,菜鸟开发和大神开发都会写bug,区别只是有经验的人会用更少时间来修复。

  • 通过经验的积累,你会慢慢的知道怎么去从error中提炼重要信息,定位出问题。你第一次遇到一个错误的时候,可能需要很长时间去定位究竟发生了什么,但是你看过几百次这个错误之后,你可能一眼就能知道问题出在哪儿,然后迅速修复掉。
  • 你需要从你解决的每个问题中有所收获。不要只是想着解决完问题就结束,尽量去理解为什么你之前写的代码会出现问题,通过这一点,你也可以加快下次你遇到同样问题时的解决速度。
  • 在一开始,你每次遇到问题都得求助,随着解决问题变多,你要学着在问问题前再次检查自己的代码,然后再去Google

    在这个练习阶段,遇到的每个问题对你来说都可能是挑战,随着时间的推移,你会学会怎么debug,并且会更关注细节,很快取得进步,结束了这一阶段的时候,你会发现你写代码更快更好。
    此外,在这个阶段,一些人会相当自信,他们觉得他们已经可以不按教程、规则来搞事情,并且深入一些细节中去。还有一些人会学习更多的教程,试着去在特定的领域形成更大的全局观。很遗憾,教程只能帮你到这,真正的自信不来源于教程,而是来源于独立尝试解决一些疑难问题并获得了成功。

残酷的秘密

    你永远也不可能学会解决问题需要的一切知识。你曾经可能希望能学完所有的知识然后再开始编程,这是不存在的。编程是个伴随你终身的事情,有经验的工程师会努力去解决一些从来没有碰到过的问题并从中学习很多新的内容。等着学会一切之后再开始编程的旅程,就像是在等太阳从西边升起。

何时进入下一阶段

  • 你已经看过足够多的error message ,并且知道它的意思是什么,该从哪一段代码排查
  • 你已经是Google查询问题的专家,当你要使用什么新东西或者查询错误信息的时候,你知道怎么去Google你需要的信息
  • 你可以自如引用自己写过的代码,而不是每次都一步一步的按照说明来写。

拐点(2-4周,保持好心态)

    拐点是学习写代码的过程中最难受的阶段之一,这个阶段你逐步脱离教程,开始解决一些没有答案的问题。
    在一些时候,你可能会觉得自己没有准备好进入这一阶段,十分沮丧,甚至想回到上个跟着教程去做的阶段,原因是:

在拐点的阶段,你的编程速度会比上个阶段慢10-20倍

    你会开始怀疑自己是不是能做一个程序员,在这个阶段的不安和怀疑都是正常的。尽管你感觉自己学习和写代码的速度都很慢,但事实上,你正在做最重要的事情,当你对这个领域变得更为熟悉时,你学习的一切都可以与编程相关联。
    编程能力的本质实际上是去自学一些未知东西的能力。当你需要去实现一个新feature时,你会怎么用Google搜索呢?当你发现要学习的东西很多,会觉得深处黑暗之中,如何在这黑暗中找到通往光明的路是至关重要的,你要学会怎么去自我学习,找到解决办法。

大多数人都没意识到,学习编程除了要学习特定领域知识,还需要学习编程过程中的知识。

在剩余的生命中,不断超越极限。

    一些软件工程师在找到立足之地之后,就安于现状。这些程序员是维护类程序员,你应该避免成为他们中的一员,每天都尝试超越自己的极限。程序员最常见的辞职理由就是:这份工作没有挑战性,所有有趣的问题我都解决了。
    与其在舒适区编程,不如选择去探索一些你能力之外的问题,这是提升能力,扩展技能唯一的方式。

“虽然我现在还是觉得太难了,但是这是我应该做的事,所以我十分快乐”

web开发的两个拐点

    web开发的拐点:这个拐点是你可以自如的构建任何你想要的数据驱动的应用,这个应用可以有很多页面并且可以从数据库中读取数据,也就是我们说的CRUD,在这个阶段,你可以轻松的通过github等网站的指导引入一个第三方库。
    算法和数据结构的拐点,这个拐点更为深层,掌握这个拐点的人,精通他们所使用的编程语言,此外对于复杂问题也有深入的了解,比如:

  • 实现排序算法
  • 实现和翻转链表
  • 理解并且可以写包含stack、queue、tree的程序
  • 可以用递归或者迭代来解决问题

    你到达这个拐点时,你会掌握数据的操作,并且理解代码中为何选择某种实现方式以及对性能有什么影响。传统的计算机科学学科重视让学生们度过这个拐点,很多大学会选择一些工业中不使用的语言,比如LISP,Racket等。
    在许多面试中,面试官会默认你已经掌握了基本的web开发能力,然后着重于面试你的数据结构和算法能力,主要会问到的就是上面提到的排序算法、反转链表、使用stack、queue、tree等。

当一个开发者度过了web开发和算法和数据结构的拐点之后,他们就拿到了成为程序世界国王的钥匙

    这些开发人员将能够解决与两者相交的挑战:需要在高级Web应用程序的上下文中构建的复杂算法,这也是专业Web开发人员工作的核心。

拐点后的结果

    到达拐点的最终结果听起来可能会有点违反直觉,请先深呼吸一下:

当学习编程时,特定领域的知识对于最终的结果可能并不重要。

    是的,这不是开玩笑,就是特定领域的知识没那么重要。当你通过拐点之后,之前需要一两周才能理解的教程可能只需要一两天。

    最为重要的其实是:

  • 你对web的开发框架有扎实的理解
  • 你对写复杂算法有扎实的功底

雇主想要的是拥有扎实web功底和算法技巧的员工

    当我在PayPal工作的时候,我们团队曾经雇用了一个没有任何Rail编程经验的资深开发,他之前只用过python、LISP、Perl。没用几天,他就熟悉了一切,几周就做出非常漂亮的东西,非常快的成为了技术负责人。

  • 不要疲于追逐热点 许多人都说过这样的话:AngularJS最近特别火、JavaScript 也在飞速发展。。。。我的回答一般都是“这又如何?”在学习编程的时候,最重要的是找到拐点并且顺利通过,当你完成这一目标的时候,学习任何新的语言都不是一件困难的事情。
  • 自力更生。当你在没有教程的情况下也可以学习新的编程知识时,就意味着你不需要任何人的帮助了,也就意味着对于你想要学习的内容,你可以通过在网上搜索的方式来找到自己需要的资料并进行学习。

    这不意味着你已经知道了所有的知识,只是你知道了通往那些知识的道路,只要你不停下,你总会到达的。

拐点中学到的技能

    作为软件开发者,最好的资料就是你曾经编写的类似代码。当你完全理解了你写的代码的时候,你不需要物理存储,就记在脑子里就可以。当你开发一个新的feature的时候,你应该先问自己,我之前开发过类似的东西吗?如果回答是yes,那就从你的大脑中认真过一下之前的代码,然后认真思考一下,我可以用之前的解决方法来解决现在的问题吗?

    视频不是一个学习特定领域知识的好办法,因为它太长了。比如说想用Google Map API,最快的方式就是去GitHub上搜索一下代码,粘贴到你的项目中,这就需要几分钟,视频则需要20-30分钟来看。

如何快速有效的通过拐点?

    因为通过拐点是学习编程中最终要的部分,所以你应该更为平稳的通过这个过程,在开始的阶段就应该保持正确的心态

  • 在教程的阶段,不要拘泥于教程,而是去研究一些有挑战的问题。在每节课程中,做一些教程之外的事情,比如一些挑战模块、自学模块。解决一些教程之外的问题可以帮助你不断提高自己在无教程时解决问题的能力。
  • 尽可能的少使用教程,不是简单的跟着教程走,而是去想着把教程的内容组合起来。文档面对的受众是已经通过拐点的人,你可以去github上看看相关的信息,或许对你帮助更大。
  • 专注于基本内容,并且不断重复,比如如何分解程序,如何构建数据库等。

    通过拐点是十分有挑战的,这有一些关键点:

  • 明白这个过程是十分困难的,对自己不要太苛刻。设定合理的期望,不要把自己蜗牛的学习速度和超人的速度相比较。要时刻铭记,自己已经学习到很多了,你这个阶段主要学习的内容是如何去独自学习新的知识。
  • 如果你对自己产生怀疑,要知道这个是十分普遍的。要继续努力,你可以尝试和通过拐点的人聊聊,他们会告诉你这个阶段是正常的,并且会很快过去。始终如一的学习,但不要太劳累,在这个期间,你每天最多也就六小时的有效产出,过度劳累只会增加你度过拐点需要的时间。
  • 在这个阶段获得信心的最好办法就是解决掉自己遇到的一切疑问。你的情绪可能会大起大落,当遇到问题时你可能会十分着急,但是当已经花费15小时去解决它的时候,你就会感觉到十分平静。你可能花费五分钟,也可能五小时去解决问题还没有思路,你会很沮丧,但当你解决它的时候,你就会获得自信。不断靠自己的能力解决问题,你会越来越享受这个过程。

怎么知道啥时候度过了拐点?

    拐点的最后阶段是接受。接受编程是一个终身学习事情,接受当你学习到某个知识的时候也意味着你要开始思考更为复杂的问题。

原文

原文http://blog.thefirehoseproject.com/posts/learn-to-code-and-be-self-reliant/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值