论坛首页 海阔天空论坛

语言之争reload

浏览 8268 次
精华帖 (0) :: 良好帖 (0) :: 灌水帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-01-05  
Joel On Software 的那个鼎鼎大名的 Joel 最近勃了一篇The Perils of JavaSchools

好戏好像又要开演了(咦,我为什么要说又呢)
   发表时间:2006-01-05  
Great article.

重点部分摘要。

关于Google. FP.

引用

Without understanding functional programming, you can't invent MapReduce, the algorithm that makes Google so massively scalable. The terms Map and Reduce come from Lisp and functional programming. MapReduce is, in retrospect, obvious to anyone who remembers from their 6.001-equivalent programming class that purely functional programs have no side effects and are thus trivially parallelizable. The very fact that Google invented MapReduce, and Microsoft didn't, says something about why Microsoft is still playing catch up trying to get basic search features to work, while Google has moved on to the next problem: building Skynet^H^H^H^H^H^H the world's largest massively parallel supercomputer. I don't think Microsoft completely understands just how far behind they are on that wave.


MapReduce: Simplified Data Processing on Large Clusters
http://labs.google.com/papers/mapreduce.html

Real Computer Science

引用

Still. CS is proofs (recursion), algorithms (recursion), languages (lambda calculus), operating systems (pointers), compilers (lambda calculus)


关于OO的这部分,很有同感。
OO只不过是一个语法现象而已,一堆人靠操作这个概念吃饭。背诵名词一般喋喋不休,is a, has a, 封装,继承,多态.... 确实如文中所说,难度和 背诵历史科目没有什么区别。
我一直觉得这些概念上、世界观上的玩意儿其实就是扯淡。把一点实用的知识,用一堆玄乎的废话包装起来,形成一种词语组合的快感,骗取话语霸权、名气和金钱。本着不能挡着别人财路的原则,遇到这类扯淡,一般都退避三舍。

引用

But JavaSchools also fail to train the brains of kids to be adept, agile, and flexible enough to do good software design (and I don't mean OO "design", where you spend countless hours rewriting your code to rejiggle your object hierarchy, or you fret about faux "problems" like has-a vs. is-a). You need training to think of things at multiple levels of abstraction simultaneously, and that kind of thinking is exactly what you need to design great software architecture.

You may be wondering if teaching object oriented programming (OOP) is a good weed-out substitute for pointers and recursion. The quick answer: no. Without debating OOP on the merits, it is just not hard enough to weed out mediocre programmers. OOP in school consists mostly of memorizing a bunch of vocabulary terms like "encapsulation" and "inheritance" and taking multiple-choice quizzicles on the difference between polymorphism and overloading. Not much harder than memorizing famous dates and names in a history class, OOP poses inadequate mental challenges to scare away first-year students. When you struggle with an OOP problem, your program still works, it's just sort of hard to maintain. Allegedly. But when you struggle with pointers, your program produces the line Segmentation Fault and you have no idea what's going on, until you stop and take a deep breath and really try to force your mind to work at two different levels of abstraction simultaneously.


-------------

确实如作者所说。
Java不足以区分、也不足以造就great programmer。
就是说,只是一个Java Programmer,不可能成为 great programmer。只能成为 Architect, Application Fast Writer 等中游角色。

Java的意义在于降低了Programmer的门槛。不再是great guy的专利。
0 请登录后投票
   发表时间:2006-01-06  
buaawhl 写道
...
Java的意义在于降低了Programmer的门槛。不再是great guy的专利。
...


降低一件事情的门槛,使它“走下神坛”,向来是我所赞同的,PC使计算机走下神坛,www使互联网走下神坛……。让更多的人能轻松的去用一件东西,在我个人看来,没有比这更好的事了。

如果我没有理解错的话,Joel指责的重点在于:Java去掉了指针和递归,并因此导致了程序员的“退化”。

Java确实用一种更好的方式“隐藏”或者“包装”了指针。而递归?好像Java并不排斥递归啊。而且从ajoo给我们做过的例子来看,java来做fp亦无不可。所以,还是不是特别理解他这么说的意思。

至于退化,并不是每个人都要做“GreatProgrammer”的吧,想做?继续去学去用C/ASM好了,并没人强迫你用Java啊。这就好比,做应用不爽了,大可以去做底层;做底层不爽了,大可以去做硬件;做硬件都不爽了,还可以去做CPU啊;各层有各层的语言嘛,没必要规定大家都用Java吧。现在你在搞硬件了,却说Java不好用,这是不是有点……那个?
0 请登录后投票
   发表时间:2006-01-06  
同意楼上的。

关于joel所说的Great Programmer这个概念,我不赞同。做底层的就great叻,做应用的就不great?没这个道理。
0 请登录后投票
   发表时间:2006-01-06  
看joel on software

收获很多

不过joel的有些观点也不是很认同
0 请登录后投票
   发表时间:2006-01-06  
buaawhl 写道

确实如作者所说。
Java不足以区分、也不足以造就great programmer。
就是说,只是一个Java Programmer,不可能成为 great programmer。只能成为 Architect, Application Fast Writer 等中游角色。
Java的意义在于降低了Programmer的门槛。不再是great guy的专利。


Kent Beck说:
“I’m not a great programmer; I’m just a good programmer with great habits”.
0 请登录后投票
   发表时间:2006-01-07  
Trustno1 写道
发表意见之间请至少看清楚,别人说了什么.否则提出来的观点只能贻笑大方 I would even go so far as to say that the fact that Java is not hard enough is a feature, not a bug, but it does have this one problem. Joe并不否认,Java在工业界的角色。但是他真正要说的是,Java不够难,作为工业语言不错,但作为学校的教学语言,就忒差了。学校应该用指针和递归这类东西把真正的程序员筛选出来。对指针(代表系统底层)和函数编程(代表高层抽象)的学习是脱胎成优秀程序员的必经之路。
他认为没有经过C和Scheme这样的语言训练,基本上不算是学过计算机科学.
当然很多人可能连计算机科学的正规科班训练都不屑一顾。是的,我们周围的确有很多半道出家的编程爱好者.他们在工业领域担当的角色无可替代.但是职业角色的无可替代性并不等于从事这个职业的人是无可替代.一台数码照相机缺了那个部件都不能工作,但是,他的塑料金属外壳可以用中国货,印度货,马来西亚货,他内部的电路可以用日本货也可以用韩国货,但是高质量的镜头除了欧洲货外你在市面上根本找不到任何替代品.这就是greater programmer和mediocre programmer的区别.因此当你感到把C程序员称为greater programmer是对自己职业一种蔑视的时候,那就因该想想,你到底是要成为一个不可替代的程序员,还是要去从事一个不可替代的职业。

0 请登录后投票
   发表时间:2006-01-08  
Joel,包括其它一些喜欢评论语言的而又不是专业从事此方面研究的人,甚至说不是此方面权威的人,都远远没有什么资格来评论,或者说他的评论就是扯淡,没有什么价值。

写道

对指针(代表系统底层)和函数编程(代表高层抽象)的学习是脱胎成优秀程序员的必经之路。

你只给出结论,但是理由呢?

三年前,受nju starfish和zhaowei的影响,还算比较系统的学过lambda calculus theory和scheme。
我们公司一个programmer,凭个人见识,可以说是目前国内最顶尖的程序员之一,他不懂scheme,lambda calculus。
但是,我不断奔跑,估计至少三年才能达到他的水平。
所以,什么指针、函数编程不是优秀程序员的必然因素。

前段时间,发现很多人大张旗鼓的把scheme说的多玄多高级。怎么我就从来没这个感觉。个人比较讨厌进行语言的对比或者说认为某种语言就凌驾于其它语言。

在我看来,
从最终用户的角度来说,选择哪种语言完全是工程问题,简单点,就看你的问题那种语言能够更自然的来state(辟开主流语言、你只掌握某某语言等因素)。而原则,又往往屈服于实际,譬如RuleEngine用prolog描述最佳,但是Java项目中,你会去糅合Prolog吗?你还是会使用Java去做RuleEngine。虽然,Java来描述不是那么的自然。

从稍微偏理论的角度来说吧,翻了几个Scheme Interpreter 代码,和一般interpreter相比,个人看来,唯一的不同就是,表达式演算(FP中就是程序本身)这个环节,前者combinator-based reduction(还有其它典型的reduction system,但是我翻的几个实现都是基于combinator的),后者一般可以说是recursive-based reduction。说句实话,做个scheme interpreter并不比我做个QL parser难多少。

看到某些人写篇文章,18国语言都用上了。头痛。就个人意见,目前语言的发展,最好的途径就是在传统语言中适度的加入新的元素。

如果,计算机领域按照“科学”、"工程"、"技术"来分。
greater programmer是我们不可企及的。要称得上greater programmer的,估计都来自“科学”界。
而我们是搞技术的,我们的目标应该是优秀的程序员。无论你用什么语言,无论你学过什么,没学过什么,无论你是科班出身还是一介草莽,你只需要在自己的领域中作出好东西,就是优秀的程序员。
0 请登录后投票
   发表时间:2006-01-08  
一个现象,学院派和工程派。
0 请登录后投票
   发表时间:2006-01-08  
TomHornson 写道

如果,计算机领域按照“科学”、"工程"、"技术"来分。
greater programmer是我们不可企及的。要称得上greater programmer的,估计都来自“科学”界。
而我们是搞技术的,我们的目标应该是优秀的程序员。无论你用什么语言,无论你学过什么,没学过什么,无论你是科班出身还是一介草莽,你只需要在自己的领域中作出好东西,就是优秀的程序员。


完全同意
0 请登录后投票
论坛首页 海阔天空版

跳转论坛:
Global site tag (gtag.js) - Google Analytics