首先,这里要把程序员的概念放宽一点,不管是分析的,还是搞设计的或者编码,测试的,都叫做程序员。也就是说,这里以程序员泛指所有软件实现过程中所涉及的所有人员。但是不包括如配置管理员,数据库管理员,测试工程师这样的职位。因为这里讨论的仅仅是软件的构建,与验证、管理等其它周边事务都无关。
第一个要考虑的就是并发编程。比如多线程,它是否真是程序员本应该涉及的领域。程序员是否真的应该费大量精力去研究它,以便然后才能在现实工作中正确地使用它?
这是形式语义学讨论的范围。形式语义学讨论的就是语言元素的语义。其实我觉得它应该讨论得更多一点,比如比语言层次更高一点的如库(Library),平台,操作系统服务,本地服务,协议等的语义。
程序员应该干什么??
根据不重复发明轮子的原则,所有编程中的共性部分都不应该是程序员的职责。程序员只应该对商业逻辑负责。程序员当然还要负责这些逻辑的运行时实现效果。也就是说,程序员负责的部分包括两个:
1,程序的静态特性;
2,程序的动态特性。
简而言之,程序员应该是最终的产品责任人。这并不意味着程序员会负责整个系统所有的部件质量,也不意味着程序员只负责自己编写的程序部分。程序员对于因需要引入的任何系统构件都拥有责任。但这种责任是一种使用者责任,是区别于开发这些构件的生产者责任的。这就象我买了个手机,手机不是我生产的,但我仍然对它的质量负有责任:使用者责任。否则我就不会在购买的时候问东问西了。我问东问西,因为我关心它的质量,这个询问过程即体现了我的一种承担责任的态度。
承担使用者责任,需要的是对所使用产品的输出特性的理解。这种输出特性可能由生产者定义,也可能由第三方定义,也可能由使用者自己定义,毫无疑问的是,它必须被定义。如果产品的输出特性都不重要了,那么就没有任何东西是重要的了。
所以一个面向对象的程序员,应该至少拥有两种能力:
1,构建必要对象的能力(不一定是领域建模。因为前面提过领域建模只是面向对象的一种方法而已。面向对象的方法论并不一定要求只能对领域建模。面向对象的方法论的要求是:你的系统是由对象组成的);
2,理解大部分软件产品的输出特性的能力。比如数据库,支撑平台,操作系统,网络(因特网),安全,硬件等等。其中有些产品是有形的,有些是无形的如安全产品。这里所指的安全产品,是指作为组成安全方面的全部元素其中的全部产品。
当然,在技术以外,程序员如果懂得更多的东西那当然是好事情。如项目管理,软件质量与测试,IT审计,配置管理,系统架构,,,因为这些都是处在软件价值链上面的东西,懂得越多当然越好。
如果不好,那就是科学的错误了。
来源:oschina
链接:https://my.oschina.net/u/109289/blog/34062