--[[ 引用leebai的评论
这个帖子很强,非常值得深入探讨,很多高人都:::非常认真:::地发表了自己的观点,我也来掺呼两句。
首先说个故事,我们公司招聘程序员,有一道笔试题是(泄密,以后就不能用了:)):
数字1、2、3、、、、10排成一圈,首尾相连。从1开始从中取数,每隔两个数取一个,如1、4、7、、、,直到取完为止。要求写个程序把取数序列打印出来,可以用任何熟悉的语言或伪代码。
这是我中学时在AppleII上做的练习题,easy吧?。就这个题,60%以上的应聘者交白卷;能写出代码的应聘者中,大部分又存在逻辑错误;做对的只是个别,算法好的压根就没见过。而这些应聘者中,绝大部分人的简历上罗列着J2EE,EJB,UML,设计模式,IOC,Strust,Spring,MVC,Hibernate,ADO,XML。。。一大堆名词,很多还写着精通Java,OOP!!! 我很纳闷,怀疑这些人的简历都是抄的、学历证书都是买的,于是每次都挑几个答题差的面试,结果发现人家对这些技术还真不怵,说起来个个都如数家珍,头头是道。99年至今,我基本上每年都要面试很多程序员,个人的感觉是:从事JavaWeb开发的程序员一代不如一代,JavaWeb开发社区的教育学习是:::彻底失败:::。
===============================
看了上面的故事,有点智商的都应该看出的我的第一个观点:任何时候基础都是第一位的,再好的翅膀插在猪的背上,猪也飞不起来。
zjlzjlzjl、Coolyu0916认为基础很重要,banq兄其实也没有说基础不重要,这一点大家是有共识的,不必多说,如果有人认为基础=基础知识,那他一定飞不起来,咱们就不和他讨论了。
===============================
智商再高点应该可以发现我的第二个观点:软件技术的基础是数理逻辑,猪飞不起来,不是因为骨骼肌肉不够强壮,而是猪太笨重,看问题要看问题的本质。
zjlzjlzjl本意想说的应该是java语言是基础,但标题写成了j2se是基础;banq兄估计没细看zjlzjlzjl的正文,顺着标题就反驳说j2seAPI不是基础,其实是关公战秦琼了。java语言和j2seAPI是什么关系,大家应该都清楚,不清楚的就别看什么J2EE、设计模式等等高深武功了,省得走火入魔。
banq兄提出模式设计是基础,zjlzjlzjl认为java语言是基础,Coolyu0916等延伸出数据结构和算法是基础,我认为都没有错,按我的意思,数理逻辑才是真正的基础;再往下推,智商才是终极基础,要不猪怎么就不能玩Java?
banq兄认为模式设计和数据结构是两条并行、对立的东西,这一点我有自己的看法。我认为数据结构的本义并不单是堆栈链表二叉树之类具体的东西,而是一个软件实现的数学模型,从这个角度说,设计模式其实也是一种数据结构,面向对象的数据结构(不是说OO表达的堆栈链表二叉树之类)。连最简单的程序都要有数学模型,就像上面的笔试题,因此,在数理逻辑之上,数学模型的抽象能力才是软件技术的基础,堆栈链表二叉树、设计模式都是数学模型的例子而已。因此数据结构不是就那么几种,而是你想不到的多;设计模式也不是就那么几种,也是你想不到的多,对于真正掌握语言的人来说,前人总结的模式和数据结构不过是一些语言应用的例子而已,无非是“熟读唐诗三百首,不会作诗亦会吟”,离真正的思想原创还有很大距离。大学软件专业课程设置的一个缺陷就是把<<数据结构>狭义化(或者说没有设置专门的<<数学建模>>课程)。
banq兄将OOP思想绝对化(也是很多OO大师的主流倾向),我认为也是可探讨的。站的高一点说,软件的目的是为了解决问题,即软件的本质是工具,没必要把工具意识形态化。站的低一点说,“面向对象”符合人认识世界的自然天性,而“面向过程”其实也符合人认识世界的自然天性,比如说“打酱油”,我们首先想到的是“两毛钱交过去,一瓶酱油拿回来”,而不是先想到“钱包”、“钞票”、“哪条路走”、“哪家店”、“哪个瓶子”、“让谁去打”,因为这些对我们“打酱油”这个“业务”不重要,所以自然地被大脑至于次要的位置,甚至忽略,如果硬要OO方式去建模,只能把问题复杂化。再退一步说,OO也不能解决所有的软件问题,你可以把这个论坛的数据库替换成XML(XML也不是OO),但你不能能把目前绝大多数应用系统后台的Oracle、DB2。。。都换成XML。OO数据库概念叫唤了这么多年,产品也推出不少,就没见有成功的,我看不是因为技术不行,而是方向根本就不对;其实目前Java后台开发的主要问题就是OO编程与RDBMS访问之间的mismatch问题,EJB,Hibernate等都是在这个地方折腾,目前看这个折腾还远没到消停的时候。
===============================
我的第三个观点,需要和智商很高的朋友:)一起探讨:JavaWeb开发不应该走现在的高端路线,既然没办法让猪飞起来,那就让猪跑起来。
我猜想zjlzjlzjl提出这个问题的出发点之一,应该含有对目前各种不断更新的j2ee开发技术的厌倦;banq如果没有自己的框架,而是不断跟随这些新东西,也一定会厌倦;对于初学者或者天资不够的程序员,他们连厌倦的资格都没有,只有迷茫:学海无崖,何处是岸?这么点破事,做起来怎么就这么费劲?
j2ee开发为什么这么费劲?j2ee社区的开发效率为什么远低于.net、php?
千条万条,不如一条:j2ee程序员的包袱太重,要学的东西太多,时间精力过于分散,导致基础薄弱,能力很难提高。
既然总是找不到足够数量、足够水准的程序员做j2ee项目,我们就有理由怀疑主流的J2EE开发模式本身是否有问题。一个地方的老百姓都成了刁民,那地方一定是穷山恶水,或者官府腐败、苛捐杂税太多。在我看来,j2ee的苛捐杂税就是太多了。
各中J2ee开发框架或技术,包括EJB、Struts、Spring、Hibernate、JSF等等,还有banq兄的这个jdon:),都明确地告诉你:我这东西很simple,你这样这样就行。但很少有告诉你:你必须先这样这样,才能用好我的东西。我认为,一个好的开发框架或技术应该是三流程序员也会用,二流程序员用起来很爽,一流程序员用起来叫绝的龙泉三尺剑,而不是一个只有优秀程序员才挥舞得动的青龙堰月刀。如果不懂设计模式就做不好j2ee应用的话,那么大量j2ee应用项目的拖延和失败也就是理顺成章的事了。
基于降低j2ee开发门坎、提高开发效率的思路,我很早以前就设计了一个JavaWeb开发框架:http://www.xjawa.org/ (打个广告,呵呵)。 该框架只要求程序员掌握基本的Java、SQL、JavaScript、HTML、简单ServletAPI,其他所有技术都不是必需。当然,由于j2ee开发社区的浮躁气氛,开发人员对主流新技术的狂热追求,以及客户被大厂商严重忽悠,我这框架在公司内部也不能全面推广;具有讽刺意义的是,数年之后,居然跑出来一个Ajax,而这东西仅仅是我框架中的一部分而已,这两年居然成了技术热门。
总的感觉起来,国内的技术环境确实很浮躁,大部分程序员不注重技术基础,更谈不上计算机科学素养。因为根基不稳,所以特别容易跟风,而j2ee的风又是东南西北的胡吹,开发者,尤其是初学者搞不清方向也就很正常了。
]]-- 引用leebai的评论
非常同意,赞一个!!!!!!!
强烈建议每个人都应该通读两遍
[该贴被slangmgh于2007年09月07日 09:00修改过]