如何自学编程

应夏姐姐之邀,写一点关于编程方面的东西。我是觉得挺为难的,因为理论上来讲,我是没有资格写这方面的东西的,毕竟计算机并非我的专业。但我平时也算是大量接触这方面的内容,吹一吹牛还是没有问题的,所以今天要说的是如何自学编程,给那些以后有志于从事相关工作、喜爱自学、不爱正常上课的一点建议和安慰,要知道,业内大咖半路出家、自学成才的也不在少数。

学习轨迹

1、入门

掌握关键的计算机科学概念与基本的编码指令。

推荐课程:

  • Introduction to Computer Science——Udacity

2、学习至少一门面向对象编程语言(C++、Java、Python等)

学习C++、Java、Python这种经典的面向对象编程语言,不仅用途十分广泛,而且能够为今后的学习打下坚实的基础,许多新兴的编程语言例如Go、Swift都能看到它们的影子。推荐课程:

基础课程:

  • Java Programming: An Introduction to Software——Coursera
  • Introduction to Programming in Java——MIT
  • Google’s Python Class——Google Developer Training
  • Introduction to Interactive Programming in Python——Coursera
  • Learn C++——com

进阶课程:

  • Java Programming: Data Structures and Beyond——Coursera
  • Design of Computer Programs——Udacity
  • Learn to Program: Crafting Quality Code——Coursera

3、学习代码测试

学习如何创建测试,捕获bug

推荐课程:

  • Software Testing——Udacity
  • Software Debugging——Udacity

4、培养逻辑推理能力,了解离散数学知识

推荐课程:

  • Mathematics for Computer Science——MIT
  • Introduction to Mathematical Thinking——Coursera
  • Probabilistic Graphical Models——Coursera
  • Game Theory——Coursera

5、深入理解算法与数据结构

了解基本数据类型(栈,队列等)、排序算法(快速排序,归并排序,堆排序等)、数据结构(二叉搜索树、红黑树、哈希表等)……

推荐课程:

  • Introduction to Algorithms——MIT
  • Algorithms Part 1&Algorithms Part 2——Coursera

6、学习操作系统知识

推荐课程:

  • Computer Science 162——YouTube

7、阅读、理解现有的代码

这个毫无疑问要选择GitHub,GitHub是阅读代码、参与开源项目最好的地方,没有之一。如果你的简历里有一句:“为某某开源项目贡献过几行代码”,那一定是让面试官刮目相看的。

8、使用在线评测系统练习检验编码能力

如果没有机会参加ACM-ICPC这样的赛事,也可以通过在线评测系统实践算法知识,像AOJ、UVA这样的网站,都收录了大量程序设计竞赛的试题,并会定期举办可以在线参与的比赛。

9、额外的技能点

以上技能点推荐主加,如果觉得还不够,可根据兴趣选择以下技能:

  • JavaScript
  • CSS & HTML
  • Ruby
  • PHP
  • Perl
  • Shell script
  • Lisp

推荐网站:

  • Codecademy(交互式学习平台,体验非常好)

以上的课程推荐来自Google的学生职业生涯指导以及自己的一些整理,你会发现大多数课程都是英文的,这不是什么崇洋媚外啊,编程这个东西最本源的技术在国外,你看的许多中文教程也有大部分是外文翻译或改编的。

创建个人博客

我们并非计算机专业的学生,如果以后想从事相关的工作,如何向面试官证明自己的学习经历呢?这个业内有公认的最简单最实用的途径——个人博客。博客是推销自己最佳媒介,这句话在其他领域或许已经不再受用了,但在编程领域绝对还是受用的。

一个成功的博客不仅能让你成为别人眼中的大咖,还能让你获得更多的工作机会,除了“为某某开源项目贡献过代码”之外,在简历上附上个人博客的地址也会让从众多竞争者中脱颖而出,阿里的云栖社区中有许多分享相关面试经历的文章,推荐大家看一看。此处引用一段《软技能:代码之外的生存指南》中的话:

“当你申请一份工作的时候,你的简历通常大概只有两页的篇幅。当你接受面试的时候,你通常会跟面试官聊上一两个小时。以如此简短的简历和如此短暂的面试来评估一名软件开发人员的技能非常困难,所以雇主以此判定某个人是否适合某个工作岗位也颇具难度。然而试想一下,如果一位软件开发人员拥有一个定期更新的博客会怎么样。他的博客可能包含了丰富的相关信息,包括代码示例,还有对软件开发各个方面的深入分析。与任何其他方式相比,阅读一位软件开发人员的博客能让我对他了解更多。

学生阶段的我们,个人博客可能更多的是用来做学习笔记,但这也足够了,将脑子中的东西转化成文字绝非简单的复制那么容易,这是一个再思考与再整理的过程,绝对对你的学习大有益处。

那么如何创建个人博客呢?最简单的途径是使用现有的博客系统,国内最常见的IT博客包括CSDN、51CTO、博客园、开源中国等,推荐大家使用CSDN,除了用户数量多以外,最重要的优点是百度收录速度极快(亲测),上午发的文章,一般下午就能通过搜索引擎搜索到,无形中就大幅增加了浏览量。

如果有一点闲工夫的话,搭建一个个人博客网站会是更好的选择,使用Wordpress博客平台搭配Xampp集成软件包,搭建个人博客网站也只是分分钟的事情,当然前提是你已经有了服务器和一个解析过的域名。

定期更新自己的博客会是一个让你受益匪浅的好习惯。

如何抓住学习的重点

不管学什么,最终都是要去工作的。互联网公司的招聘要求大多不会太笼统,废话、虚话连篇,相关职位的要求大多比较具体,例如去哪儿网的前端开发工程师任职要求如下:
【工作职责】
1.负责去哪儿网各产品线Web前端研发;
2.负责去哪儿网各产品线易用性改进和界面技术优化;
3.Web前沿技术研究和新技术调研。
【任职要求】
1.精通JavaScript.Ajax等Web开发技术;
2.精通HTML/XHTML.CSS等网页制作技术,熟悉页面架构和布局;
3.熟悉W3C标准,对表现与数据分离.Web语义化等有较为深刻的理解;
4.对互联网产品和Web技术有浓厚兴趣,有较好的学习能力和强烈的进取心;
5.具有较强的沟通能力,分析和解决问题的能力,具备良好的团队合作精神。
【具有以下能力者优先考虑】
1.具有Flash.Mobile WEB/WAP.HTML5/CSS3等开发经验;
2.熟悉Linux平台,掌握PHP.Java.C/C++中至少一种后端开发语言;
3.能够理解数据结构和算法设计,具有一定的软件工程意识。

如果你对某个职位感兴趣,例如上面这个,就可以从上面的招聘要求中找到学习的重点。针对感兴趣的职位要求选择相应的学习重点,算得上是一个非常实用的方法了。

 

学海无涯,奉劝大家还是要踏踏实实学习,不要稍微知道点东西就觉得自己牛逼的不得了,要知道比你厉害的人多了去了,你不懂的东西多了去了,有时候看了点东西反而更觉得自己懂的少,我也常常如此勉励自己(严肃脸)。

今天就吹到这里吧,以后有机会再吹,因为我暂时想不出其他内容了……

附:

以上所提站点,都是极佳的自学编程平台,可以在其中搜索到相关推荐课程,网址如下:

  • Udacity——https://www.udacity.com/
  • Coursera——https://www.coursera.org/
  • MIT——https://ocw.mit.edu/
  • Google Developer Training——https://developers.google.com/
  • Codecademy——https://www.codecademy.com/
  • GitHub——https://github.com/
  • SEE——https://see.stanford.edu/
  • UVa——https://uva.onlinejudge.org/
  • AOJ——http://judge.u-aizu.ac.jp/onlinejudge/

 

关于 “如何自学编程” 的 1 个意见

评论关闭。