隆中对,程序员修炼之道,技术学习前进之路

     之前写的 一个IT工薪族的4年奋斗成果  这篇文章,更多针对白领、互联网从业者、技术人员等广泛人群提出来的“职业发展路线”,更准确的说法应该是“能力模型”。

    本文,单独针对“程序员”等IT互联网技术人员,提出自己比较认可的“技术学习路线”。

    美其名曰:隆中对,技术人员心中的“隆中对”!

    网上,也有很多类似“Java学习7步走”,“Android学习路线图”等某个技术领域的“技术学习路线”,写得非常好。
不过,在我看来,过于“细节”了,细节,永远也写不完!

    人的一生是很有限的,不过短短百年!

   回顾自己的技术学习之路,得出如下结论:技术学习是有规律可循的。

一、技术学习路线
1.从有编程经验的人员角度
第1步:计算机原理,从全局角度,了解计算机这个“硬件平台”和“软件平台”,核心部件之间的关系。
第2步:操作系统,在计算机硬件和软件之上,构建自己的“软件平台”,Windows和Mac、Android和iOS。
第3步:算法,在硬件和软件平台上,能够把现实中的问题,用计算机语言解决它。
第4步:网络和协议(底层+应用层),计算机不是孤立存在的,软件也是可以互相交流的。
第5步:编程语言(C++、Java、PHP等)。
    用具体的语言,具体的算法,解决具体的问题。
    数学问题、画图、游戏、任务调度、AI等。
第6步:面向对象、软件工程、设计模式,理论上的升华。
第7步:广度优先(看个人),学习多种操作系统、多种编程语言、多种协议。
第8步:框架、中间件、云平台。一个具体的问题,有多种技术参考。

理想境界:研发一个大型项目,可以画出全局图。项目进度路线图、技术架构图、任务分配图。
重在全局!

2.从初学者角度
第1步:初步浏览计算机原理、操作系统、编程语言等,不求一次搞懂,能懂多少就懂多少。
第2步:会使用操作系统的各种功能,能使用IDE。
第3步:深入学习一门编程语言。
  只要能够使用一种编程语言,独自搞定1个项目,其它就都不是问题了。
第4步:学习面向对象等理论,使用编程语言的官方和第三方框架。
第5步:参照“从有编程经验的人员角度”,重新规划自己的学习路线。
理想境界:信心很重要!不要被当前阶段无法理解的技术吓住了!

3.补充说明
   本文针对“所有程序员”,而非Java程序员或者Android程序员。
   本文仅提出“技术学习路线”,不包括管理、职业发展等其它话题。
   Java程序员,Android程序员等,可以有自己某个领域的路线图,比如“Java学习7步走“,”Android学习路线图“。

二、技术全局观
    学习技术时,最迟也要在学完后,对它应该有个“全局”的认识。这项技术,出现的背景是啥,解决了什么问题,和其它技术的关系是啥。

计算机原理:CPU、内存、IO、
操作系统:线程、线程调度、网络
Linux:各种命令,Shell脚本
Windows:各种功能,很多功能,不去研究,根本不知道
Mac:不怎么好用,还在熟悉中
Android:分分钟就会用了

网络协议:TCP/IP、HTTP协议

编程基础:语法、数据类型(int,string,double)、语句(顺序、选择、循环)、函数,引用和指针
编程语言:编程基础、基础语法、高级语法、官方API文档、官方框架、第三方框架

编程工具:IDE(Eclipse、AndroidStudio、HBuilder、VisiualStudio等)、记事本、

算法:排序、查找,具体领域的算法(网页搜索、AI、交通调度)

面向对象:对象、类、多态
设计模式:23+

软件工程:项目开发等理论,工期管理,质量控制等方方面面


三、技术平台和解决的问题
  PC:Windows编程、Mac编程
  Web:
      前端:JavaScript、HTML、CSS
      后端:Java、PHP、.Net、Nodejs、Python等
 Mobile:手机、平板电脑(Android、iOS)
  其它:嵌入式设备、冰箱和机器人等各种硬件平台,硬件平台之上往往都有个软件平台

  解决的问题:
        数学问题:算数求解、公式论证等
        信息检索:查找论文、查找信息等
        网络聊天:文字聊天、语音聊天等
        网络游戏:斗地主、中国象棋、Dota等
        其它:...
 
  技术带给我们的现代文明:
         千里之外,可以和老妈视频聊天。
         教会了老爸QQ欢乐斗地主,老爸多了一点欢乐。
         互联网上可以找到完整的学习资料,一个智力正常的人,好好利用,二十年必成大师!
         
四、技术清单
 常见的技术,列了一部分自己熟悉的。
 这部分在我看来,就是“细节”了,不在本文详细描述。

编程语言和框架
Java
ApacheCommons:Java语言编写的,一大堆工具类,编程必备,大大提高开发效率
Freemarker:模版语言,JSP、Freemarker、Velocity等一大堆都是这个“概念”!
SSM:MVC、IoC等一站式解决方案、持久层-数据访问层

JS
语法:基础语法(和静态性编程语言比较接近)、高级语法(原型、闭包、面向对象)
互联网开发
分布式事务:
    Base:只有思路

分布式锁:Zookeeper、Redis、Memcache

分布式Session:Cookie+Redis,Tomcat Session+Redis

服务化/SOA:Dubbo、WebService,其它框架


运维和自动化及基础服务
Jekins、Linux-Shell脚本、Maven
Nginx:服务端代理
Zookeeper:注册中心
Redis:缓存
缓存:Memcache

云服务
    阿里云、腾讯云,基础硬件服务IaaS、平台服务PaaS、应用服务Saas
   
其它
PHP:基础语法,IDE,ThinkPHP
Node.js:异步编程,Express
Windows编程,MFC,WindowsAPI
Android:Java基础、4大组件、IDE
CSS:Bootstrap
Object-C,Python
数据库:MySQL、Mongodb
大数据:Hadoop、HBase之类的

 ......

五、技术太多怎么办
  推荐3个方法
   提前学习: 提前了解互联网上较为流行的技术,论坛博客中提到的技术,有人正在用的技术通常是值得了解的
   延迟学习:不求一次性把一项技术搞明白,了解大概就可以了,实际中需要的时候,再深入学习
   快读学习:读书-看博客,重点看 上下文背景+目录,而不是“正文”。

六、小结,全局观和执行力
   技术学习路线,技术全局观和技术清单。
   
   这些技术的学习顺序,他们之间的关系和重要性,是需要思考和选择的。
   只要对技术学习有了个全局的认识,理清了技术所能够解决的问题。按照我们自己的目标,坚持学习下去,10年之内,
一定可以达到较高的水平。

七、相关文章

一个非常重要的值得思考的问题
你学习技术是为了什么呢?成为自己认可或者大家认可的“技术大牛”?还是赚钱多多益善的“财主”呢?还是?
  
原文地址:https://www.cnblogs.com/qitian1/p/6462352.html