業餘大叔程式心得筆記#11:程式語言的與除錯方式的個性/葉光釗

更新於 發佈於 閱讀時間約 6 分鐘

每一種程式語言,都有一些展現自己個性的點;如果沒有一些參透過的領悟,很難去瞭解它們的本質;不同的程式除錯方式,也有不同的風格。你專精的程式語言是哪一種?又有什麼樣的個性呢?你的除錯偵探方式,又是哪個流派?

raw-image

過去一陣子有些看軟體工程師履歷的機會;這些應徵者在技能欄上,多半會列出許多的程式語言,像是C、C++、C#、JavaScript、Java、R、Python、Ruby等等,而且多半會加上「精通」兩字。看多了這類履歷之後,不由得會好奇,每個人對「精通(某種工作技能)」的定義有什麼不同。

筆者自己是半路出家,寫程式能力是自學而來的,而且完全只把程式語言當作工具,從來沒有什麼特別偏好;依照專案的性質,什麼稱手就用什麼。如果真遇到沒用過的語言,Google和StackOverflow網站就成了好朋友;盡量找範例,copy/paste毫不客氣。

雖然這樣下來也混了數十年,但捫心自問,要聲稱「精通」什麼語言,還真有點不好意思說出口。

程式語言是有個性的

不過話說回來,究竟在這個領域有些資歷,對於各式各樣的程式語言還是有些心得;比較有趣的心得之一,就是我覺得程式語言是有「個性」的。

從經驗來看,各種語言都有一些展現自己個性的點;如果沒有一些參透過的領悟,很難去瞭解它們的本質。

舉來來說,職涯中使用比例最高的應該就是C語言了。我把它定義為「刻苦耐勞」型,早期根本是用來當作組合語言的跳板;在實務上,甚至經常有將C編譯器編好的組合語言內容拿出來,然後用手工繼續修修改改的情形。

要能善用C語言,對電腦底層的運作必須有基本的瞭解,尤其是記憶體存取方面。許多學BASIC或FORTRAN語言的人始終弄不懂C,多半是卡在「指標」(pointer)的使用上,更不說用「pointer的pointer」來表示二維矩陣這種奇怪的觀念了。

至於C++,雖然本質上與C是截然不同的兩種動物,但常被看作「C的華麗加強版」(但我承認自己也常常這樣用)。除了「class」(類別)等等物件導向語言的關鍵字讓入門者頭痛之外,「template」(模版)的使用也是個門檻。

雖然標準模版庫(STL)提供的資料結構很方便,可是編出來的程式碼大得嚇死人;像我這種用慣了C的吝嗇傢伙,能不用就不用。

另外有兩個語言,我則是定義為「夢幻」型的:一個是Smalltalk,另一個是 Lisp。

之所以這麼說,是我在接觸它們的時候,並沒有可以執行的實際環境;雖然買了一堆參考書籍,而且所有執行都是憑空想像,但它卻是我學習物件導向語言的啟蒙(夠神奇了吧)。

其中有一段時間,再怎麼絞盡腦汁,就是弄不懂什麼是「傳送訊息給一個物件」,一直到某一天吃早餐時想到,其實就是「function calls」,差點把嘴裡的豆漿噴出來。

最近比較有興趣的,則是JavaScript;我發現它根本是Lisp的「呼畢勒罕」,而且它的取名真是個天大的誤會。這是一個很「公主」的語言:機制很純粹,什麼東西都是物件(object),只是除錯除起來會令人發瘋。

既然大家都有個性,那有沒有「老好人」式的語言?

有。在我看來,過去人人必學的BASIC、和現在的Python,就屬於比較沒個性的語言。雖然Python近年因為人工智慧(AI)方面的應用而紅遍半邊天,但我覺得跟語言本身實在沒啥關係,全靠一缸子的套件(packages);不過這也是它們的優點:門檻低、入手快。

我自己最最喜歡的,還是Forth語言。它是我看過最「短小精幹」的設計;一個超小型編譯器和一本詞典,就可以堆砌起一個世界,不愧是天才設計師Charles Moore的傑作。

年輕的時候,曾經用它來設計一套在Apple II電腦上跑的Logo turtle繪圖工具;原本以為已經佚失,最近一搜尋居然發現,語言本身和這套工具還活著,真是驚喜。可得好好想想能用它來做些什麼。

除錯和推理也有流派

我從年輕時就喜歡看推理小說,而且習慣一開始翻書就一路看不停。從撲朔迷離的線索之中,抽絲剝繭找出線索,最後真相大白;那種看到最後「原來如此」的感覺,很容易欲罷不能。

身為一個推理小說迷,以及還算資深的程式員,很難不注意到「推理解謎」和「除錯」兩種心智活動之間,令人驚訝的相似程度。

推理小說有好幾種派別;早期最熟悉的是「安樂椅神探」,一位厲害的偵探完全無需出門探案,只要由旁人提供線索,即使不需要親眼看到現場,也能推論出答案。

早期在除錯工具不多的現實中,我們也常會做「在大腦中除錯」的事情;只用筆和紙,再三重覆檢查邏輯的流程。不過就像神探不是常人,這樣的事沒辦法常做;不但累人、而且非常沒效率,不可能像書中的主角那麼風光。

後來熱衷的是「現實派」。主人翁通常是警察之類的執法人員,既不神奇、也不是天才,只能一步一腳印,蒐集那些看起來微不足道、但很多時候可能是破案關鍵的線索。

這跟程式員的現實生活就接近多了:在除錯的時候,多半就是鍥而不捨的一再重複 追蹤程式碼執行、看看找不找得到微小的差別。程式員的日常中,有九成時間就是一直盯著黑底白字的編輯器,深怕漏看了什麼;隨著解錯(破案)的時限越來越近,壓力也越來越大。

而現代化軟體大廠的除錯模式,就跟以上的單打獨鬥完全不同。他們的方式就跟CSI科學辦案一樣是團隊作戰,有專門的測試人員執行測試用例(test cases),就像是蒐集科學證據;也有專門的工具,用於分析測試結果、或是程式產生的紀錄檔,如同科學家做DNA解譯一樣。

SDE解錯就純粹是「證據走到哪裡,案子就辦到哪裡」;沒有什麼模糊地帶,直接了當。

話說回來,看推理小說還是比程式除錯有趣多了;欣賞別人動腦的成果,比自己燒腦所花的力氣輕鬆太多。

你專精的程式語言是哪一種?又有什麼樣的個性呢?你的除錯偵探方式,又是哪個流派?

留言
avatar-img
留言分享你的想法!
avatar-img
吐納商業評論的沙龍
1.4K會員
2.0K內容數
為您送上頂尖作者的最新管理與科技產業思維。
2022/07/07
「管理者」設計流程的真正重點,在於:流程越簡單越不會出錯、沒有作用的動作不要做、尤其是做不到的事情不要讓別人產生期待。
Thumbnail
2022/07/07
「管理者」設計流程的真正重點,在於:流程越簡單越不會出錯、沒有作用的動作不要做、尤其是做不到的事情不要讓別人產生期待。
Thumbnail
2022/07/06
從企業經營管理的角度,來回顧自己這次確診的經歷,我可以斷定許多問題出在政府的組織架構、和其分工合作上。政府組織架構和企業的不同,造成了在防疫過程中不同單位間的整合問題。
Thumbnail
2022/07/06
從企業經營管理的角度,來回顧自己這次確診的經歷,我可以斷定許多問題出在政府的組織架構、和其分工合作上。政府組織架構和企業的不同,造成了在防疫過程中不同單位間的整合問題。
Thumbnail
2022/07/06
在疫情之中,「恐懼製造鏈」充斥每個角落;不管有意或無意、善意或惡意,每天都有人製造恐懼。但恐懼在傳播之後往往會失控,造成可怕的後果。所以每個人都必須瞭解散佈恐懼之後可能造成的惡果、謹慎發言,避免自己遭到反噬。
Thumbnail
2022/07/06
在疫情之中,「恐懼製造鏈」充斥每個角落;不管有意或無意、善意或惡意,每天都有人製造恐懼。但恐懼在傳播之後往往會失控,造成可怕的後果。所以每個人都必須瞭解散佈恐懼之後可能造成的惡果、謹慎發言,避免自己遭到反噬。
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這篇文章專門寫給「非」資訊相關科系畢業的人,說明怎麼樣開始學寫程式,還有到什麼程度才能轉到資訊相關產業。 我大學跟研究所都是念土木系,因為對寫程式蠻有興趣,所以除了系上的課之外,還有去資工系還有電機系修一些相關課程,因為不是資訊相關科系,所以有走了一些冤枉路,但是研究所的時候我已經可以開發套裝軟體了
Thumbnail
這篇文章專門寫給「非」資訊相關科系畢業的人,說明怎麼樣開始學寫程式,還有到什麼程度才能轉到資訊相關產業。 我大學跟研究所都是念土木系,因為對寫程式蠻有興趣,所以除了系上的課之外,還有去資工系還有電機系修一些相關課程,因為不是資訊相關科系,所以有走了一些冤枉路,但是研究所的時候我已經可以開發套裝軟體了
Thumbnail
為什麼要學習程式呢? 程式是怎麼分類的? 能處理什麼事情?
Thumbnail
為什麼要學習程式呢? 程式是怎麼分類的? 能處理什麼事情?
Thumbnail
在決定踏上程式之旅後,身為程式初學者,你要面臨的第一個關卡,絕對是: 我該學習哪種程式語言?
Thumbnail
在決定踏上程式之旅後,身為程式初學者,你要面臨的第一個關卡,絕對是: 我該學習哪種程式語言?
Thumbnail
在科技快速發展的現代,每個人都滿口大數據、人工智慧,。而大學的資工系也變得越來越熱門,學習程式也逐漸成為許多人考慮的事情。 在這篇文章,我會分享如何從零基礎開始學程式,給讀者開始的方向、避免你走冤枉路。
Thumbnail
在科技快速發展的現代,每個人都滿口大數據、人工智慧,。而大學的資工系也變得越來越熱門,學習程式也逐漸成為許多人考慮的事情。 在這篇文章,我會分享如何從零基礎開始學程式,給讀者開始的方向、避免你走冤枉路。
Thumbnail
初學程式時認為寫程式是在跟機器溝通,它懂了、可以動了,我的目的達成了,結案!然而大多時候,光是連編譯器吐出來的錯誤訊息都看不懂,更別說是考慮自己寫出來的程式碼的可讀性,而且專案太小也感覺不出維護上的困難。
Thumbnail
初學程式時認為寫程式是在跟機器溝通,它懂了、可以動了,我的目的達成了,結案!然而大多時候,光是連編譯器吐出來的錯誤訊息都看不懂,更別說是考慮自己寫出來的程式碼的可讀性,而且專案太小也感覺不出維護上的困難。
Thumbnail
常見入門款Python、統計分析用R、轉職培訓JAVA、C#、IOS用Swift、前端萬用JavaScript、學校基礎C語言、進階C++、甚至是新潮的語言go,程式語言那麼多種到底該從哪個入門好?難道從Scratch開始?
Thumbnail
常見入門款Python、統計分析用R、轉職培訓JAVA、C#、IOS用Swift、前端萬用JavaScript、學校基礎C語言、進階C++、甚至是新潮的語言go,程式語言那麼多種到底該從哪個入門好?難道從Scratch開始?
Thumbnail
資訊時代下,學習程式蔚為風潮。許多行業需要跨領域人才,結合程式與專業知識做應用。 如果是初次想學程式,但是不確定興趣領域,又不知道要如何選擇,既期待又害怕受傷害的情形下,我會建議新手從「容易看得見成果」的方向去嘗試,往後是否能保持熱忱與興趣,其實很大的原因是由「成就感」所支撐的。
Thumbnail
資訊時代下,學習程式蔚為風潮。許多行業需要跨領域人才,結合程式與專業知識做應用。 如果是初次想學程式,但是不確定興趣領域,又不知道要如何選擇,既期待又害怕受傷害的情形下,我會建議新手從「容易看得見成果」的方向去嘗試,往後是否能保持熱忱與興趣,其實很大的原因是由「成就感」所支撐的。
Thumbnail
雖然不能說,每一個人都該學 Python。但對於那些沒學過程式語言、且不知道將來想走哪個資訊領域的初學者來說,Python 是這些人應該學的第一個語言,絕對當之無愧!
Thumbnail
雖然不能說,每一個人都該學 Python。但對於那些沒學過程式語言、且不知道將來想走哪個資訊領域的初學者來說,Python 是這些人應該學的第一個語言,絕對當之無愧!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News