JS 开发者的残酷现实:不学习基础知识,就只是个“程序员”
三年前,我面对了一个残酷的事实。
到那时为止,我已经写了几十行代码。但是,当被要求解决具体的技术问题时,我经常发现自己会卡在基本的事情上。
残酷的现实是我缺乏基本的软件知识。
你知道我在说什么。代码审查的时候,每个人都看着你,等你回答,你却找不到合适的词语来描述你花了15个小时写的代码。
或者当你回到每天使用的库(React Hooks、Redux、TypeScript)时震惊地意识到你几乎无法理解它们背后的工作原理。
在那些时刻,您将面临当今软件开发人员的残酷现实:技术进步太快,我们正在输掉与时间的斗争。
然而,与笔记本电脑中处理能力不断增强的处理器不同,我们的大脑——祖先留下的遗产——却是有限的,它只能处理有限量的信息。
因此,在我编写代码的日子里,我问自己:“有没有更好的方法来掌握软件开发?”
过去 4 年,我一直在研究提高开发人员技术技能的最佳方法,参加了数百门在线课程,并尝试了不同的工具
回顾我作为一名全栈开发人员的日常工作和学习活动,我开始注意到一些模式。如果我想达到高级水平并加速我的学习曲线,我必须解决以下问题:
- 我每周花 14 个小时在 Udemy 或 YouTube 上“学习”(但收获甚微)
- 我 80% 的时间都在看同一种代码
- 我把大部分都扔掉了,因为几天后它就会很快变质
我想要的是一个可以帮助我成为更好的 JavaScript 开发人员和更好的软件工程师的系统。
为了设计这样的流程,我问了自己以下问题:
- 软件开发中哪些东西是不会改变的?
- 我缺乏“计算机科学”学位,这能变成一种优势而不是劣势吗?
我想要一个能够:
- 让我了解我知识中的具体技术差距(以便我可以专注于重要的事情)
- 打下坚实的基础,使我的编程技能在未来几十年内保持相关性
- 了解全局,更快地从“程序员”过渡到“软件工程师”
快进到现在。每周我都会收到来自开发者的领英消息,他们问我如何才能建立起这样的体系,从而晋升到中高级水平?这在三年前,当我连自己的 JavaScript 代码都难以交付的时候,是不可想象的。
或者,很多开发者会向我寻求指导服务,而几年前,我正迫切地寻找一位导师。这让我得以辞去全栈开发者的职位,全身心投入到指导那些渴望更上一层楼的软件开发者的工作中。
在我的学习体系的帮助下,全球超过110位开发人员现已跻身中高级水平。其中9位学员已超过高级水平。我的收件箱里满满的都是感谢信。
我注意到大多数文章和教程都侧重于如何学习新的框架,但却找不到太多关于如何提升软件基础知识的内容。这很奇怪,因为归根结底,我们作为开发人员的技能取决于我们的技术基础。这些原则本可以帮助成千上万的开发人员,但其中大多数却隐藏在难以阅读的编程书籍和难以理解的技术术语背后。然而,只有通过分享,我们才能提升和完善这些知识。
在本文中,我将分享我作为 JavaScript 开发者如何更快达到中高级水平的宝贵经验。这篇文章并不容易读,如果您想跳转到特定内容,请使用下面的列表:
- 你已经领先一步
- 找到差距
- 用更少的资源做更多的事情
- 掌握基础知识
- 超越“代码”
- 免费资源可帮助您有效弥补技术差距 >>
现在让我们开始你需要经历的第一个思维转变……
经验#1:你已经领先一步
好消息是,如果您已经编写代码一段时间了,那么您已经拥有相当大的优势。
根据第 20 版《开发者国家状况报告》,截至 2021 年底,全球活跃软件开发人员数量为 2680 万,占世界人口的 ± 0.34%。
你是怎么到这里来的并不重要。
也许你是自学成才,花了大量的时间在业余项目和课程上。又或者你参加了训练营,花了几个月的时间来完善你的编程技能。
无论如何,因为你已经开始了,所以你已经领先于所有还不会写代码的人了。
我们来算一下:要交付一个简单的 React 应用,你需要花费几百个小时来编写代码。除此之外,你可能在工作中已经见过很多代码了。
这里的关键词是“整合”。
是的,与其学习新知识,不如将基础软件开发知识“融入”现有技能。这种心态至关重要,因为它能让你不再把高级水平视为终有一天能达到的目标,而是将其视为现在就可以开始努力的目标。
大多数开发人员都会将自己与团队中的高级开发人员进行比较。之后会发生什么?冒名顶替综合症开始出现,他们开始对自己的技术技能越来越没有信心,并且不再做任何努力来提高自己。
大多数开发人员都未能意识到,在学习曲线上,还有十几个人落后于他们,而他们已经掌握了数百种知识。
作为一名软件教师、导师和教练,我的工作是正确看待事物并帮助您充分利用已有的知识。
现在您已经了解了这个问题,让我们继续进行最根本的思维转变,以进入下一个层次……
学习#2:找到差距
自现代历史开始以来,人们就一直秉持着这样的理念:在开始旅程之前,你必须先了解自己的立场。
例如,300多年来,英国海军拥有最先进的舰船和最有经验的船员,但它们却不断沉没。
为什么?
因为他们无法在地图上准确找到自己所在的位置(更确切地说是经度)。
直到约翰·哈里森 (John Harrison) 发明了可靠的计时器,这个问题才得到解决(他是一位自学成才的木匠,花了大约 40 年的时间才真正完成这项工作)。
就像英国海军的水手一样,当今大多数开发人员都可以使用无数的资源。
然而,其中许多企业仍陷于困境。
因为他们无法回答一个简单的问题…… “我的技术水平如何?”
在你弄清楚这一点之前,无论你投入多少时间,或者启动多少个副业或在线课程,都无关紧要,因为……
“如果你不知道自己的技术差距,你就是在黑暗中射击。”
开启一段旅程的最佳方式,首先要了解你的处境和目标。这是迈向精通的基石,如果你掌握了这一点,剩下的就只是执行的问题了。
我和 Bogdan 花了几个月的时间寻找可靠的方法来评估开发人员的技能,却始终找不到任何有效的解决方案。于是我们做了任何聪明的开发人员都会做的事情……我们自己开发了一个!
为了使它变得更好,我们向全世界开放了它,这样您也可以了解您作为开发人员现在的立场(查看文章末尾的链接)。
但是,即使一些开发人员大致了解他们的差距,他们仍然会挣扎。
这将引出本文的下一个基础学习内容……
经验#3:用更少的资源做更多的事情
寻找技术差距的整个过程旨在让你发现自己知识上的缺失。然而,如果你不知道该专注于什么,也不采取行动,那么这些知识实际上就毫无价值(甚至可能对你造成伤害)。
到了这个阶段,大多数开发者都会分心。他们有种“学校”心态,试图同时学习所有东西。这会导致倦怠、困惑,以及开发者职业生涯的缩短。
不妨这样想: 作为一名开发者,你的价值并不在于你的知识。随着技术的变化,我们实现事物的方式也会改变。库会变,框架会变,甚至语言也会变。如果你只关注这些,你就会陷入“框架仓鼠轮”的泥潭。
大多数开发者为了提升技能,都会选择参加 7 门不同的在线课程,并完成 3 个不同的业余项目。如果这就是你的待办事项清单,祝你好运!你永远也做不完。
与此同时,在市场上,唯一重要的是你完成任务的能力。交付干净的代码,构建高质量的软件。质量意味着牺牲。这意味着不再问“多少?”,而是问“多深?”。
软件开发如同生活,开发任何有价值的东西的关键在于确定优先级。确定哪些技能应该学习,哪些技能应该放弃。确定优先级的依据是价值,而不是当前的重要性。
就技术技能而言,价值是什么?这让我想到了下一个问题……
学习#4:掌握基础知识
让我们回顾一下过去……
还记得小时候在沙滩上堆沙堡的场景吗?几个小时后回来,却发现沙堡全被冲走了?
你可能还记得,问题出在地基上。事实证明,沙子并不能真正长时间粘在一起,尤其是在加水的情况下。
这正是如今大多数开发人员正在尝试做的事情。他们学习一个又一个框架,不断在薄弱的基础上添加新的东西。
但是,无论城堡有多高,如果地基是用沙子建造的,它们会在几秒钟内被冲走。
众所周知,真正的大师注重原则,而非程序。在软件开发中,基本原则是永恒不变的。
例如,无论我们看到多少新的 JavaScript 框架,基础部分仍然是通过 HTTP 传送到浏览器的 JavaScript 包。
有效地理解流程背后的协议和流程,将使您能够以最小的努力保持领先地位。这就是基础知识的力量,而不仅仅是一些不断变化的实施细节。
我知道这和“社区”的做法完全相反。大多数推特网红都在向你提供新的技巧和窍门。
虽然大多数开发人员都痴迷于最新的 JavaScript 框架、VS Code 插件、GitHub Co-pilot……但一些聪明的开发人员正在寻找其他地方(如果您想在这个领域取得成功,您也应该这样做)。
他们知道,无论你在薄弱的基础上添加多少新东西,都会导致灾难性的崩溃。要想对自己的技术技能充满信心,你必须首先学习基础知识。
这让我们想到了以下几点……
学习#5:看清“代码”之外的东西
研究员 Lindsey E. Richland 研究认知和学习,特别是世界各地的学生如何学习数学。
成功和失败的学生之间有什么区别?是教材不同,还是老师不同?
你可能会感到惊讶。
原来,那些学习困难的学生,都是把数学当成一套指令来学的。考试的时候,他们只能靠记忆才能及格。
另一方面,那些表现优异的学生有一个共同点。他们能够将数学视为一个相互关联的系统。在评估时,他们能够看到全局,并建立正确的联系。
听起来很熟悉?
不幸的是,这就是如今教授软件开发的方式。看视频教程。写代码。重复。
难怪大多数开发人员都在苦苦挣扎。
当你学习这类东西时,你会完全被你正在处理的代码束缚住。一旦你脱离了那种束缚,你就会僵住。
这种“猴子看猴子做”式的学习永远不会让任何人达到高级水平,因为它与高级开发人员应该做的事情相反。
过了初级阶段,模仿就不再是一种有效的学习策略了。(图片来源:Shutterstock)
当你将编程作为一组指令来学习时,很容易忽略全局。
然而,在现实生活中,如果你无法将其投入生产,你就束手无策了。你将永远依赖高级开发人员来帮助你,而无法实现端到端的交付。这会打击你的信心。
超越代码本身意味着理解软件构建远不止编码。这意味着能够洞察全局,并能够实现代码投入生产所需的所有必要步骤。
从测试到集成再到部署,您将能够掌控整个软件生命周期。您必须能够实现端到端的交付。
如何充分利用这些学习成果:
即使该系统背后的原则已经由数十位开发人员尝试和测试过,您在开始实施时仍会面临一些常见的挑战。以下是应对这些挑战的方法:
- 速度: “我工作中的前辈经验丰富。即使我执行这些步骤,我想我也很难更快达到目标。”——坐冷板凳12年并不意味着你就能成为高级开发人员。经验很重要,但我们可以更有效地帮助你积累经验。只需完成上述一半,几个月后再来找我。
- 缺乏时间: “在工作中写了一整天的代码后,我就没有精力去学习了”——当你建立这样的系统时,你每周只需要 5 个小时(其中一半的时间可以在工作中完成)
- 我现在有很多事情要做:“是的,我想真正地鞭策自己,更上一层楼,但我现在个人生活中有一些事情要做,我以后再做。”——你猜怎么着?我们每个人都有这样的经历。总有一些事情会分散你的注意力,让你无法采取行动。你什么时候才能把你想要的东西放在第一位呢?
您知道真正成功的开发人员和仅仅勉强过关的开发人员之间的区别是什么吗?
作为一名开发人员,我已经工作了 8 年,并帮助过 110 多名开发人员更上一层楼,我可以给你提供一些见解。
它不是计算机科学学位,也不是从小就开始编码,也不是天赋,也不是天才,也不是花哨的知识。
伟大的开发人员活在当下。
如果代码不干净,他们会立即清理。如果管道出现故障,他们会立即修复。如果他们觉得工资过低,他们会立即协商。如果他们觉得存在差距,他们会立即寻找答案。他们会找到解决问题的人,并立即获得建议。
好消息是,您可以立即开始。我整理了一系列资源,供您参考。请按照以下步骤获取:
如果您想对自己的技术技能充满信心,更快地达到中级/高级水平,并作为开发人员获得更多收入,我邀请您观看我们的免费培训并与我联系。
我们将准确了解您作为开发人员目前的技术水平,并为您起草逐步的技术路线图,以帮助您进入下一个级别。
附言:这是我在2022年推出的第一篇文章(之后还会陆续推出更多文章)。为了确保您能获得这些洞见,您可以订阅我的YouTube频道。
附言:你看过那个训练了吗?:)
文章来源:https://dev.to/dragosnedelcu/the-harsh-reality-for-js-developers-master-the-fundamentals-or-you-will-be-just-a-coder-21ke