如何提高自己的编程技能

当你学习编程时,这一刻所有的事情都改变了。在 Firehose,我们习惯称之为编码的拐点。在这个阶段之后,你作为开发人员的编程能力将大不相同,建立起编码的拐点是非常重要的,到达拐点也就意味着你不再需要别人手把手的帮助,这是一个非常重要的过程,但是如果你达不到这个拐点的话,那么你就很难提高编程技能。

在 Firehose,我们的目标不是教你使用 Ruby,如何开发应用程序,或者如何写单元测试,即使我们已经做了大量的工作,我们最主要的目标是帮助同学们加速走过拐点,提高他们遇到困难自己解决的能力。我们相信能够独立解决问题是一项非常重要的能力,而这种能力要比学习如何开发一个应用程序要重要得多。

起始阶段(严格编码 3 - 8周)

当你开始学习编程时,还有很多你不知道的技能。这些是特定领域的知识,比如包括:知道如何在 ruby 中编写循环或如何使用 Ruby on Rails 从数据库中提取某些东西。这些特定领域的知识是你构建应用程序的根本,也是你的”硬件”。

成为能自主解决问题的开发人员的第一步是学习如何完成特定任务。一旦你掌握了特定的任务,各个特定部分该如何结合在一起的思路将在你的脑海中浮现。随着时间的推移,你会开始理解这种模式,那么最初让你感觉到很困惑的东西将深入你的骨髓中,成为你的一种天性。

对初学者来说,最重要的技能是注重细节

在阅读文档或者教程时,密切注重细节是非常重要的,即使最小的错别字和拼写错误也会导致错误和 bug 的出现。看见一些错误刚开始会感觉非常困惑,但却是学习过程中一个很有用的步骤。在这个阶段处理这些错误消息和问题会教给你一个在安全的环境下的一项很重要的编程技能 : 注意细节

能够 Debug 错误消息是极其重要的。问题的事实是: 错误的消息也是编程的一部分,对于一个缺乏编程经验的开发者和一个很有经验的开发者来说都是相同的。唯一的不同就是,你处理了越来越多的问题后,你下一次解决问题所花的时间会越来越少,原因如下

  • 随着时间的推移,你会从中学到如何读取错误消息并且能够快速找出和这个问题相关的一些原因。你第一次看见一个错误后,你会花费一些时间去理解其真正的意思是什么,但这之后你会看到成百上千种问题,你会快速定位问题的原因并找出类似的解决办法。

  • 你应该从每次你解决的问题中学到一些东西,不要仅仅只解决了这个问题,要理解你编码过程中遇到的问题,通过从错误中学习,下次遇到相同的问题你会解决的越来越快。

  • 实际上,你可能一旦遇到问题都要向他人求助,这是很一个不好的习惯。随着时间推移,你要减少向他人请教的次数,你应该养成独立解决问题的习惯: 通过多次检查你的代码并向聪明的谷歌寻求帮助

在教程阶段,你将按照教程说明一步一步来。一开始,你会发现遵循教程很有挑战性并且经常出现错误消息。随着时间的流逝,你会增强调试错误的能力并更好地关注细节,你将能够更快地取得进步。当你完成教程阶段时,你会发现你能够以更快的速度编写代码。

在这一点上,有些人会感到自信 - 就像小白任何力量训练都不做,上来直接做 20kg 的卧推一样 - 很容易就陷入深渊中。其他学生将寻找更多的教程,试图获得更多特定领域的知识,以寻求让自己充分理解。不幸的是,教程只会带你到这里了,真正的自信是在教程中找不到的。真正的信心来自于解决你不知道如何解决的困难,以及自己发现解决方案。

编程的潜规则

你永远不会知道解决所有问题所需要知道的一切。你可能设想通过自己终身学习找出所有的解决办法来摆平这个问题,这种想法只存在于想象中,因为它永远不会发生。

编程是一种终生学习体验。经验丰富的软件工程师善于找到尚未解决问题的解决方案,因为这给了他们更多学习新知识的机会。如果你发现自己正在等待你终于知道关于编码的一切的时候,那么我会告诉你:这一刻永远不会到来。这是一件很棒的事情。

你会进入到下一段旅程中,当你……

  • 你已经看到足够多的错误消息并且你不会再感到惊讶。相反,你知道它们的原因是什么并且能够在代码中定位出问题出现的位置。
  • 你是谷歌搜索方面的专业人士。当你正在努力添加一项功能时遇到错误,你知道如何用 google 搜索错误信息时。
  • 你可以引用你在应用程序其他部分编写的代码,而不是每次都进行新的编码。也就是提高可用性 ctrl c + ctrl v

拐点(2 - 4 周,心态放平)

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

在某些时候,你会觉得你还没有准备好应对这一阶段,你想返回第一阶段并建立一个明确的工作大纲。不要成为这种心态的牺牲品。

我分析下你会感到沮丧的原因是

在拐点阶段,你编码的时间要比之前的阶段慢至少 10 - 20 倍。

在这个阶段你会开始怀疑你自己,质问你自己是否是一个合格的程序员。在这个阶段,不安和怀疑经常会出现。

尽管你觉得自己可能在慢慢的学习并且做一些事情,但实际上你正在做最最重要的事情。当你想在某一个特定领域有所助力的话,你正在学习的一切都是关于程序性的知识。

程序性知识是指自己在整个过程中不知道的能力。当你需要实现一个新的功能,你应该做什么类型的 google 搜索?此时此刻,当涉及到许多你想要完成的事情时你会感觉到无比压抑。你必须自己学会找到光的方向,因为你永远不会知道所有要知道的事情,所以你需要自学能够解决手头的问题。

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

在你余生的每一天都要超出你的极限

一些软件工程师一旦找到自己的立足点就会留在舒适区内。这些类型的程序员被称为维护型程序员 - 他们不是你想要靠齐的程序员。相反,你应该每天努力超出你的极限。程序员辞职的最大原因应该是: “因为我已经解决了所有有趣的问题,所以它不再具有挑战性了。”

你应该寻找超出你现有技能解决不了的问题,而不是把你的项目拉到舒适区内。这是建立和提升你的技能的唯一方法。

在拐点处,你可能会听到这句话: “我知道我已经走到了尽头,这就是我想要去的舒适区。”

##在web开发中,实际上有两个拐点将汇聚在一起

web 开发的拐点 是你能够构建任何你想要的数据库驱动的应用程序的时候。这意味着你能够构建具有许多页面的web应用程序,这些页面的存储和检索来自数据库信息。web 开发者把它称为:”掌握 CRUD”。在此阶段,你还应该能够通过遵循 GitHub 或博客文章中提供的文档与任何第三方库(例如 ruby gem)集成。

算法和数据结构的拐点 不是那么一个浅显的拐点,但实际上却更重要。除了掌握编程的基础知识和掌握解决复杂编码的挑战之外,掌握了这一点的人将掌握他们正在使用的编程语言。

征服了算法和数据结构的人会像下面这样:

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

简单来讲,一旦你通过了这些拐点,你将了解数据操作并了解你编写代码的性能如何。传统计算机科学学位专注于让学生超越算法和数据结构的拐点。许多大学会教授它们并没有在实际企业应用中使用的语言,比如 Scheme,Racket 或 LISP 语言。

在大多数技术面试中,面试官会认定你已经通过了 web 拐点,因为 web 拐点很容易通过,并且会将问题聚焦在数据结构和算法中。面试通常会集中我们上面已经提到过的主题:排序算法,反转链表,以及使用堆栈,队列和树。

一旦开发人员通过了Web开发拐点和算法以及数据结构拐点,它们就是大神了

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

拐点的后果

当你第一次听说时,拐点最大的后果可能有点违背常理。深呼吸 :在学习编码时,特定领域的知识在宏观概念中并不重要。对。我不是在开玩笑 - 这根本不重要。一旦你通过拐点,这些概念将只用一到两周的教程,甚至几天即可流畅地翻译!

最重要的是

  • 你对 web 开发框架有扎实的基础
  • 你可以很好地掌握在任何编程语言中编写复杂算法的代码

招聘经理希望开发人员有扎实的 Web 开发和算法技能。

当我在 PayPal 工作时,我的团队聘请了一位没有 Rails 经验的高级 Rails 开发人员 - 他在 Python、LISP、和 Perl 上编写了很多代码。几天之内,他已经发挥了巨大的作用,并在几周之内发挥了巨大的影响。他很快就成为了技术团队的领导者,并且是我参与过最好的招聘决策之一。

不要大惊小怪。很多人可能都会说:”AngularJS 这些天很火,”“JavaScript 使用比率在上升”,或者说”最新的时尚是…” 我的回答是: “所以呢?” 当你学会如何编程时,你唯一的目标就是找到拐点并消灭它。一旦你这样做了,那么学习一项新技能根本不适合一件艰巨的任务。

要自力更生。能够在没有结构化指导的情况下学习新的编码技能意味着你不在需要等待任何人帮助你。这意味着,对于你所需要学习的大部分内容,你只需要从网上查询并关注你所想要了解的内容即可。

这并不意味着你立即“知道”所有事情,但只是现在所有东西都“可以解决”,所以从本质上说,你就是大神。

你在拐点需要培养的技能

作为软件工程师,最好的材料是那些你之前写过的代码。当你完全知道你写的代码时,你就不需要把所有的代码都记在你的 “内存” 中。这意味着当你需要开发一个新功能的时候你就会问自己: “我之前做过类似的事情吗?”如果你的回答是肯定的,那么请重新 view 代码。重新解释代码的含义并询问自己:”我可以使用相同的办法吗?”

视频很难解释特定领域的知识,因为它们需要花费很长时间才能观看。一旦你经历过这样的操作,在 GitHub 中打开代码可能需要不到一分钟的时间,复制并粘贴代码到你的项目中。视频可能会花费你10 - 30 分钟反复观看。

使用一些方法尽可能有效的通过拐点

学习编码最重要的事莫过于尽快通过拐点了,你应该让自己尽可能顺利地完成这个过程。你要尽可能的在教学阶段就开始准备,并在这段时间内保持一个正确的心态。

在教程阶段,多花些时间浏览材料,并在此过程中给自己带来一些挑战性的问题。

  • 对于书中的每一章节,在理解书中意思之后尝试做一些范围外的事情,如果你看的教程或者书籍中有课后训练部分或挑战,一定要完成这些。独立解决这些问题会对于你的提高非常有帮助。
  • 尝试尽可能少的使用教程 在 Firehose,我们经常让学生整合现有的资源或文档进行做事。许多学生将遵循文档并使用教程作为后备方案,而不是简单地按照教程中的解释操作。 请注意,文档会将你视为已经通过拐点的开发人员。 在GitHub上阅读和阅读文档时,你可以自行学习。
  • 关注重点并且重复使用这些重点。学习如何做一些常见的事情比如从头开始编写应用程序,把它推送至. GitHub 或者 Heroku,尽早的做数据库的迁移等。

推动拐点可能更具挑战性。这里有一些指导意见以帮助你完成他

  • 理解这是一个艰难的过程并且不要紧张,轻松应对。此外,设置你的期望值,你不能把”超人”级别的浏览速度和你自己学习的”蜗牛”速度进行比较。请记住,你正在学习很多东西,在这个阶段,你正在学习一种新的技能,可以自己搞清楚新的知识。
  • 如果你在自信心中挣扎,要知道你的感觉是完全正常的。一直工作。如果你的自信心仍然有问题的话,试着去和最近通过拐点的人进行交流。他们能和你建立联系并且告诉你现在所遇到的困难只是暂时的。持续工作,但不要过度劳累。在这个阶段要知道你每天最多只能工作6小时左右。在疲惫不堪的状态下工作只会延长你到达拐点的时间。

在这个阶段能提升你信心的方法是克服你现有的困难。你的情绪可能像过山车一样。有时你会觉得自己很生气,但是在过了15个小时之后,你会明显感觉到情绪的两极分化。

如果你不知道某件事情是否会花费你5分钟或5小时,这可能会让你感到很沮丧,但是每次你完成并成功实现一个新功能时,你会建立一个新的自信心。在没有任何帮助的情况下解决了一些困难的问题之后,你会迷恋上在舒适区外建造东西的感觉。

如何知道你通过了拐点

拐点最后的阶段是接受。接受软件开发是一个不断学习的过程。接受你成功学到东西的感觉意味着你准备好解决更复杂的问题了。

Java Geek Tech wechat
欢迎订阅 Java 极客技术,这里分享关于 Java 的一切。