明辉手游网中心:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

给大家泼点凉水:对于Java的一些看法

[摘要]发信人: Nullgate (民工空门·道·自由), 信区: Java标 题: 关于Java的一些牢骚 发信站: BBS 水木清华站 (Sat Feb 17 01:06:11 2001) Java现在热的不得了,似乎是个人都在学。网站也动不动就说jsp,servlet, ej...
发信人: Nullgate (民工空门·道·自由), 信区: Java
标 题: 关于Java的一些牢骚
发信站: BBS 水木清华站 (Sat Feb 17 01:06:11 2001)

Java现在热的不得了,似乎是个人都在学。网站也动不动就说jsp,servlet,
ejb。
我也见过不少需要java的公司的小头目(项目经理一级吧),他们却抱怨缺
乏java的人才。以前我以为只是懂perl的少,毕竟摸过perl的不多,所以不太理解。
现在我算是明白了,很多人学java不是把他当作一门语言来学的。写applet的就只
知道如何画图,写jsp的把jsp当asp用,在程序中用过数据库就算是懂数据库。

Java是一种计算机语言。我觉得不懂计算机就去掌握一种计算机语言是不可思议的。
你首先得了解世界,才能用语言去描述这个世界。对于盲人来说,颜色永远只是个
抽象概念。我很理解那些搞不清tcp和http的jsp程序员,因为他们可能永远不会遇到
“裸露”的tcp连接。他们也不需要了解垃圾回收和互斥,因为http基本都是短连接。
或许他们活得很实在,但是我绝对不会认为这些人“懂”Java。

当初刚学Java的时候,我觉得它的语法和C++别无二致。那时候我精通C++的
语法规则,继承规则,重载、超载、虚函数、内存管理的语法,然而我完全不明白
OO,完全不懂TCP/IP,完全不明白操作系统。那时候我觉得自己是个天才,自以为
在半年内学会了C++。很可惜,懂语法规则并不等于懂计算机语言。我现在对tcp/ip,
sql,操作系统和面相对象有一些肤浅的认识,回过头去看过去,发现自己整一个傻冒。

算法虽然不是语言的一部分,但是不懂算法的人,怎么可能写程序呢?算法在很
大程度上与语言无关,然而却是一个程序员的基本素养。很难想象,只知道穷举的人
能写出什么高效率的东西,虽然在很多情况下穷举是最优算法。我的说法并不严谨,
并不是说一个程序员非得能凭空想出快速排序才叫程序员。我只是想强调对算法的
知识是很有必要的。

面向对象的编程方法在很大程度上是一种革命,与面向过程的编程相比,面相对象
的编程与语言的有很大关系。拿C++或者SmallTalk写出来的东西区别很大。但是面向
对象的精髓却是一致的。Java就是一种专门为面相对象编程而设计的语言,所以,我认
为不懂OO的人根本不可能懂java(等他懂Java的时候,自然明白什么是OO :-D)。

虽然很多人说学习Java不需要任何C++/C的经验,甚至可以把它作为第一门
语言来学习。我也很同意,但是不要以为找几本Java书就可以从一个菜鸟变成
大虾。Java只是一种语言,只是一种工具,你不可能指望从Java的教材中精通
数据库,了解TCP/IP细节。当然,你肯定可以通过Java学会OOP。Java是跨平台的,
但是不等于你可以完全不了解平台,否则你可能连简单的rpm -i都不懂(不懂
没关系,因为不一定非得用Linux),你至少得学会安装它。

如果你希望我开一个与Java无关的单子,我会列出:计算机体系结构、
汇编语言、SQL和数据库知识(不是Oracle的手册!我说的是基础)、计算机
网络(比如同名教材)。如果有时间,可以看看操作系统,只是简单的了解,
至少你应该看看五个哲学家的问题。如果穷极无聊,我推荐你看看应用密码学。
事实上,计算机科学在很大程度上是数学,离散数学、形式逻辑、拓扑学,
相关的知识很有帮助。

不要被我的清单吓跑,罗马从来就不是一天以内建好的。如果你是计算机
或者电子系的学生,上面的大部分东西都是必修课或选修课,你只需要理解教材,
成绩根本不重要。如果你完全没有计算机基础(我是说系统的学习),你得学习
很多枯燥的理论知识,但是那绝对值得。我个人比较羡慕计算机系的学生,呵呵。

事实上语言是触类旁通的,只要你精通任何一门语言,你可以很快地
掌握另外一门语言。所以没必要犹豫不绝,学习C++并不妨害你精通Java。
我只是觉得语言只是一种工具,不要被工具所羁绊——虽然这正是sun的险
恶用心。我只想说明,只有大量的实际编程才能真正使你掌握一门语言。
所以,如果你的项目是C++,没必要花时间学习Java,当你精通了C++,你
会发现Java很easy。如果你有选择的余地,我强烈建议Java,用执行效率
换开发效率是非常划算的。

我并不认为写程序是一门艺术,至少写代码不是。如果你打算一辈子
做代码生成器,也许只有等到程序机器人出现,你才会后悔。很多劳动,
尤其是做网站,都是简单重复脑力劳动,对你的学习没有太大的帮助。如果
你只是为了挣点零花钱,也没什么好说的。

最后我想说明一点,我并不是什么大牛,也不精通Java,事实上我前几天
才明白wait是做什么的。我学习Java的时间不到半年,我自认为了解OOP的时间
和这一样。我在上面开出的单子我自己也不怎么了解,我甚至没有系统地学习
离散数学。但是我觉得这并不妨碍我阐述真理。
说了半天,基本上没有说到Java,不好意思。
拜托,我只是个民工。

--
大部分人的签名档都是写给别人看的,不过这次我却写给我自己看

●执着有时是一种美德,但是它通常使人变得盲目
▲在注重结果的时候很容易忽略过程,在嘲笑日本
游客的旅游方式时,却没有看到自己也常常这样
◆没有必要和时间赛跑,静下心来思考反而省时间