软件开发人员需要掌握的知识架构

时间:2022-09-13 03:27:47

软件工程师必须掌握以下知识结构,给那些准备从事软件工程师的人一些指导。
1.编程开发工具.
至少熟练掌握两到三种开发工具的使用, 这是程序员的立身之本. C/C++以其高效率和高度的灵活性成为开发工具中的利器, 很多系统级的软件还是用C/C++编写. 而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在.其次, 如果能掌握一种简便的可视化开发工具, 如VB,PowerBuilder,Delphi,C++ Builder,则更好, 这些开发工具减小了开发难度, 并能够在无形中强化对象模型的概念.另外, 需要掌握基本的脚本语言, 如shell,perl等.
2.数据库.
数据库在当今的信息外包产业是很重要的. 很多应用程序都是以数据库的数据为中心, 而数据库的产品也有不少, 其中关系型数据库仍是主流形式, 所以作为高级软件工程师而言, 至少熟练掌握一两种数据库, 对关系型数据库的关键元素非常清楚, 熟练掌握SQL的基本语法是非常重要的.
3.网络协议TCP/IP.
在互联网如此普及的今天, 如果还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握就很难在IT业立足. 从最早的客户/服务器结构, 到今天的WEB Services, 这一切都离不开以TCP/IP协议栈为基础的网络协议支持, 所以, 深入掌握TCP/IP协议是非常必要的.
4.软件工程与CMM.
现代大型软件系统的开发中, 工程化的开发控制成为软件系统成功的保证. 编程只是软件生命周期中的其中一环, 本人认为优秀的软件工程师应该掌握软件开发各个阶段的基本技能, 如市场分析, 可行性分析, 需求分析, 结构设计, 详细设计, 软件测试等. 否则就永远只会是一个程序员, 而无法成为名副其实的工程师.
5.计算机技术专业英语.
随着中国的信息外包产业逐步展开, IT业急需与国外相关高新技术接轨来保持在发展上不落人后. 于是IT业相关从业人员现有的英语水平成为限制中国信息产业与国外交流的瓶颈. 软件工程师基本要求及素质
一个普遍的共识是:良好的英语交流和阅读能力成为衡量一个软件工程师水平的隐性标准.所以掌握计算机专业英语是很重要的.软件工程师基本要求及素质
6.强烈的好奇心和学习精神.
对于一个立志成为高级软件工程师的人, 最重要的其实是强烈的好奇心和学习精神. 没有比强烈的好奇心和学习精神更好的武器了, 它是成功的工程师乃至在各行各业的成功者们永攀高峰的源泉和动力所在.

 

技术族谱:软件开发相关知识体系的整理心得(图)

每隔一段时间,就会收到些类似的消息:
怎么学好软件开发? 我已经学完了A,我接下来该学B还是C?

其实这样的问题,真的是一言难复。如何学习,是一个很复杂的话题,尤其是眼下业内的技术名词日新月异,乱花迷人眼,使得新人更加看不清。所以才激发了我关于“技术族谱”的设想,本意就是想通过一个机制来理顺知识之间的关系,分享每个人的学习经验,新人借鉴老人的学习路径,从而减少走弯路的现象。

记得2007年的时候,一次团队内部开总结会,我在白板上随手画过一个开发相关知识的结构图,当时还有团队成员拿相机拍下来,现在想想,也许对某些人有一定的指导意义,于是今天整理了一下发出来,如下图所示:
软件开发人员需要掌握的知识架构

 

一些相关的解释:

学校里的课程没用吗?
答:肯定有用。
计算机专业的经典理论课,意义非凡:计算机组成原理、计算机体系结构、操作系统、编译原理、数据结构。操作系统中的内存管理算法、进程调度算法、并发控制算法,都是非常经典的,你会在很多其它地方发现这些算法的应用或者变体。编译原理有助于我们理解编程语言是如何工作的,如何用范式来表达复杂的语法,编译原理中的状态机相关知识,也是开发者手中的强大武器。数据结构就更不用说了,List,Map,Tree,是编程中广泛使用的。

 

快餐式软件开发培训的问题何在?
一个典型的快餐式培训班,先教java语言,然后教SSH,然后给个千篇一律的虚拟项目做一下,最后号称培养出来一批“WEB开发”程序员。我觉得,如果之前没有任何基础,仅靠这样的培训,那么出来真的只能做非常程式化的工作。我一直提倡稳扎稳打,从下向上学起这样的方式,缺点是不如容易出效果。所以从两个方向入手,一边学基础,一边学应用,互相印证,也是不错的学习路径。

 

软件开发的门槛在提高吗?
我觉得是的,当然,我说的不包括hello world这样的示例程序的开发。虽然现在程序语言比十年前强大很多,工具要好用很多,但要想写出一个有点意义的软件,需要了解的知识多了很多,需要配置的环境复杂了很多。看看有多少初学者被java的ClassPath所困扰,您就明白我说的意思了。

 

开发不仅仅是学一门语言!
开发的本质是用程序控制计算机做一件事。基本上,任何有价值的程序都有内政和外交。内政就是程序的处理流程、数据加工算法、并发控制。外交就是网络通信、IO、数据库访问,以及通过各种协议和其它系统进行交互。很多知识,尤其是外交相关的知识,仅仅学习一门语言是不够的。

 

误区:很多人花大量精力关注最上层,比如:新的框架、新的工具、各种处理问题的技巧等等。但偏偏这一部分的变化最快,您在这上面投入的精力保值能力最差。技术有很强的相似性,比如,如果您真正掌握了javascript,那么掌握Ext或者JQuery只是熟悉对方的编程习惯和API而已,没必要为了这些新名词而疲于奔命。

 

参考:

http://blog.csdn.net/chaoyuan899/article/details/7931922

 

http://blog.csdn.net/jinxfei/article/details/4602449