秘诀是:问题多,经验多
作为一名职业软件工程师,我观察到一件事:**获得经验是没有捷径的。**你必须投入时间。也就是说,你可以做一些事情来确保你的时间能够有效地促进你的经验,这就是我们在这里要谈的。
经验从何而来?
有些人似乎认为,你只能随着时间的推移逐步获得经验。这只是你在X公司工作了Y年后才得到的神秘东西。这些人还错误地拒绝了有才华的工程师,因为他们缺乏 "经验"。但是,尽管时间和经验是相关的,但时间并不能告诉你一个工程师有多大的经验,也不能告诉你他们在一个特定的工程角色中会有多大的表现。
"技术经验 "来自于经历不同的情况,然后从这些经验中学习,以改善自己在未来对相同或类似情况的反应。另一种说法是,"情况 "是 "问题"。 那些能够充分利用其 "经验时间投资 "的工程师是那些有意让自己暴露在各种与软件有关的问题中,然后努力克服或找到/建立这些问题的解决方案的人。
因此,当你想提高自己的技术经验水平(并增加时间投资的回报)时,要寻找 "问题"。
你在哪里可以找到问题?
这取决于你在寻找什么样的经验,但我可以告诉你几个我找到问题的地方,这些问题给我带来了我所拥有的经验:工作和开放源代码。在大多数公司(当然是任何我想工作的公司)都有一个永无止境、不断增长的软件问题清单,而开源社区面临的软件问题,你可以投其所好,找到解决方案。
我不是在说。"嘿,我在分流我的GitHub问题时遇到了麻烦,你能不能给我做一个应用程序来解决这个问题?"虽然这是一个很好的问题,而且肯定会给你带来经验,但我说的是低层次的问题。比如。"这个库里有一些错误 "或 "这个测试很脆弱 "或 "当我们部署我们的应用程序时,我们得到一个500错误的高峰"。这类问题无处不在,需要对代码进行深入挖掘,以弄清发生了什么。
你可以做的另一件事是成为某个领域的问题的最佳人选,你想在这方面有所改进。你想成为你组织中的 "无障碍专家"?做一些研究,并在你的公司内部做一个讲座。 邀请人们向你提问。你得到的关于这个主题的问题越多,你就会接触到更多不同的问题,你就必须做更多的挖掘工作。这是一个循环。
这就是发生在我身上的关于测试的事情。事实上,我从来没有想过要成为 "测试的人",但我发展了一些基于经验的意见,开始谈论它。没过多久,我就不用再去寻找问题了,它们就以问题的形式出现在我面前。人们把他们的问题带给我,这使我更有经验,有了这些经验,我就能够建立TestingJavaScript.com,它包含了我多年来在经历问题--我自己的和别人的--过程中获得的所有知识。
你是如何利用问题来获得经验的?
我最早研究的一个库是angular-formly,我进入这个库是因为有一个我需要的功能还不存在。我本可以被动地转到另一个库,把它的功能改造成我的应用(或者反过来说😬)。相反,我看了看代码,发现我想要的东西是可行的,然后打开了一个问题,接着是一个拉动请求。几个月后,我发现自己成了核心维护者,后来又成了项目的唯一维护者。整个项目给我带来了大量的 "经验积累问题"(也有机会在国际上发言)。作为项目的维护者,我学到了很多关于表格如何在网络上工作的知识。
当你发现一个问题时。挖掘。如果你在挖掘过程中遇到问题,那就太棒了!你找到了另一个需要解决的问题!你可以努力去解决这些问题。整个过程会给你带来更多的经验。阅读"Spelunking in node_modules 👷",了解关于这种过程的更多想法。
另一件事:记录你的发现。通过写下你学到的东西,你会学到和记住更多。如果你以一种供公众消费的形式(博客文章、YouTube视频等)来展示你的学习成果,那就更好了。这将要求你进一步挖掘,确认(或推翻)你的假设,给你更多的经验。
结论
总而言之,当你遇到和解决各种问题时,你会积累更多的经验。你的大脑是一块肌肉,以某种方式锻炼得越多,它就越能解决类似的问题。
我希望这能帮助你发展成为你想成为的有经验的工程师。 祝你成功!