(点击上方公众号,可快速关注)
英文:freecodecamp 译文: 开源中国
www.oschina.net/translate/how-to-go-from-hobbyist-to-professional-developer
如有好文章投稿,请点击 → 这里了解详情
几年前,我交替干着园艺工作和餐饮的工作。那时候我刚离开大学,还不知道我这一生到底该干什么。
我有很多想法,但是没有方向。在那段时间里,我开始自学编程。最初是因为喜欢,我认为编程是件很酷的事情,可以只动动脑子写写代码就创造出各种事物。
然后我开始思考人生,认为编程可能成为我的生活。
一开始我并没有这种想法。我没有钱来支付真正的教育。因为没有钱,我已经从大学退学了,如果我进入计算机科学领域,就必须重新开始。我离开学校6年了,还有超过 $50,000 的债务,所以不会有这种想法。
然后我开始思考,我可以自学 Web 开发并达到可以实习的程度。
我最初的计划是到镇上的几家公司自荐,并问他们是否愿意会见我。我想一边在学校学习一边和他们一起工作,这样我就有钱进学校同时还能获得一些经验。
因此我认真的对待 Web 开发这件事情。我开始做了一个作品集(portfolio),并把自己的技术记录下来,我开始活跃在像 Stack Overflow 这样的地方。我在 Github 上建立了几个实际的应用,虽然并无过人之处,但至少可以表明我会编程。
有一家公司不接受我兼职工作。他们并没有说欢迎我在获得学位之后回来,而是直接提供了一份 6 个月试用期的全职的初级程序员的工作。
我欣喜若狂。事实证明我一旦认真起来有目的的进行开发,能自学不少东西。我可以回答他们的问题,我可以给他们讲解自己创建的初级应用,我还可以解释我的项目是如何进行的。我在那家公司待了两年半,然后在我居住的城市成为一名真正的 Web 开发者。
以学徒的身份审视自己
让我转变为专业开发者,有很重要的一个部分,就是在之前的公司作为学徒的时候,竭尽所能地学习。
在公司的工作中所学的关于现实的知识是无价的。如何与客户、同事并在一定的内部约束下一起工作,这些都是基本要素。而这些只能在一定的领域中学习。
现在的我可能比刚开始工作的时候知道得更多,但我不会停止以学徒的身份审视自己。要想成为一个出色的开发者,就要有持续学习的欲望。当我们看到自己掌握了某项技能,那一刻开始我们(关于这项技能)的成长就停止了。
海明威说得好:
我们都是某项手艺的学徒,没人会成为大师。
他说的是写作,但同样适用于开发。
自学和在公司工作的结合让我学到很多(我甚至在写书)。我理解 Web 开发实践,知道如何从业余到专业。这是一条任何人都可以走的路,不管你是否有时间,也不管你能力如何。
举个例子,我曾一次做了两份工作 —— 其中一个需要我凌晨4点起床驾驶叉车。
作为一个忙碌的成年人,学习编码需要决心,动力以及顽强的坚持。
从业余爱好者过渡到专业开发者
下面是一个你可以参考的过程。每个人的成长轨迹都会有所不同,但是你可以采取一些步骤来帮助你更快地走上正确的道路。
1. 相信自己可以做到
每个人都可以自学成为开发者。千万不要认为自学是只有某种类型的人才能做到的,虽然在某种意义上可能这也是对的。你需要自我驱动,激励自己,而不是让这种想法成为付费学习的动机。
社会上很多人会认为有些人生来就有某些特质,而别人没有。这对成长是不利的,也是造成许多人对生活感到不满的原因之一。
如果你一直觉得你要么“拥有”,要么“没有”,就很容易沮丧。
任何人都可以学会自我激励,自学编程。或许是开始一个成功的业务,亦或许是实现长期目标。这和你的出生无关,关乎到的是你的毅力。
如果你能把自己放低一点,坚守住最困难的时刻,你可以做到任何你想做的事情。
当然,所有的事情都存在运气的因素。例如,我主动联系了一个网页开发机构,很幸运,他们恰好在那个时候正在寻找一个开发者,而我恰好满足了他们的需求,我很幸运地得到了这份工作。但是如果我没有对自己的发展方向做出决定,那我绝对不会有这份幸运。
运气确实是一个因素,但是如果你不坚持在某件事情上做到很好,运气可能永远不会找到你。
2. 持续专注于你的技术
我最大的缺点就是容易感到无聊和分心,总想跳入下一个项目。
听起来似乎很自由,能够在任意项目之间弹跳以适应当天的心情,但…
这是一个陷阱!请记住:
成功成为专业开发人员的首要任务是 commit 。持续坚持 commit,直到你完全掌握。这也适用于所有事情。
人们往往强调选择使用哪个框架。但更重要的其实是挑选一个,并坚持下去。等你完全掌握了以后,可以转移和学习新的语言和框架。
此外,重要的是在开发过程中获得的解决问题的技能,以及像真正的开发人员一样思考的能力。
我自学的是 Laravel 框架,雇用我的公司使用的是 CakePHP 。但没关系,他们知道我有切换框架所需的技术和技能。
选择一个方向,盯着它,不管是什么,消除被别的东西分心的可能性。这很不容易,但一旦你学会忽视分心,你会更享受工作。
人们常常容易不开心,因为他们不断再寻找完美的职业生涯。但激情往往来自于你对技术那份不可阻挡的欲望。一旦保持了这种心态,你作为开发人员的能力将会得到升华。
3. 立即采取行动
很多充满激情的开发人员可能会陷入阅读陷阱,而不采取行动。
教程和书籍是非常适合学习基础知识,问题是它们也对开发者灌输了一些信心上的错觉。
你有没有在看完一本编程书后,去自己构建一些东西只是为了验证自己到底知不知道如何去做?如果有,那你肯定明白我在说什么。
这个解决方案很简单,但不容易。
随便做一些什么。做一个解决自己生活中遇到的问题的应用程序,亦或者是解决你身边的人的问题。
做点什么,并把它放出去。让它开源并放在 GitHub 上。你不是为别人做的,而是为了你自己,所以不用担心别人的意见。
刚开始你的代码肯定是丑陋的。我回顾了几个月前写的一些代码,自己看到都想吐。但是,如果没有构建这些东西,就无法学习开发。书是很棒,我也很痴迷想去尽可能的阅读更多,但你必须应用这些知识。
在这过程中你会遇到问题,你会去想办法解决。那很好,这段时间里我们将真正学到更多东西。
4. 建立你的在线形象
一旦你开始去构建一些东西,你将需要建立一个在线的形象。你的 GitHub 帐户将是一个好的开始,这是一个能够安置你正在开展的项目并与世界分享的舞台。
但是如果你想比这更进一步,我建议你建立自己的 portfolio。
这个网站可以做这些事情:
把你的能力展示给潜在的雇主;
一个你可以展示你的工作成果的地方;
作为你的平台;
最后一个非常重要。一旦你开始构建一些东西,你应该马上开始写下来,分享你正在做的工作,并分享给别人你所知道的一切。
这是给潜在雇主展示的最好的方法之一,告诉他们你是谁,你能做什么。这也是一个让你的名字展示在那里的方式,也为自己建立了一个平台。最终可以带来更好的就业机会,提高通过写书或做自由职业获得更多收入的可能性。
此外,你的网站应该提供非常具体的目的。
大多数人找工作只是创建在线简历,但你可以做到更多。你的具体目标(职业方向)是什么?那你的网站就应该围绕该目标进行设计和创建。如果你想要在某个项目或某个框架上工作,请把它也放在你的网站上。
我建议你的网站要有 4 大核心区域:
1. 主页
主页是网站的入口。它应该提供一个关于你是谁和你在做什么的一个很简单的概述。并且应该引导人们浏览与他们最相关的地方。
例如,你可以有两个主要按钮。一个引导用户到你写作的部分了解更多关于网页开发的信息,另一个引导至雇用页面,如果有人有兴趣招聘你。
2. 写作
放你的博客和教程的地方。尽可能地在这里多写,不要害怕分享。
3. 关于
详细介绍你是谁,你在做什么,而不是谈论你的个人生活,谈论什么导致你进行网络开发,你的旅程到目前为止,以及你想去哪里。可以提及一些你最喜欢的项目并链接到它们。
4. 雇佣我
你的网站的重要组成部分,如果别人有兴趣招聘你去做开发,那么这里就是他们要去的地方。
确保在推销自己和诚实之间找到适当的平衡。这个页面和“关于”的页面之间可能会有一些重叠,但是这个页面将更具体地说明你的技能。
该页面也应该有联系方式,以便人们可以联系到你。
5. 开始分享你所知道的一切
Nathan Barry 曾讲述了 CSS Tricks 创始人 Chris Coyier 的故事。
在该网站刚开始建立时, Chris 就公开分享了他正在学习的东西,以便其他人可以跟进。现在它已经成为了最大的 Web 开发网站之一。
我想说的是,你不必等到自己成为世界上最出色的专家,才开始写作和教学。
在网络商业世界中,有一种说法,每个人相对于别人都是一个专家。
令我困扰的是“专家”一词。教导你所知道的事情并不会有什么问题,如果对别人有价值,甚至可以出售这些信息。
但是自称一个专家可能会把事情弄得太过了。所以当你分享你的内容时,还不如诚实一点。
我更愿意在公共场合学习。有很多人刚开始都只是一个公众学习者。他们正在学习一种手艺,并记录他们正在学习的东西。随着学习到的东西越来越多,你就可以建立自己的内容,并在此过程中快速成长。随着时间的推移,你所在的行业中的其他人将开始将你为权威人士。
6. 奔着解决问题的目的去构建
成为专业开发人员最重要的方面之一就是完成一个具体目标的所有事情。
Web 开发商店真正的商业价值不是编码,而是他们正在解决的问题。编码只是他们用来实现这一点的首选工具。
阅读任何营销或文案,他们会告诉你销售的产品的好处,而不是功能。
Web 开发人员应该推销的是应用程序,以显示它们能如何有效地解决客户的问题,然后用具体的数据验证这些观点。客户通常对这种方法的反应更为敏感,而不是开发者所谓的那些尖端技术。
如果你能够展示你的编程技能,以及你能够以解决问题和制定更有意义的应用等具体意图来编写代码,对于雇主来说,你会更具吸引力。
所以,当你与潜在的雇主或客户沟通,以及在为你的网站撰写内容时,请考虑优势与功能。
当然,你也应该提到你的编码熟练程度,虽然大多数人都花时间在这上面。简要介绍一下让潜在的雇主知道你能做什么。
7. 保持学徒心态
你以为掌握所有东西的那一天就是你停止学习的那一天。
采纳终身学徒的心态。总是有更多知识去学习,总是更多的地方需要改进。
这在你职业生涯的早期阶段尤为重要。如果你是兼职或实习,或担任初级开发人员,那么你需要尽可能立即进入学徒心态并尽快成长。
你应该真的要这样做,即使你拥有一位实际的“导师”。
在 Jeff Goins 的 “The Art of Work” 一书中,他谈到了21世纪的师徒关系模式。
回到中世纪,这种关系非常正式。师傅将会接管学徒多年,学徒们将慢慢开始掌握师傅的手艺,直到他们达到了大师的头衔,到此他们就可以收徒了。
这种关系已然发生了变化,但把自己当做学徒已然很重要。主要的区别是,现在你必须密切注意潜在的导师和学习机会,并且你的人生旅程中将会有很多导师。
在网络开发的世界中,我们不断地在互联网上浏览,所以这可以有多种形式。
书籍、教程、课程、论坛和其他形式的学习都是有价值的。然而,我认为,最有价值的学徒形式来自于目前向处于你希望的职位的人的学习。
这就是为什么渴望和愿意学习是如此重要的原因。获得你的第一份开发工作并不是旅程的结束,而是开始。
那就是你真正开始学习和以指数级拓展你的知识的时候。
8. 学会协作
将编码作为爱好还是以编码为生的最大区别之一是学会与人合作。在整个职业生涯中,你需要与同行、老板、同事、客户、合作伙伴公司以及各种人物进行交互和协作。学会如何有效地与别人协作是很重要的。
在 Web 开发领域,沟通是关键。当一家公司进来并告诉你他们想要什么,但你并不是很清楚这具体是什么样的样子的时候,这可能在之后会引起很多问题和困扰。
同样,如果你无法与你合作的人沟通,你工作也将异常痛苦,你将无法完成工作。当你还在学习阶段时,有很多好办法可以做到这一点。当你开始教授你所知道的一切时,这种情况将会来临。人们会与你互动,有时是负面的,你将学会如何处理这些情况。
我也强烈建议为开源项目做贡献。这样可以让你了解在一个项目上协作的方式,其中不同的人可能会对处理问题的最佳方式有不同的想法。对开源项目做贡献可能令人生畏,但它可能为你的事业发展做出奇迹。
走出去并以此为生
成为一名 Web 开发人员很难。这意味着永无止境地学习和适应新技术的生活。这是职业生涯中不可或缺的技术之一,商务和沟通技巧也是。
这是一条非常值得的道路。你可以做到这些:解决人们的问题,使他们的生活更轻松,同时过上梦幻般的生活。
网上有无数的资源可以帮助您学习编码,其中很多都是完全免费的,但似乎缺乏资源来帮助人们实现到专业开发人员的转变。
我希望这本简短的指南为您提供一个良好的路线图,让您开始成为专业的开发人员。
请记住,除非你采取行动,否则不会发生任何改变。建立一个简单的投资组合网站,通过电子邮件发送给几个潜在的雇主,在媒介上写一些帖子。仅仅是开始做一些事情。
你尝试的次数越多,你做的就越多,你会越快从业余水平进阶到专业水平。
看完本文有收获?请分享给更多人
关注「伯乐在线」,看更多精选 IT 职场文章