提升 Coding 能力的关键
The Key to Accelerating Your Coding Skills - KEN MAZAIKA
作者的个人主页:https://kenmazaika.com/about/
作者在这篇文章中说明了快速提升编程能力的关键点。
1 起步阶段
- 学习领域相关知识(
domain-specific knowledge
),比如用 Ruby怎么写循环,用代码从数据库读取特定数据, 这方面的知识往往与具体的编程环境相关 - 要成为一个自学自足开发者的第一步就是能够完成具体的任务。
- 对初学者来说,最重要的技能是能够关注细节,一是能够读懂错误信息,能够
Debug error message
, 知道发生了什么,二是能够从每一个你犯的错误中去学习,当下次再遇到的时候就能够快速的解决 - 善用 Google 进行搜索
你永远不可能知道所有的知识来解决所有的问题,要保持终生学习的态度
当下面这些情形发生的时候,说明你已经度过起步阶段进入下一阶段了:
- 当你遇到很多错误信息时你已经不在像开始时那样害怕,反而能够知道怎么去解决他们
- 当你十分擅长通过搜索引擎来寻找解决方案
- 当你能够从曾经写过的代码中来学习,而不是从头开始一步一步的重新来过
2 转折点
这个阶段称为The Inflection Point
, 虽然只是整个学习过程的一部分,但却是最重要的一个阶段,因为在这个阶段你将要面对的是那些没有现成答案的问题。
很多时候你会觉得自己并没有准备好,而且倾向于去做一些基础性的工作,比如一些Get started
工作。这个阶段你甚至会怀疑自己是不是真的适合做一名开发人员。一个很重要的原因是:
During the inflection phase, you will be coding 10-20 times SLOWER than in the previous phase.
在这个转折点上,你的编码速度将会比入门时慢10到20倍
尽管在感觉上你会觉得自己进步很慢,甚至自我怀疑,但是实际上,你其实在那些最重要的事情上取得进步。
这里作者引出了相对于domain-specific knowledge
的另一种知识:procedural knowledge
Procedural knowledge is the ability to teach yourself what you don’t know along the way.
简单来说就是在学习过程中如何自学自己不知道的东西的能力。比如你要实现一个新的功能,你该如何开始,如何设计,如何实现?
对于开发者来说,domain-specific knowledge
和precedural knowledge
同样重要。
作者给出了对开发者的中肯建议:
For the rest of your life, go outside your limits every single day.
对于很多工程师来说,他们一旦找到自己的舒适区就会裹足不前,他们大多数以维护者的身份出现。而你应该追寻的是那些每天都在寻找突破自己能力限制的人,尝试去解决那些在你技术栈之外的问题,以此来扩展你的技能。
3 两个拐点
The web development inflection point
你有能力构建任何数据库驱动的系统 ,我们通常来说叫掌握了CRUD
The algorithm and data structures inflection point
算法和数据结构,掌握数据结构和算法意味着掌握了某一门编程语言的基本知识,以及操纵数据和能够理解一些性能上的取舍
4 关于拐点的结论
When learning to code,domain-specific knowledge doesn’t matter in the grand scheme of things.
当学习编码时,domain-specific knowleage
其实并没那么重要,真正重要的是:
- 你对 web 开发框架有一个扎实的理解
- 能够掌握用任何一种你所熟悉的语言写出复杂算法的实现
这里作者用各大厂为什么如此看重算法和数据结构来举例说明,真正重要的东西其实就是这2样。
5 在拐点你将学会的
对于开发者来说,最好的参考就是你曾经写过的类似的代码,当你完全理解了你所写的东西,你根本不用去记他们,所以每次开发一个新的功能时请先反问一下自己 :“我是不是写过类似的代码?”如果是,请翻出以前的代码并逐行解释给自己,现在是否能够重用?
6 高效通过拐点的策略
During the tutorial phase, take breaks from going over structured material and give yourself challenge problems along the way.
- try to do something that is outside the scope of the tutorial - 尽量做一些超出入门教程的尝试
- Try to use tutorials as little as possible - 少使用辅导教程,多参考 GitHub 文档
- Focus on the essentials and use repetition - 刻意练习,重复练习
通过拐点是一件很有挑战性的事,理解这些能够帮助你更好的学习:
- 明白这个阶段本身就是困难和不那么轻松的,
- 明白在这个阶段其实是在跟你自己的信心做斗争,你的感受其实很常见,想想那些比你牛的人
- 持续的努力,但是不要过度透支自己
7 如何知道自己已经通过拐点
The final stage of the inflection point process is acceptance. Acceptance that software
development is a process of continuous learning.
终于明白编程其实是不断持续的学习,去解决更为复杂的问题。
学习是为了找到方法,而不是问题的答案