前言——编程到底是什么?

我理解的编程并不是所谓编程语言,而是一种是将实际问题抽象为一种模型,再用一种高度逻辑化的语言,用特定的算法进行描述与实现。也就是说,编程的真正内涵是一种思维,我们使用这种思维和计算机能够理解的语言去写出程序。

如果你是计算机专业学生,务必先学习计算机基础知识,明白计算机原理,推荐书籍《计算机科学导论》(该专业一般都会学习这门课程,感兴趣的朋友也可以学习)

该图是第二版,现在出第三版了

一、选择学习方向

众所周知,编程语言有很多种,但是比较实用、热门的却为数不多,例如:Python、C和C++、C#、JAVA、PHP、JavaScript、SQL、Ruby等,那么我们该如何选择呢?

为了让大家更好地了解并选择所要学习的语言,我特地找来了几张热门语言的介绍图:

改图对C#描述有部分错误

看完上面的语言介绍,可能你已经懵了,这么多!?我该选哪个呢?那么我给你个建议吧。入门语言请从,Python、C语言里面二选一,进阶之后再去掌握其他更高级的语言。

小编是从c语言入门的,就我个人感受而言,c语言入门后,可以更快地掌握其他编程语言。因为c++、java等高级流行语言其实都是基于c语言的基础上开发的。

所以你要是想更快地入门其他高级语言,那么掌握C语言无疑是更好的选择。

三、调整学习心态

看完前面的语言选择·,相信你已经做好学习编程的准备了,那么现在你需要改变自己的心态。在你学习编程之前思考一下你的目标,当你有最终目标时道路会更加的清晰。那么,你想要写什么?网站?游戏? iOS 或者 Android 应用?或是你是想自动化完成一些乏味的任务让你有更多的时间看窗外的风景?也许你只是想更具有就业竞争力找个好工作。所有的这些都是有价值的目标,这些目标都是你编程学习推动力的一部分,没有推动力的人,是无法在编程这种无聊乏味的学习之旅中走远的。

如果你现在还是很坚定要学习编程,那么我要给你点个赞,也希望你能一直坚持下去,并把这种意志力用在未来的任何事情上。

三、学习的方式与方法

通用的学习方法:

1.使用多维度的方法结合学习

我喜欢把书和网课两者结合学习,并不是边看网课边看书。课少的时候我基本都是早上看书,下午看网课和敲代码。看书时预习,网课是复习,敲代码是实战。

2.切忌只用脑不用手

许多自学编程的朋友都喜欢把视频看个不停,这样是没有效果的,所谓编程肯定要自己敲代,如果没有实战,一切都是纸上谈兵,理论再强都写不出来好的程序。

3.敲代码请尽量使用电脑

手机上有许多编程软件,但都是非常鸡肋的,用来敲一敲“hello world”没问题,但是用来开发大型项目或者作为长期的开发工具,还是请选择电脑。所以初学者也尽量使用电脑作为上手工具。

相关专业的校学生,请务必:

1.学好所有相关的专业课程,无论它多么枯燥乏味。

你若不学计算机组成原理,你便不知道一个int型数据类型占4个字节是何物理意义,更不会透彻理解变量声明和变量定义的区别;你若不学数据结构,你便不知究竟该如何用最优的算法进行最优的深度优化。基础是重中之重,打好基础在工作后能让你甩开大部分同行一条街。

2.不要质疑老师让你阅读代码、抄写代码的意义。

我曾经对这样的学习方式一度十分嗤之以鼻,自负地认为简直不可理喻,但事实证明,你老师终归是你老师,这种做法一定有其存在的合理性。你能看懂的和你能写下的绝非是同种东西,一旦落笔便能知道,你很可能连静态局部变量和动态局部变量都没有彻底搞清。

给自学编程朋友的提议:

1.不要盲目报读培训机构

现在许多自学编程的朋友都喜欢去培训机构,但是我想说的是,培训机构能教你的永远是浅层,而自学得来的往往比培训机构交给你的要深得多,要稳固的多。

2.网络教学资源有更多选择

关于编程的教学视频资源其实非常丰富,没必要去购买收费的教学资源,在大学mooc网,网易公开课等等都有非常优质的教学资源。

四、学习路线

转行或该专业学生:计算机导论(部分数据结构知识)→入门编程语言→数据结构→高级语言

感兴趣或自学编程玩玩:入门编程语言→数据结构(可跳过)→高级语言

我想了很久到底该不该区分这两个,因为自学编程是不需要太牢固的计算机基础知识的,而作为该专业的学生必须掌握计算机基础知识。但主要还是看个人的选择,这并不意味着如果你是因为感兴趣学编程就不能去学习计算机导论,只是在我个人看来,没多大必要。

五、成长路线

  1. 看书,看视频,看博客,听课等等
  2. 对着书敲代码
  3. 脱离书自己敲代码
  4. 自己实现一些小DEMO
  5. 进项目看代码
  6. 在别人指点下写代码
  7. 自己独立在别人搭建好框架内填写代码
  8. 自己独立负责别人设计好的模块的实现
  9. 自己独立负责一个软件模块的设计和实现
  10. 负责较大软件模块,拆分模块,分子任务给他人
  11. 负责一个小项目,设计,拆分,分派任务
  12. 做较大的软件系统的架构设计

更多推荐

学习编程的正确打开方式,千万不要错过