Unimen 2020-02-20
我从Joseph——一个想要成为程序员的人那里采集到了一些重要问题。他给我发了这样一封邮件:
? ?
David你好,我叫Joseph。我徘徊于你的网站,想要寻找一个专业的计算机程序员,我不知道你是否能够帮助我。虽然我还年少,但是已经下定决心要为编程奉献我的一生。你在你的个人资料上面说你是一个专家,所以我希望能直接得到专家的指导。你能给我一些关于编程的技巧吗?进入的最佳领域是什么,应该学习什么语言,以及想要成为一个成功的程序员,我应该怎么做。
希望能尽快收到你的来信,非常感谢。?? ? ? ? ? ? ? ? ? ? ??
下面是我的回信:
Joseph你好,
你可能不相信,但我可以告诉你,你已经在正确的轨道上,并遥遥领先于其他许多人:
? ?
你的目标明确:你想成为一个程序员。
你准备学习如何成为一个专家。
你采取了行动。
你从我——一个有经验的程序员这儿寻求帮助。
? ? ? ? ? ? ? ? ? ? ? ?
如果你想知道编程的最佳领域是什么以及要学习什么语言,那么我给不了你确切的答案。
举个例子,我的专长是用Java构建后端应用程序,但我认识相当多的一些前端开发人员讨厌每天去上班。就像医生也有成功的外科医生,麻醉师和儿科医生,成功的程序员也有许多不同的类型。
你可以成为一个成功的前端或后端开发人员,也可以专注于大数据或游戏的开发。使用Javascript、Java、Python等,你都可以取得成功。什么语言没关系。唯一重要的事情是你必须喜欢你做的事情,然后成功就会追随而来。
人生苦短,所以不要将时间浪费在你不热爱的东西上面。如果你早晨醒来不觉得编程令人兴奋,那么你现在在做的事情并不值得你投入精力。看看Bill Gates、Warren Buffett、Sir Richard Branson和Elon Musk,你会发现,他们都热爱他们做的事情,而且即使他们不得不做义工的话,可能依然会选择做同样的工作。
如果你不知道你最感兴趣的编程领域是什么,那也没关系。大多数人一开始都是这样的情况。
随便从什么东西开始。可以学习JavaScript,或Java,或Python等。我发现对我来说,学习新技术的最好办法是在实践中应用它。提出一个项目,例如为你的家人建立一个基本的网站,或创建一个移动app等。
将这个项目分解成为更小的任务,然后弄清楚从点A到点B要采取的步骤是什么。分解成的任务越小越好,因为它会让你保持前进,并且你完成的任务越多,对此技术的技能掌握就越有自信。当你碰到难题的时候,一方面要深入挖掘,另一方面也可以在google和stackoverflow搜索解决方案。
在与某种特定的编程语言相处一段时间之后,你可以选择继续深入,也可以尝试其他的东西。这里是没有错误决定的。最坏的事是没有做任何事情。
如果你坚持做一件事,做的时间够长,那么你可能最终成为专家,当然如果你不断地尝试许多不同的技术,那么你可能会觉得你更像是一个多面手。这些职业方向都没有错,而且这两种情况下你都可以获得成功。
最后但并非最不重要的一点,这里有一些点子可以帮助你作为一个程序员在你的职业生涯中取得进步(它们对我也有效,所以,你可能会想要试一试):
每天都争取学点新的东西
如果你按每天1%的速度提高(1.01 ^ 365),那么一年后你将比现在优秀37.8倍。
向最优秀的人学习
三人行,必有我师焉!这里所谓最优秀的人可以是你工作公司的程序员、测试人员或者经理,可以是编程书籍的作者,也可以是写博客说明他们做了什么的程序员。这些人用了很多年的时间来掌握他们的技能,通过向他们学习,可以让你避免走弯路和犯错误。这是一条捷径,可以让你通过揣摩他们的不同做法,来找到适合你自己的做法。阅读他们写的书,订阅他们的时事通讯,甚至阅读他们阅读的东西。
不管你做什么,最好能够竭尽全力地去做
否则,你可能会错过一些重要的经验教训。
寻找模式
寻找编码、解决问题、与其他人协作的模式。你能识别和处理的模式越多,你在最少时间内可解决的复杂问题越多。
最大限度地学习
每当我决定换一份工作的时候,我总会寻找那些能让我有机会学习新技能,同时我以前学到的技能让老板/客户受益的工作。
实践
真正成功的程序员在他们工作时间之外,也会花时间在编程上。他们会致力于开源项目,兼职自由职业工作,工作于创业点子,读书,回答stack-overflow上的问题,写博客文章等。总是寻找机会提高自己的技能,获得更多的经验。
对于你现在的情况,我无法做更详细地讨论,但我希望我的这封邮件能为你提供至少一个有用的思路。
非常乐意回答你任何有关编程/职业方面你可能碰到的问题。