这是两个发展方向问题
作为一个初学者,他可能通过学习简单的一门语言来入门了,我们比如他学习了java吧,他掌握了基本的语法,一些常用的函数,我想大多数自称的初学者就是这样。那么下一步他们要怎么做?

他现在有两种选择,一种是学习struct,学习hib,学习spring,可能三个月,他不明白为什么,但是他能作项目了,可是他被绑定在java,struct,hib上了,因为下一个项目的时候老板会觉得他已经熟练使用这些了,下次你还要用这个。如果跳槽的时候他的简历也一定是熟练掌握XXXX,我想现在中国大多数的程序员的生存状态就是这个样子的。

另外一种方式你,学习数据结构,学习算法,可能需要一年的时间,你可能做不出任何像样的东西,但是,当你真的对算法与数据结构真的成竹在胸的时候,你可以去ibm,micorsoft,google这些公司去,他们真的能拒绝这样的高手么??

语言的学习周期很短,使用struct的使用周期也很短,你不利用有时间的时候去研究学习周期长的,却去学习那些周期短的。就如同武侠小说里面放着正道武功不练却要去学习速成技巧。

古人云十年磨一剑,做程序员也要有定力,有恒心,真的知道那些是重要的。框架一年一个新样子,你到35岁以后会不会被这些框架搞得头晕眼花??当你的学习能力下降的时候你怎么办??

struct能活多少年,你知道么??spring能流行多长时间你知道么??三年前J2EE被吹上天,现在又被贬的一败图地,那么你是不是感到彷徨与徘徊??现在流行ajax你学一下,明天流行spring你学一下,人的精力有多少??

呵呵,看了banq老师的经典发言,真的有种醍醐灌顶的感觉。
坦白说,对于计算机的疑惑太多了,就本次话题而言,我以前也想过,
总觉得有点不对劲,今天总算意识到了问题的关键吧。

正如 wind13 朋友所说的,辩论的本质在于探寻事务的真谛,不是分高下,双方明确的表达了自己的意思,也明白了彼此的观点,大家有所感悟,有所思考,就行了,我觉得这就是一种学习。

zjlzjlzjl所说的主体是java学习初学者,而对于初学者,我想这个概念还是有些太大,计算机算法、编译原理、数据结构都学的不错,但是我若没有学过java,没有做过一个完整的项目,我是一个初学者吗?
zjlzjlzjl是否可以换一个主体,比如软件开发初学者。

软件设计与建筑设计有很多相似之处,如果我们在一个专业的建筑设计论坛里,还能够看见钢筋是怎么浇铸的,温度要控制到多少,水泥中各个成分的化学分子是多少,如果搅拌才会使水泥更加坚固的讨论话题,那我想建筑设计师可能不会来这里了,因为他不关注这些,虽然他也知道和了解上面这些材料常识。
bang大哥是在谈论软件设计的思想和方法,这其中的思想和方法大家可以使用任何语言来实现。
舒马赫是一个优秀的赛车手,但是舒马赫为了成为一个优秀的赛车手,他肯定需要"向下思维",但是他"向下思维"了多少?我想这是一个度的问题。

给bang大哥一个建议,如果以后还有在语言上较真的朋友,那么以后凡是有java词汇的地方,一律使用xxx来代替。


[该贴被llizhuping于2007年04月09日 18:50修改过]

>>其实数据结构与模式语言的结合可以很好地 重用的解决一类通用问题,下面这个主题就是结合Composite+Visitor模式和二叉树概念解决树形结构通用问题访问这类实际应用中问题,从而形成解决一类问题的框架,这样不是提高我们开发效率和开发质量吗?(banq老师你以前说过吧!)
这是banq老师以前在论坛上给大家说的,而今天又说
>>OO是和这些传统基础知识(数据结构)并行的,是水火不容,是两个路线问题,非此即彼,是相克的,是黑与白,是不匹配的,是mismatch的。


banq老师能再解释一下上面的问题吗?

有时候总感觉你说的话太绝对了,完全是自己想到什么就说什么,可你应该想到你在论坛说的每一句话都会对看过以后的人有着影响,


就象学生写文章一样,刚开始都是从拼音,笔画学起的,然后再学写完整的字及对应的读法,然后再学成语,学习写自己的文章,在学写文章期间,可以读大量的优秀的文章,学习别人的思想,学习别人怎么组织文章的?适当的时候也可以背一写特别优秀的文章,以提高自己的写作能力。

编程不是一样的道理吗?刚开始就要从语言的语法学习,然后适当学一些常用的API,经典的例子,编程工具的用法,然后学写一些简单的程序(简单的数学知识,简单的算法和数据结构是基础),在这期间可以大量阅读别人写的优秀的程序,再进一步就是深入理解oo思想,更进一步的理解算法和数据结构,学一些经典的模式和框架,以提够自己的编程水平和开发效率。

总不能一开始就从模式和框架学编程吧!

以上都是自己学习编程的过程,纯属个人的观点,如果有什么不对的地方,请大家指出。

>>软件设计与建筑设计有很多相似之处,如果我们在一个专业的建筑设计论坛里,还能够看见钢筋是怎么浇铸的,温度要控制到多少,水泥中各个成分的化学分子是多少,如果搅拌才会使水泥更加坚固的讨论话题,那我想建筑设计师可能不会来这里了,因为他不关注这些,虽然他也知道和了解上面这些材料常识。

这是严重的偷换概念,就像工程师分为硬件工程师,软件工程师,你了解PCI总线协议么??你了解CPU寄存器么?我想现在没有人要求你了解吧。但是你要知道string+int为什么不可以,char+int为什么就可以,图的算法也许你觉得用不着,但是查找、排序算法你应该知道吧。难道招聘的时候要求写2个排序算法是很难的问题么??可是多少人写不出来??

我对java没有什么偏见,一种语言而已,用c可以写排序算法,java就不能么??语言是变化的,就如同框架一样是变化的。需要的时候你可以查手册,但是解决问题时你永远只能用sdk里面的Array.sort()么??如果有一天你发现对于一个大数据量排序,而又具备针对性的时候,你的老板要求你写一个quicksort()的时候你跟老板说sorry,sdk包里面没有,网上也找不到,你换个机器加点内存试试吧??

为什么美国设立图灵奖,仍然奖励那些在算法及数据结构上的杰出人物??为什么到现在还在讨论sort的更好的方法??他们不知道jdk里面提供了sort的方法??你为发现了jdk文档中最深处一个好用的函数沾沾自喜,可是别人有比你更加先进的东西。

你说这东西没用,可是你不了解这些永远不能登堂入室,难道你永远喜欢跟着别人的脚步前进么??为什么没有想过我可以引领风骚那??

llizhuping 假如你的计算机算法、编译原理、数据结构都学的不错,你不是一个初学者,就算你没学过java,基础课都学那么好肯定其它的语言学的也相当不错(例如c)你有了上面的基础,学java我相信也就是一两个月的事,做项目也会很快的上手,问题是你的计算机算法、编译原理、数据结构学好了吗?

我不觉得google、microsoft的起家能说明什么问题,至少我知道microsoft不是靠所谓的纯技术起家的,这点你可以去google一下。

计算机算法、编译原理、数据结构这些都是软件专业的基础课程,虽说其本身都极高深,但也不必花费过多的精力。除非你是想当一个计算机数学家(那请您赶紧跳过本贴,免得浪费宝贵的时间),这里我想说的是仅对那些希望能尽快编出可用软件的人。

当你面对企业应用,也就是要帮助企业解决生产、流通、管理等各方面实际问题的时候,我想能够给你提供帮助的一定是关于架构、模式、模型这些东西,而不是什么算法、数据结构。基本上,算法与数据结构都是经典可复用的(比如轮子),但特定领域的软件模型却需要巨大的创造力去提炼、去演化,真正的高手之道是要善于从大尺度把握问题的本质,而不是在某些细节精益求精。

与banq的唯一分歧在于我认为结构化思想才是与生俱来的--几乎不用学习就可以编出高耦合、低内聚的东西,OO绝对是要后天磨练的,这个过程可能还很艰难,并且我不能肯定这是因为大学教育的失误。这也正是OO的最大问题,它是一种思想而不是理论,搞的人既难教又难学,不过话说回来,一旦学会了就能感受到它的威力无比。

(架构、模型这些东西常常让我想得脑袋疼,所以我才去搞搞算法优化之类的权当休息,信不信由你。)

[该贴被zhouxu于2007年04月10日 05:37修改过]

>>当你面对企业应用,也就是要帮助企业解决生产、流通、管理等各方面实际问题的时候,我想能够给你提供帮助的一定是关于架构、模式、模型这些东西,而不是什么算法、数据结构。

所以我说中国的大部分的程序员现在都在做软件蓝领的工作。因为大部分人只会对数据库进行select,insert,update,delete操作。缺乏程序员应有的底蕴。

为什么这样说,大家可以想想,你自己做的项目是不是都是这样的,是不是只是让别人输入数据,然后进行一些处理就好了,但是这些真的能够指导企业么??

比如现在很多旅游网站提供订票功能,你查询火车站站信息,然后选择一个订票。本身没有问题,但是问题是如果我要是一趟车到不了的时候怎么处理??很多网站就是靠用户自己来想,你觉得那里换车方便你就接着再选,可是这是你程序员要做的事情,你为什么不可以告诉我中间怎么换车那??我可以有多少种选择那??因为大部分程序员根本就没有考虑过,即使想到了也没有能力去做。我们再上升一步,我们要提供时间优先与金钱优先的选项,找到最省钱以及最快的行走路线??做这个你的select不够用了吧,怎么办,是不是把功能取消了??时间优先与金钱优先的替换是不是策略模式那??你要真的结合起来用用户体验会提升到一个很高的层次。

所谓的企业应用不是把别人录入的东西再给别人看,而是要把企业要把这些数据进行分析处理,去得到他们最想得到的东西。如果你把ERP做成OA,那你根本就不配成他为企业应用,你要告诉他如何来节约成本,他存在的问题再那里,如何进行改进。这些没有算法与数据结构,只是靠select是得不出来的。

to zjlzjlzjl
被你锲而不舍对知识的渴求感动,再次回答你反复提及的问题:

我曾经说:其实数据结构与模式语言的结合可以很好地 重用的解决一类通用问题,下面这个主题就是结合Composite+Visitor模式和二叉树概念解决树形结构通用问题访问这类实际应用中问题,从而形成解决一类问题的框架,这样不是提高我们开发效率和开发质量吗?

现在我说:OO是和这些传统基础知识(数据结构)并行的,是水火不容,是两个路线问题,非此即彼,是相克的,是黑与白,是不匹配的,是mismatch的。

你觉得两句话是矛盾的,我前面一再强调每个人学习软件要不断反省自己的思维方式,是不是有待完善,老子的道其实就是一个马克斯的辩证统一啊,反者道之动,正因为正负/阴阳/矛盾才能组合在一起啊,成为一个系统,看到页面最上面的Jdon图标吗?中间O字不是由深颜色桔黄和白色两个水火不容的矛盾颜色组成的吗?

谈到Composite+Visitor模式解决二叉树遍历这个案例,我们又可以仔细分析一下:这个案例哪个是功能目的?哪个是解决途径也就是解决方案? 很显然,二叉树遍历是软件实现的功能和目的,而模式才是解决方案,但是在大学教学中,我们只学到
二叉树遍历算法,这样一个功能目的,而没有学习软件的本质:解决方案!如果说软件实现的功能目的需要教,那么软件可以实现的功能太广了,为什么只挑数学二叉树遍历教呢?

这就是明显当前软件教学中"畸形",或者说本末倒置吧.

我的观点真的到此结束,只要你关注J道上我的帖子,我以后会持续发言,你慢慢会明白我的意思,不可能靠这一个帖子我帮你将所有疑惑都解答,独立痛苦思考是培养哲学意识的前提哦.

在大学前三年我会跟楼主的意见一致,出来半年,来到这里,终于看到有和我一样想法的人,或是说我的想法和banq老师的相似让我关注这里。
我学的东西不多,但是我知道做事情首先要搞清楚你的FOCUS。

1。 不要 FOCUS 东西, FOCUS 问题。

2。 解决问题肯定会用到你说的基础,但基础只是基本, 手段(思想和模式)才是方法。
- 方法能广泛运用的基本才是基础, 手段才是思想, 以方法指导你的学习把。

3。 数理逻辑,算法,数据结构,数据库 不是不重要, 是基础, 很有用。
- 但是那是在你需要的时候, 的确丰富我们的逻辑思维 有助于 更好和全面的考虑问题。 但不要跟在别人说法后去学习, 大量的“基础” 会让你耗费过多的时间,根据你发展的方向(即解决问题的类别)来选择你需要的知识去解决问题,这样你会发现各种知识背后的思维方式和出发点, 无论OO还是面向过程。

4。 大学的教育只CARE了 “基础”, 是从下到上的模式, 而且只CARE了 “下”,而且步伐太慢。
- 想想你们所说的所有基础把, 我想即使读大学, 你只要参加过国际数学建模大赛, 国际编程大赛的人, 也有机会多少了解国外人的思考方式, 其实google的PAGERANK算法只用到矩阵中很简单的部分,但却如此巧妙的解决了问题。 从关注你的问题入手, 而去学习相关的东西, 从上到下, 才能知道根本。

5。 oo思想是最正常人的思维方式, 最自然的思考方式。
- 想想你周围的世界是否以对象(人,动物,植物)和行为(动作, 事件)构成的, 是否以人来主动驱动事件, 还是事件来贯穿人让人被动加入事件所构成的。

6。 当今中国真正缺乏的是 如何面对需求而把所有事件有机组成并完成任务的人, 而不是“构件”工程师一类的人。
- 而且即使是,当你学了一大堆所有工具和算法, 你会发现那些东西对你的项目和工程或是你们所说的构件开发一点用没有, 因为你不是从上到下的思想在思考问题。其实那些东西,在你需要的时候学习也是很快的。
....大抵就说这么多把。

(你怎么知道你学的就是“基础”呢, 那些也不过只是解决效率, 复杂度等的一系列方法和过程式的解决方案, 不是么, 你怎么知道你的项目中一定会用到, 现在是知识爆炸时代, 珍惜你们的时间去学习把, 好的解决问题的思想才是最重要的, 而现在看来是 OO)。

最后我提出自己的观点:
1. Thinking model is the most important thing.
2. Do the right thing at the first time.
3. Forcus solution, don't focus tool and special knowledge。

banq老师是很有耐心的,中国缺乏这样积极推出的人,缺乏这样的氛围,希望你们明白他的苦心。
一般我是不上中文论坛的, 珍惜这里的氛围把, 才出来半年, 我的观点肯定还有很多很不成熟, 让我们一起努力把, 希望我说了这么多能对你有一点点用, 谢谢。

-----------------------------------------------
Perspective: Software Is Free - SnowFeather
Come to http://sourceforge.net/
Make a contribution to OpenSource for the world
[该贴被snowfeather于2007年04月10日 10:16修改过]

Coolyu0916
>>所以我说中国的大部分的程序员现在都在做软件蓝领的工作。因为大部分人只会对数据库进行select,insert,update,delete操作。缺乏程序员应有的底蕴。

虽然你对我的贴子的联想过于驴唇不对马嘴--我不明白你怎么就自以为“所以”了,但我还是为你的好学精神而感动。你举的例子都证明那不是算法与数据结构的问题,都是软件模型的问题,只能CRUD的软件当然谈不上什么模型,请回忆你是否碰到过,有的时候即使你有了好主意(算法),但就是无法更新软件,加不上去或是代价太高,这就是模型有问题,我指的是领域模型(DDD的D)。

什么叫软件蓝领?也许是对当前就业形势的恰当描述吧(这也从一方面证明了关于目前软件教育的一些观点)。但我不认为中国大部分程序员的工作都是低等的,软件公司多种多样,不要想当然大家都只重视软件实现这么一个狭小的范围,我们现在所谈论的什么算法、数据结构,甚至架构、模式,其实都属于通用领域,形成软件公司真正企业资产的偏偏并不在这些,而在于它所发掘和独自拥有的领域知识。

当然,J道这里是属于软件咨询业的,自有其核心价值,我们应该感谢banq大哥的慷慨,中国软件业的落后,正是因为缺乏这种像样的专家。

楼上说得好,我们要focus问题,不是focus东西

但是为什么中国程序员缺乏思考能力那??为什么我们做的应用只能是select而不能做google那??楼上说google的算法并不复杂,那么为什么你没有想到那??楼上想过这些问题么??

实战中的程序员没有能力,真正了解用户的程序员缺乏算法的修养,他们即使想到了也只能望洋兴叹,而那些学者缺乏实战经验,不知道用户真的需要什么,也许你要他们写一个算法可以,但是联系到实际对他们太难了。但是你觉得如果让前面那些做项目的人重新学习算法容易还是让学者学会工程更加容易那??第一种情况他们不知道用什么算法,一样是查找,他们不知道那个效率更高更快,那个对空间要求高,各自的特点,而后者我想看spring估计也不过一个月吧。

你可能觉得那些存储、空间无所谓。那是因为我们面对的太小,你看到一个企业,就算是银行、电信应用不过是TB级的应用,可是google可以不注意存储么??如果他不考虑存储估计就算硬盘内存再便宜他也破产了。

to zhouxu
好吧,运用你的设计模式,运用你的DDD,麻烦你给我设计一个公交查询向导,我可以输入两个站明,你告诉我怎么倒车,如果你愿意实现实现最近距离以及最少倒车次数,我更加欢迎。

希望你不要告诉我你没有时间或者你作不出来。

如果你觉得我的需求不够明确你可以接着给我回帖。至于存储你自己选,采用的语言你随便。

附件中是我所在城市的公交路线说明,第一列为公交车号,第二列为该路车共有多少站,剩下的都为站名。如果你觉得这个不利于你的导入你可以告诉我你需要的数据格式,我可以帮助你转化。

麻烦了,我真的要好好向你学习。

下载我的数据文件

zhouxu,别让我失望。

btw:banq大哥,上传附件好像有问题,不能提取出来。
[该贴被Coolyu0916于2007年04月10日 11:00修改过]
attachment:


road.txt

说实在的,什么是基础这个问题上,确实很多人都存在着j2se是基础,定位的角度遏制了发展,看到banq这么提出来,感觉很痛快啊,哈哈

To Coolyu0916
1。 没想到google的算法不是因为我理论知识不够, 要不我怎么能懂, 而是我缺乏解决问题的能力,
- 你说的公司以算法起家, 而他们真正的起家是因为他们的算法所解决的问题迎合了市场, 我想世界上的算法不只他们两家公司把。
2。 真正了解用户,缺乏算法修养的程序员及缺乏实战经验的学者是不同方面应用层次上的人才。
- 如果你想两者兼得, 很难,这么说把, 最近公司来了个算法很牛X的人(抱歉,我不能提名字), 他却不能融入到我们的项目中,因为变化和需求太快,他以前做的事从事的思想和FOCUS并不在这里,我们做的是PLATFORM,当我们需要某种算法时,就会找他。
3。 中国的数学不差, 差的是能把知识运动到解决问题的能力上。
- 培养一个即具学者又具XX之父能力的人千万里挑一,为中国营造好的市场并培养把各种有限资源组合在一起解决问题的人才是发展中国软件产业的当务之急。
4。 两者都需要大量时间,所以前面我提到珍惜你的时间,选择其一。
- 如果你觉得你很有天赋,google或是那家都抢着要, 那么算法专家, JAVAXX之父的头衔终有一天会落你头上。
5。 现在讨论的已经不是那个重要, 而是先学什么的问题了。那么我选择学习解决问题的思想和方法。

意见不同才有上进,谢谢你的回复, 不过我要做事了,太多事了:)

我想SUN的专家和IBM的专家那个多,能看出技术引领世界还是市场引领世界,中国现在有很好的市场,却还不够引领市场的公司。 各位加油把~

-----------------------------------------------
Perspective: Software Is Free - SnowFeather
Come to http://sourceforge.net/
Make a contribution to OpenSource for the world