看板 Soft_Job 關於我們 聯絡資訊
順著原 po 的問題 如果現階段在煩惱要選擇哪一個語言好 我會回答,哪一個都好,真正的重點在於 自己倒底有沒有辦法利用這個語言,好好完成一件工作 如果自稱很熟悉語言A,但在處理真實工作時,卻又丟三落四 一下子這邊漏掉一個條件判斷,一下子弄錯那邊一個迴圈處理 在這種狀況下,即使選擇其它語言BCDEXYZ寫程式,情況一樣類似 這是寫程式的內在邏輯概念夠不夠好的問題,和選用哪種語言,沒有任何關係 如果現在還在煩惱選擇語言 倒不如,先隨便挑一個語言,然後用它來處理手頭上的所有問題 當一而再,再而三,處理過的問題夠多,累積夠多處理抽象問題的經驗 有這樣的基礎後,再回頭來談用哪個語言好哪個語言不好才比較恰當 * * * * * * * * * * P.S. 我想,在這個問題的討論時 大家經常把語言 (Language) 與平台 (Framework) 的概念混用 在決定一個工具好用或不好用時,某種程度而言 平台與函式庫集所扮演的角色,會比語言本身還重 大家覺得一個"語言"好用,其實,大部分是指,這套工具所提供的"函式庫"好用 但大部分的 programmer 分不太清楚語言與函式庫的差別 所以,我在文中,還是依大家的習慣,寫成這是不一樣的 "語言" * * * * * * * * * * 舉個例子,我曾遇過一位號稱寫 .NET 有好幾年經驗的人 但他寫的程式碼,總是問題很多 後來試圖深入了解他的程式碼,但我自己那時只熟 Java 經過約十五分鐘的訪談與 code overview 當看到某一段 code 時,我那時心中所想的是 如果這個部分使用 Java 開發,那可以使用 HashMap 解決這個問題 但他講了一堆聽起來好像很複雜的方法,但總是缺東缺西丟三落四 由於那時我不熟 .NET,那時我先問他一句,.NET 有沒有像 map 的物件可以使用? 他當然聽不懂我講什麼 隨後,我搶了他的鍵盤螢幕,在 MSDN 找了約十分鐘左右 找到了一個東西,叫做 Dictionary,就告訴他 你這個部分,使用 Dictionary 這個物件可以很方便地解決 一開始他還無法體會出 Dictionary 如何使用 我就想辦法找資料,湊出幾行 sample code 教他 Dictionary 該怎麼應用在原本的問題上 為何會發生,由不熟 .NET 的人,教懂 .NET 的人,如何寫 .NET code? 從這個例子中,可以看出一些端倪 常寫 Java code 的人,我想,collection 物件是家常便飯 如果真的有認真在寫 code,對於 collection 物件的抽象概念,一定了然於胸 當換到不同的平台,遇到類似的問題時 腦中第一個所想的是,新平台上有沒有類似的物件可以使用 自然而然,在搜尋時,就會很有目標性,很快找到自己要的東西 所以即使我那時並不熟 .NET,但我卻可以很快找到 Dictionary 正是我要的物件 並進而教別人該怎麼用 這是我使用 Java 的所學到的抽象概念,轉移上 .NET 的結果 這種概念,通常是 language independent 但卻可以透過在某個語言上深化學習的過程中 同步加強 language independent 的抽象化能力 當累積到一個程度之後,就開始出現外溢效應,很輕易地擴展至其它語言與平台 就像 Java HashMap -> .NET Dictionary 這個簡單的例子 如果寫程式時,沒有使用 collection 的習慣 那這個跨語言抽象概念擴展就不會發生 講白一點,就是因為夠熟悉 Java,順帶地連自己不熟的 .NET 也莫名奇妙地增強 當然,反方向也會成立,當夠熟悉 .NET 時,連帶地其它語言的能力也會一同增強 當然,並不是每一件事都可以這樣對應 比如,.NET 的 DataSet 很好用 但在 Java 中卻沒有對應的物件 (不考慮 3rd party packages) * * * * * * * * * * 為何還會有人覺得這種跨語言的外溢效應很不可思議? 恕我直接說,有很多 programmer 其實是屬於拼湊型的 programmer 當碰到問題時,就東剪一段程式碼西湊一塊程式碼,試圖處理問題 當然在很多情況下,這種方法很好用,但,這是只知其然而不知其所以然的方法 當自己沒有花力氣好好研究自己經手過的每一行程式碼時 再多年的經驗,恕我直說,真的用處不大 所以,當碰到其它的平台時,會覺得那是火星人的東西,也是理所當然 恕我直說,這是因為從未真正下工夫研究過號稱自己會自己懂的東西 當然,以初入門而言,談跨不跨平台還尚早 好好利用自己會的語言做好每一件事累積足夠的經驗才是要務 要評斷平台與平台間的比較,等到自己做得好現有的工作後再說 * * * * * * * * * 當然,每一種語言與平台,都有屬於自己的特色 這是有機會接觸不同平台時,再花時間力氣了解即可 就像 Ruby 的 continuation,這個概念在其它的主流語言中,幾乎見不到 即使接觸新語言時,多多少少都要花點時間力氣都摸索學習 但,這並不是個無法跨躍的鴻溝 因為,兩個不同語言抽象概念相似的地方,遠比相異的地方多很多 好好學習其中的抽象精神,才叫做真正的寫程式 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 116.59.40.27 ※ 編輯: mgtsai 來自: 116.59.40.27 (08/23 03:26)
dumbjames:推最後一句..這就是為什麼我助教跟上級都可以用嘴寫程式 08/23 10:46