看了包建强的blog: 一个优秀.NET程序员的技能树 想说些个人意见.
包建强所列举的技能很多. 可以说绝大部分人都达不到他说的标准. 难道达不到那个标准就算不上优秀了?也不尽然.
每个人有自己的看法. 我的看法:
对于.net方面的开发人员, 我认为应该掌握的基本技术素质:
asp.net方面
webcontrols和htmlcontrols
webform验证控件, 熟练地在不同场合使用客户端验证和服务器端验证
了解Get. POST等常用web actions区别.
知道Application, Session, httprequest周期.
了解httpruntime的cache与session的区别
javascript和DHTML如何work
ajax如何work, 如果可以,最好了解一个ajax框架. 如微软提供的框架.
WinForm常用控件
web service
Threading, STA 和MTA
ADO.net, dataset, datareader
Regular expression初步知识
基础sql server
基础Debugging
如果再进阶的话,
可以了解httpmodule, httphandler如何应用
理解appdomain及其应用
可以思考.net如何与其它技术平台work. 如com+, com, java.
可以了解新技术(如linq, wpf,wwf,wcf)等对应用的影响.
可以思考如何提高应用程序的安全性,可维护性,可扩展性, 可
可以思考高可用性, 高容量环境下的应用开发.
进阶的Debugging, 到底层去理解系统是如何work的. 如何能在用高级语言编程时,也想到底层是如何work的, 那么你的系统一定会相对运行得效率高,省资源. 不要总想着硬件便宜, 加硬件或者升级硬件就行了.
再进一步,可以扩展知识面, 点面结合. 点是指你得主要技术强项,如.net, 面当然是指更宽的技术知识面和商业知识面了.
了解Microsoft的其它技术和它的历史
了解Microsoft以外的世界是什么样的
了解不同的商业知识Business domain, 计算技术其实是为这些商业领域服务的, 成为商业领域专家,是个不错的选择.
关于OO.
OO是一种方法. OO发展了好多年.有不少好东西。可以用但是不要什么都是OO. OO不代表计算技术的全部.
开发企业应用时应用OO是比较不错的. 但是开发其它的应用时, OO就不见得好了.
关于设计模式
GOF 23种模式还有其它一些模式是不错的知识. 你不一定要能熟记这些模式的UML图. 关键是要弄清楚这些模式在何种情况下应用. 能正确辨别何时何地运用何种知识才是关键. 兵法也说“兵无常形”. 就是让我们办事要因时、因地制宜,具体问题要用具体办法去解决。说句实话,设计模式就象围棋里面地定式. 你能熟记是最好, 但是一定要搞清楚何种情况下用何种定式. 再者围棋里面地变化实在太多了. 定式根本就不够用, 就要看你的基本功了, 对大势,厚薄,截才, 先后手, 气数等等都算计得很清楚, 才可能找出最优解. 我们面对的世界也是变化无穷的. 我们能凭借什么来设计好的软件系统呢.
1. 简单原则, 把复杂的东西简单化, 而不是相反. 看起来一目了然的界面,看起来一目了然的程序代码, 容易理解,容易维护. 我以前参加过一个项目,曾经为了改一个简单的文字, 花了四个小时在复杂的程序里找这个字符串从哪里来的. 当然我是刚加入这个项目组. 这就是复杂架构的不好的地方. 对于新人就学习成本很高. 维护成本也高. 设计要避免过度设计, 开始设计系统时首先要想到从应用层面和技术层面如何简化系统. 有句话说的好, 把复杂的东西简单化,是贡献. 千万不要做相反的事情.
2. 分而治之 就是将大问题分解成几个小问题,大系统分解成几个小系统. 这其实是简化地一种手段, 但是要注意分的时候的度. 不可过细,也不可过粗.
开发人员的其他素质
使用工具的能力, 有好多工具可供我们使用, 如单元测试,
对软件工程的理解
协作, 沟通的能力
自我工作的估计和计划
责任心和激情
最最基础, 也最最重要的素质:
1. 善于学习,总结
2. 善于分析判断
3. 从多种角度考虑问题
此基础素质好的人应该是做什么都不怕.