zoukankan      html  css  js  c++  java
  • 一个软件从业人员的技术地图或知识体系(转载)

    一晃研究生毕业参加工作也已经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、本来想分领域描述,突然发现工作量不小啊,先把思维导图放上来,具体的文字描述有时间逐步补充吧:)

  • 相关阅读:
    在Myeclipse中移除项目对Hibernate的支持
    使用MyEclipse可视化开发Hibernate实例
    利用MyEclipse自动创建PO类、hbm文件(映射文件)、DAO
    Mtk Camera
    Linux问题,磁盘分区打不开了
    Android SDK在线更新镜像服务器大全
    TeamTalk——ubuntu服务端部署
    Nginx
    VCC/AVCC/VDD/AVDD区别
    android studio and sdk mirror for China
  • 原文地址:https://www.cnblogs.com/shaobojiao/p/7883074.html
Copyright © 2011-2022 走看看