6步学会编程
学习编写新代码可能是一个痛苦的过程。在学习新概念和新想法的过程中,我们难免会遇到瓶颈或感到沮丧。
作为一名程序员,我学到了一些很难的概念。我曾从零开始学习一门新语言,也曾在自己熟悉的领域艰难地学习过一些难以理解的概念。
克服这些挑战让我明白,学习用不同的语言或生态系统编程需要一个过程。过程中会形成一种模式。
这有点像悲伤的五个阶段;有些人处于不同的阶段或跳过几个步骤,但每个人都经历着大致相同的过程。
1.接触新话题
当你第一次接触一个全新的概念时,你可能会感到不知所措。
当我参加代码训练营时,Handlebars 模板让我停下了脚步。
我的脑袋疼。这个概念很难理解,我的身体也在告诉我放弃。我觉得阅读起来很费劲,上课也不想听,也不想做例子。到了做作业的时候,我不得不强迫自己坐下来写。
但最终,我还是掌握了车把的使用方法。
我花了很长时间才意识到,并且从中找到了安慰:面对新的挑战时,这种绝望感只是暂时的。它会随着时间和耐心而消失。
当你面临一项难以承受的任务或主题时,不妨把自己想象成一位雕塑家。雕塑家不可能用大锤在一个下午的时间里创作出一件巨作;她必须慢慢地凿刻,才能将坚硬的岩石转化为艺术。而那些难以理解的主题,就像巨石,需要我们随着时间的推移,慢慢地将其雕琢成精妙的理解。
你需要休息、耐心和毅力来学习那些最初感觉难以克服的事物。
2. 建立高层次的理解
许多教程和指南都专注于完成某件事所需的语法和有限步骤。如果你是一位经验丰富的老手,并且精通相关主题,那么这本指南就非常适合你。
作为一名吉他手,我可能会看一段 10 分钟的视频,然后离开,
“啊,所以一个大调五声音阶不能普遍适用于一个和弦进行。为了听起来好听,我必须让音阶与正在演奏的特定和弦相匹配。”
我可以通过使用 CAGED 模式来匹配和弦进行来实现这一点。”
我明白,但我弹吉他大概有20年了。如果你不是吉他手,或者不熟悉基本的乐理,那这个建议对你来说就是胡言乱语。
回顾车把的例子,我必须掌握很多陌生的概念。
我必须了解浏览器、http、服务器、数据库以及客户端和服务器端渲染的区别。我还必须学习什么是 Node.js 和 npm,什么是包管理器,以及如何在 Node.js 中使用模块。
我必须理解所有这些事情,才能理解 Handlebars 诞生的初衷。一旦我理解了这些,就更容易专注于 Handlebars 本身,而不是它所依附的生态系统。
如果你发现自己完全不明白某个概念,请问自己:
“我不明白这一点是因为它很复杂,还是因为我不了解它周围的事物?”
我多次遇到过这样的情况:
- PassportJS - 我不知道身份验证如何工作、会话如何工作,或者 OAuth 是什么/如何工作,所以护照对我来说是魔法。
- Docker——我不知道虚拟机是什么或者它为什么有用,因此不了解容器。
- AWS——我不明白“云架构”是什么,所以我不明白在云中部署代码意味着什么。
寻找这些主题的高级解释并首先理解它们是让我学会如何使用这些工具的关键。
3. 学习工作流程
新的编码技能通常会带来新的工作流程。
您将不得不花时间弄清楚如何编辑和运行您的代码、如何使用其他人的代码以及哪些工具适合您的用例。
这通常是一项无聊、痛苦的任务。
举个例子,我最近在学习Python。我立刻就遇到了一些问题:
- 我应该安装哪个版本,2 还是 3?
- 我可以使用 VSCode 编辑和运行 Python 吗?
- REPL 到底是什么?
- 如何管理依赖项?为什么默认安装的是全局依赖而不是本地依赖?
- 什么是虚拟环境?
- 什么是 Jupyter Notebook?
- 如何运行 Jupyter Notebook 文件?……哦,嗯。它自带于 Anaconda。
- 什么是 anaconda?
- Ananconda 附带 Python 安装吗?😫
然后我不得不回到第 2 步,用 conda 解决大部分相同的问题🤦
很多教程制作者和作者都会忽略这些关键点。我不知道这是因为他们觉得读者不需要了解这些基础知识,还是因为他们想直接跳到🔥热门技巧🔥。
我想说的是,如果你不需要指导,很容易就跳过教程的这一部分。如果你确实需要额外的指导,而它却没有,那你就彻底迷失了。
就我个人而言,每当有人花时间引导听众了解某个主题,并提供一些清晰简洁的步骤来帮助我入门时,我都会非常感激。这能节省大量时间,让我直接进入我喜欢的部分——编程。
所以,在学习这部分的过程中,一定要做好功课,并保持动力。很容易就会说:“算了,改天再研究一下 npm”,然后就放弃学习 Node。
然而,一旦你度过了这个过程的无聊部分,你就可以开始学习有趣的部分了。🦄
注意:如果您正在寻找博客文章主题,这是一个很好的开始。我保证,您习以为常的工作流程知识对于新手的持续学习至关重要。您可能比自己想象的更了解,所以分享出来吧。
4. 设定一个小的、可实现的目标
一旦您有了良好的工作流程并能实际执行您正在编写的代码,那么就该想想要构建什么了。
这看起来很明显,但实际上是至关重要的一步。
你需要设定一个目标,既要有可实现性,又要实用且有趣。这个目标既能挑战你,又不会让你轻易放弃。
如果你正在学习 Web 开发,你肯定不想一开始就尝试构建一个 Facebook 的克隆版本。那样你会掉进一堆坑(服务器、数据库、React 等等),最终什么也做不成。
作为初学者,您可能只想使用 HTML 构建一个基本的网站。如果您有一些基础,可以使用 HTML 和 CSS 创建一个布局和设计都不错的网站。如果觉得这太简单,可以考虑使用 JavaScript 添加一些交互功能。
再说一次,这看似简单,但如果你进入一个新的领域或学科,可能会极具挑战性。你怎么知道哪些内容太复杂?哪些内容真正值得学习?
你必须花些时间弄清楚学习这项新技能的真正目标是什么,然后再反过来想。你想做什么?为了实现它,你需要学习什么?你该如何练习这些技能?
作为一名吉他手,我成年后开始学习吉他,学习了大约十年。那时我已经了解了音阶、和弦、如何演奏歌曲等等。我掌握了所有基础知识。
一天晚上,我坐在新老师对面,他问我:“你想学什么?”
我不知道。他也不知道。他怎么教我呢?
避免制定明确的目标往往会导致大量时间的浪费。
5. 投入工作
编码很难。用代码构建有用的东西更难。即使是经验丰富的程序员也会遇到以下困境:
20 多年的开发经验,8 本书,销量超过 10 万册,我的视频观看时间超过 30 万小时,亲自授课 4000 多小时……
你知道吗?我仍然很难让我的代码运行,这仍然是一件乏味的苦差事。而且我的代码第二天仍然让我感到困惑。
你并不孤单,正在经历这些挣扎。——凯尔·辛普森
构建第一个项目将会非常艰难。你会遇到一些障碍,发现需要深入研究一些新主题,甚至可能不止一次地在 Stack Overflow 上搜索。
但如果你完成了它,你将会学到很多东西。
这里重要的是要意识到你需要坚持下去,并且如果你在上一步中计划正确,那么你就能看到结局。
请记住,完成第一个项目并意识到你已经用一种全新的技能、语言或框架构建了一些东西
✨🎵🕊辉煌🕊🎵✨
6. 保持动力
一旦你取得了第一次胜利,就该去争取另一次胜利了。
😮你说,这么快?
是的。😐
回到前两个步骤,开始思考下一步可以做什么,才能让你更接近目标。(你确实有目标,对吧?)
想想如何拓展你所学的知识,并将这些新技能运用到下一个项目中。构建一些更大或完全不同的东西,它们能让你更好地了解如何实现最终目标。
然后建造它。建造更多的东西。不断学习。
当我们决定成为开发者时,我们就选择了这样的生活。这是我们为一份拥有广泛应用技能的好工作所做的约定。我们接受了不断学习和成长,并接受在这个瞬息万变的行业中不断磨练技能。
好消息是,这个过程变得更容易了。你开始期待它了。
“天哪,这太难了。这让我的大脑很痛。”
变成:“啊,是的。这需要一些时间来学习。”
“呃,我该从哪儿开始呢?”
变成:“嗯,最好弄清楚工作流程。”
等等。
作为一名开发人员,我已经多次经历过这些步骤。如果你坚持下去,速度会更快。
喜欢这篇文章吗?请订阅我的新闻通讯
文章来源:https://dev.to/leewarrickjr/learn-to-code-anything-in-6-steps-2m6e