如何开始学习编程？
======================================================

> 编程初学者可能都思考过这个问题，“我该怎么学编程？”这里我们提供些相关的参考指导来帮助你找到最适合自己学习情况和学习需要的方法。

![Know thyself](https://opensource.com/sites/default/files/styles/image-full-size/public/u23316/roman-know-thyself-osdc-lead.png?itok=oWuH8hRr "Know thyself")


最近有很多关于学习编程的争论。不仅仅是因为与软件开发公司公开的待应聘的职位数量相比较[符合招聘要求的人远远无法满足缺口][21]，编程也是[工资最高][22]和[工作满足感最强][23]的众多职业之一。也难怪越来越多的人都想进入这个行业。

但是你要怎么做才能正确地入行呢？“**我应该怎么学习编程？**”是初学者常见的一个问题。尽管我没有这些问题的全部答案，但是我希望这篇文章能够给你提供相关指导来帮助你找到最适合你的需求和自身情况发展的解决办法。

### 你的学习方式是什么？

在你开始学习编程之前，你需要考虑的不仅仅是你的方向选择，还要更多的考虑下你自己。古罗马人有句谚语，[γνῶθι σεαυτόν][24]（gnothi seauton），意思是“认识你自己”。投入到一个大型的编程学习过程中难度不小。足够的自我认识是非常有必要的，这能够确保你做出的选择通向成功的机会非常大。你需要思考并诚实地回答接下来的这些问题：

* **你最喜欢什么样的学习方式？**怎么做你才能学到最好？是通过阅读的方式吗？还是听讲座？还是主要通过动手实践？你需要选择对你最有效的方法。不要仅仅因为这种学习方法流行或者有其他人说过这种方法对他们很有用就选择了这种方法。
* **你的需要和要求是什么？**你为什么想学习如何编程？是因为你只是想换一份工作吗？如果是这样的话，你需要多次时间才能完成呢？你要牢记，这些是_需要的_ ，不是_想要的_ 。你可能_想要_下周就换份新工作，但是_需要_在接下来的一年里供养你正在成长的家庭。当你在人生的道路上面临方向的抉择时，时间的安排特别重要。 
* **你能获取的参考资料有哪些？**当然，重返大学并获得一份计算机科学专业的学位证书可能也不错，但是你必须对你自己实事求是面对现实。你的生活必须和你学习相适应。你能承受花费几个月的时间和不菲的费用去参加集训吗？你是否生活在一个可以提供学习机会的地方，比如提供技术性的聚会或者大学课程？你能获取到的参考资料会对你的学习过程产生巨大的影响。在打算学编程换工作前先调查好这些。   

### 选择一门编程语言

当你打算开始你的编程学习之路和考虑你的选择的时候，请记住不管其他人说什么，选择哪门编程语言来开始你的编程学习_关系不大_。是的，是有些编程语言比其他的更流行。比如，根据一份调查研究，目前 JavaScript，Java，PHP， 和 Python 处于 [最受欢迎最流行的编程][25] 中的前排。但是现在正流行的编程语言有可能过几年就过时了，所以不用太纠结编程语言的选择。像那些方法，类，函数，条件，控制流程和其他的编程的概念思想等等，不管你选的哪门编程语言，它们的底层原理基本是一致的。只有语法和社区的最佳实践会变。因此你能够用 [Perl][26] 学习编程，也可以用 [Swift][27] 或者 [Rust][28]。作为一个程序员，你会在你的职业生涯里用很多不同的编程语言来工作。不要认为你被困在了编程语言的选择上。 

### 试水

除非你已经涉足过这个行业或者确信你愿意花费你生命的剩余时光来编程，我建议你最好还是下水之前先用脚趾头来试试水温之类的来判断这水适不适合。这种工作不是每个人都能做的。在把全部希望都压在学习编程之前，你可以先尝试花费少量时间金钱来学习一小部分知识点来了解自己是否会享受这种每周起码花费 40 个小时来编码工作的生活。如果你不喜欢这种工作，你不太可能完成编程项目的学习。即便你完成结束了编程的学习阶段，你也会在你以后的编程工作中感到无比痛苦。人生苦短就不要花费你人生三分之一的时间来做你不喜欢的事了。　

谢天谢地，软件开发不仅仅需要编程。熟悉编程概念和理解软件是怎么和他们结合在一起的是非常有用的，但是你不需要成为一个程序员也能在软件开发行业中找到一份报酬不菲的工作。在软件开发过程中，另外的重要角色有技术文档撰写人、项目经理、产品经理、测试人员、设计人员、用户体验设计者、运维/系统管理员和数据科学家等。软件成功的启动需要很多角色之间相互配合。不要觉得学习了编程就要求你成为一个程序员。你需要探索你的选择并确定哪个选择才是最适合你的。

### 参考的学习资料

你对学习参考资料的选择是什么？可能正如你已经发现的那样，可供选择的参考资料非常多，尽管在你的那片区域不是所有的资料都能够获得。

* **训练营**：最近这几年像 [App Academy][5] 和 [Bloc][6] 这样的训练营越来越流行。训练营通常收费 $10K 或者更多，他们宣称在几周内就能够把一个学生培训成一个称职的程序员。在参加编程集训营前，你需要研究下你将要学习的项目能确保正如它所承诺的那样，在学生学完毕业后能够找到一个高薪的长期供职的职位。一方面花费了数目不小的钱财，而且时间也花费了不少——通常这些都是典型的全日制课程并且要求学生在接下来的连续几周里把其它的事先放在一边专心课程学习。然而时间金钱这两项不菲的消耗通常会使很多未来的程序员无法参加训练营。
* **社区学院/职业培训中心**：社区学院常常被那些调研自己学习编程的方式的人所忽视，不得不说这些人该为自己对社区学院的忽视感到羞愧。你在社区学院或者职业培训中心能够接受到的教育是和你选择其他方式学习编程的学习效果一样有效，而且费用也不高。
* **国家/地方的培训项目**：许多地区都认识到在他们的地区增加技术投资的经济效益，并且已经制定了培训计划来培养受过良好教育和准备好的劳动力。培训项目的案例包括了 [Code Oregon][7] 和 [Minneapolis TechHire][8]。检查下你的州、省或自治区是否提供这样的项目。
* **在线训练**：许多公司和组织都提供在线技术培训项目。比如，[Linux 基金会][9]致力于通过开源技术使人们获得成功。其他的像 [O'Reilly Media][10]、[Lynda.com][11] 和 [Coursera][12] 在软件开发涉及的许多方面提供培训。[Codecademy][13] 提供对编程概念的在线介绍。每个项目的成本会有所不同，但大多数项目会允许你在你的日程安排中学习。
* **MOOC**：在过去的几年里，大规模开放在线课程的发展势头已经很好了。像 [哈佛][14]、[斯坦福][15]、[MIT][16] 和其他的一些世界一流大学他们一直在记录他们的课程，并免费提供在线课程。课程的自我指导性质可能并不适合所有人，但可利用的材料使这成为一个有价值的学习选择。
* **专业书籍**：许多人喜欢用书自学。这是相当经济的，在初步学习阶段后提供了现成的参考资料。尽管你可以通过像 [Safari][17] 和 [Amazon][18] 这样的在线服务订购和访问图书，但是也不要忘了检查你本地的公共图书馆。

###	网络支持

无论你选择哪一种学习资源，有网络支持都将获得更大的成功。与他人分享你的经历和挑战可以帮助你保持动力，同时为你提供一个放心的地方去问那些你可能还没有足够自信到其他地方去问的问题。许多城镇都有当地的用户群聚在一起讨论和学习软件技术。通常你可以在 [Meetup.com][29] 这里找到。专门的兴趣小组，比如 [Women Who Code][30] 和 [Code2040][31]，在大多数城市地区经常举行会议和黑客马拉松活动，这是在你学习的时候结识并建立一个支持网络的很好的方式。一些软件会议举办“黑客日”，在那里你可以遇到有经验的软件开发人员，他们能够帮助你解决你所困扰的一些问题。例如，每年的 [PyCon][32] 会议都会提供几天的时间来让人们聚集在一起工作、研讨。一些项目，比如 [BeeWare][33]，使用这些短暂的时间来帮助新程序员学习和对这些项目做贡献。

你的网络支持不需要来自正式的聚会。一个小的学习小组可以有效地保持你的学习积极性，并且可以像在你最喜欢的社交网络上发布邀请一样容易形成。如果你生活在一个没有大量软件开发人员社区所支持的聚会和用户组的地区，那么这一点特别有用。

### 开始学习编程的几个步骤

简单的来说，既然你决定学习编程，可以参考这几个方法给自己一个尽可能成功的机会：

1.  将你的需要/需求和参考学习资料列出清单并进行收集
2.  搜寻在你的当地那里能够可用的选择
3.  放弃不能符合你的需求和参考学习资料的选择
4.  选择最符合你需求的和最适合你的学习参考资源
5.  找到一个能够得到支持的网络

务必牢记：你的学习过程永远不会结束。高速发展的软件产业，会导致新技术和新进展几乎每天都会出现。一旦你学会了编程，你就必须花时间去学习适应这些新的进步。你不能依靠你的工作来为你提供这种培训。只有你自己负责自己的职业发展，所以如果你想保持最新的技术和工作能力，你必须紧跟行业最新的技术。


祝你好运！

（题图 : Opensource.com 修改自 [维基共享][20]里的某不知名艺术家的作品 ）

--------------------------------------------------------------------------------

作者简介：


VM (Vicky) Brasseur - VM (aka Vicky) 是一个技术人员，也是项目、工作进程、产品和企业的经理。在她的长达 18 年的科技行业里，她曾是一名分析师、程序员、产品经理、软件工程经理和软件工程总监。目前，她是惠普企业上游开源开发团队的高级工程经理。她的博客是 anonymoushash.vmbrasseur.com，推特是 @vmbrasseur。　

--------

via: https://opensource.com/article/17/4/how-get-started-learning-program

作者：[VM (Vicky) Brasseur][a]
译者：[WangYueScream](https://github.com/WangYueScream)
校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

[a]:https://opensource.com/users/vmbrasseur
[1]:https://opensource.com/tags/python?src=programming_resource_menu
[2]:https://opensource.com/tags/javascript?src=programming_resource_menu
[3]:https://opensource.com/tags/perl?src=programming_resource_menu
[4]:https://developers.redhat.com/?intcmp=7016000000127cYAAQ&src=programming_resource_menu
[5]:https://www.appacademy.io/
[6]:https://www.bloc.io/
[7]:http://codeoregon.org/
[8]:http://www.minneapolismn.gov/cped/metp/TechHire#start
[9]:https://training.linuxfoundation.org/
[10]:http://shop.oreilly.com/category/learning-path.do
[11]:https://www.lynda.com/
[12]:https://www.coursera.org/
[13]:https://www.codecademy.com/
[14]:https://www.edx.org/school/harvardx
[15]:http://online.stanford.edu/courses
[16]:https://ocw.mit.edu/index.htm
[17]:https://www.safaribooksonline.com/
[18]:https://amazon.com/
[19]:https://opensource.com/article/17/4/how-get-started-learning-program?rate=txl_aE6F2oOUSgQDveWFtrPWIbA1ULFwfOp017zV35M
[20]:https://commons.wikimedia.org/wiki/File:Roman-mosaic-know-thyself.jpg
[21]:http://www.techrepublic.com/article/report-40-of-employers-worldwide-face-talent-shortages-driven-by-it/
[22]:http://web.archive.org/web/20170328065655/http://www.businessinsider.com/highest-paying-jobs-in-america-2017-3/#-25
[23]:https://stackoverflow.com/insights/survey/2017/#career-satisfaction
[24]:https://en.wikipedia.org/wiki/Know_thyself
[25]:https://stackoverflow.com/insights/survey/2017/#most-popular-technologies
[26]:https://learn.perl.org/tutorials/
[27]:http://shop.oreilly.com/product/0636920045946.do
[28]:https://doc.rust-lang.org/book/
[29]:https://www.meetup.com/
[30]:https://www.womenwhocode.com/
[31]:http://www.code2040.org/
[32]:https://us.pycon.org/
[33]:http://pybee.org/
[34]:https://opensource.com/user/10683/feed
[35]:https://opensource.com/article/17/4/how-get-started-learning-program#comments
[36]:https://opensource.com/users/vmbrasseur
