iThome 網站首載:程式語言與人格特質
考量一個程式語言的因素很多,從語法、程式庫、工具到社群資源都在考量之列,然而有時喜歡一門程式語言並沒有太多理由,純綷只是個人口味問題,誰說人格特質不是選擇語言的因素之一呢?
- 如果程式語言是一輛車
想想目前你最愛用的程式語言,最初是如何喜歡上它的?因為它讓你從中學到許多東西?因為它讓你可以很快地實現腦中的想法?因為它讓你可以與許多很酷的同好互相交流?因為它可以解決你身邊面對的問題?或者更實際地,因為它讓你能夠賺到錢,你的房子、車子都是靠它賺來的,甚至小孩都是它養大的?無論如何,如果你真心喜歡一門程式語言,總是可以舉出一百種喜歡它的理由,即使這些理由有些並不實用,即使在其他人眼中很可笑,而你被笑時甚至還會生氣。
如果把程式語言看作是一輛車,那你會選擇哪一種車?每種車輛的性能不同,適用的場合也不同。有人認為C就像是賽車,你可以操控每個細節,用極速奔馳在跑道上,不過每跑個五十英哩就要進維修站檢查維護一番。有人認為Java就像家用旅行車,在一般道路上容易駕駛、安全舒適,不過沒辦法開得太快,車型也略顯笨重。有人認為對於新手駕駛來說,開輛Python或許更適合,除非你想開得很快,或者勇闖變化多端的地形,不然不太需要換車。有個日本工程師覺得沒有他適合開的車,所以挑了Perl、Python與Smalltalk等車種中他喜歡的特性,自己拼了輛Ruby,雖然他覺得這車最適合在市區開,不過不少人試著開著它上山下海,雖然有些地方操作上不順手,但稍微改裝一下倒也湊合得過去。
雖然每種車各有適用的場合,但有些人就是沒有手排、離合器甚至賽車用方向盤就覺得不像開車,將賽車級車輛開上市區道路大有人在。即使家用旅行車外型略顯笨重,但是全家出遊就是需要它,偶而也就這麼駛離一般道路上山下海了。有的人新手駕駛專用車開習慣了,在車上加裝各種配備,再變化多端的地形照樣勇闖不誤。即使有人認為某些改裝車不穩定,不過喜歡的人最近正高興它通過標準檢驗呢!
有的人開車甚至不是功能取向,而是一種品味!有個古老車種叫作Haskell,設計上無比精緻,號稱什麼路都能開,說是如果你會開,它甚至還能飛起來呢!不過它實在太難操作了,甚至有人覺得它根本只是漂亮的藝術品,像是歷史悠久但設計超前的概念車,不過因為它有太多設計精良的地方了,不少人模彷它其中的零件作了些修改,裝到自己喜歡的車種中開得蠻愉快的。雖然Haskell很難開,不過仍有許多人對它的設計情有獨鐘,家中硬是擺了一台,偶而在住家附近開開,逢人還會趁機勸敗一番。
- 是語言特性還是你的個性
人們的特質與個性決定了所喜好的工作類型,對於工作的喜好與否,往往呈現出截然不同的效率與成果。作為工作上的一項工具,或許僅僅是程式語言的特性湊巧符合你的個性,用來順手而獲得即時的滿足,正如《Coders at Work》中Dan Ingalls談到:「任何東西,只要能從中獲得即時滿足,就會進入良性循環。」正因為這樣的滿足與成就感,吸引你持續使用並投入一門語言。
絕大多數的情況下,沒有人喜歡繁複的東西,然而有人喜歡明白規範的東西,因而像Java這類靜態語言會比較符合他們的胃口,這尤其反映在查詢文件的時候,因為總是可以一眼就從方法簽署(Method signature)上知道該傳入或會傳回哪些東西,儘管有時不盡完美,但認為編譯器可以協助檢查出型態錯誤總是好的;然而有些人認為自己知道操作的物件有哪些行為就夠了,對於型態宣告總是覺得不耐煩,因而偏好Python、Ruby這類動態語言,認為自己很清楚自己在作些什麼,少了那些型態雜訊讓程式碼看來清爽多了。
儘管同樣少了型態上的雜訊,Python與Ruby依舊各有偏好者,他們都不愛繁複的東西,然而Python擁護者仍舊喜歡規範清楚的東西,Ruby擁護者則偏愛極簡主義。舉例來說,Python要求方法一定要寫self,Ruby則在某些地方限制self的使用,簡明與簡潔之間風格徑異。除此之外,Python愛好者追求一致性,Ruby愛好者則崇尚自由揮灑,這從Python強制縮排可見一般;對於問題的解決,Python擁護者認為應該或最好只有一種解法,Ruby則給了使用者多樣化的選擇,每個人可以使用自己覺得最舒服的方式來解決問題。
著名技術作者孟岩,曾發表過一篇〈Ruby 1.9不會殺死Python〉,道出了不同個性的使用者對Ruby及Python的擁護程度不會改變,在文中他將Python歸類在「簡約語言」,而Ruby歸類在「魔幻語言」。簡約語言簡單但不失明瞭,儘管有時為了一致性與透明度,某些情況下會讓語法顯得笨拙或增加了限制性,然而程式碼清晰直接,不致於出人意表,在需要追本溯源時,總有一定的條理可循。魔幻語言由於開放了許多語言上的彈性,使用者總可從中發掘不少奇技淫巧,總能組合出許多令人目瞪口呆的效果,由於要呈現這樣的效果可能會有不同的方式,因此想要瞭解這些事是如何辦到的,總不是那麼的容易。
就某些程度上來說,JavaScript雖然沒有所謂語言上的彈性,但由於天生規範上沒那麼嚴謹,近來不少開發者盡力找出語言的各個死角,組合出酷炫的功能與效果,也為它添增了不少魔幻性。從簡約與魔幻來看,簡約派的擁護者大致上比較中規中距,注重慣例與一致性,這在Python的社群可見一般,Java語法本身雖然較為繁複,但精神上仍可算是簡約派的,在Java開放原始碼程式庫及框架百花齊放的時期,儘管隨時有著新的觀念與實作成品出現,但整個社群的風格呈現著一致性;魔幻派的擁護者則總是求新求變,新奇東西不斷出現是社群極大的成長動力,使用者大多給予人們一種求新求變的設計感與不受拘束的自由氣息。
- 持續專注與瞭解你選擇的程式語言
《Coders at Work》中Peter Seibel問到:「語言的選擇是多大的事情呢?有什麼很好的理由選擇一門語言而不是另一門嗎?或者這只是口味的問題?」Guy Steele的回答是:「為什麼口味不是一個好理由呢?」不愛處理細節的人,腦袋中一有想法就想馬上實現的人,要他使用Java按步就班地搭建程式會令他感到痛苦,即使Java中也有快速開發的方案可供選擇,無論如何也都無法跟Ruby on Rails帶給他的爽度相比擬。
如果人格特質與偏好的程式語言息息相關,那麼人們會因為程式語言而吵架也是理所當然,人格特質某些程度等於個人價值觀,自己的價值觀被人質疑時,會爭執是必然的,畢竟人們總是希望自己的選擇是正確的,正如Guy Steele所言:「這是人類社會希望成為勝利者的現象。」
如果你熱愛某個語言,或許不用再找任何的理由,也不用對其它語言感到焦慮,只要持續關注並瞭解它就夠了,即便它沒那麼潮,即便這門語言與工作無關,也許Java是你星期一到五的工作日語言,何彷讓所喜歡的Python、Ruby或其它語言成為周末語言呢?廣度知識往往是深度知識的副產品,只要持續深入你所喜歡的程式語言,自然也會逐漸增加對其它語言的瞭解,也許是因為認識到應該瞭解其它語言的觀念,才能讓你更熟悉目前所愛的語言。