⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 cnblogs.com/Fredric-2013 「Fredric-2013」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

一晃研究生毕业参加工作也已经8、9年,这些年搞过嵌入式、web开发、移动应用、IT咨询、项目集成,零零种种到如今也不知是好事还是坏事。今天几个项目进度不错,上线的版本问题居然还没有问题反馈,真是XX都笑歪了。

抽下午的时间把自己这些年的技术梳理出来,能力有限,只算是罗列一些点吧(当然只要我列出的,多少是我个人在实际项目中接触过的),希望能给不管是新入行,还是试图做转型的从业者带来一些帮助。

大致分为四类,详见文末思维导图:

工程方法领域

**工程方法领域的积累,其实不仅仅包括软件产品的开发,它对硬件类,集成类项目都有指导意义。**我个人理解这部分的第一个难点就是对需求的描述,从表面上看你需要积累的是如何用用例图、时序图、状态机等方式去描述需求,形成需求规格,从内在看,关键在于从不同的角度理解需求,比如站在用户角度,和站在产品提供的功能角度,这个粒度是不一样的,需要抽象和总结。

另外一个点是功能性和非功能性(可能不同的公司会有不同的表述方式),**非功能性从可用、可靠、可测试、可服务等角度,看系统需要额外增加的需求,用户通常只能从功能角度讲,最多谈到性能。**这部分是非常靠积累的,甚至应该建议在部门或公司层面积累,形成类似checklist的指导传承下去。

这里我也单独提到了软件的设计,主要是理解什么是结构化的设计(比如单片机软件)和OO的设计,设计模式我觉得可以理解成是一种优秀实践,多看多用就好。

系统集成领域

这个方向主要针对集成类项目,可能软件研发或互联网的人员会接触比较少,大多是诸如智慧园区、智慧医疗、平安城市等项目。在这种项目里软件只是其中一部分,还包括机房、网络、专业设备等。

这个领域技术层面的积累主要是两方面,一方面是共性的产品,比如机房里用什么服务器、磁盘阵列、防火墙;网络的一些专网、内部VLAN的划分,常用的比如视频监控、门禁的产品等;

另外一方面就是深入具体业务了,这块大多属于售前或咨询的领域,是个越老越吃香的活,当然也没那么好转行业的,靠项目慢慢熬,直到有一天连客户会问你这块建议怎么搞、要搞那些的时候,你就牛了。

项目管理领域

这里包括集成类项目 和 研发类项目的管理;研发管理根据常用的流程可以分为敏捷和瀑布,这方面作为管理者,重要的是要理解它的各个节点,比如敏捷,各个迭代到底要达成什么样的要求;比如瀑布,什么时候算需求转设计,什么时候算设计转开发,什么时候算开发转测试,你要能在这些关键的里程碑进行管控并基线化;

另外一方面就是对优秀实践的引入,举几个例子,好比持续集成、站立会议、代码检视、测试驱动开发、结对编程等等,你要能根据团队的实际情况则优而行、量力而行。

我只所以把项目管理放在一起,是因为从质量、成本、进度等领域看,项目管理是共同的,但集成项目需要额外在多点要求,比如合同、招投标、验收等等。

研发领域

研发领域梳理我主要针对开发者,分为嵌入式、移动和web三类;(PC端开发暂时不罗列在里面,感觉现在做的人很少了吧:云计算和大数据考虑其火爆程度,单独罗列出来)

嵌入式: 嵌入式的语言主要是C语言,语言本身积累的点我以为不多,关键在于理解和灵活运用指针,包括函数指针,结构体指针;剩下就是平台了,也就是说你在什么操作系统下开发,你**要理解其中的进程通信、内存管理、网络编程、文件管理等特性;**作为嵌入式软件人员还有要积累的是硬件,你可能不会画单板设计电路,但我个人觉得至少硬件框图要看得懂,芯片手册和常用的外围电路要熟;

移动开发: 移动开发这类应用开发,入门简单,但知识点更新快,很繁琐;我自己是从几个角度去整理的,一个是框架本身,比如Android的几大组件、多线程、存储等;另一个是UI ,说白了就是做界面;这两部分OK了,你基本也能开始做东西了,其他不管理解如何,都先做起来再说;

剩下的除了一些移动端特有的特性,就是框架了。这里的框架也是这些年逐步出现的,我理解是因为移动端的代码规模也越来越大,所以很多服务端的设计思想,比如IOC、DAO、MVC、MVP也都引入进来。除了原生开发,现在混合架构也越来越流行,这里我觉得关键是理解web和原生的交互的原理,然后就是如何能用H5去实现类原生界面;

web开发: 这部分是大头,包括前端、后端和数据库,后端我只是举了JAVA做例子,个人认为其他语言也类似,即深入理解语言本身,并熟悉其框架。工作时间久了之后,我觉得核心积累的是架构部分,因为现在很多项目都是互联网类的项目,对性能、高可用要求比较高,你可能一开始不需要做,但要有这方面的准备。

但好在现在这些方法也已经很成熟了,特别是有了阿里云这种平台后,都不需要自己配置优化,你可以直接买类似负载均衡、缓存、读写分离等服务,因此关键点还是理解其价值;

顺带要提的是数据库,我认为现在的主流还是关系型数据库,nosql应该是利用其特殊的存储方式在某些领域给与补充,因此对nosql我们更多要关注到底用在什么场景,是真正有价值 的;

云计算和大数据: 这部分我理解可以分为几部分,其中IaaS和PaaS应该算是基础设施的一种形式,只是一个虚的是一台机器,一个虚的是一套完整的运行环境,如果不是专门做这方面的产品,能够理解其原理就够了;SaaS我觉得更多的要算一种软件设计方式,只是其顶层用户是一个独立的租户;Hadoop这些技术包含了分布式计算、列数据库等等,我实际用到不多,自己觉得更新的也比较快,感觉Hadoop还没透,什么spark、storm就出来了。。。

PS:

1、我个人参加工作后一直是偏软件的,因此也是只能站在这个角度看技术全景,当然也一定有很大的局限性,希望各位指正;

2、本来想分领域描述,突然发现工作量不小啊,先把思维导图放上来,具体的文字描述有时间逐步补充吧:)

文章目录
  1. 1. 工程方法领域
  2. 2. 系统集成领域
  3. 3. 项目管理领域
  4. 4. 研发领域