我是一个有几年经验的程序员,之前对于自己的发展却是一头雾水,不知道主流技术,不知道工作是迎合主流技术还是迎合公司发展。让我有感触的是这两年的坚持学习,在迎合公司的发展的前提下,有自己的学习时间,基于此给新入坑的程序员一点建议。
学习方向
我们知道编程从诞生到现在已经出现了几个阶段:
面向机器编程:早期的软件编程需要程序员记牢计算机指令的二进制编码,为了不浪费记忆在二进制编码上,会变语言就出现了,早期的汇编语言本质上都是面向机器编程;
面向过程编程:一些人为了摆脱计算机终端的束缚,使用了高级软件编程语言编程,使用if...else,while...break,for...goto符合人类习惯的编程语言,也就是面向过程编程
面向对象编程:面向过程的复杂性随着软件规模的膨胀,大型软件的开发过程开始失控,遇上了软件危机,面向对象编程就出现了,以对象作为软件编程的基础单位。
面向更彻底的对象编程:现实中的面向对象编程并没有想象中的面向对象编程,都只有对象的属性,没有对象的行为,DDD(领域驱动设计)架构思想弥补了这一缺陷,是未来发展的趋势。
面向数据编程:随着科技的发展,人工智能和大数据的发展,面向数据发展的需求会越来越多,公司越大体会越深。
面向并发编程:随着计算机的性能逐渐增强和互联网对计算机资源的增加,如果利用好CPU的多核及分布式,反应是编程越来越重要。 基于此DDD+大数据+并发编程是发展的趋势,可以多往这方面投入点精力。
学习思路
对于新手程序员来说不要一上来就撸源码,不是说不可取,只是事倍功半,源码里面很多设计模式,不能深刻的理解设计模式,不能够清楚了解设计缘由,对于没有什么概念的人来说吸收知道是很慢的 到了真正用的时候,还需要去看看之前学的知识;想要深刻的理解,万变不离其宗,好一点的源码都是基于设计模式、数据结构开发,包括一些设计原则,优化手段。
设计原则:SOLID原则 = SRP(职责单一原则) + OCP(对扩展开发,修改关闭原则)+ LSP(里氏替换原则)+ ISP(接口隔离原则)+ DIP(依赖反转原则);KISS原则(Keep It Short and Simpl) YAGNI 原则(You Ain’t Gonna Need It);
代码重构:当了解设计原则之后就试着跟着这些原则去重构代码包括架构层面解耦、可读性、可维护性,怎么写单元测试等;
设计模式:常见的23种设计模式都是基于设计原则的最佳实践,常见的分类有创建型模式(抽象工厂模式、建造者模式、工厂方法模式、原型模式、单例模式)、结构型模式(适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式)、行为型模式(职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式);
数据结构:设计模式不足以看懂全部源码,一些偏底层的技术框架里面运用了大量的数据结构的算法,想要了解一些基础性的原理,也是必不可少的工具;
发展技术
现在技术框架一大堆,我们在面临选择学习的时候应该如何抉择,选的好那也无所谓了,如果选择不对,又要花费一段时间,在程序员开发的时间又有多少时间是可以去浪费的?
微服务:Spring Cloud可以说是微服务的一个标杆,包括已经收纳的Netflix、Alibaba等一些组建,虽然国内有一些优秀的微服务框架比较阿里的dubbo、蚂蚁金服的SOFA、华为ServiceComb、腾讯的TSF、京东JSF;但是近年来我们可以看到一些趋势,都在向SpringCloud方向做改造适配,其中间件也是用SpringCloud的规范就行开发,也不难发现学习该技术才是一个主线;
容器:微服务是应用软件架构设计模式,推崇单一职责、服务自治、轻量通信和接口明确等原则, 基于此,容器可以比较好的配合使微服务易于开发和维护、按需伸缩等;常用的容器比如 docker、kubernetes、rancher;
devops:随着微服务的普及,解决开发(Dev)团队与维运(Ops)团队之间存在已久的冲突及矛盾已成为重中之重,devops就出现了;鼓励开发和运维之间沟通、协作、集成和自动化,以便更快捷、更频繁、更可靠的构建、测试、发布应用,而云帮ACP通过对CI/CD、高效运维、微服务架构等功能特性的设计和打磨;
自我提升
以上都是每一个特定的领域的学习,站在架构上面来说是远远不够的,要知道软件设计的方法论、什么过程做什么样的设计,能和不通层面的人交流,沟通,协调。
软件设计:庞大的软件系统如何能在开发之初就使各个相关方对未来的软件蓝图有清晰的认知和认可,以便在开发过程中使不同工程师们能够有效合作,能够让软件的各个模块边界清晰、易于维护和部署; 把握事物的本质规律和主要特征,正确建造模型和使用模型,以防在各种细节中迷失方向;常见的4+1视图模式 逻辑视图、开发视图、过程视图、物理视图、场景视图;学会使用UML建模工具;
架构核心原理:理解常见的高并发操作、缓存架构、负载架构、安全架构、大数据架构、高可用架构等等,把这些理解透彻之后,你只需要一个大项目的实践,就可以走上人生巅峰。
转载:https://blog.csdn.net/zhangchangbin123/article/details/104205054