如何通过自学入门软件开发

Posted by Wheat7 on December 4, 2016

如何通过自学入门软件开发

最近好多学弟学妹来问我非专业如何自学软件开发,我自己也迷茫过,也曾摸爬滚打,最后自己还是通过互联网通过别人的帮助入了门,于是写下这篇,主要是想把自己的经验说出来,希望能给学弟学妹、以及自学软件开发的同学一点点帮助。 由于我自己也算是才入门,还一直在学习,这篇文章也只是我一点点的体会,也会有很多错误和不足,可以在文章下方留言提醒和指导我噢。

铺垫一番

先说下我个人的情况,二流本科自动化专业,大学没怎么学,上过C语言的课,上过计算机组成原理和汇编,还挂了。
说说小时候的经历,
小学一年级开始上网吧,初中的时候,贪玩还休了学,逃课网吧挂机玩,回家家里不给联网就玩单机,于是痴迷WAR3至今。在此期间,捣鼓了各种软件,用易语言和Basic编程,想做”黑客”,抓过肉鸡,还有。。然后后来因为上高中中断了。
上了大学就荒废了,大学基本没有怎么学习,逃了3/5的课。大四上学期去考研,没有找工作,最后考研失败了,跪在数学36分。 来年1月,当知道考研结果以后开始考虑找工作,想到了自己上大学前的这些爱好,决定做软件开发。这个时候,我算有一点C语言基础,指针都搞不清楚。
于是网上找了一份c语言的教程看,看到一半看不下去了,一边看《C Primer Plus》,不错的书,自己还是比较能捣鼓,租了个服务器,用Wordpress搭了个自己的小博客,也就是小站前身,现在小站已经从Wordpress换到了Jekyll+Github,因为Jekyll+Github更轻量,还能用我爱的MarkDown。 大四下学期开始了,开始找工作,朋友在一家互联网公司做UI,给我推荐去她们公司,后来得知她们公司是招前端的,公司是做互联网产品,当时觉得还挺有趣,我说我虽然不会,但是我能学习,他们给了我个需求,然后做一个小页面给他们。于是我就回去学前端,在w3c看了一遍HTML,CSS,JavaScript,做了一个简陋的页面,发了过去,人家说太简单,又发了一个过来让我做,由于我当时已经有offer,就没有继续做。
我学了半个月不到的前端就去找前端的工作,有一家国企背景大集团的子公司要做公司产品电子商务的网站,缺一个前端,给我发了offer。
后边又去投深圳一家公司的前端,最后这家公司也给了offer,但是是去做Java Web开发,这家公司也就是我毕业去的公司。
靠谱的offer当时觉得也就这两份,有一些笔试了以后就没有下文,主要也是自己做的差,有一些觉得我专业不符。
第一家最后没有去,因为转正待遇跨度太大,也因为有第二个公司的选择,最后是有些后悔了,毕竟是做自己的产品的公司,比外包好一些。
第二家暂时也不说了,后边更新一篇《应届生到深圳坑公司的天坑之路》,不一定叫这个名字,但是大概就是这个意思,这家公司可能还到学校招聘,要了解的学弟学妹留言给我。
说说现在的情况:刚放弃了国企运维的offer,在老师开的公司里做安卓开发,公司都是师兄,人都很好,个个都是人才,说话还好听,虽然公司还是做外包的个小公司。

自学编程之路

坑公司一直拖着不让入职,等了一个多月,没怎么学习,通知8月初入职,最后经历了台风火车停运,航班取消延误到了深圳。
到此为止,自己随便翻了一下Java的书 《Java疯狂讲义》,千万不要买这本!!!一生黑。 当时公司说有培训的,然而并没有,一群人在小房间里,看公司的框架,开始看《JAVA疯狂讲义》学Java,真的是一脸懵B,公司布置的任务同事和自己都是抄抄改,公司还要我们后边入职的赶之前入职同事的进度,还。。。。 一不小心又要写到《应届生到深圳坑公司的天坑之路》了,先不说这个了,但是要提醒学弟学妹一句,去私企工作除非决定长呆并且是北上广,千万不要转户口,千万
后来我辞职了,但还是算学到一些东西,比如私企工作除非决定长呆并且是北上广,千万不要转户口之类的。
直到离职,我还是一脸懵逼的。
在这段时间,学了Java基础,学了一遍数据库,知道了一些开发框架,开发流程的东西,但是,真的不多。
于是我辞职回来了,还是坚定的想做软件开发,思考了一番,做Web开发要学的东西真的挺多的,Java、前端、数据库、还要学习SSH等框架,我不想去上培训班,自己也不能一直脱产学习,毕竟毕业以后就没和家里要过钱,考虑了一下做前端,但是自己JavaScript实在学的不好,继续做Java Web除了要继续学各种框架以外,还要学前端,周期有些长,并且我自己不喜欢写后台,还是喜欢接近客户端的东西,然后目光就落在了移动开发,我的电脑是Mac,自己也有iPhone、iPad,可以做iOS开发,但是iOS开发,又要学Objective-C,Swift,还是需要学习周期,自己现在就算是有一些Java基础,所以最后的决定就是Android开发。

开始学习

我先自己又过了一遍Java基础,然后开始学Android,当时选定了两本书学习一本是《Android编程权威指南》,一本是郭霖大神的《第一行代码》,两本都是市面上备受好评的入门书,最后在看了郭神的博客以后,我选了《第一行代码》学习,第一本现在还没看就不评价了,《第一行代码》真的是一本非常好的书,我照着学,照着敲,半个月就写出了自己的一个小项目,苹果序列号查询,利用免费的API返回Json数据解析显示到前端,界面是这样的

找工作

更新了一波简历,我就开始找工作了,网投大多数还是石沉大海,我说的是前程无忧、智联招聘之类的网站,不包括各公司的网招。
还是学弟和师兄的介绍靠谱,最后面试了两家公司,收到两个offer,一家国企背景的,待遇和工资都不错,但是是去做运维,才面试完HR就催我做决定。第二家就是学校老师的这家公司。放弃了国企和更高的工资,就是为了能做开发,现在工作两个周,觉得还是学到很多东西的。

如何自学入门

玄学

接下来就是画的重点了,到底如何才能自学软件开发并且找到工作?我来说一下我的看法的和体会。首先从我的经历,一定要有信心,我能,你也可以,要有这种信念。
其次,还是需要有学习的驱动力、自控力、还有自学能力,这些东西都是可以培养的,最好的学习驱动力就是兴趣、希望想要做软件开发的你对软件开发有浓厚的兴趣,兴趣就会驱动着你学习,并且在以后的工作中,也不会感觉枯燥和乏味。自控力那不用说了,骚年,里要控计里计几啊!自学能力要慢慢培养,多看书,多思考,在编程方面,一定要多动手,不要光看书、看视频。

干货

好了,玄学就讲到这里,接下来讲干货。 首先明确一下方向,对软件开发要有大体的了解,比如按慕课网的分类,有前端开发、后端开发、移动开发、数据库开发、测试、运维、以及现在火热的云计算和大数据,除了这些互联网应用层的开发,还有一些偏底层的开发,比如Linux系统开发,嵌入式开发,驱动开发,还有一些模式识别、语音识别的开发,游戏开发。
还要了解开发所需要的技术和语言,比如前端开发,就是HTML/CSS/JavaScript,后端现在基本是Java和.Net的天下,还有一些Python、Node.js,底层那就是C/C++和汇编。这些需要自己去了解。
然后就是开始语言基础的学习,这个阶段要打好基础,但是我的看法是千万不要恋战,看不懂的就先跳过,看后边的,比如学Java,看不懂多线程,就先跳过,以后开始做东西的时候会用到,你再回头看,学习效果比你死磕着不放好得多。
这个阶段的重点是要掌握面向对象,了解和体会类、类实例化的对象、类的构造方法,对象方法的调用、参数、返回值等等非常重要的概念,懂了这些,你就会看出程序就是一个个类一个个对象和方法组成的,看懂这一点,说明你已经有些入门了。
学习的时候,挑一本靠谱的书看,可以参考我给的推荐书,然后找一个靠谱、适合自己胃口的视频看,也可以参考我的推荐,然后学习的时候,一定要跟着敲代码,尽量理解,看不懂也要敲。 学完语言基础以后,就要开始语言的应用,比如Java,就主要应用在Java Web和Android开发上,学Java Web,就要学习Java在Web上的JSP/SERVELET,基本的搞懂以后,就一定要学习常用基础框架,也就是SSH。安卓的话没有一体化的框架,但是也有一些常用的开源框架,也要注意掌握。学习前端,就要学习HTML/CSS/JavaScript,JavaScript一定是要重点掌握,也要重点掌握JavaScript的jQuery库。如果要学习底层开发,那么数据结构和算法会很重要。

接下来以Java-Android开发演示一下学习流程

  1. Java基础:推荐书《Java核心技术 卷一》,还有一些必要的基础,比如SQL,HTTP,计算机组成原理,对,就是我挂掉那个。
  2. 视频,马士兵老师的视频,视频虽然是10年前的了,但是马老师幽默风趣,讲的细致易懂,实在是非常好的入门视频。
  3. Android基础:郭霖老师《第一行代码》,在这里一定要吹一波,《第一行代码》可算Android开发第一书,通俗易懂,条理清楚,我照着学了一遍,Android就入门并且能做小项目也找到了工作,同时也帮我理解了之前在做Java Web的时候一些不理解的问题。刚刚出了第二版,基于Android7.0,Android Studio,不知道你有没有买,我已经买了,第一批签名版,充值信仰,因为是这本书真正带我走进编程之路。
  4. 基础掌握以后就要开始扩展了,开始学习一些经典的开源框架,比如网络的Volley、okhttp、依赖注入的Dagger,响应式编程的RxJava等等,去了解这些框架的作用、以及设计思想,学习这些框架的使用方法。如果是web开发,这个阶段就要学习SSH等框架。

我目前在这里,到这里你应该也就和我一样,能胜任基本(搬砖)的工作了,下边是我的规划


  1. 下边就要思考一些深层一点的问题,思考一下代码重构,如何提高代码效率,如何使用设计模式,这个时候就要开始看一些进阶的书,首先要加深对Java的理解,推荐书《Java编程思想》(ps:有些地方给入门推荐这本书,完全就是来坑的),《高性能Java》,也要看一些Android进阶的书,《Andorid开发艺术探索》、《Android设计模式解析与实战》。
  2. 再往下,就可以下载Android源码学习了,学习一些NDK的开发,学习一些数据结构算法的知识,深入了解计算机的原理,理解了计算机的原理,才能更好的理解编程语言。推荐书《算法》《深入理解计算机系统》。
  3. 了解学习各种技术栈,包括一些架构、安全的知识
  4. 。。。。。。

以上就是我的学习过程和规划,现在在公司除了安卓客户端,数据库存货和web服务器都是自己写,所以我在做好安卓以后,还计划深入一下iOS,Web开发,以及还要重新捡起前端。

软实力

上边说的都是如何培养硬实力,这里还要说一下必要的软实力,当然我要说的这些软实力也是和我们的编程大业息息相关的。

利用工具:

  • Google是软件开发人员必备的工具,要使用Google就必须学会科学上网,参见轻量级科学上网工具Shadowsocks在PC端的使用
  • 学会用Github以及上边的开源项目进行学习,并且参与其中
  • 使用各种IDE,开发工具,选择自己最喜欢的
  • 学会提问,用英文,在stackoverflow找到你想要的答案
  • 等等。。

思维:

  • 程序员要做的,就是解决问题
  • 完美是循序渐进的,先实现功能再说
  • 不要听别人忽悠,也不要听我忽悠,用自己的内心去认识这个世界
  • 等等。。。

不要停止学习:

  • 技术是学不完的
  • 多思考,多总结
  • 人丑就要多读书,反正你也没有其他事可以做的了

捣鼓:

  • 自己租个VPS、搭个梯子阿,搭个私有云阿
  • 弄个域名,搭个Blog,写写博客总结一下,自己通过互联网学会编程,也要回报一下社会,还可以推广一下自己
  • 捣鼓一下Liunx玩玩
  • 学会用MarkDown码字,比如本文
  • 多体验体验互联网产品

推荐资料

  • 第一行代码
  • Java核心技术
  • Java编程思想
  • 高性能Java
  • Andorid开发艺术探索
  • Android设计模式解析与实战
  • 图解HTTP
  • TCP/IP详解 卷一
  • 深入理解计算机系统
  • SQL必知必会
  • C Primer Plus
  • 代码大全
  • 重构

视频

  • 极客学院视频 只能说一句VIP淘宝有卖,不能多说你们懂的
  • 马士兵老师的Java基础视频
  • 毕向东老师的Java基础视频
  • MOOC网教学视频

博客

后续通过学习将继续更新此文,可以在下方给我留言哦

感谢我费这一路的支持