【程序思考】“主動(dòng)程序員”vs“被動(dòng)程序員” [zz]
Posted on 2007-07-24 09:55 Matthew Chen 閱讀(198) 評論(1) 編輯 收藏 所屬分類: Philosophy Leaves轉(zhuǎn)自:http://blog.csdn.net/koalant/archive/2006/06/26/836882.aspx
最先發(fā)表于:http://www.5dblog.com/vip/mulder/200604/245598.html

我覺得這個(gè)世界上的程序員可以分為兩種:"主動(dòng)程序員"和"被動(dòng)程序員"。"主動(dòng)程序員"可以自己選擇開發(fā)方式,開發(fā)語言和框架,"被動(dòng)程序員"被動(dòng)接受公司指定的語言和開發(fā)方式。其實(shí)在現(xiàn)實(shí)生活中,這種分類并不絕對,一個(gè)程序員可能在不同的時(shí)候擔(dān)當(dāng)不同的角色,"被動(dòng)程序員"也可能享有有限的主動(dòng)權(quán)。這么分類并不以程序員本身的知名度,財(cái)富多少,是否自己創(chuàng)業(yè)還是受雇于人有關(guān)。David Heinemeier Hansson 受雇與 37 Signal ,但是仍然可以自己選擇建立自己的 Rails 框架來完成項(xiàng)目,他應(yīng)該算是個(gè)"主動(dòng)程序員"。Firebird 數(shù)據(jù)庫的領(lǐng)導(dǎo)者同時(shí)也是 Interbase 數(shù)據(jù)庫的創(chuàng)始人 Jim Starkey 將自己的公司賣給了 Mysql AB 而不得不給 Mysql 干活,從某方面說,他應(yīng)該是個(gè)"被動(dòng)程序員"。大多數(shù)第三世界國家的程序員應(yīng)該屬于"被動(dòng)程序員",他們編程只是為了一份養(yǎng)家糊口的工作,他們無權(quán)選擇自己喜歡的編程語言或者框架,因?yàn)檫@是公司給他選擇的,因?yàn)槿绻x了其他,他可能就找不到工作了。曾經(jīng)有個(gè)即將離職的同事讓我給他推薦一個(gè)比較好的編程框架,可以很容易完成一個(gè)網(wǎng)站的制作,我給他推薦了 Zope, 還有 Rails, 他聽我的介紹覺得不錯(cuò) ,當(dāng)我告訴他必須學(xué)習(xí) python 和 Ruby 編程語言時(shí),他顯得很驚愕,"那能找到工作嗎?"。這話其實(shí)也表達(dá)了大多數(shù)國內(nèi)程序員的想法。看看招聘網(wǎng)站就知道,現(xiàn)在最需要的程序員是 Java 程序員,最需要了解的框架是 Struts。如果不會(huì)你很難得到面試的機(jī)會(huì),所以就算你不會(huì)也要在自己的簡歷中"修飾"一下。
有些自己創(chuàng)業(yè)的人可以自己選擇喜歡的編程語言和框架,當(dāng)然那畢竟是少數(shù)。如果我能夠選擇的話,我肯定不用 Java 來做網(wǎng)站應(yīng)用。因?yàn)樗瓿梢粋€(gè)簡單的工作太麻煩了,很難快速適應(yīng)需求的變化。當(dāng)然我也不會(huì)去用 PHP ,因?yàn)槲乙呀?jīng)習(xí)慣了面向?qū)ο蟮木幊谭绞搅恕?我發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象:大多數(shù)轉(zhuǎn)向?qū)W習(xí) Ruby on rails 框架的人都是來自 Java 陣營的程序員,而轉(zhuǎn)向Python 框架Zope,django 的程序員大多有 ASP,PHP 背景。因?yàn)?Ruby 是一個(gè)真正的面向?qū)ο蟮恼Z言,
它同時(shí)具備了腳本語言的特點(diǎn),而 Python 首先是一個(gè)腳本語言,它具備了一些 OO 的特征。Java 程序員 很難忍受走回頭路,所以他們選擇了一個(gè)比Java更面向?qū)ο蟮恼Z言 Ruby ,而PHP,ASP程序員沒有那么重的思想負(fù)擔(dān),他們選擇 Python 可能是因?yàn)樗拇a更 Beauty ,遠(yuǎn)比他們以前寫的"意大利面條"式的PHP,ASP 代碼要干凈的多。 無論是 python, 還是 Ruby 這些非主流程序語言開發(fā)的框架,使用起來都異常的簡便,他們可謂是真正從程序員角度考慮的框架。為什么 Ruby 一出,攪的 Java 的世界一片混亂,我想原因還是出在 Java 這里,當(dāng) Java 程序員想當(dāng)然地認(rèn)為程序開發(fā)應(yīng)該如此麻煩的時(shí)候,Rails 的出現(xiàn)讓他們立刻覺得被這些所謂的 Java 流行框架和 Sun 給欺騙了,這種欺騙是如此之深,以至于他們中間有的人"頭也不回"的離開了 Java, 轉(zhuǎn)而攻擊 Java 的種種不是。這其中比較有名的人就是 Bruce Tate ,這位老兄寫了兩本轟動(dòng) Java 世界的書,Spring: A Developer's Notebook 和 Better, Faster, Lighter Java (該書可是獲得 Jolt 大獎(jiǎng)的,恰好我還都讀過),隨著 Rails 的流行,這位仁兄立刻叛逃出 Java 陣營,寫了 Beyond Java 一書,著重介紹了一些非Java 框架,比如 Smalltalk 的Seaside, 和 Rails。
Java 為什么這么復(fù)雜,我想了很久,得出這么個(gè)結(jié)論:這是因?yàn)?Sun 希望它那么復(fù)雜。為什么這么說呢?Sun 不是一個(gè)好的軟件公司,它最擅長做的是制定規(guī)范,這很類似Java 編程中的 Interface, 經(jīng)常編寫 Java 程序的人,會(huì)發(fā)現(xiàn) Interface 可能是出現(xiàn)最多的一個(gè)詞匯了,任何框架中都充滿了Interface —接口,大多數(shù)編程書都推薦面向接口編程(當(dāng)然這不是Java的錯(cuò),是設(shè)計(jì)模式要求的,不過 Java 將此發(fā)揮的最好)。首先定義接口,然后針對接口編寫不同的實(shí)現(xiàn),至少提供默認(rèn)的實(shí)現(xiàn)。Sun 也是如此,看看 J2ee 的規(guī)范包含了多少 J 打頭的技術(shù), JDBC,JNI,JCA,JDO,JPA .... ,現(xiàn)在的 JCP 組織更加如此,每隔一段時(shí)間,就有大量的規(guī)范問世,Draft 的,還是 Final 的,充斥著Java 世界,這是 Sun 希望的, 每定義一個(gè)規(guī)范,就會(huì)有很多廠商來實(shí)現(xiàn)它,Java 的軟件市場就做大了,這樣 Sun 就可以靠授權(quán),認(rèn)證拿更多的錢,你看 Sun 的股票那么低迷,而卻擁有那么雄厚的流動(dòng)資金,原因再明白不過了,只要 Sun 還擁有 Java ,它就擁有了一切。Sun 希望 Java 變得復(fù)雜,就如同程序員希望 Perl 代碼難看一樣,這樣做是可以帶來好處的。Java 的復(fù)雜性也帶來了產(chǎn)業(yè)鏈上其他行業(yè)的繁榮,比如咨詢,在 Php ,Perl 流行 Internet 的年代,網(wǎng)站開發(fā)似乎還不需要咨詢師,包括 C/S 盛行的時(shí)候,企業(yè)開發(fā)也不需要咨詢師,然而隨著 J2EE 逐步主宰企業(yè)級開發(fā),咨詢行業(yè)也開始興旺起來。企業(yè)大把大把的把錢投入到開發(fā)咨詢中,究竟效果如何,不得而知。我想對大多數(shù)程序員,尤其是那些有自己想法的程序員來說,請求咨詢公司,還不如自己去了解來的清楚。軟件開發(fā)咨詢師在我看來,有點(diǎn)象是"律師"—"代表貪婪的公司,讓這個(gè)世界變得更糟糕一些"(<Joey>中 Alex 的對白)。如果說國外的咨詢師是希望通過主觀的努力來解決客觀存在的開發(fā)復(fù)雜性的話,那么國內(nèi)的咨詢行業(yè)可能把原本復(fù)雜的軟件開發(fā)變得更加復(fù)雜了。我不相信他們,我寧可選擇某個(gè)軟件的培訓(xùn),而不希望有人來從頭到尾指點(diǎn)你如何開發(fā),因?yàn)閲鴥?nèi)咨詢師的水平比你從書本上了解的高不到哪里去,公司又何必花費(fèi)這筆冤枉錢呢。
那么如果你是個(gè)"主動(dòng)程序員",你會(huì)跟著 Sun 的指揮棒走嗎? 我想離開 Java 世界,你選擇的機(jī)會(huì)應(yīng)該很多,但是前提是:你愿不愿意離開 Java 。因?yàn)榇蠖鄶?shù)人覺得改變現(xiàn)狀其實(shí)并不是個(gè)好事情,學(xué)習(xí)一個(gè)新語言和框架意為著你過去所有的經(jīng)驗(yàn)就消失了,這其中有風(fēng)險(xiǎn)。對大多數(shù)程序員 來說,編程其實(shí)就是份工作,跟賣盒飯,裝機(jī)器沒什么區(qū)別,只要搞好本職工作就可以。試圖改變現(xiàn)狀的人很痛苦,了解差異的人也是如此,就如同 Neo 在接受紅藥丸和藍(lán)藥丸。 我在當(dāng)年學(xué)習(xí) Perl 的時(shí)候曾經(jīng)買過一本《Learning perl》,書的作者曾經(jīng)這么說,學(xué)習(xí) Perl 是為了讓自己把更多的時(shí)間用在去滑雪, PHP 的創(chuàng)始人 Rasmus Lerdorf 也曾經(jīng)這樣表示過,他希望自己能夠減少盯著電腦的時(shí)間,可是這么多年過去了,他發(fā)現(xiàn)自己還是要繼續(xù)盯著該死的電腦。其實(shí)我對選擇框架語言也并沒什么興趣,我只是希望能夠以簡單的方式完成工作,而把時(shí)間省下來去聽聽音樂,看看電影。實(shí)際上我跟不希望改變現(xiàn)狀的人沒什么不同,他們不希望學(xué)習(xí)新的東西,因?yàn)楝F(xiàn)有的東西很熟悉了,學(xué)習(xí)新框架,還不如把時(shí)間放到玩上去,我的目的一樣,我學(xué)習(xí)只是希望自己的工作更輕松一點(diǎn),這樣可以用更多的時(shí)間來玩。所以每當(dāng)我看到各種技術(shù)論壇上充斥著Java, .net , ROR ,Python 之類的爭吵,我都覺得很好笑。其實(shí)為了維護(hù)一個(gè)語言而爭吵最沒有意義。編程語言就和英語,計(jì)算機(jī)一樣,就是個(gè)工具,選擇它們只是為了盡可能簡單地完成工作,提高生活質(zhì)量。為了語言而語言,為了框架而框架都是沒必要的。"主動(dòng)程序員"可以選擇自己的方式來工作,這是大多數(shù)人做不到的。如果有可能,我也希望做一個(gè)"主動(dòng)程序員"。
---未完待續(xù)
程序思考2:關(guān)于框架
http://blog.csdn.net/koalant/archive/2006/06/26/836889.aspx