我是一个软件技术人员,2005年07月本科毕业,到现在工作快一年了。
做技术的,以我比较熟悉的软件技术为主,或许可以大致分为这么五个层次:
级别一:单项应用级
这个人可以熟练的使用某种开发工具做普通的应用,非常熟悉某一种开发语言的类库,以及这门语言的特性。例如,他/她了解VB,使用过VB的几乎所有标准控件,几乎所有主要的第三方组件,曾经使用这本语言开发过已经成功上线,并且看起来效果还不错的实际系统。又例如他十分了解Delphi,或者VC,. net 等。由于对语言本身非常了解,一般情况下,他写出的代码运行效率在负载大的时候比新手能够高不到一个数量级。
对于数据库、操作系统,她/他也有所了解。类Unix系统的命令大概也会一些,配合X-Windows,也可以完成一点简单的服务器配置工作;例如搭一个防火墙、路由器,或者文件服务器、备份服务器什么的。
硬件:它可以基于某系列芯片熟练设计外围电路。设计出来一块主板虽然费点力,但还是可以做到的。
级别二:混合应用级
这个人能够非常熟练的使用一种开发语言,同时也能够使用其他的主要语言。在他/她看来,重要的是采用合适的技术,在规定的时间内、有限的资源下,完成一个应用系统。事实上,她/他了解所有主流语言的类库,语言确实不是什么障碍。PL/SQL所搭配的类库实际上可以取代几乎所有Java在应用系统中所能够实现的功能。
因为使用过多种开发语言和工具,对于几种编译器的常见特性、优化方法也有所了解;对于常见的几种处理器的特性也知道一些,当然还有一些外设。
当然了,对于六七种常用的数据库也比较了解,对Oracle的大部分启动参数都进行过试验,多少理解一些。SQL Server如何调优,也有所了解。当然了,对于DB2和mySQL,也有实际的项目经验;把他们和前面的两个做做对比,再加上其他一些小型数据库,开源的和不开源的,结合自己的数据结构等知识,和一些实验数据,对数据库实际采用的检索算法,也能猜出个八九不离十。所以,我们不必很惊讶经他/她的手调过的应用系统,包括数据库层面和应用程序代码部分,总是在高负载的时候能够很好的运行,虽然采用的硬件比以前还差了些。
当然了,目前的系统是软硬件兼有的;微软的API真慢,害得她/他不得不剪裁另外一种操作系统来打破这个效率瓶颈。
业余的时间,他也看了写一些公共的协议和标准,主要是来自W3C、IETF、java.sun.com等。
硬件:其实支持各种不同的芯片组不是那么困难。所谓的不同的计算机系统结构现在终于理解了,她/他觉得其实这几个常见的系统结构还是有缺点的;还有那可恶的向下兼容性,简直就是在浪费资源。那些总线协议,GSM,GPRS协议什么的也都读过一遍了。
级别三:设计级
使用别人的库函数,编译器,总是觉得有一点不太舒服;并且那些编译器总是遗漏一些重要的东西,库函数设计的又不够简洁和易用,运行效率也有不少问题。
如果有时间或者资源,她/他自己设计了一门语言,和一些相应的工具。看来总是抱怨别人做得不好是不对的,自己做的东西也还是有很多问题不能够令自己满意,实现那些协议还是比较复杂的。不过还好,在一些应用领域里面,自己的这个东西还是很好用的。她/他觉得自己写的驱动应当是这个世界上最好的了吧。就是操作系统怎么可以这样加载程序,又怎么可以这样使用硬件呢。太浪费资源了。自己想做的事情总是被操作系统所阻拦,这个碍手碍脚的家伙。
硬件:终于开始设计芯片了。她/他觉得自己可能是实现MPEG算法最好的硬件工程师了;实际上移动通信芯片也没有想象中的复杂;有些芯片设计出来了,就是不太好生产出来试验一下,只有那些简单的可以实际生产出来。
级别四:系统级
实际上我只需要做很少的事情,而现在的操作系统太庞大,并且不听使唤。无奈之中她/他只好自己完善了一个操作系统,来控制那几个专有的硬件设备。真不知道这种项目会不会有第二个。
硬件:她/他需要设计芯片和外围电路,把功能放在外面还是里面真是一个艰难的抉择。
级别五:系统设计级
她/他们了解几乎所有常用硬件的主要工作原理,以及几个系统软件和开发环境的方方面面。现在的目标是发明一种更好的架构。一件事情,到底是分给硬件工程师,还是软件工程师,硬件给了哪一部分,软件给了哪一层,真是个很难决定的事情。不过无论如何,她/他们在这一刻的决定,必然会影响到全球几百万开发人员,以及若干亿用户所作的事情。