10个10倍提升编程技能的有用技巧

2020 年 5 月 17 日 InfoQ
作者 | Eric Elliott
译者 | 杨志昂
策划 | 李俊辰
一旦选择了软件开发这一职业,就注定选择了一条终身学习的道路。即使是专业的软件开发人员,仍然需要知道如何学习编程。著名软件编程导师 Eric Elliott 在本文中分享了让编程技能提高 10 倍的 10 个有用技巧。

软件开发是一项回报颇丰、价值极高的工作技能。无论你生活在世界何处,软件开发都很容易进行远程工作,而且只要你足够优秀,你就有资格获得一份年薪从 10 万到 20 多万美元不等的高薪工作。

https://medium.com/javascript-scene/what-to-pay-javascript-developers-in-2020-2292eb346f3b

一些有顶级收入的 JavaScript 开发人员年收入甚至接近 50 万美元。但要想有资格获取如此丰厚的薪水,你必须在自己所从事的事业上做到无可挑剔的绝对优秀。

即使你已经是一个专业的软件开发人员,你仍然需要知道如何学习编程。一旦选择了软件开发这一职业,就注定选择了一条终身学习的道路。

作为一名软件编程导师,我有机会一窥数百名软件开发人员的学习过程。最让我震惊的是,有些人的学习速度居然比其他人快那么多。一些只有很少或者没有编程背景的人,学习新概念的速度可以达到其他有 10 年以上编程经验的人的 10 倍以上。今天我要分享的秘密是,你也可以达到这样的惊人学习速度。

这里我会逐一揭示一些学习的秘密,希望能助你一臂之力以骑上火箭的速度去掌握软件开发这门手艺。

编  程

学习编程的最好方法就是去动手编程。进入一个开发环境(例如:web 开发环境 CodeSandbox 和 JavaScript 编译环境 Babel),并编写一些代码。如果你正在阅读一本书或一篇博客文章,并且遇到了一个代码示例,请在代码编辑器(例如:Visual Studio Code 和 Quokka)中把这些代码输入进去,并尝试让它们工作。一旦你让代码开始工作,就开始进一步摆弄这些代码吧。比如,可以改变其中一部分代码,也可以试着想想其他方法来应用这些代码,或者用同样的技术来做其他事情。所以请尽情地去享受摆弄代码的乐趣吧。

例如:

  • 星球大战游戏编程

  • https://studio.code.org/s/starwars/stage/1/puzzle/1

  • Flexbox 塔防游戏

  • http://www.flexboxdefense.com/

  • Codepip

  • https://codepip.com/

  • Screeps

  • https://screeps.com/

照本宣科给你带来的智慧是非常有限的。最好的学习方式是 学以致用

动  力

要想做好一件事,最好的方法就是动手去做。你需要有学习的动力和决心。获得动力的一个方法是给自己留够时间和耐心去掌握一些知识。你并不需要立即成为专家。这就像学习一种乐器。你不能指望自己一坐到钢琴前就立刻变成下一个德彪西,但你可以在第一次坐下来弹钢琴就掌握 C 大调音阶。

同样地,你也不可能坐下来,立即用程序写出下一个 Instagram、抖音(TikTok)或要塞英雄(Fortnite)。

当你开始掌握每一个小知识点时,你会意识到自己可以做到这部分了。这样持续下去你会做得很棒的。你可以开始看到你的目标开始逐步实现,然后你会更有动力去追求那个目标。

请坚持下去。

专  注

我看到过很多开发人员试图一次就掌握所有的东西,但是往往却迅速地就得到了一事无成的结果。他们的进步慢得像是在冰川中艰难痛苦的爬行,而不像为了夺冠的奋力短跑冲刺。

如果你想快速学习某样东西,你就不能把你的注意力分散到所有方面,而是将注意力聚焦在最必要的地方。一开始请只选择一种编程语言(例如 从 JavaScript 开始),一个框架(例如 从 React 开始),一本书,一门课程,一个主题,等等。无论你选择什么,专注于一件事,直到你完全掌握了它,然后再转移到其他事情上。

我一直告诉人们,在你开始学习另一门编程语言之前,至少要花一年的时间完全专注于一门编程语言。而几十年前,为了保持在业内的竞争力,一个典型的软件开发人员的确需要在他们的职业生涯中学习多种编程语言。

虽然学习一门以上的编程语言确实可以教会你用多种方式看待事物,甚至让你加深对自己主要编程语言的理解,但如今,一门单一的编程语言(JavaScript)就足以帮助你度过职业生涯中的大部分岁月。

来自招聘经理的建议:你所擅长的技能就是你最有价值的技能。如果你一生都致力于成为一个通才,不断地在不同的编程语言之间跳来转去,事实上你就人为地限制了自己技能精通和收入增加的可能性。

阅  读

对软件开发人员最有用的许多知识都来源于书籍。YouTube 上有很多优秀的视频和课程,但书籍仍然是软件开发文化和知识的标准载体。我向你特别推荐以下价值极高的书籍:

  • JavaScript 编程精编(Eloquent JavaScript)

  • 编写软件(免责声明:这是本文作者自己的著作。该书的印刷版本在 亚马逊上有发售。)

  • https://leanpub.com/composingsoftware

  • 代码大全:第二版(Code Complete: 2nd Edition)

  • 代码整洁之道(Clean Code: A Handbook for Agile Software Craftsmanship)

  • 测试驱动开发(Test Driven Development By Example)

  • 重构第二版(Refactoring: Improving the Design of Existing Code 2nd Edition)

复  习

如果你想把一个新概念从一个听起来很耳熟的想法变成自己的长期记忆,对一个主题进行复习将会让你受益匪浅。大多数学习者所犯的错误是,他们很快就读完了一本书或一篇博客文章,但往往第二天就迅速地忘记了他们曾经读过的内容。如果你读了一些有趣的东西而且想把它们记住,请务必在第二天复习这些东西。针对这些知识进行自我考察。然后隔一天再次进行自我考察。再过一天,再考察。如此连续 4 天重复这样做,你把这次所学变成长期记忆的机会就能大大增加:

https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5126970/

综合运用多种媒介

有些人通过阅读来学习的效果最好,而有些人通过看视频来学习的效果最好,但是如果你把这些不同的学习媒介混在一起用——看视频,然后阅读,然后去根据一些交互式代码课程进行一番练习,你就能从多个角度和多个例子来加深这些概念。通过综合运用多种学习媒介,你自然而然地就完成了对知识的复习,并且在复习的过程中还能进行一些有用的练习。

构建项目

对一个概念的单纯学习并不意味着你就掌握了如何在实际的应用程序中应用该概念。一旦你对着练习题编写了几周的代码,这时你就该脱离书本构建一些自己的东西了。关于做什么需要给你出出主意吗?别去写一个大家早就耳熟能详的 todo 应用程序记录待办事项,建议可以尝试着去实现一个“记录拒绝”的应用程序(The Rejection APP):

https://github.com/learn-javascript-courses/rejection/

重视原则胜过框架和编程语言

框架和 API 都是变化很快的事物。但软件设计的基本原则却是经久不衰的。所以应该去学习那些跨越编程语言栅栏的编程原则。

举一些例子:

  • “一个需求上的小变化应该只会引发代码实现上的一个小变化。”(引自 《软件开发实用手册(A Practical Handbook for Software Development)》)

  • 只做一件事情 (DOT)——从 Doug McIlroy 的“一次只做一件事情,把这件事情做好(DOTADIW)”中简化而来——一个函数应该只执行一个任务。因此,一个函数不应该既获取数据又处理数据,并绘制到屏幕。这个函数应该只获取数据,或者只处理数据,或者只绘制到屏幕。(所以,是时候把你的 React 组件拆分成更小的部分了!)

  • “对接口编程,而不是对实现编程。” ——四人帮(Richard Helm、Ralph Johnson 和 John Vlissides),《设计模式》

  • “优先选择对象组合而不是类继承。”——四人帮,《设计模式》

  • 要避免共享可变状态。

  • “过早发生的优化是万恶之源。”~Donald Knuth

  • “你并不需要它(YAGNI)”——请不要为实际上还不需要的东西去编写代码。

共享、记录和指导

“Hoenikker 博士曾经说过,任何一个科学家,如果不能向一个八岁的孩子解释清楚他在做什么,他 / 她就是个江湖骗子。~Kurt Vonnegut——《猫的摇篮》

学习如何编码只是软件开发工作的一部分而已。当你与其他开发人员协作时,你的代码会被其他人审阅,他们有时会对你的选择提出质疑。当你试图说明自己的意图时,你可能会发现自己并没有透彻地理解一些内容来捍卫自己的立场。所以,请练习在项目中向你的同事和其他合作者解释、记录和传授这些概念。

练习,练习,再练习!

任何通过后天努力学会一项技能的人都知道,实践出真知。但要想让技能得到进一步磨砺,你就不能只是对你已经熟知的概念进行练习。你还需要挑战自己,超越你所熟悉的领域。如果你不断地在自己目前能力的边缘进行努力练习,你将会变得出类拔萃。

《巅峰:关于专业知识的新科学秘密》(Peak: Secrets from the New Science of Expertise) 这本书里深入研究了刻意练习这一活动,并为之提供了丰富的见解,你可以将这些知识应用到日常生活中,从而更好地进行练习。我强烈推荐你去阅读这本书,这样你就可以让自己的练习时间和副业项目变得更有成效。

在作者的个人网站上有很多关于 JavaScript 软件开发的课程。可以通过这些课程去学习专业开发人员所需要的概念,从而让自己职业生涯更上一层楼。

https://ericelliottjs.com/premium-content

 作者介绍

Eric Elliott 是 《编写软件》(Composting Software) 和 《JavaScript 应用程序设计》(Programming JavaScript Applications) 两本书的作者。他是 EricElliottJS.com 和 DevAnywhere 的联合创始人。他教授开发人员基本的软件开发技能。他为加密货币项目打造开发团队和提供专业建议,并为 Adobe Systems、Zumba Fitness、《华尔街日报》、ESPN、BBC,以及包括 Usher、Frank Ocean、Metallica 等在内的顶级唱片艺术家提供软件方面的支持。

参考阅读:

https://medium.com/javascript-scene/how-to-learn-to-code-9f5803506bac


InfoQ 读者交流群上线啦!各位小伙伴可以扫描下方二维码,添加 InfoQ 小助手,回复关键字“进群”申请入群。大家可以和 InfoQ 读者一起畅所欲言,和编辑们零距离接触,超值的技术礼包等你领取,还有超值活动等你参加,快来加入我们吧!


点个在看少个 bug 👇

登录查看更多
0

相关内容

软件开发是建造出软件系统或者系统中软件部分的一个产品开发的过程。
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
257+阅读 · 2020年6月10日
深度神经网络实时物联网图像处理,241页pdf
专知会员服务
76+阅读 · 2020年3月15日
新技能 | 如何快速获取视觉前沿技术动态?
计算机视觉life
3+阅读 · 2019年5月22日
程序员精选:TensorFlow和ML前5名的课程
云栖社区
8+阅读 · 2018年8月27日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
刚开始学编程?这几款小工具能让你事半功倍
Python 如何快速入门?
全球人工智能
6+阅读 · 2018年3月15日
只需5个月,编程小白也能掌握机器学习
ImportNew
5+阅读 · 2017年12月4日
干货|7步让你从零开始掌握Python机器学习!
全球人工智能
8+阅读 · 2017年9月24日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
Arxiv
6+阅读 · 2019年9月4日
Arxiv
4+阅读 · 2018年3月22日
VIP会员
相关资讯
新技能 | 如何快速获取视觉前沿技术动态?
计算机视觉life
3+阅读 · 2019年5月22日
程序员精选:TensorFlow和ML前5名的课程
云栖社区
8+阅读 · 2018年8月27日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
刚开始学编程?这几款小工具能让你事半功倍
Python 如何快速入门?
全球人工智能
6+阅读 · 2018年3月15日
只需5个月,编程小白也能掌握机器学习
ImportNew
5+阅读 · 2017年12月4日
干货|7步让你从零开始掌握Python机器学习!
全球人工智能
8+阅读 · 2017年9月24日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
Top
微信扫码咨询专知VIP会员