如何转行做编程

转行进入科技和编程行业可能是所有职业变化里最大的一个了,然而,这并不让我感到意外。试想还有哪个行业能让你做喜欢的事还能得到工资?还有哪个行业能够让你在开发改变人们生活和工作的产品时得到满足感?这是一个非常值得进入的行业,何况它提供的报酬也不低!

也许这是因为程序员是少数几个你可以自学成才的职业。我可以想象一个熟练使用Excel的会计开始考虑转行到编程。我自己就认识机械工程师、会计、甚至医生,成功转行为程序员,并且非常喜爱他们的职业。这在几十年前是无法想象的,大多数人用他们一生的时间从事他们曾经学过的领域的工作。事实上,我们正在快速地进入一个自学者将被宠坏的时代。现在我们有网上课程、有YouTube视频、有提供练习的在线编程环境、有你可以问问题的论坛、还有你可以直接上手并成为真正的贡献者开源项目。所有编程学习者需要的资源都已经到位了,而你所需要的仅仅是时间、纪律、动力和一个好的计划。

如果你是那种喜欢一头扎进深水中然后努力找出路的人,那么你可能不太需要考虑学习计划,但是我个人认为计划是非常重要的。编程的领域很庞大,满载各种不同的选择,因而你迈出的每一步都需要做出决策,没有计划很容易迷失。学习计划并不需要特别复杂和一成不变,有一个计划能够让你活得更简单,允许你把注意力集中在学习上。

如何在几大编程领域进行选择?

编程有几个主要的领域。虽然好的开发者可以在各个领域之间转换,但是在初学阶段,最好还是集中在一个领域,锻炼自己的技能。就像摄影师选择他们要拍摄的对象一样,是拍摄野生动物?城市生活?还是拍摄模特?这里涉及到很多不同的微妙技能。鉴于培养这些技能需要时间,所以最好能专注于一项,让你做的事情更加专业。

很广泛地说,编程有几大分类:Web开发、移动开发、企业开发(enterprise development)、系统编程、还有嵌入式开发。当然还有一些别的,但是这些是最常见的。

我对那些正在进入软件开发行业的朋友的建议是去选择那些你能够在一年以内学会并开始真正做项目的领域。我认为最好的领域,是移动和Web开发。这两个都能在一年之内学会,而且还能提供一个相当广阔的工作机会。当你学完了移动开发,你可以自己当老板开发你自己的APP,或者当一个自由职业者给其他企业开发APP,或者走传统的就业模式。Web开发者同样也有相似的选择。

我没有推荐企业开发,因为企业开发很难自学,而且这个领域大部分工作需要大学的相关学位。嵌入式开发的确支持独立工作,你能找到一个不需要大学学历的工作,但是嵌入式开发的学习曲线特别高,比移动和Web开发高了太多。

如果我要转行到编程,我将会选择进入我刚刚建议的领域:移动开发和Web开发。

###选择开发栈(Development Stack)

移动或者Web开发并不是你的最终选择。每个领域都包含了一些相互竞争的技术。就连经验丰富的开发者也会发现掌握所有技术会非常困难。作为一个新手,你应该在涉猎该领域其他技术之前,选择一个单独的技术然后专注地去彻底掌握它。

移动开发人员需要在两个最流行的平台做出选择:Android 和 iOS。这不是仅有的两个,也有其他的,但是 鉴于Android和iOS组成了移动开发项目的大部分,选择其中一个肯定不会有错。

另一方面,Web开发人员需要选择一个重要的编程语言和一个Web开发框架。有一个相当长的流行编程语言的列表供你选择。目前最流行的语言有:Python,JavaScript,Ruby,Java,C#,PHP,Go-Lang,和一些其他的。我的建议是选择Python,Ruby或者JavaScript作为开始。许多大学的编程课程已经把Java换成了Python。这是一个好的选择,被很多人赞同,所以你可以跟随他们的选择,你不会走错。另一个关于语言的事是编程语言自己的社区,这些社区认可技术而非学历。这表示如果你有技术而没有学历,你可以很容易的在这些社区中找到工作。对于PHP来说也是一样,不过我发现使用这门语言的项目缺少设计严谨性和设计思路。我不是想说PHP的坏话,我很确定很多PHP项目具有高等级的工程严谨性,但是就我看到的来说,不严谨的PHP项目要比Python,Ruby或者Node+JavaScript的项目多得多。一旦你选好了语言,你就需要为这个语言选择一个好的框架。目前我想要尽量保持做简单的选择,因为关于所有语言中各种框架的详尽处理方式不在本文的讨论范围之内。

你还需要做出一些其他的选择,选择操作系统、数据库和开发环境。你可以随意选择你最熟悉的操作系统:Windows,Mac,或者Linux。当你考虑到数据库的时候,移动开发人员的选择是自动生成的(特定的技术也会决定数据库)。不过,Web开发人员可以数据库的选择却非常的多。我将再次省略掉细节讨论,直接推荐使用Postgres!

最后,你必须选择一个开发环境(version control,IDE,以及其他)。在这里我不做任何推荐,因为之后去改变也不是很难,而且当你开始上手以后,很可能想要去试验不同的工具。去做点网络搜索,选择任何一个简单给力的就可以开始了。

制定一个学习计划!

当你选好了编程领域和开发栈,你知道现在你必须尽快熟悉这个领域,即使这是一个相当大的领域。最简单的起步方法是多与该领域的朋友沟通,请他们多指导你。你也可以在网上请别人指导你。有一些论坛,有经验的开发者很乐于给你提供指导建议。你可以试着在reddit.com上提问。

你可能会得到很多建议,有时候他们看起来相互矛盾。但是,这是预料当中的。人们会建议对他们最管用的东西。它们都是不同的方法,没有绝对的好与坏,你必须自己找到最适合你的。

制定学习计划需要用到一点自我反思的能力。你必须知道怎么学习对你最有效,然后制定一个相应的计划。

当你对学习有了一个清晰的思路,你会发现有众多的学习课程、视频、书籍和能练习编程的地方。用最合适的资源来开始吧,记着要不断进行微调。

结论

我希望这篇博文已经讲述了自学编程的可能性。我必须在这篇文章中保持一种简要的讨论风格,因为详细的内容会超出这篇文章的范围。我在这篇文章中非常想要传达的思想是,你完全可以通过自学来转行到编程这一领域,不需要拥有正式的计算机科学学位。


原文地址