有了“面向过程”、“面向对象”的概念之后,今天讲讲有助于入门的几个零散观点。
1.关于技术地图
我觉得上大学的时候,最缺乏的和最需要的,就是有一位老师告诉我计算机完整的技术地图。
总结了一个应用软件的技术地图:
泛前端开发:包括泛手机端、网页端、桌面端。
泛手机端:Android、IOS、TV、穿戴设备、AR/VR开发,每一个领域都有一系列流行的框架。
网页端:网站开发,涉及html/css,也有一系列流行框架,并且更新很快,一浪一浪的拍死前面的老前辈。
桌面端:电脑桌面软件的开发,例如:office这种需要安装的桌面软件。不同语言、不同框架。
后端:在服务器端运行的程序。例如近几年流行的微服务。本质还是分布式开发。也有不同的语言、不同的框架,更新没有前端开发那么快。后端开发又分为操作系统层、VM层、容器层、业务逻辑层。
操作系统层:深不可测的领域,可以一直研究到操作系统内核。
VM层:近几年特别火的领域,极大的提升后端分布式运维效率。
容器层:例如你想做一个网站,那么你就需要WEB容器。例如你想做一个负载均衡,那么你需要一个负载均衡的容器。这个领域主要是需要不同容器的配置、原理。
业务逻辑层:大部分码农工作的层次,不断的分析、实现某个行业的需求。为了让码农们专注于业务逻辑层的开发,又出现了很多让程序猿退化成码农的应用层框架,例如:Spring、Djiango等等。
存储:不同的数据适合用不同的数据存储系统。常用的关系型数据、时序数据、图数据、KV数据、计算型数据等。不同的领域有不同的数据库或者存储系统和框架。
2.关于深度广度的辩证统一
每次在心中回顾着庞杂的技术地图,我觉得我是幸运的。
在我的职业生涯中,几乎通过实战的项目,覆盖了所有技术地图。
在我所在的公司,90%的程序猿10多年都是在业务逻辑层开展工作,这种工作的结果就导致了“工作10年等于10个1年”,进一步导致了“34+”的职业危机。
我对技术的“深度与广度”,一直认为是辩证统一,并且我更看重技术的广度、技术的全面性。
前一段时间,和项目组的新员工探讨“深度与广度”,他觉得他目前的状态和我不一样,他认为:
1、他做的项目,导致他没有机会扩展技术广度。
2、他是新人,更应该在某一个领域、某一种语言、某一种框架深入。
我不太认同。
首先,做什么项目由不得刚入职的新人选择,但是“有探索精神”的新人会有更多的办法给自己制造扩展技术广度的机会。例如:主动承接某个技术点的专项工作,例如:参与github开源项目,例如:有针对性的接个小私活。
其次,扩展深度、扩展广度是一个此一时彼一时的学习过程。
不一定非要把C++研究到大师级,再去学习Python。
不一定非要把MySQL研究到精通,才能学习MongoDB。
但是广度也要有一个限度,不能每一样都会,每一样都只是皮毛。
如何鉴定自己在某个领域是不是皮毛呢?很简单,做一个实战的项目。
3.关于编程规范
编程规范就好像小时候入学军训一样,不是多难的事情,但是很有效的培养了一个人在团队中的规范性、纪律性。
编程规范有很多,不同公司也有不同的规范。
我觉得阿里的编程规范不错,我也很喜欢我师傅当年自制的C风格的规范,于是一直延续至今。
总之,编程规范先找一个标准,在一个Team中统一下来,持之以恒的坚持。这将是一个很好、很强大的习惯。
over