往期回顧
TALK 6:編程的技術|藝術|術術(上篇)骨灰級程序員的心路歷程
前期回顧上篇里,骨灰級程序員梁峻墅給大家介紹了他的心路歷程,以及他對程序員文化和武林文化的理解。本篇將繼續請大神和我們一起聊一聊編程的藝術和哲學。
編程的思想境界和層次
上篇的段子講完了,現在進入正題:編程的終極奧義到底是什么?
我理解只有思想恒久遠,代碼才能永流傳。因為編程就是把人類的語言給轉換成計算機能執行的機器語言,本質就是一種翻譯工作,但翻譯的水平也是有高有低的。
像電影《Sucker Punch》是一部非常有創意的內涵思想片,還能融合夢幻、魔幻、科幻、暗黑、倫理、動作、微色情、小蘿莉、暴力美學等多種元素做到雅俗共賞,不同層次的人都能從這部影片中獲得不同的樂趣。
但這部電影在華語區的票房慘淡,就是由于譯名問題,該片的價值被嚴重低估。臺灣翻譯為《殺客同萌》,基本做到了意音具備,就是神還差點。但看看大陸翻譯為《美少女特攻隊》是幾個意思,讓人以為是二次元動畫片。再看看香港的翻譯《專扁衰仔》,你就知道沒文化有多可怕,扎克·施奈德估計直接哭暈在廁所里。翻譯的思想高度不同,對作品的理解深度不同,翻譯的質量是天壤之別。而對于像編程如此縝密的翻譯工作,那更是需要蘊含深刻的思想才能做得更好。
既然談到思想,就要談到思想的境界。
我理解編程的境界有四層,借用孫子兵法,分別是:下兵伐城、中兵伐謀、上兵伐心和不戰而屈人之兵為超然。
第一層:下兵伐城
很多程序員,一接到編程需求,就立刻啟動開發環境,開始編程敲代碼了。這就是沒什么想法,先干起來再說,編到哪兒算哪兒。面向交付編程,只為完成功能,頭痛醫頭,腳痛醫腳。一路攻城略地,好不威風,但這只能算初級水平。
第二層:中兵伐謀
拿到需求之后,不著急動手,先開始思考,開始謀劃,應該走什么技術路線,結合哪些已經做過的代碼,還應使用哪些技術手段來快速、輕松地完成這個需求。這個層面的程序員已經開始不靠純技術硬扛需求,而是開始藝術性地解決問題。大家拼的不是能不能解決問題,而是看誰解決問題的成本最低。像中醫那樣,并不直接治病,而是陰陽調和,打通經脈,調動自身免疫系統,四兩撥千斤,這已經開始有中國式智慧的味道了。這種人經常在計算機旁邊呆坐半天,即使表面上在和你說話,但其實腦子里在伐謀呢,所以經常表達古怪,被認為是書呆子。
第三層:上兵伐心
這種人已經能看到文人的清風傲骨,在更高的戰略層面思考解決問題的時空成本,包括但不限于時間成本、分析成本、設計成本、編碼成本、調試成本、部署成本、維護成本、用戶的使用成本、資源的調配成本、社會的綜合人文成本等等,得到結果后會產生一個靈魂拷問:“為什么要解決這個問題?能不能不解決?”帶有原罪的需求都挺不過這個終極審判。比如很多需求,只是貌似合理,但實際上是偽需求,頂尖的高手能夠抽絲剝繭,發現需求的邏輯矛盾和漏洞,并能綜合運用各種手段,甚至包括非技術手段來及時糾偏。比如做MIS系統的時候,客戶方的辦公自動化系統需求很簡單,就是把現有的管理規章制度全部用計算機程序實現一遍。這個需求貌似天真無邪,但實際上它忽視了人機之間的差異和特點。比如對人工作業,為達到作業合規的要求,管理規章制度中就要有反作弊措施,各個相關部門還都要有作業數據備份,以便將來發現問題倒查時可以對口供。但對IT系統,用戶都有登錄ID,作業都有事務ID,交互都有會話ID,存儲都是一體化的,根本不需要那些畫蛇添足的步驟。頂級的程序員就會庖丁解牛般地優化管理流程,引導需求合理化,節省了大量的研發資源、應用資源和社會資源。可能只需要修改管理規章制度的幾十個字,就能少寫幾萬行代碼,bug能少幾百個,部署維護能少幾個月,用戶每天能少點擊數千次鼠標。通過少編程,甚至不編程就能解決問題,才是最牛逼的境界。
第四層:不戰而屈人之兵
終于來到最最牛逼的境界——不戰而屈人之兵。前面三層境界,也就是在滿足需求、預測需求、引領需求上做文章,畢竟都是咱們這個世界可以理解的事。而最高境界已經跳出三界之外,不在五行之中,已經無法理解了。
看個場景先:小白最近代碼輸出太少,說機器頻繁死機,耽誤了工作。大牛對著機器,上去就是一腳,從此再不死機了…天理何在?小白不服啊,碰上死機的機器也來一腳,結果當天就去財務領工資了…天理難容!雖然都是人,但差別就這么大,找誰說理去。
再看段對話:
-
小白:“哥,我做的那個模塊總是有bug,調試兩三天了,一直找不到原因,您有空幫我看看唄?!?/p>
-
大牛:“走”
-
來到現場。
-
小白:“您看這…”
-
大牛:“別急,從頭開始把錯誤給我演示一遍”
-
小白:“好嘞”
-
一個小時過去了…
-
小白:“我call,怎么不出來了呢?大哥,我發誓我找你之前還復現過一次錯誤”
-
大牛:“沒事,我已經習慣了,等再出錯,保留現場,call我”
然后就沒有然后了,因為再沒出過錯!
大牛只要頭皮更出眾,那就bug去無蹤,所有的大牛都有這樣的體驗。我理解大牛都是有超自然的氣場,常年抓bug,戾氣太重,bug都嚇跑了!不管你們信不信,我反正是信了。這就是最高境界,什么都不用干,坐在那兒喘氣就能解決問題……
編程的技術說完前面那些思想和層次,現在咱們來談點真正有用的編程技術。
編程有著悠久的歷史,大約在137億年前,奇點大爆炸,咱們人類不幸處在這個由時間和空間組成的萬惡世界,空間可以理解為除時間之外的一切,時空之間不斷相互轉換,對稱規則讓整個世界動態守恒。閑的蛋疼的意識們企圖把這個混沌的世界按自己的想法有序化,世界則按規則自動產生了無序與之平衡。
說這么累的意思就是,程序員編程的一生都要與bug為伍,不要害怕它,也不要想著完全消滅它,而是想辦法與它和諧共處,人bug合一。
第一就是盡量減少bug產生的機率。畢竟人少了才好相處,人太多了則很難伺候。談過女朋友的,應該都有體會。你每敲一次鍵盤,都有可能產生bug。所以,每次敲代碼時,應該多想想自己的祖國、各族人民的福祉,董存瑞、劉胡蘭等民族英雄的期許,還有自己父母的厚望,這次鍵擊是不是真的對的起他們!都說頭上三尺有神靈,但咱們程序員頭上三座大山全是虎視眈眈的bug,你稍不留神,它們就會順著鍵盤潛入到你的代碼里,且按且珍惜。
第二,讓bug舉步維艱,無處遁形。敗兵先戰而后求勝,勝兵先勝而后求戰。經常打敗仗的人總是先打再說,然后企圖僥幸取勝;而常勝將軍都是先不斷創造勝利的條件,已經勝券在握了才開戰!編程的基本技術就是要編寫低bug代碼,一切為了debug,所有的代碼都要為調試做好準備。說這些戰術級技巧的理論只會隔靴搔癢,后面會結合具體的代碼講解,大家才會更有感覺,點到為止先。
編程的藝術
其實任何一門技術,上升到一定層次后,都會變成一門藝術。編程也是如此。
我們在這個時空世界里,都有自己的當前態和目標態,但無論哪種態都有自己的時空坐標,代碼就是企圖讓這兩個態的坐標重疊,而實現重疊的路徑是無窮無盡的,但一定至少有一個最佳實現路徑。代碼的藝術,就是實現這個路徑的策略,在空間與時間之間做權衡,要么時間換空間,要么空間換時間,變換到下一個態,不斷重復這個過程,直到到達目標態。換成人話就是:所有的代碼客觀上只有特點,主觀上的優點和缺點其實都是程序員意淫出來的,優點都是用缺點換來的,缺點都是優點導致的,優點和缺點實際上是一回事,只是意淫角度不同而已。
比如,總有人說UNIX/Linux比Windows更安全,而這根本不是技術的問題,而是藝術的問題。UNIX/Linux是個悲觀型操作系統,假設用戶都是壞人,系統默認什么都不能干,除非明確指出這個用戶能干什么;而Windows是個樂觀型操作系統,假設用戶都是好人,系統默認什么都能干,除非明確指出這個用戶不能干什么。所以在默認情況下,UNIX/Linux適合做機機交互,典型應用于服務器,而Windows適合做人機交互,典型應用于個人計算機。但這些特性都可以通過配置安全選項,把Windows操作系統變的比Linux/Unix操作系統還安全,也可以把Linux/Unix操作系統變的比Windows操作系統還不安全。這都是藝術的事,與技術無關,但比技術還重要。
代碼的藝術性范圍很廣,包括但不限于默認值、參數、接口等具體設計,這些都可以在后面的代碼講解中讓大家好好爽一把。
編程的術術藝術是技術的抽象,術術則是藝術的再抽象,這部分內容我將盡量說人話。
我理解程序員在編程的時候,要意識到這些代碼是面向開發者的,面向你的同行,是給他們看的。代碼在舉手投足之間,要透露出一種優雅的美,人見人愛,花見花開,車見車爆胎的那種。
舉個例子:在做一個功能時,發現微軟提供的系統API在某些特定條件下,返回值錯誤。怎么辦?
基層小鬼:匹夫之勇,自己重新實現一遍該API的功能,結果是除了測試路徑能覆蓋的條件外,其他條件下全是bug。
中層干部:騷人墨客,給微軟報告這個bug,等待官方臨時解決方案,合規但官僚。
高級貨:清風仙骨,給微軟報告這個bug,但順手寫下解決方案。前置偵測代碼,檢測此API是否已修復這個問題,如果已修復則正常執行,否則執行糾偏代碼。這樣無論是現在還是以后,這段代碼都可以穩定正確地運行!萬花叢中過,片葉不沾身,這就是優雅。
終極殺手:不講武德。還記得前面說的那個靠喘氣就能解決問題的主嗎?他會怎么解決?他就不解決!對,你沒看錯。他選的技術路線都是用5到10年前的API,坑都已經被小白鼠們填平了,他壓根兒就碰不上這種破事。最優雅的美就是你看不出他哪兒美,但他就在那兒閑看庭前花開花落,漫看天外云卷云舒。
未完待續……
原文標題:河套IT TALK——TALK 10:編程的技術|藝術|術術 中篇:編程的思想、藝術和哲學
文章出處:【微信公眾號:開源技術服務中心】歡迎添加關注!文章轉載請注明出處。
-
開源技術
+關注
關注
0文章
389瀏覽量
7963 -
OpenHarmony
+關注
關注
25文章
3728瀏覽量
16405
原文標題:河套IT TALK——TALK 10:編程的技術|藝術|術術 中篇:編程的思想、藝術和哲學
文章出處:【微信號:開源技術服務中心,微信公眾號:共熵服務中心】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論