很多朋友问过我各种各样的问题,比如我现在准备开始自学编程?

我想找一份程序员的工作,能给我一条建议或者去路线吗?

这种问题的话,其实是很难回答的,因为编程语言分很多种,而每一种编程语言、每一种技术都有不同的学习路线,并且这个学习路线还要视你个人的基础而定,就因人而异的,真要聊起来没有几个小时聊不完。

另外有些问题的话呢,很多人都问过,具有相当的普遍性。那么,对于这些问题的话,我专门建了一个社群,里面针对大家关心的问题我都写非常详细的解答,比如:

  1. 小白入门计算机,学习路线是什么样的?
  2. 计算机四大专业课该怎么学?
  3. 编程语言怎么选?
  4. 怎么利用GitHub精准搜索项目代码?
  5. 求职简历怎么写?

等等,一来是因为这些问题三言两语讲不清,二来很多朋友都有类似的问题,把这些问题集中整沉淀下来,大家直接去看,效率会更高。

大家可以点击左下角的链接,了解这个社群的详情。

下面的话呢,我们就正式今天的内容,在聊如何自学编程之前,首先要明确一点,你是否适合走编程之路。我总结了四个,你要打算走自学编程之路,必须要满足的前提条件。

第一个有足够的时间;第二个有强的自控能力;第三具有高中以上的学历;第四,有基本的物质保障,如果你满足的四个条件,那么你是完全可以通过自学成长为一名软件开发者的。

自学编程的前提条件

我们先从总体上面介绍一下自学编程的过程。我觉得如果你想自学编程的话大致可以分为这几个步骤:

第一个步骤就是明确你的目的。

孙子说,知彼知己百战不殆,明确你的目的这一点很关键的。因为不同的学习目的就会采用不同的这个学习策略和路线。

一般自学编程的目的无非就是以下5个:

自学编程的目的

然后我针对不同的目的分别详细说一下他们的学习策略和路径。

1、为了考上这个计算机专的研究生。

那么,这个目的的自学者的话,需要做两件事情。第一件事情就是啃下计算机专业的核心课程。因为你想考研究生的那个学校肯定会组织考试考查,所谓的核心专业课也就是我们常说的四大专业课:数据结构与算法、操作系统、计算机组成原理和计算机网络。这四大科目的学习方法可以参考下面这个教程:

https://zhuanlan.zhihu.com/p/393723155

第二件事情就是要熟练学习与掌握考研初试复试所用到那些编程语言,很多大学计算机专业,复试使用的是C、C++或者是java,所以你你一定熟练掌握这三门语言中的一门,另外,大多数学校上级复试考的是数据结构与算法,所以你除了把理论知识学好,平时的话一定要上机练习编程,可以找一些上级题目,平时进行一些自我模拟训练。

一般在牛客网上都能找到,注意一下时间因素,比如,你应该能够在两个小时之内使用指定的编程语言在指定的开发环境中完成4到5道数据结构与算法的编程题,因为上级复试很能看出一个考生的代码编写和程序调试的基本功,这一块一定要重视!

总之,以考研为目标的自学编程,它的主要特点就是以应付研究生入学考试的初试和复试为目的,相对来说,比较单纯、简单。

你只要掌握好考试的应试技巧,再收集一下报考院校的复试信息有针对性的准备一下就可以。

2、为了能够在IT行业找到一份程序员的工作和自学

以求职为目的的自学,关键是一定要弄清楚业界到底需要什么样的人才,然后有针对性地进行准备。

这个基本思路就是你要先收集就业信息,你可以上招聘网站或者访问你想求职的公司的那个网站去了解这个用人单位的人才需求信息,然后自己做一个简单的统计分析。

很多同学问,计算哪个方向比较火,其实自己去搜集信息对比一下就知道了,比别人告诉你靠谱多了,信息都是公开透明的。

比如我要找软件开发这个岗位,我收集了n家公司的这个用人需求信息,其中有大公司和小公司,然后看他们招的这个软件开发岗位需要应聘者熟练掌握哪些技术,对于你所感兴趣的一个公司,再有针对性的进行这个深的了解,也可以多问自己啊。

比如这个岗位要求的职业技能有哪些?目前我已经掌握了哪些?还有那些不会?

这个人才信息搜集工作是极为重要的,对于求职为目的的自学者来说,它能够为你的自学拟定一个方向,明确应该培养哪些职业技能,具体学习哪些技术?

另外,还有一个重点就是在这个自学的过程中,一定要主动的去做项目,最好能够参加一些商业项目,如果你的技术实力达不到或者没有这个机会,那么你就要自拟题目来开发个人的项目,可以去GitHub找项目,大家一定要记住,在求职之前,一定要完成一个能够代表你最高水平的作品,这个对于求职成功来说是非常关键的。

当你把这个个人项目做完,你就会通过发简历啊,找人进行推荐啊等等各种方式。毛遂自荐,只要你真的具备了相应的职业技能,然后你耐心一点,多半都是能够找到工作的,要知道IT行业对于人才的需求一直旺盛,你只要是金子,就总能找到发光的机会。

如果你不知道怎么通过GitHub找项目,也可以去我的社群看看,里面有一篇文章专门写了如何通过GitHub精准寻找项目源码。

3、是为了应付日常工作

以这种目的的自学受限可能比较大,因为要将真实的工作自动化并非一件简单的事情,但是这种自学也是收效最大的一种,因为他天生就是学以致用的。

比如我自己就是这么干的,我们实验室之前老师要求统计每个同学每周的出勤率,必须待满多少个小时,因为每个同学每天来签到和签退的时间都不一样,如果手动统计就会很费时间,后来我就写了个程序员读取签到机器的数据,自动计算每个同学的出勤时间,这样子一来的话,事情就变得方便,省事可靠。

对于那些并不打算转行的人来说,通过自学来掌握这个编程技术,然后用这些技术来改进自己的工作。这是一条光明大道,有助于你在这个工作中呃脱颖而出,因为你那些同事啊,多半想不到这么干。事实上就算他们想到了,你做不到,因为他们没有自学编程。

那么,具体应该怎么做呢?下面我给出一些建议,你首先要注意收集各种信息,看一看这个国内外,你的这些同行们,他们是怎么样应用这些技术的,然后接着你数一下你自己的日常工作中,有哪些是可以通过主动地应用信息技术的成果,或者是工具和自动化的。

软件开发的这个战场了,他并不全部都在IT行业,而是分布于几乎所有的正在被信息技术所改造的那些传统产业里头,这里面育着非常大的机遇。事实上我们已经看到很多这样的例子了,比如移动互联网技术成果和自行车产业的结合,导致共享单车横空出世,小黄车,小蓝车,迅速的占领了大街小巷,解决了人们那个出行最后一公里的危机,所以你可能确实不需要到IT行业淘金,因为你自己的那个行业在你自己的脚下可能就藏有一座金矿。

4、对编程的强烈兴趣

这是一种最自由,也最理想的自学形式。他要求有最大的外部环境的配合。这种目的的自学,它有可能培养出一个开发高手,出现一些创意十足的软件作品。这个里面的原因很简单,兴趣是学习的强大动力,好奇心则是各种发明发现的诱因。

去除了功利性的这种学习和探索才是真正的学习和探索。那么,出于这个目的自学编程的人,他多半是衣食无忧,并且家境宽裕,它有着稳定的明朗的未来预期,所以才能有这种自由的而不是功利性的选择。

这种情形的话,多数人并不具备,因为不常见,所以我们也就不再多说了。

5、为了创新,创造和创业和自学

为这种目的和自学的人,大多数都已经摆脱了菜鸟的级别,他们基本上都是雄心勃勃,意志坚定的。他们的一切行动都是以围绕着把这个项目做出来为目的,他们需要什么技术就去学什么技术?在这批人看来,技术是实现目标的工具和手段,学习技术不是目的,创新创造和创业才是目的。

这种自学情况的话呢不算太多,但是我必须要指出,自学编程的高级阶段应该就是兴趣驱动的,或者是以创新创业创造为目的的。

希望大家都能有机会进入这一阶段。

到目前为止的话,我已经把五种自学的目的给大家简单的介绍了一遍,不管是哪一种目的,都是有类似之处的,如下图:

编程学习过程

通常都是从学习一种编程语言起步的,然后紧接着就开始学习特定领域的开发框架,之后是开始做项目。而学习框架也学习三个阶段:

机器学习过程 (1)

最初只需要掌握怎么样使用它,并且知道如何配置就够了,你就可以在实际项目中用起来了,比如你要是使用spring这么一个东西去开发java应用,你只需要知道你用哪一些jar包,并且知道怎么去配置这个参数,那就够了。

但是你要想真正用好框架,你还需要认真的去看一些技术书籍,或者是技术视频才能比较深入的了解相应的开发框架的设计和运行原理,才能够解决在实际开发过程中所遇到的各种问题,这个就是框架学习的第二阶段

如果你想真正的精通这个框架,那么你还可以去阅读他的源码,把他的源码读懂弄清楚,这个开发框架也就给你彻底弄明白了。

其实多数的软件开发框架学到第二阶段就够了,就足以应付日常开发的需求,第三阶段需要花费太多的时间。在有这个必要的时候,你再去研读源码。其实不管是哪个阶段,在开发实践中学习与把握这个框架都是一个很重要的事情。如果只看书不动手,不应用,那是绝对不可能学好的。