敲黑板
与其说这是给想自学软件开发小伙伴梳理的自学路线,还不如说这是一篇软件开发行业的技术路线整理合集。除了帮助小白自学,也可以帮助正在进步或者迷失方向的软件工程师继续向前。
整个自学路线我会不断完善,目的就是让大家少走弯路,建议自学软件开发的小伙伴关注我,不迷路。
正文
很多小伙伴从其他行业转行来做软件开发,或毕业后就选择软件开发工作,在这一路上应该吃了不少苦头,走了不少弯路。
比如:
1:学习资料众多,不知道该怎么选,并且很零散
2:想提升自己的能力,但不知道要学什么?从哪里开始学?
3:遇到困难,没有人来指点一下,经常掉坑里,浪费了很多宝贵的时间!
那么有没有一种清晰的学习路线,就像我们玩游戏点技能树一样,可以看出来我们的发展方向和步骤?
肯定有!
自学软件编程的基础知识、发展方向与技术路线
我把这套技能树和技术路线分为八个阶段。
这篇图文先说第一,二阶段。
后续会为想自学软件开发的朋友梳理第三、第四、第五、六七八阶段。所以,大家给个关注,不会迷路。
这八个阶段分别是:
第一阶段:打牢基础,小白入门要踏踏实实走的路
不得不说,在我10多年的软件开发经验中,见到过太多同事,他们由于基础没有打好,造成平常工作中遇到很多“混乱”的问题,比如某个概念搞混引入的BUG,比如编程不规范造成的代码不好维护,比如代码文件管理的混乱等等。
这会大大影响自己的工作效率,学习效率,还错过很多晋升机会,甚至觉得软件开发行业这条路不适合自己走,产生自我怀疑。
其实这都是因为基础没有打好的缘故。所以第一阶段很重要,把基础打牢,后面你的工作或者学习都会变得很轻松,很有体验。
第二阶段:网络应用,软件开发通用技能树
这条技术路线技能树点满,你可以在网络应用软件开发领域横着走,并且找到一份不错的工作。这份工作可以帮你解决生活上的问题,还可以让你有零花钱花。
第三阶段:团队协作需要有的技能树
在软件开发行业里,编程技术的应用其实只是一部分,还有另外一部分知识或者技能是围绕软件开发过程的。你参与的软件规模越大,那么软件开发过程就显得越重要。
你要知道3个人的团队和100人的团队协作是完全不同的概念。
这套技能树就是围绕软件开发过程的,如果你把这套技能树点满,你可以让软件开发过程变得自动化,并且让团队协作变得和谐。
为什么要把这套技能树放在第三阶段呢?因为无论未来你选择哪个软件开发方向,都会需要到这套技能树。
第四阶段:生产工具硬核路线技能树
这套技能树点满了,你可以参与开发比如PhotoShop,Xmind,3DMax,Blender等等生产工具的开发。
当然像PhotoShop这样的软件,要开发它除了这些技能树外,网络应用知识、图像图形处理技术这些知识都是要有的。
第五阶段:移动端APP开发路线技能树
这套技能树点满后,你可以参与IOSAPP或AndroidAPP的开发。如果同时你把第二阶段和第三阶段的技能树点满了。那么你完全可以自己独立开发一款APP,或者带领一个团队开发APP。
这个时候的你,不是你找工作,而是工作来找你。
第六阶段:人工智能与数据分析路线技能树
这是未来20年比较火热的发展方向,可以参与到很多伟大的项目里面,比如医学的X光片确诊肺部疾病、自动化炒股、自动驾驶领域等。
但这里可能会有个误区,我要说明一下,这条技术路线的知识更多的是关于
人工智能是如何实现的?
我们如何利用人工智能的工具来看待目前我们遇到的问题?
如何通过技术手段把人工智能学习的数据采集起来然后用于训练人工智能?
如何设计机器学习的模型?
等等。
这些技能的学习、理解、到运用是需要时间和实践的。并不像某些广告宣传一样,什么一个月出来就拿年薪60万等等。我曾经面试过一个学生,他说他会谷歌的TF,他知道各种人工智能的算法等,当我抛给他问题时,他就没有思路了。(我抛给他的问题是TF经典例子里面的训练机器人识别手写数字的解决方案)
第七阶段:游戏开发路线技能树
开发游戏是一个庞大复杂的工程,但现在生产工具发展的很快。如果你能把这条技术路线的技能树点满。你完全可以做一个独立的游戏开发者。国内就有很多成功的独立游戏开发者,他们钱也赚了不少。
同样这条路也是比较艰辛的,做好心理准备。
第八阶段:系统质量把控技能树
说白了,这就是软件测试的技能树,软件测试在软件开发领域属于门槛很低,但上限很高的一个职位,任何一个会使用电脑,手机的人都能来做软件测试。
但高端的软件测试,只会电脑操作是远远不够的。
需要懂开发、懂服务器、懂用户心理、懂自动化、懂硬件、懂问题根源的排查等等。其实一个顶端的测试工程师,完全可以胜任一个公司的技术总监。
现在我们就来一起看看这些技术路线
第一阶段,为了后面能轻松学习要扎扎实实打好基础
一 先学JAVA是个好的选择
对于软件开发这个领域,找一门合适的编程语言来学习,其实非常重要。选得好你会学习起来很愉快,选不好会一开始就面对各种挫败感。我建议入门的小白,从JAVA语言开始学起,因为:
1 它难度适中:
小白有很多入门编程语言可以选,比如C,C++,Python等等。C,C++和Java语言相比会有很多非常抽象的概念,这些概念对小白一点都不友好,它们非常绕,因为C,C++是更靠近“硬件”的语言。
Python就把这些概念弱化了,因为它是更“靠近”人的语言,好处就是学起来很轻松,不好的地方就是学Python会遗漏很多计算机软件开发和编程的重要概念与名词。
那Java刚好在他们之间,比较适中。
2 学会JAVA后,再去学习C,C#,C++,JavaScrip等类C语言,会变得很轻松:
开发语言有成千上万种。但它们可以分为几大风格,C语言风格,BASIC语言风格,还有它们的混种。
每种风格的开发语言语法,概念,代码结构的管理都非常的类似。所以你学会了JAVA后,再去学习C,C++,JavaScript,C# 等类C语言,你会发现很轻松。
3 JAVA目前的岗位很多:
JAVA由于它在互联网行业里的先行优势,开源,性能不错,加上属于比较“老”的开发语言。所以国内很多政府项目,大企业的项目,还有重量级的产品基本都是基于JAVA语言开发的。这就导致了无论小公司,还是大公司,无论五线城市还是一线城市,都有足够多的JAVA工程师招聘岗位。
关于JAVA的学习资料
网上确实有很多JAVA免费的资料和书籍,但零碎的知识对于初学者建立系统的编程体系是完全不够的,甚至会搞得初学者一头雾水。
但如果你已经掌握了一门编程语言,再利用这些网络上免费的学习资料进行自学,其实是可以的。
但作为一名小白,还是踏踏实实的买一本JAVA方面的书籍,每天拿出90分钟,坚持3个月,扎扎实实的把用JAVA来编写代码的基本功打好。我相信,对于小白来说,不会有比这个还要科学的学习方法了。
下面是重点:
JAVA的书籍很多,我推荐两本,自学任意选择一本就可以。
《Java核心技术 卷I 基础知识》,《Java编程思想》
为什么要推荐这两本书?
因为这两本书里面讲解了很多软件编程需要知道的概念和知识,可能这些概念学起来有点不那么舒服,但这些概念对今后的自学或工作有很大的帮助!
如果你English水品很好,那么可以直接看官方文档
https://docs.oracle.com/en/java/index.html
二 如何才算是把基础打牢?
当你把一本编程语言的书看通透,书中的例子都能理解,并且利用官方在线文档,能脱离书本自己写代码的时。恭喜你,你已经准备好入门了。
但是,马上你就会明白
如果只会用一门开发语言编写教科书中的程序,这是远远远远远远不够的,因为它不能帮助你去编写一些很实际的东西,比如一个登陆注册服务接口。
你要明白一个道理,在软件开发行业里,只有掌握了一定的技术积累后,你才能在实际工作中输出,才能解决问题,才能找到工作。
所以,了解不同方向的技术路线是非常重要的,它能让你花更少的时间,花更少的精力去学习,并且让你进步比别人更快。
那我们还在等什么?
看看第二阶段的技术路线
第二阶段:网络应用,软件开发通用技能树
把前面的基础打牢后,再来根据这条技术路线来学习,你就会觉得轻松很多。我们先来看看这条技术路线长什么样子?对他有个大概了解。
后端
1 使用数据库的技能树
1.1 关系数据库
1.2 非关系数据库
2 编写网络应用服务的技能树
2.1 基础知识
2.2 编写网络应用程序的开发框架
前端
1 最基础的知识
1.1 html(网页上显示东西)
1.2 CSS(让网页上显示的东西变得好看)
1.3 javaScript(让网页能互动)
1.4 xml(一种很多领域都会用到的结构化数据的方法)
2 开发框架
2.1 一般用于搭建前端界面的开发框架
2.1.1 Vue
2.1.2 React
2.1.3 JQuery
2.2 纯粹的界面样式搭建
2.2.1 Bootstrap
2.2.2 AmazeUI
2.2.3 LayUI
2.3 小程序平台
2.3.1 微信小程序
2.3.2 支付宝小程序
现在我们就来看看这些学习路线。
后端技能树说明
使用数据库的技能树
数据库的使用其实是非常重要的,它是所有应用程序的基础。无论你在哪个软件开发领域都无法绕过数据库这个坎。自学软件开发的小伙伴,往往会忽略数据库这块的学习,其实很多培训班也会忽略数据库的学习。
目前市面上的数据库分为两大阵营,一个是已经站稳脚跟的SQL数据库阵营,另一个是后起之秀,能轻松解决SQL数据库很难解决的问题的NOSQL阵营。
这两大阵营一直叫嚣着彼此取代,但目前来看他们都无法取代彼此,反而相互弥补形成一套完美的数据库存储运算解决方案。
目前的所有网络应用平台都使用了这两类数据库,共同解决产品的数据存储计算问题。
关系数据库的代表:
MySQL数据库
SQLServer数据库
Oracle数据库
DB2数据库
PostgreSql数据库
他们虽然是不同的公司出品,有些概念细节上还会有点不一样。但他们都基于一种叫做SQL的数据库操作语言。它是关系数据库的基础。这五个产品中,我们只要学精通了一个,其他四个上手就容易很多了。
关于SQL关系数据库的学习,我建议从MySQL开始,因为:
1 因为它是开源、免费、跨平台
无论用它学习,还是工作,都不收钱。并且是跨平台的,无论你用MAC还是PC电脑都可以用它。
2 难度适中
比Oracle这些元老级的数据库学起来要轻松很多。
3 使用范围广:
无论大公司,还是小公司都用的挺多的,甚至很多生产环境(生产环境,就是指最终用户使用到的系统,不是内部测试系统等)也有一部分在用Mysql。
学习MySql,和一开始打好编程基础一样,好好的卖一本书,每天计划好时间坚持学完就好。这里我推荐一些MySQL的学习书籍和资料,如下:
《MySQL基础教程》作者:[日]西泽梦路
关于MYSQL的书籍挺多的,但推荐这本书是因为它简单,简单,简单,适合入门,基础内容都包括了。平常在使用Mysql过程中,可以查查这些在线文档。
https://www.runoob.com/sql/sql-tutorial.html(SQL语言的使用查询)
https://dev.mysql.com/doc/(官方文档E文好的进)
我们一旦把MYSQL学好后,其他数据库学起来就会很快,区别在于服务器的部署上,因为SQL属于标准化的语言,所以所有的SQL数据库的SQL语言都大同小异。
非关系数据库的代表
Redis
MongoDB
非关系数据库和关系数据库在概念上是不一样的。非关系数据库Redis和MongoDB也有一些区别,应用场景也会有些不一样。
对于入门来说,可以先从Redis入手,因为它简单。
Redis的诞生和应用实践都是针对具体问题来的,所以我觉得学习Redis之前,先要把SQL这类数据库学好,才能明白Redis的用心良苦。因为Redis数据库是基于解决那些SQL数据库解决不了的问题而诞生的,所以我推荐通过这本书来学习Redis:
《Redis 深度历险:核心原理与应用实践》
MongoDB的书籍:
《MongoDB从入门到商业实战》
下面是一些Redis与MongoDB的线上学习资料(系统的学习还是建议看书):
1 http://www.redis.cn/documentation.html Redis的中文官方文档(更新会有延时)
2 https://redis.io/ Redis的E文官方文档
3 https://www.runoob.com/redis/redis-tutorial.html Redis的在线学习资料
4 https://www.mongodb.org.cn/ MongoDB中文官方文档 (更新会有延时)
5 https://docs.mongodb.com/ MongoDB E文官方文档
对于数据库的学习,我建议先从关系数据库开始学起,因为很多产品它可以不用非关系数据库。但关于数据库是必须要用的。
编写网络应用服务的技能树
最基础的知识
这些知识就像我们打王者荣耀一样,要知道符文的用法,地图的布局,不同英雄之间的克制等等,不懂规则游戏也玩不下去。
这些知识有:
1:Http协议
2:服务请求模型
3:TCP协议
4:IP地址
5:UDP协议
6:Websocket协议
等等
这些知识其实非常零散,孤立。就算是工作了10年的网络工程师,让他来总结一下这些知识点他可能都会花很长时间来整理。
我思来想去,要很舒服的学习这些知识,并且将其应用到实践中,最好的办法就是去学习一门开发语言的网络编程。
通过学习一门开发语言的网络编程来学习这些基础知识:
推荐书籍
《Java网络编程(第四版) 》
《Python网络编程 第3版 》
提醒一下自学的小伙伴,看上面的书籍主要目的是让你知道网络应用开发需要什么样的知识。要很顺利的把这些书看完,就需要把第一阶段的基础打牢。
编写网络应用程序的开发框架
何为开发框架?
为何要用开发框架?
其实我们只要看完了上面推荐的两本书,我们就可以完成网络应用程序的编写工作了,但是你不够快!可能别人两三天就完成的工作,你需要两三个月,这一点毫不夸张!
别人比你快其实就是用了网络应用开发框架!
它是一套专门为网络应用开发而生的工具,就像你要去盖房子,它就是起重机,就是混泥土搅拌机,就是脚手架。能大大提高你的工作效率。
在网络开发领域,使用框架来做开发已经变成了一个成熟、快速、稳健的做法。
像Python的Django框架可以用100多行代码就可以编写出一个完整的网络应用后台,你熟悉Django后,可能觉得这哪里是在编程呀,这明明就是在搭积木!
Django除了可以“配置”网站外,仍然可以让程序员有很大发挥的空间,哪怕一个非常小的细节都可以“配置”。JAVA语言也有这些框架。现在我们就来看看这些框架和学习资料。
下面是学习资料
1 JAVA相关的网络开发框架
《轻量级Java Web企业应用实战——Spring MVC+Spring+MyBatis整合开发》
《轻量级Java EE企业应用实战(第5版)——Struts 2+Spring 5+Hibernate 5/JPA 2整合开发》
2 Python相关的网络开发框架
《Python Django Web典型模块开发实战》
《Flask Web开发 基于Python的Web应用开发实战 第2版》
注意:这些都是网络应用开发框架的入门教程。在网络应用开发过程中,我们会遇到很多性能问题就像我们双十一清空购物车时,会看到页面卡死的现象,这就是典型的性能问题。性能问题的解决就要用到其他的技术路线了,我后面会为大家整理。
前端
前端的技能树分为两大大部分
第一:最基础的知识
第二:开发框架
我们先来看基础知识。
最基础知识
前端开发涉及到的编程语言其实就三种Html,CSS,JavaScript。严格意义上来说,Html,CSS都不能算是完整的编程语言,它们只是一种标准,一种浏览器能看得懂的语言。
Html:
用于告诉浏览器,我要显示什么样的内容,显示在那个位置。
CSS:
来告诉浏览器我的这个内容要显示成什么样子的,比如字体要多大,要什么颜色,间距是多少等。
JavaScript:
它是一种完整的编程语言,也是若干前端框架的基础。在工作中碰到很多小伙伴,他们在使用前端框架编写页面的时总是会遇到一些奇怪的BUG、奇怪的语法、奇怪的问题。其实这些所有的问题,都是没有把JavaScript这门语言基础打好造成的。
我们来看一下Html,CSS,JavaScript的学习资料。
书籍:
《Head First HTML 与 CSS》
Html,CSS看这本书就够了,当然Html,CSS的属性用法很多,上千种。我们是不可能全部记下来的。把上面这本书看透,日后工作遇到的问题可以在下面列出的网上查找。
《JavaScript权威指南(第6版)》
要把JavaScript学好,要在后面学习前端框架轻松的飞起,那么就耐心的认真的把这本书看完。把里面的例子编写完。
这本书很厚,厚到你可能拿不动、厚到拿到手上时,就被劝退了。但是想想这本书看完后你的JavaScript会有一个质的飞跃,那么一切的坚持和努力都是值得的。
线上资料:
1 https://www.runoob.com/ html,css,javascript的一些知识点和资料都可以在里面找到。
2 https://www.w3.org/ 最全的html,css知识,也可以看作是它们的官方网站,是全英文的。
3 https://www.javascript.com/ javaScript的官方网站,全英文的。
4 https://developer.mozilla.org/zh-CN / 这是涉及到前端开发知识的网站,中文的,html,CSS,JS都涉及到
书籍和线上资料其实都很多,这些都是我挑选的,平常我自己也在用。感觉知道这些就足够了。
前端开发框架
在介绍前端框架前,再说一下Html,CSS,JavaScript这三个语言是前端开发的标准,并且它是属于世界的,不属于个人或者公司,他的学习资料是公开的,这是一件极好的事情。
但是就是因为这些特质,导致前端框架成千上万,各种门派,各种风格,各种骚操作,应有尽有,只有你想不到的,没有找不到的前端框架。
这就是前端开发工程师的烦恼。
前端框架的概念和后端框架的概念差不多,他们都是为了让程序员能快速高效的开发前端页面诞生的。包括了完整的模板结构,工具甚至还有IDE(集成开发环境)。
有些框架还可以让程序员拖拖拽拽的,就把一个前端页面拼凑起来,这对于一个设计师来说是非常友善的。
由于前端开发框架太多,我又将其整理成三大类。
第一类:纯粹的软件编程基础自学开发框架,用户搭建系统,我们也叫做脚手架。
第二类:界面绘制工具,专门用来解决前端页面应该长什么样子的。
第三类:就是腾讯,阿里这些寡头自己的前端开发框架。
我们先看第一类,纯粹的开发框架,和他的学习资料
1:VUE
国人开发享誉世界的前端开发框架,只要前面的基础打的好。只要看它的官方文档就可以很好的进行自学了。
https://cn.vuejs.org/ VUE官方网站
书籍(其实看官网后足够了,当然选择书籍也是可以学好的,看个人学习习惯):
《深入浅出Vue.js》
2:React
在国内,VUE火了之前,React是一个很受关注的前端开发框架。其实现在用的人也多的。
书籍:
《React实战》
线上:
https://react.docschina.org/ 正统的官方文档,还是中文的
3:JQuery
JQuery应该是前端框架的鼻祖,虽然现在JQuery直接拿来用的机会越来越少了,但只要你的工作和前端有关,你都离不开JQuery。像Vue和React的一些理念都是从JQuery过来的。
其实我把它列出来,放在前端技能树学习里,主要是觉得JQuery的一些考虑问题的方式很值得去学习。这对我们学习其他前端框架是有很大帮助。
书籍:
《锋利的jQuery(第2版)》这本书在2010年前后,没看过都找不到工作的。
线上:
https://jquery.com/ JQuery的官方文档
我们接着再来看第二类:
1:Bootstrap
PC网页、移动端网页、响应式网页设计的鼻祖。只要你打好了Html、CSS、JavaScript的基础。学习这些只要看官方文档就足够了
官方文档:
https://www.bootcss.com/
2:AmazingUI
这是国人基于Bootstrap来开发的,很多用法和Bootstrap差不多。有自己独特的地方,学习文档也很舒服,界面样式也很漂亮。
同样,只要你打好了Html、CSS、JavaScript的基础,学习这个会很容易。
官方文档:
http://amazeui.shopxo.net/
3:layUI
这也是国人的,从一个小小弹窗开始做起,最后到整个自己的LayUI体系,用来做管理平台页面是非常好的选择。我自己在很多大的项目里面用到过,我觉得要比Bootstart要好很多。
官方文档:
https://www.layui.com/
我们最后来看第三类
1:微信小程序
2:支付宝小程序
现在市面上的APP不弄个微信小程序,支付宝小程序貌似都不能算是一个完整的产品线。所以微信小程序这套技能点满,涨工资,晋升这些机会都会变大。
书籍:
《微信小程序项目开发实战——用WePY、mpvue、Taro打造高效的小程序》
《支付宝小程序开发实战》
线上:
1 https://developers.weixin.qq.com/miniprogram/dev/framework/ 微信小程序开发文档
2 https://opendocs.alipay.com/mini/introduce/ 支付宝小程序开发文档
还是那句老话,只要基础好,看在线文档就够了。之所以还推荐书籍,主要是通过书本了解一下小程序的开发流程,也是挺好的。
无论是第一类、第二类、还是第三类。它们都会有很多相通之处。
最后:第一阶段与第二阶段技术路线的总结。
可能看到这里的小伙伴,会有一个疑问。我是先去学习前段,还是后端呢?
我建议先从后端开始学习。原因如下:
1:后端的学习曲线没有前端的陡峭
2:先从后端学习能更好打好编程基础(学好后端再去学前端会更顺手一些)
3:后端能接触到数据库,如果要尝试其他领域的编程,比如生产工具,游戏等,那么数据库是一个很重要的基础知识。
当然
如果你是一个狠人,把后端,前端的技能树都点满了,恭喜你。
你已经超越了70%的软件工程师了。
这个时候的你,找工作谈待遇都变得很主动,生活也变得很愉快。
那么小白关心的问题来了,要从一个小白,做到一个后端前端技能都点满的人(全栈工程师),需要花多长时间?
我统计了一下,如果坚持有规划的学习,可以在3年左右做到这个水平。头一年会比较痛苦,第二年会觉得枯燥乏味,但这个时候要坚持下来。第三年你会觉得能做别人做不到的事情感觉真好。
最后
如果各位自学编程的小伙伴,觉得文章对你有帮助,就点个赞,给个关注吧。自学路上有什么问题可以留言,我能一 一回复。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/316.html