大家好,我叫梁峻墅,今天想和大家分享的話題是:編程的技術|藝術|術術。這里的“術術”是指哲學,完全是為了標題押韻。 我這里講的是面向開發者編程,與大家平常經常說的面向過程編程,面向對象編程,或者面向分片編程等不太一樣。我理解我們程序員編程面向的對象是人,是開發者,是程序員。用戶并不看代碼,看代碼的都是我們的同行,所以我們要多一個面向開發者的思維角度來看待編程。一位骨灰級程序員的歷程回顧15歲開始編程序,已經編了35年
我從15歲開始編程,現在已經整整編了35年了,算是骨灰級的程序員了。
我小時候第一個編的程序是游戲,我相信很多程序員最開始編程都是從興趣愛好開始的。我當時就是覺得別的游戲不好玩,自己編更好玩的。那個時候是80年代,最牛逼的電腦也就是蘋果的Apple II,64K內存。而我們用的都是娃娃機,只有幾K內存。所以那個時候編程序,都不是逐字節,而是逐位逐位地摳內存,考慮著怎么省,寧可用復雜且不易理解還容易出錯的位運算,也要用1個字節的8位分別表示8個布爾型變量。到了現在,在設計數據庫的表狀態字段時,還習慣性地使用位表達,而不是連續自然數。那個時候的存儲連軟盤都沒有,更別說什么硬盤閃存了,用磁帶都是高級貨。但家里錄音機的磁帶質量又不夠好,經常存上去撈不回來。最后為了玩游戲,開機后都要自己把游戲代碼再敲一遍,才能玩。這個開發環境真是慘絕人寰!
但正是在這種艱苦的環境下,反而錘煉出在技術上精益求精的精神。一方面,為了能早點兒玩上游戲,不斷地優化代碼,愣是把200行BASIC代碼優化到80行。另一方面,打字的速度也快速提升,沒學過指法,但上大學時學五筆字型,我一個指頭戳都比別人快。所以環境不好,不一定是壞事。現在的編程軟硬件環境比以前好太多了,但很多程序都編得更加隨心所欲了,內存分配都是大手筆,企圖靠硬件來掩飾軟件的問題。所以大家要珍惜自己當下編程環境,少抱怨,多用困難錘煉自己編程的能力。
1990年,我上了大學,終于能接觸到真正的計算機了,圖書館里有幾十本關于計算機編程的書籍被我常年霸占。那個年代電子游戲廳如日中天,里面有很多賭博游戲。正好有個同學的親戚是開游戲廳的,我們趁他值夜班拆開游戲機,把里面的EPROM拿回學校用單片機仿真系統復制,但一看游戲機主板上的CPU,大家都傻眼了,是6502,APPLE II的CPU,這種高級貨學生機房是沒有的。幸好我們學校也是當時中國的13所重點大學之一,有多個國家重點實驗室,我們在里面找到一臺原子分光光度計,它的控制主機是臺APPLE II,冒著被開除的風險,拆開主機,換上復制出來的EPROM,用APPLE II反匯編機器碼,并打印了500多頁的匯編程序,我們在針式打印機的怒吼中提心吊膽的過了一宿。最后愣是靠目視代碼,從兩萬多行代碼中找到了只有8行代碼的變牌算法,然后橫掃那個城市所有的游戲廳,后來游戲廳老板見了學生摸樣的人都不讓進。有些執著的同學干脆學也不上了,坐著綠皮火車逢站必下,掃蕩了周邊一個又一個小縣城……但我們那時候還不知道有黑客這個詞,認為破解系統是天經地義的,就像編程技術精益求精是理所當然的一樣。
上世紀末:單片機/MIS大學畢業后正趕上中國IT方興未艾的時代,我搞的是單片機控制系統,還有MIS系統,就是信息管理系統,現在叫ERP,編程的范圍越來越廣泛,使用的編程語言和開發環境越來越多。沒過幾年,就到了上世紀末,中國迎來了互聯網時代。1997年,我作為古城熱線的第一批互聯網用戶,用19.8k的貓撥號連接到互聯網上,那是激動萬分,終于可以了解世界上其他程序員是怎么編程序的。同時,也了解到編程的頂級精英被稱為Hacker,但中文被翻譯為黑客,帶點不正經的味道,后來在不理解編程技術的媒體推動下,這個詞已經成了不折不扣的貶義詞。
到了本世紀初,電信數據增值業務,簡稱SP突飛猛進,像打開的潘多拉魔盒,放出無數洪水猛獸,大量技術人員天天琢磨著怎么讓你回條短信就扣掉2塊錢,再順手給你訂個15元包月業務,就是無差別搶劫。那個年代是技術人員的高光時刻,充分體現了那個時代的中國式標語——科技是第一生產力。黑客這個稱謂已經不足以平民憤,干脆叫白領黑社會。行業監管到位后,大家終于可以心平氣和地干點正經事了。照抄美國,開始進入到虛擬化、云計算的業務領域,然后就是搞機器人和人工智能。現在的技術理念和手段越來越多,信息量越來越大,人們越來越急功近利,軟件不行就用硬件堆,僅僅是為了完成交付,能懵就懵,能騙就騙,世風日下,很多頂級程序員的光輝思想都被淹沒在星辰大海中。
現在的編程越來越沒啥挑戰,幾乎所有的積木都基本造好了,絕大多數程序員都是在大量堆砌積木,稀里糊涂地就把功能完成了,如果沒完成那就換塊積木,沒人仔細研究為什么。遠沒有小時候那種控制機器,挖掘機器潛能的樂趣。但不可否認,編程門檻的下降也繁榮了整個軟件行業的生態,而開源的出現,能夠促進代碼從市井般的粗俗進化到貴族般的優雅。所以,現在的我在做一些開源的相關工作。
程序員文化與武俠文化我理解程序員文化與中國的武俠文化有很多相似的地方。武俠經常提到在密林峽谷中練功修行,內力練到位后,一出江湖,就是血雨腥風。很多程序員年輕的時候也一樣,研究代碼經常廢寢忘食,吃住在公司,回家就是為了洗個澡。每天晚上干到2、3點,經常把愛因斯坦的話掛在嘴邊:“成年人睡4個小時就夠了。”這些其實也是在修煉武功。API手抄本:最初的武林秘籍
我大學剛畢業的時候,Windows才3.0吧。那個時候沒有互聯網,MSDN也還沒有,到哪里去找編程資料呢?所以大家手里都有一個API的手抄本,很多API的調用都是自己試出來的。很多參數也不知道是啥意思,就用窮舉法一個一個地試,去探索,去發現。所以大家每次見面都會炫耀一下,這個函數你會調嗎?一個小本,很牛逼的樣子,就像武林秘籍一樣。
MSDN:程序員的《葵花寶典》
再往后,微軟出了MSDN,每期至少2張光盤起。被中關村的不法商販看中了,就用MSDN的封面給日本動作片光盤套殼來躲避稽查。大家買到這樣的MSDN,都會體諒不法商販的良苦用心,默默地收藏起來,然后懷著忐忑的心情繼續去淘MSDN,即希望買到真的MSDN,又希望不是。但不管買到啥,都有收獲,所以程序員很早就有了平和的佛系心態。那個時候的MSDN,就是程序員的《葵花寶典》:一書在手,天下我有。想查什么隨便查,想調用什么就去搜,內容詳盡,還可以通過超鏈接無限拓展你的視野。那個時候已經不是會不會調用API的問題了,而是能知道調用哪些API能讓你的程序更加精簡、穩定。盡管大家常說,不要重復造輪子,但我想說這個比喻真是喪盡天良!程序員面對的絕不是使用幾個輪子的造車游戲,而是使用成千上萬個積木的拼圖游戲,已經遠遠超出了正常人類的腦容量。由于API實在太多了,而且還在快速迭代,任何人都很難篤定哪些功能已有現成的API,哪些功能還沒有。所以大家開始比拼的是知識面有多廣,再后來就變成了玄學,根據常年跟微軟程序員了解的調性,設身處地地猜他會怎么思考這個問題,我們怎么做才能成本最低。
修改別人的代碼:踢館隨著API越來越多,軟件規模也象滾雪球般越來越大,像求伯君老前輩那樣憑一己之力寫個字處理軟件的時代一去不復返了。尤其是系統級的大型軟件,需要很多人聯合開發,就不可避免要去修改別人的代碼。這個時候武俠的情節又出來了,同級別的程序員基本上都看不上對方的代碼。你看看東邪西毒南帝北丐,誰鳥過誰?別人代碼拿過來只是用旁光看一眼,然后就是“重構”。
其實,對于中級程序員而言,寫代碼并沒什么難度,想清楚編程思路之后就是體力活,所以這不算什么本事。但修改別人的代碼,可要比自己寫要難的多得多。首先別人的代碼就像個黑盒子,你得一點一點地通過閱讀代碼,讓大腦像計算機一樣運行一遍別人的程序,還要抽象出來別人的設計思想;然后再把自己的思想和別人的思想進行巧妙整合,和平共處;最后還要對代碼進行一次精準的外科手術,才能實現自己的目標。這絕對是個臟活、累活,但在外行人眼里,覺得你不就改了幾行代碼嗎?很多程序員在按代碼行計算工作量的世俗傲慢與偏見下,選擇了用愚蠢對付愚蠢。而那些有思想的牛逼程序員不為所動,不斷通過修改別人的代碼,提高自己認知的邊界,逐漸成長為一代宗師。而總是自己寫代碼的程序員,則永遠在自己認知的范圍內低水平徘徊。程序員的三六九等就是這樣被拉開的。
開源:反武俠
等到了軟件開源的時代,開源代碼就更需要看其他人寫的代碼了,我理解這是編程技術追求更高更遠的必然結果。在開源時代,參與代碼共建的程序員之間必然產生共情,了解對方是怎么想的,理解人家的思路。但對于大多數人而言,理解他人是很難的,每個人都覺得自己是最正確的,這是人性的弱點。而開源能夠讓程序員的心胸和視野更加的寬廣,把理解他人作為一種編程習慣,這種境界就更不一樣了。
當然,開源代碼看多了,可能武俠精神又會出來了,這怎么寫的這么爛,還不如自己的代碼開源呢。這個呢,就有點反武俠了。中國武俠,武林秘籍,都是自己門派的獨門秘技,絕不外泄。不能讓別人看。而開源代碼,相當于把武林秘籍公開了。但我理解,看到源代碼,到真正理解源代碼后面的思想,還有好長一段距離。而且還要看你的段位,就像九陰白骨爪第一式,氣沉丹田,你得先知道丹田是啥,在哪兒。還有歐陽鋒練蛤蟆功走火入魔的呢,顯然沒理解對代碼和思想的差異。所以開源代碼并不一定能讓所有獲得的人真正獲得,而真正獲得的人就是你的同道中人,你就不那么寂寞了。開源時代之前,很多老板以為掌握了源代碼,就是掌握了核心技術。而真正的核心技術其實是思想,而思想從來都是由人來掌握的。李白曾經寫過一首《江湖行》,我就結合開源,共建一首《開源行》:
未完待續……
原文標題:編程的技術|藝術|術術(上篇)骨灰級程序員的心路歷程
文章出處:【微信公眾號:開源技術服務中心】歡迎添加關注!文章轉載請注明出處。
-
開源技術
+關注
關注
0文章
389瀏覽量
7928 -
OpenHarmony
+關注
關注
25文章
3716瀏覽量
16271
原文標題:編程的技術|藝術|術術(上篇)骨灰級程序員的心路歷程
文章出處:【微信號:開源技術服務中心,微信公眾號:共熵服務中心】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論