• 我是一个很别扭的人,即使是对手上的工具,也总容易产生喜爱或者厌恶的情绪。具体的说,就是我讨厌JAVA。

    这不是一篇技术角度讨论JAVA缺点的日志,我没那个水平,事实上我是一个学不会JAVA的人。如果想从历史和技术角度了解JAVA的局限,推荐看《超越 Java》--虽然我还没看。如果想返璞归真,驱逐复杂,推荐看《轻快的JAVA》--虽然我也还没看。

    之前已经说了,我是一个学不会JAVA的人,所以注定接下来只是一个loser的满腹牢骚而已,路过的可以就此打住了。

    以下是牢骚,为什么我讨厌JAVA:

    1、JAVA太多生造词。

    我真的不明白JAVA怎么可以搞得这么复杂,这么多概念,这么多生造词。举个例子,JavaBeans是什么?老实说我现在都没搞清楚这是个什么东西。

    JavaBeans are reusable software components for Java that can be manipulated visually in a builder tool. Practically, they are classes written in the Java programming language conforming to a particular convention. They are used to encapsulate many objects into a single object (the bean), so that they can be passed around as a single bean object instead of as multiple individual objects. A JavaBean is a "Plain Old Java Object" (POJO) that is serializable, has a no-argument constructor, and allows access to properties using getter and setter methods.                     -- en.wikipedia.org

    这是wiki的解释,javabeans的wiki页面内容之少让我感觉javabeans这个概念是不是已经淘汰了,只是我在干发闷骚。还是继续讲,字面意思上看javabeans(打字好累,叫JB算了)是一个...遵循某种规则的代码包,里面包含了一些写好代码,可以完成某样功能。我脑中马上浮现的词是:plugin。JB是不是一种类似plugin的东西?为什么JAVA要生造一个JB词?如果JB不是插件它又是什么?

    好吧,ruby里面也有生造词,比如rubygems。一开始我也不明白这是什么东西,也是wiki一下

    RubyGems is a package manager for the Ruby programming language that provides a standard format for distributing Ruby programs and libraries (in a self-contained format called a "gem"), a tool designed to easily manage the installation of gems, and a server for distributing them.        -- en.wikipedia.org

    package、libraries、standard formate,这些词多么清晰。JB不但字面难以理解,连解释也是模棱两可,真不知道JAVA人士交谈JB的时候脑中想的东西是不是同一个东西。

    好吧,我知道我对JB的理解肯定错了,我也就这个程度了。那么JB到底是什么?更进一步,Enterprise JavaBeans (EJB) 又是什么?

    小结:JAVA生造太多概念用于迷糊企业用户,用于推销产品,达到”火力掩护“的作用。

    2、JAVA太多XML

    多到什么程度?Ant的配置文件、Hibernate的配置文件、JDBC的配置文件、各种框架的配置文件……以及前面说到的几个东西互相配合的时候要写的粘合配置文件,这都是XML!鼓掌……

    XML's purpose is to aid information systems in sharing structured data, especially via the Internet, [2] to encode documents, and to serialize data    -- en.wikipedia.org

    XML是设计来干什么的?是用来传输结构化数据。JAVA却拿来写配置文件!

    用XML用来写配置文件有什么坏处?一是难写,二是难看。XML的设计目的注定了它是一种适合程序读,程序写的标记化文档。我们可以写一套程序来处理XML文件,并且很稳定。但几乎不可能让人来直接打开XML文件来读写(必要时只打开来看看是否按预想的方式工作),这意味着我不能用心爱的VIM编辑器来填写数据库账户密码的配置。JAVA程序员要笑了,这个原始人竟然用编辑器来写程序,他们都用图形IDE来操作,生成XML。这边鼠标点点,那边拉拉菜单。

    OK you win!跟了我6年的台式机实在受不了那些个打开就占用300M+内存的IDE折腾,我的手指也不能忍受把原本105个键合作完成的操作全部集中于一个键(鼠标左键)上。鼠标代替键盘有什坏处?手指在105个键上跳跃绝对比食指定在一个键上要舒服,进一步,会有很多操作可以凭借肌肉记忆完成。而每次的鼠标操作都是一个重新寻址的过程,这里是某个JAVA产品的操作视频,可能在某些人眼里这简直是程序员的天堂,但我看来,我想像到一个四肢健全的人像霍金那样只用一支手指在那里点点点……我会疯掉。

    小结:JAVA滥用XML文档,想创造让业务人员都能使用的图形IDE,只是又一个两边不讨好的神话。

    3、学JAVA的人很少知道为什么要学JAVA

    (好导演都拍2,迫不得已我也要写个3了。)

    学JAVA的人非常非常多,所以大部分人都是”水货“--每个领域真正的高手人数的数量级不会差多少。

    为什么学JAVA?因为师兄说要学,因为公司招JAVA人,“还用说吗?这个世界除了JAVA还有别的吗?”

    顺便说那些个什么北大青鸟一类JAVA职业学校能进来本科学院开讲座,系里还要求人人签到,这简直是一种耻辱。

    学JAVA的新人真的知道自己为什么要学这个年龄14岁的语言吗?真的知道什么是企业应用吗?什么规模的企业需要用到JAVA那么重量级的东西?

    对计算机行业有想法的人,都挑了自己感兴趣、感觉有前途的技术方向去发展了(也包括JAVA),然后其余的都是JAVA。

    我为什么会对这个状况有意见?因为如果我也进入JAVA这个队伍,就意味着我要跟这些没主见的人竞争,等我理所当然的胜出之后,我还要管理这些没主见的人!

    饶了我吧。

  • 我是怎么样的人,我已经迷惑了。

    当我在计算机Q群里呼吁“有无人一起上软件体系结构/软件测试阿?”要不是没回应,要不是回应“ZM的课打死不选”、“又写代码”。我困惑了,仿佛我是外星来的。

    我所在的系难道不是计算机系么?敲代码不是计算机系的“本分”之一么?

    我也知道造成这种现状的原因,一是本学院、本系有太多同学是被“筛”来的了,不少人入学的时候不知道什么是计算机的。(不就是那个可以打魔兽/QQ堂的机器嘛)二是学院的部分老师,特别是某个“教”C语言的垃圾,玩忽职守,把计算机系的根基毁了。

    我不会原谅那些把教育当产业的人,酒桌上几个来回就能把十几个省的高材生禁锢在这个建筑材料包围的职业学校。

    是阿,不止一次有人对我说:这就是现实阿,选些容易过的过了就行了,别较真了。

    算了别对我说这些了,我从小就钻牛角尖钻得要命,要不我就不是我了。

    如果我大二的时候把社团搞起来,如果那些课让我教,如果……好的没有如果。我痛恨这个知道什么却做不到什么的我。

    呵呵,不要笑我是个只会抱怨环境的人。无关紧要的事我通常就避开了,但有些事,我通常想法子改造环境。

    一个学期就是一个轮回,要冲破这些轮回,时间不太多。

  • 还是那项目的事

    老师把所有东西都委托我了,我却怂了,因为我发觉按照项目说明上讲的东西,我可能完不成。大概是要做什么呢,几个关键词:数据库集群平台、SOA、全行业统一XX

    当然,说明书上说得那么大,实际上可能那边公司要求得非常少,不然老师也不会找几个学生负责就不管了。27号再和老师商讨,我唯有把风险说一次,如果老师觉得可以冒这个险,OK我尽力。(已经感觉到老师无论如何要哄我继续做下去)

    在这个争出位到骑虎难下的过程,我也发现了自己很大的不足:

    1、我并没有自己想像那么强,即使我想学,也有个能力极限。

    2、我还没到能够带人的水平。

    3、我不能幻想事情能这样进行,事情就会这样进行。

    不过我也想发几个牢骚:

    1、MD项目成员不是由我定。

    2、老师你手下一个人都没有竟然敢接项目。

    也有几个收获:

    1、Ruby on Rails真的很‘敏捷’,它的哲学,让我认为未来付出一大段时间来研究它不会是浪费生命。

    2、坚持每天锻炼一点,头脑会清醒一些。

    一个忏悔:

    1、对某人夕令朝改了,很内疚。

    今天26号,接近开学。这个小小的学院,也会热闹起来──起码能看到女人走动了。我还远远不够,努力,加油。

  • 如果有人问我怎么要走上技术路子,我会说:读书,读好书,读好多书。

    对于理论和实践哪个先行,我认为是理论。(我不想拐弯抹角的说“在什么什么情况下...”了)针对计算机领域来说,因为计算机不是我发明的,所以我理所当然的要先看计算机的著作,补充理论知识,然后实践。但我看到不少同学在看书面前栽跟头的,或是根本不愿读书,或是没读到好书,总之离读好多书的阶段差了不少。下面说说怎么实现标题的目标。

    读书

    敢说自己不需要看书的人还是很少的,但也不排除一些笨蛋,以为自己生来已经打通任督二脉,脑内装有解决世间所有问题的公式……并不是每个笨蛋都会这么出格。但当遇到一个技术问题,这人脑中先想着死啃而不是去翻书或者开搜索引擎,就有笨蛋明显化的倾向。

    重复一遍:如果这个东西不是你发明的,就应该优先查阅别人的解决方案。或者用unix世界的格言会让这些笨蛋舒服一些:不要解决一个问题两次。

    读好书

    对于不想读书的人不再浪费笔墨。我觉得较为可惜的是栽在“读好书”层面上的人了,换句话说,他们没读对书。有读书的意愿,没读对书就很可惜了。

    书跟女人一样……好吧,跟人一样,都是千奇百怪的。有的书适合初学者,内容按部就班,语言风趣幽默,通常还会扩展一下思维,让你有个整体景观。看完之后既掌握了知识,又对某个领域的前景萌生一定想法,能做到这个地步就是一本不错的入门书了。有的书适合提高,或者真正工作用,它语言不一定风趣,有时还很苦涩。需要注意的是,薄书有时比厚书更难懂。就像上C++这门课的时候我是抱着788页的《C++ Primer Plus》,很浅显易懂,别人用的200多页那本《Accelerated C++》就很痛苦了。

    说到实际问题,怎么分辨一本书是好书还是坏书(或不对的书)?

    有类书,注定就是垃圾。其一般特征为:1、高等教育出版社(90%) 2、国内高校专家教授,编写组(30%,行业专家不算) 3、XX天学会,XXX从入门到精通(80%) 4、XXX概论 (40%) 5、XXX等级考试(100%)。以上数据全凭我主观感受。这类书要不故意写的十分苦涩,好显示作者的权威──他IQ高,你IQ低。要不图多内容少,只有实例没有思想,拾了芝麻丢了西瓜,看完之后除了扔一边没什么去处。

    而要挑一本好书/适合自己的书,有一些实际的手段:上豆瓣网看评论──我毫不吝啬为我喜欢的网站免费写软文。豆瓣网的图书评论是我非常喜欢,已经成为不可或缺的服务。想要查某类图书,先上豆瓣,看评论。进一步,可以注册豆瓣的服务,把看中的书列入“想读”收藏,为自己的读书做个阅读清单。书评网站其实有不少,之所以只推荐豆瓣,一是豆瓣人气高,图书资料齐全,二是豆瓣的铜臭味淡,评论里出版社的托比较少。

    参考过豆瓣的资料,一般可以确定这本书质量如何了,但还要注意:书好,但不一定适合你。我就中过一次招,买了一本传说的经典──《C++ Primer》,而实际上我不必要看一本从头到尾,每个细节都列得清清楚楚的入门书。有一位同学,放假提前回校,随手拿了一本很厚的C++书在啃。我问为什么要看这书,他说:不知道,总要学点东西吧。注意!!虽然说看书前不可能知道自己能从书中得到什么,但总要有个大体概念──这些东西是我用得上的。不要以为《程序员心理学》就是程序员看得懂的心理学!

    关于“看好书”还有一点要说的是:不好的书,尽早放手。如果手头正在读一本书,问自己几个问题:

    1、我为什么读这本书?
    2、读得开不开心?
    3、这本书本身内容如何?能不能达到我读书的目的?

    很明显的,如果读得不开心──有些人看书会看得垂头丧气,咬牙切齿──那么应该尽早出局,或者换本书,或者换个适合自己的领域。不少人卡在“尽早出局”的心里负担上的,其实行行出状元,干麻不自己做爱做的事而去做别人爱做的事?

    读好多书

    为了凑格式用了这么别扭的小标题,换正常语序说就是“读很多好书”。

    梁文道在某集开卷8分钟里讲过:“一天看完一本书也不要得意,每天都有上千本书新出版,你读了一本书,说明你错过了另外的九百九十九本书”。

    慢工出细活──是不一定的。一本好书,会让人思维通畅,一气呵成。我就试过3天看完《最后期限》和《软件工艺》。看书要饥渴地看,手头这本书是很好,但它不会陪我过一辈子,前面还有很多好书等着我去读。

    要怎么才能看得快看得多,这是个自我促进的过程:看得懂就看得快,看得快就看得多,看得多就看得懂。这个过程的切入点在哪里?是时间。同样的看书精度下,一般人的看书速度都是差不多的。这时候就看时间的投入了,看了5小时书的人,怎么都比看了30分钟的人进度要快很多。所以要想看书快很简单,多投入时间。有人看书30分钟就会觉得很累,但想想自己每天发呆、抱怨无聊的时间会占去多少时间了?时间要挤,挤的过程要用力,并不轻松,这个可能挤过才知道了。

    顺便说说我很不理解很多人划书,这可能是应试教育培养出来的──这些是重点,要考,划出来。对我来说,一本被划得“百花齐放”的书我是不会看第二遍的。但是每本我看过的书,“索引”都会记在脑子里:我看过什么,我会在哪本书哪个章节找到这个内容。每本书都有个目录,如果很难按照目录查找到相应内容,那这书的目录就没做好。如果书里面有很多可以被划出来的内容,那这本书很可能是上面列举的几类垃圾书中的几种:好书绝对不会有重点,如果有什么是值得特别划出来的,那么在出版的时候就应该把不被划出来的通通删掉。(当然,各人读书习惯不同。李敖大师喜欢把每页纸都剪开,自己分门别类二次装订)

     

    罗罗嗦嗦写了一堆,其实读书问题大家心里都有数,做不做得到是一回事了。再提醒:不适合自己的,尽早出局

    从理论上说,理论和实践是一致的。但在实践中则并非如此。 ──L. Berra
  • 看到这消息──中国计算机学会CCF官方网站被黑,还真引起我蛋蛋的哀伤。cnBeta上连登两篇据说是选手的自白:其一其二,看到不少酸味重的评论,我又被气了一轮。

    气的不是事件本身,或者一两个人的言语,而是身处的这整个教育系统,要把每个人的棱角磨平,制造庸才。

    NOIp也就是中学级的编程比赛。这个比赛跟物理化学之类有个很大的不同是,它的内容跟高考毫无瓜葛,所以参赛学生的压力比其他比赛的学生大了不少。在我那时候参赛也压根没考虑保送的事,只是好奇试一下,突击两个月就去比赛了。结果考试成绩爆降,没拿实质的奖,之后老师担心,家长责备。连我自己都感觉的搞这玩意吃力不讨好,所以只参加了一次,之后就很少跟编程接触,专心搞应试去了。

    NOIp比赛的内容并不简单,实质已经相当于大学的算法课和数据结构的内容。在比赛的时候我第一次看到了什么是栈,什么是树(内行的已经看出来为什么我没拿奖了)。另外由于使用的语言工具是非常底层的QB和pascal(我选了QB),我在那时候已经接触到什么是结构化编程,什么是地址、数组,以及为什么不要用GOTO(本科的也许不知道这个语句)等等。

    现在作为一个计算机专业的学生,回想起高中所有的经历,给我最大帮助的正是那两个月在抽屉里偷偷看QB积累的编程经验。在填报高考志愿那一刻,我已经知道计算机大概是个什么玩意,我已经比别人走先一步。在大一大二上那些狗屁必修课的时候,我一路都要求自己比别人学得更快。由于早在高一已经跨越了对计算机的恐惧,学起专业知识来也是“得心应手”、其乐无穷。

    我一直庆幸着国/家教育还有这么一个异样的捷径,能让异才能少受一点庸才教育的摧残。我是自认没能力踏上这班直通车,但那些真正异于常人的多少有一些能走上这道。而现在这条路被截断了。

    是的,有竞赛肯定有应试化的培训班,经过题海训练肯定能让不少人“轻松”拿奖。不过这个“轻松”比起数理化的竞赛而言要沉重了许多──总不能不理解什么是树就能做出快速搜索,不能不理解什么是图论就做出哈密尔顿回路吧?平心而论如果在大学课堂里旁边坐着这么一位高中就掌握了不少计算机算法的人,谁会在意他高考成绩怎么样?我不会,我现在还不敢说能3个小时做完提高组的比赛卷。

    不说了,最后还是引用一个评论:

    建议:

    1、尽快面对现实,01年时也是保送取消,看着一群学长痛失资格,但是拼搏了一下,最后都有很不错的结果。现在还有几个月时间,过年也别休息了,抓 紧复习吧

    2、从NOI里可以收获的不仅仅是这样一个保送资格。如果你将来有志于从事这一行,那恭喜你,你比你的同行们多了至少3年的宝贵经验,而且这些经 验并非通过一个个痛苦的应用项目得来,而是通过一道道有趣而充满幻想的题目得来(奶牛题多有趣)。如果你并不想继续从事这个行业,那你也从中得到了逻辑思 维的锻炼,学到了一些很有价值的解决问题方法的方法。

    3、你要真就为了这么个保送资格……快老实读书去吧……那样最有保证了 另外,pascal快换掉吧……