“主動程序員”與“被動程序員”[1]

字號:

我覺得這個世界上的程序員可以分為兩種:"主動程序員"和"被動程序員"。"主動程序員"可以自己選擇開發(fā)方式,開發(fā)語言和框架,"被動程序員"被動接受公司指定的語言和開發(fā)方式。其實在現(xiàn)實生活中,這種分類并不絕對,一個程序員可能在不同的時候擔(dān)當(dāng)不同的角色,"被動程序員"也可能享有有限的主動權(quán)。這么分類并不以程序員本身的知名度,財富多少,是否自己創(chuàng)業(yè)還是受雇于人有關(guān)。
    David Heinemeier Hansson 受雇與 37 Signal ,但是仍然可以自己選擇建立自己的 Rails 框架來完成項目,他應(yīng)該算是個"主動程序員"。Firebird 數(shù)據(jù)庫的同時也是 Interbase 數(shù)據(jù)庫的創(chuàng)始人 Jim Starkey 將自己的公司賣給了 Mysql AB 而不得不給 Mysql 干活,從某方面說,他應(yīng)該是個"被動程序員"。大多數(shù)第三世界國家的程序員應(yīng)該屬于"被動程序員",他們編程只是為了一份養(yǎng)家糊口的工作,他們無權(quán)選擇自己喜歡的編程語言或者框架,因為這是公司給他選擇的,因為如果選了其他,他可能就找不到工作了。曾經(jīng)有個即將離職的同事讓我給他推薦一個比較好的編程框架,可以很容易完成一個網(wǎng)站的制作,我給他推薦了 Zope, 還有 Rails, 他聽我的介紹覺得不錯 ,當(dāng)我告訴他必須學(xué)習(xí) python 和 Ruby 編程語言時,他顯得很驚愕,"那能找到工作嗎?"。這話其實也表達(dá)了大多數(shù)國內(nèi)程序員的想法??纯凑衅妇W(wǎng)站就知道,現(xiàn)在最需要的程序員是 Java 程序員,最需要了解的框架是 Struts。如果不會你很難得到面試的機(jī)會,所以就算你不會也要在自己的簡歷中"修飾"一下。
    有些自己創(chuàng)業(yè)的人可以自己選擇喜歡的編程語言和框架,當(dāng)然那畢竟是少數(shù)。如果我能夠選擇的話,我肯定不用 Java 來做網(wǎng)站應(yīng)用。因為它完成一個簡單的工作太麻煩了,很難快速適應(yīng)需求的變化。當(dāng)然我也不會去用 PHP ,因為我已經(jīng)習(xí)慣了面向?qū)ο蟮木幊谭绞搅恕?我發(fā)現(xiàn)一個奇怪的現(xiàn)象:大多數(shù)轉(zhuǎn)向?qū)W習(xí) Ruby on rails 框架的人都是來自 Java 陣營的程序員,而轉(zhuǎn)向Python 框架Zope,django 的程序員大多有 ASP,PHP 背景。因為 Ruby 是一個真正的面向?qū)ο蟮恼Z言, 它同時具備了腳本語言的特點(diǎn),而 Python 首先是一個腳本語言,它具備了一些 OO 的特征。Java 程序員 很難忍受走回頭路,所以他們選擇了一個比Java更面向?qū)ο蟮恼Z言 Ruby ,而PHP,ASP程序員沒有那么重的思想負(fù)擔(dān),他們選擇 Python 可能是因為它的代碼更 Beauty ,遠(yuǎn)比他們以前寫的"意大利面條"式的PHP,ASP 代碼要干凈的多。
    無論是 python, 還是 Ruby 這些非主流程序語言開發(fā)的框架,使用起來都異常的簡便,他們可謂是真正從程序員角度考慮的框架。為什么 Ruby 一出,攪的 Java 的世界一片混亂,我想原因還是出在 Java 這里,當(dāng) Java 程序員想當(dāng)然地認(rèn)為程序開發(fā)應(yīng)該如此麻煩的時候,Rails 的出現(xiàn)讓他們立刻覺得被這些所謂的 Java 流行框架和 Sun 給欺騙了,這種欺騙是如此之深,以至于他們中間有的人"頭也不回"的離開了 Java, 轉(zhuǎn)而攻擊 Java 的種種不是。這其中比較有名的人就是 Bruce Tate ,這位老兄寫了兩本轟動 Java 世界的書,Spring: A Developer's Notebook 和 Better, Faster, Lighter Java (該書可是獲得 Jolt 大獎的,恰好我還都讀過),隨著 Rails 的流行,這位仁兄立刻叛逃出 Java 陣營,寫了 Beyond Java 一書,著重介紹了一些非Java 框架,比如 Smalltalk 的Seaside, 和 Rails。
    Java 為什么這么復(fù)雜,我想了很久,得出這么個結(jié)論:這是因為 Sun 希望它那么復(fù)雜。為什么這么說呢?Sun 不是一個好的軟件公司,它最擅長做的是制定規(guī)范,這很類似Java 編程中的 Interface, 經(jīng)常編寫 Java 程序的人,會發(fā)現(xiàn) Interface 可能是出現(xiàn)最多的一個詞匯了,任何框架中都充滿了Interface —接口,大多數(shù)編程書都推薦面向接口編程(當(dāng)然這不是Java的錯,是設(shè)計模式要求的,不過 Java 將此發(fā)揮的)。首先定義接口,然后針對接口編寫不同的實現(xiàn),至少提供默認(rèn)的實現(xiàn)。Sun 也是如此,看看 J2ee 的規(guī)范包含了多少 J 打頭的技術(shù), JDBC,JNI,JCA,JDO,JPA .... ,現(xiàn)在的 JCP 組織更加如此,每隔一段時間,就有大量的規(guī)范問世,Draft 的,還是 Final 的,充斥著Java 世界,這是 Sun 希望的, 每定義一個規(guī)范,就會有很多廠商來實現(xiàn)它,Java 的軟件市場就做大了,這樣 Sun 就可以靠授權(quán),認(rèn)證拿更多的錢,你看 Sun 的股票那么低迷,而卻擁有那么雄厚的流動資金,原因再明白不過了,只要 Sun 還擁有 Java ,它就擁有了一切。