成为一名软件开发人员
很多人问我如何才能成为一名软件开发人员。我大学时并没有学习任何与软件相关的专业,但现在这却是我的职业。我还曾在本地的Web开发训练营Lighthouse Labs担任了大约三年半的导师,亲眼见证(并且我相信至少在某些情况下,我也帮助了)数百名来自不同背景、年龄各异的人找到了软件开发人员的工作。
以下是我给那些没有技术经验,却想找到第一份软件开发工作的人的建议。这些建议基于我自身的经历,既有我自己的亲身实践,也有指导他人的经验。这条路没有绝对正确的做法,而且无论你选择哪条路,都需要付出大量的努力。但以下这些方法对其他人(包括我自己)来说都行之有效。这些建议大致按时间顺序排列,但当然,很多步骤是相互重叠的,而且往往同时进行。
弄清楚你即将面对的是什么。
软件工程和我想象中的完全不一样。所有难点都在于与人打交道。我当初选择软件行业,部分原因就是觉得这样就不用跟人打交道了。我既不擅长也不享受这种工作,但我幻想自己每天坐在电脑前,看着银行账户里的钱源源不断地增长,这完全是痴人说梦。
就我个人经验而言,以写代码为生的现实是,你需要应对大量的办公室政治、自以为是的中层管理者、压力巨大的同事,以及居高临下的态度和偶尔的骚扰(尤其如果你不是男性)。我发现科技行业的文化普遍充满毒性和虐待,它曾多次几乎摧毁我的意志。
你并非孤身一人面对这种情况。你的同事和业内无数人都有着同样的经历。而且,最终这一切都是可以忍受的。
我这么说不是为了劝阻任何人进入软件行业,只是想强调招聘人员说的那些都是扯淡。这行并非全是免费旅行、优厚福利和高薪。当然,这些也确实存在,但现实远没有他们说的那么光鲜亮丽。
软件开发的工作就是帮别人解决问题并获得报酬。其他的都是无关紧要的。正因如此,这才是可靠的职业道路,因为别人确实有很多问题需要解决。
软件开发仍然是一份充满成就感且收入丰厚的职业。尽管我对这个行业总体上持负面看法,但我仍然经常强烈推荐并帮助人们进入软件行业。大多数软件开发人员,就像大多数人一样,真诚友善。我无法直接评价其他行业的问题,但我认为大多数高薪且男性主导的行业其实都大同小异。
结识很多人
我目前为止的四份编程工作中,有三份都是朋友介绍的。我是在各种聚会上认识这些程序员朋友的。我并没有请他们帮我找工作,但很多公司几乎一直在招软件工程师,所以当你的朋友听说你在找这类工作时,他们可以在公司里跟你提一提。我当然也参加了面试,但如果老板认识并信任的人能为你担保,那真的会有很大帮助。
关于如何结识陌生人,我想说几句。和许多喜欢软件这类“宅男宅女”的人一样,我是我认识的人中最内向的。一开始,我发现和一群陌生人待在一起简直是煎熬,但说实话,如果你想在职业生涯中取得成功,学会如何在陌生人面前不尴尬,和学习编程一样重要。我参加聚会的时候,就站在一旁,尴尬地和几个陌生人眼神交流。最终,总会有一个友善的外向者走过来和我搭讪,不知不觉中,我就能在人群中游刃有余了。
可以看看你感兴趣的编程语言的线下聚会,或者如果你所在地区没有这类聚会,可以加入线上社区。大多数编程语言都有 Slack 或 Discord 服务器,人们在那里交流,而且根据我的经验,大家通常都很热情友好地对待新手(至少在 Ruby、Elixir 和 Clojure 社区是这样;我强烈推荐这三个社区)。
在公共场合学习如何编写代码
如果你没有接受过任何正规的软件开发教育,就必须拿出其他东西来证明你确实会写代码。我就是这么做的,做了一堆乱七八糟的业余项目。我做的第一个项目是用 HTML 和 CSS 复刻了谷歌的首页。我做的第一个真正意义上的应用是用 Sinatra 框架做的二十一点游戏。我还用 Rails 框架做了 Twitter 和 Reddit 的克隆版,以及用不同的 JavaScript 框架做了一些像吃豆人这样的小游戏。如果你想看看我说的“乱七八糟”是什么意思,我的GitHub 代码库里还有一些存货。其他常见的玩具项目包括链接缩短器、照片库、电商网站、时间追踪器,或者你常用软件的克隆版,比如电子表格、工作流管理、日历等等。可能性无穷无尽。
在网上找找教程,看看哪些能一步步教你如何构建你感兴趣的东西。如果你不知道从哪里入手,Odin Project和Free Code Camp是两个免费项目,它们提供了非常实际的学习路线图。我两个项目都学过一部分,但都没学完。我还参加了Coursera和edX上的几门免费课程,这两个平台都很棒,但你要小心别钻牛角尖。这两个平台大多是大学课程,虽然很有趣,但跟你实际工作中要做的事情关联性不大。
如果你想尽快从零基础成为一名能赚钱的开发者,我建议你坚持执行更有针对性的学习计划,比如上面提到的两种。当然,市面上也有无数付费课程,价格和质量参差不齐。要谨慎对待那些价格昂贵的训练营。我曾经付费参加了几个月的Launch School(当时叫“Tea Leaf Academy”)课程,这绝对是我职业生涯中最明智的决定。我强烈推荐他们,因为他们提供的课程内容丰富且实用,价格也比较合理。虽然不是免费的(每月200美元),但几百美元对于你的职业生涯来说只是一笔很小的投资。而且,他们现在似乎也提供分期付款选项。
这些以职业为导向的训练营还会教你很多免费大学课程不会教的实用知识,例如版本控制(git)、测试以及如何与开发人员在同一个项目上协作。
我花了六个月的时间学习、结识人脉,并全职开发一些蹩脚的软件,才找到第一份实习工作。Lighthouse Labs 95% 的毕业生都能在这段时间内找到软件开发工作。Launch School 也为许多学生带来了令人瞩目的实际成果。我从未完成过大部分的课程或项目。那段时间,我靠着前一个夏天经营学生油漆生意赚的钱,过着清贫的生活。学习编程有时会感觉很枯燥,但只要坚持下去,你很可能成为绝大多数自学成才的开发者之一。这是一个完全可以实现且现实的目标,而且你并不孤单。
除了参加免费在线课程和根据教程开发应用之外,我这段时间还通过其他公开学习的方式学习,例如写博客记录我的学习历程、建立个人作品集网站展示我的小项目,以及参与一些本地技术社区的志愿活动。选择适合你的方法,但重点是最终至少完成几个中等规模的项目,这样你就可以向别人展示你有能力开发出真正可用的软件。
学习最佳实践
令人惊讶的是,很多经验丰富的开发者仍然会编写非常糟糕的代码。花些时间学习软件设计和软件工程的最佳实践,避免成为他们中的一员。学习方法很大程度上取决于你的学习方式。(顺便说一句,在你开始自学以求职业转型之前,你应该先弄清楚这一点。)我通过阅读吸收了很多知识,比起试错,我更喜欢通过学习理论来学习,所以阅读和观看讲座对我来说非常有效。每个人的情况可能不同,最终你确实需要经验才能真正掌握这些知识,但你无需从零开始。
阅读戴夫·托马斯和安德鲁·亨特的《程序员修炼之道》,以及桑迪·梅茨的所有著作。观看里奇·希基的演讲,尤其是“化繁为简”,以及莎拉·梅的“宜居代码”。其他经典著作包括埃里克·埃文斯的《领域驱动设计》和马丁·福勒的《重构》。当然,还有无数其他书籍,每个人对于软件工程经典著作的收录都有自己的看法,但以上是我的推荐。它们将为你打下坚实的基础,并为你进一步阅读和观看提供丰富的素材。
倾诉衷肠
一旦你能够编写出基本可用的代码,就可以开始找工作了。广而告之你正在寻找第一份软件开发工作。希望你的程序员朋友能知道某个空缺职位,但你也可以在网上随意投递简历。这种方法的成功率很低,但并非不可能。我四份工作中的一份就是通过“投递简历”找到的。我附上了一封很长很真诚的求职信,信中表达了我对编程的热爱,以及我多么渴望加入这家公司(我的确很想),还提到我学习能力很强,并且坚信如果他们给我机会,我一定能胜任这份工作。
奏效了。招聘经理说我的信引起了他的注意。当时我只有一年的工作经验,而且之前从未远程工作过,但我还是得到了这份工作。
不要害怕展现真实的自我。不要撒谎说自己懂得更多,但也不要妄自菲薄。在软件行业白手起家绝非易事,许多团队都渴望聘用那些能够做到这一点的、积极主动、学习能力强的自学者。
(一开始)不要太挑剔!
现实情况是,你最初的一两份工作很可能相当糟糕,薪水也很低。此时,你正努力说服别人给你一个机会,这其实是在尊严和未来职业发展之间做出权衡。在最开始的时候,你应该把积累经验放在首位。当然,你永远不应该忍受任何让你感到不舒服的工作,但如果你能坚持下去,为了获得最初几个月的实际工作经验,即使要求不高也是值得的,恕我直言。
我很幸运,第一份开发人员的工作就是和世界上最棒的团队一起工作,但我从我指导的学生身上发现,这种情况并不常见。
每种类型的公司都有利弊,所以不必急于找到完美匹配的公司。先专注于积累经验,这样以后才能有更多自由去寻找最合适的公司。我曾在几种不同类型的公司工作过,无论去哪里,都有利弊。
大型公司通常拥有大量经验丰富的开发人员和较为缓慢的流程,因此你有更多时间从容应对,并向比你更资深的人寻求帮助。由于人们对新开发人员的期望值很低,压力通常也很小,这其实也无可厚非。你犯错的空间很大,因为你只是庞大机器中一个微小的齿轮。缺点则取决于你的性格。对我而言,缺点在于我发现大多数大型科技公司都令人厌恶,我不喜欢参与开发自己讨厌的东西时那种令人窒息的感觉。
初创公司通常导师较少,但你却有更多机会承担与自身水平不成比例的责任,这能带来别样的宝贵学习体验。你犯错的空间也很大,但这更多是因为你的错误会被公司快速迭代、勇于尝试的文化所掩盖。我现在觉得这种经营方式很荒谬,但当公司普遍接受犯错,即使是重要的事情,你也能从中获得很大的自由去尝试和学习。
做个好学生
最后,一旦你终于找到第一份工作,就要像个好学生一样认真学习。把头一两年的工作经历当作带薪培训,而不是炫耀自己技术的机会。你懂得远比你想象的要少,你根本不知道构建一个功能完善的软件系统需要付出多少努力,更别提部署和维护它们了。永远保持谦逊和求知欲。珍惜身边经验丰富的开发者给予你的每一分钟关注,并向他们学习。他们说的未必都是明智或正确的,但要认真倾听,学习那些有效的方法,忽略那些明显无效的方法。
学会提出好问题。不要害怕寻求帮助,但在寻求帮助之前,至少先尝试自己解决问题。写下你尝试过的方法,并解释为什么你的尝试失败了让你感到惊讶。
有些东西只能通过在实际项目中积累经验才能真正学到,所以要寻找学习这些东西的机会,例如:
- 保护和备份重要的客户实际数据
- 部署大型应用程序,无需停机
- 重构大型、混乱、遗留的代码库
- 向庞大、混乱的遗留代码库添加新功能
- 修复一些难以发现且没有重现步骤的漏洞
这些只是你在小型演示项目中不会遇到的一些问题的例子。注意你在工作中遇到的、但在业余项目中不会遇到的问题,并学习如何解决这些问题。这是你提升技能的途径。最重要的是,永远不要停止学习。
就这样
软件开发是一份很棒的职业。它让我经济独立稳定,环游世界,结识了许多有趣的人,等等。我的经历并不适合所有人。成为软件开发人员的途径多种多样,就像每个人一样,但我见过无数怀揣梦想的软件工程师走过各自的道路,其中许多人的经历都与我提到的这些要点不谋而合,所以不妨看看这些要点是否适合你自己的道路。也欢迎你告诉我你的进展如何 🙂
文章来源:https://dev.to/kiraemclean/becoming-a-software-developer-1og2