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