[轉]你的技術之路

你的技術之路

劉未鵬(pongba)

C++的羅浮宮(http://blog.csdn.net/pongba)

 

上週末看了dreamhead的一篇文章(《起步的臺階》),有些感觸,忍不住在TopLanguage上八卦了一把,拋的是磚,引的是玉,獲益良多,故摘抄於此:

 

01年進大學的時候,想學計算機,但卻身在數學系,那個時候就做好了打算,數學只要混個及格,其餘時間鑽心看計算機的書,曾經一個月買了四百多塊錢的書,結果只能喫方便麪度日,大學有兩三年時間,學習計算機的熱情是最高的,從坐車到上廁所都帶着書:P

也正是在那個階段,學了很多底層知識,也鑽了無數的細節。那個時候的信仰是:技術隱藏在細節當中。那個時候看的書,代表性的是:《編碼的奧祕》、《80x86彙編技術原理》、《Windows核心編程》、《C++設計新思維》、《Inside C#》、《Linux內核源代碼情景分析》……(那段時間最喜歡的就是"內幕揭祕"、"原理"、"深入"之類的書)

現在看來,這段時間學習方式的優點:鑽技術細節,鍛鍊思考能力。缺點:一葉障目不見泰山。過分鑽研技術細節導致忽視了要緊的技能;如,編碼習慣非常差,以前寫的代碼,過了兩年之後拿出來看,不忍卒讀,連基本的DRY原則都沒能遵循。此外,對技術細節的關注導致了忽視了一些編碼方面形而上的原則。

這樣的學習幾乎持續到了本科的結束;其結果就是腦袋裏技術細節不少,但編程方法學上的東西卻幾乎一概不知(比如對如何編寫優質的代碼的忽視、對測試的忽視、對重構的忽視、乃至對OO也只是停留在一點皮毛認識上)。

直到讀研的第一年,纔開始拿起《The Pragmatic Programmer》、《Code Complete 2nd》、《Object Oriented Software Construction》這些書,關注起一些"更大"的問題來,也拿起來《Programming Ruby》讀一讀,也正是這個時候,纔算是走出了語言細節、技術細節的無盡泥沼,開始思考一些軟件開發方面一般性的東西,開始意識到"脫離語言思考,使用語言實現"。四年,從純技術的小世界中走出來,還不算晚。回頭看,以前的鑽技術細節的歷史也並非全無用處,尤其是培養了金出武雄所謂的"思維體力",而在底層知識方面的積累也讓後來看一些更高層的東西的時候心裏更有底。然而,現在看來還是覺得:一,在細節方面花的時間太多了(細節的世界是無窮的,尤其是IT領域,一個老概念新翻,就能變化出無數細節。一個框架的API文檔就隱藏着無數的"技術細節")。二,沒有區分"非本質的細節",和"本質的細節",像硬件架構知識,屬於本質細節,像語言細節知識,就是非本質細節了。前者是不變的,後者易變。三,沒有在關注技術的同時,分出一部分時間來關注更大一些的主題(如編程的方法學,乃至項目管理,一個例子是,在以前,會認爲語言的好壞至關重要,因爲語言的世界是最熟知的,然而實際上軟件開發的成本包含了更多重要的內容,甚至在語言方面還要取決於庫、工具等等因素。以前看到"精巧的"設計模式覺得興奮不已,現在則意識到,這些其實都是"非本質"細節)。

如今呢,倒是又開始覺得這些都不太重要,這些年的學習最大的收穫不是學到的東西,而是學習的能力。對於軟件開發這個知識無比細分、繁雜的領域,想要躺在過去學到的東西上過日子幾乎是不可能的,然而又不可能把所有知識都裝在腦中,所以唯有利用"元"能力:學習能力——用到啥,就學啥。畢竟,正如當初入數學系時的新生大會上,我們的系主任說的:數學都學了,還有什麼學不了的呢?

老莫

我跟計算機的緣分差不多可以追溯到公元1989年。我還是6年級的小學生,興趣小組把我們帶到浦明師範,然後玩弄了一下apple II。也就是個四則運算什麼的。說真的,我是一點感覺都沒有,基本上沒分清計算機和計算器的差別。

此後,在中學裏我參加模型小組什麼的,玩的挺開心,還得了些小獎。聯繫了實踐能力和動手能力,倒是很有好處。我的鉗工手藝差不多是那時候打下的基礎。高中時,參加了"頭腦奧林匹克"(Odyssey of Mind),一種從美國引進的面向青少年的創造能力比賽。我們得過冠軍和季軍。從中我接受了分析能力和創造能力的訓練(沒錯,這也是可以訓練的),學會如何運用基本原理,創造性地解決一個複雜問題。當然,這種比賽時要動手的,動手能力進一步得到鍛鍊。

後來,我稀裏糊塗地進了大學。(我沒有誇張,我們這一屆應該是全中國歷史上唯一的一次,僅憑藉會考成績進大學的。沒錯,是上海工業大學,現在的上海大學,託錢偉長的福,祝他安康:))。

由於高中時的比賽經歷,我選擇了機械系。我原本喜歡物理的,不過上工大那時沒有物理專業。不管怎麼樣,能讀大學就行了。兩年級開始學用計算機——AutoCAD——機械系學生的吃飯家伙。94年的時候,我母親的一個同事的先生建議我們家買電腦,讓我學計算機。至此,我才真正地接觸計算機技術,一發而不可收。

先是學了dBase,然後是C。96年開始接觸C++,接着一頭栽進去,就回不來了。從Borland跳到VC,從Win16到Win32,從api到mfc。啃過幾個月的com規範,對於ms那套東西算是摸得很熟了。但始終沒有跳出ms的範疇。而所用的C++,也不過是C(++)而已,直到兩件以前,接觸了標準C++和衆老大的著作。一句話概括,我是一個用了12年C++,擁有2年半C++經驗的程序員:P。

半年多以前,我聽說了pongba和他的blog,然後發現了TopLanguage。然後麼,在同衆老大的學習和探討中,進一步開拓了我的眼界,跳出了C++,跳出了ms,進入了更廣闊的天地。一切還都在學習,學無止境啊。

這就是我的技術成長經歷。概括起來就是兩個字"雜交"。儘管我現在搞軟件,一個很專業的領域,但是過去的經歷,所學的知識,都有極大的幫助。有時,另一個學科(對我主要是機械工程)的只是和技能,會起到意想不到的作用。我也曾經學習了一些物理學,其中的一些營養,或許現在正在潛意識中促進了我的編程技能。:)

btw:從我現在的眼光看來,pongba的專業經歷是最理想的:)。本科的數學,然後轉向計算機,通訊或其他什麼理工類專業,思維往往非常深刻嚴謹。沒的話說了。:)

我和老莫:

老莫寫道:

我跟計算機的緣分差不多可以追溯到公元1989年。我還是6年級的小學生,興趣小組把我們帶到浦明師範,然後玩弄了一下apple II。也就是個四則運算什麼的。說真的,我是一點感覺都沒有,基本上沒分清計算機和計算器的差別。

我:呵呵,我最早接觸計算機比老莫晚多了,是在97年,剛進高中,老爸買了一臺臺式機(奔騰MMX 200MHz,32M內存,2.1G硬盤),那個時候,最感興趣的就是每天喫完飯之後去校圖書館看電腦愛好者,把裏面的註冊表應用技巧抄在一個小本子上,回到家裏折騰:) 那個時候每個月必買的是三本雜誌:科幻世界、電腦愛好者、電腦報。

老莫寫道:

此後,在中學裏我參加模型小組什麼的,玩的挺開心,還得了些小獎。聯繫了實踐能力和動手能力,倒是很有好處。我的鉗工手藝差不多是那時候打下的基礎。高中時,參加了"頭腦奧林匹克"(Odyssey of Mind),一種從美國引進的面向青少年的創造能力比賽。我們得過冠軍和季軍。從中我接受了分析能力和創造能力的訓練(沒錯,這也是可以訓練的),學會如何運用基本原理,創造性地解決一個複雜問題。當然,這種比賽時要動手的,動手能力進一步得到鍛鍊。

後來,我稀裏糊塗地進了大學。(我沒有誇張,我們這一屆應該是全中國歷史上唯一的一次,僅憑藉會考成績進大學的。沒錯,是上海工業大學,現在的上海大學,託錢偉長的福,祝他安康:))。

我:我感覺這類經歷還是相當有價值的!我本科有一舍友,高中的時候玩過競賽,我們討論算法問題的時候,感覺他直覺明顯比我好多了。我們那個時候學校比較保守,玩的是應試教育,沒有這些經歷,對思維方式造成了很大的僵化影響~

老莫寫道:

由於高中時的比賽經歷,我選擇了機械系。我原本喜歡物理的,不過上工大那時沒有物理專業。不管怎麼樣,能讀大學就行了。兩年級開始學用計算機——AutoCAD——機械系學生的吃飯家伙。94年的時候,我母親的一個同事的先生建議我們家買電腦,讓我學計算機。至此,我才真正地接觸計算機技術,一發而不可收。

我:老莫,我高中的最高理想就是報理論物理(握個手哇~~),一方面小時候看的自然科學的書對我的興趣影響極大,另一方面初中的物理成績也給了我很大的成就感。非常喜歡物理的那種深刻。但因爲色弱不能報考理論物理,所以報計算機的,但差了3分,落到騙人的"信息與計算科學"(後來聽另外幾個朋友說也是被這個名字騙了,以爲是計算機相關的系,才報的,哈哈:P)

老莫寫道:

這就是我的技術成長經歷。概括起來就是兩個字"雜交"。儘管我現在搞軟件,一個很專業的領域,但是過去的經歷,所學的知識,都有極大的幫助。有時,另一個學科(對我主要是機械工程)的只是和技能,會起到意想不到的作用。我也曾經學習了一些物理學,其中的一些營養,或許現在正在潛意識中促進了我的編程技能。:)

btw:從我現在的眼光看來,pongba的專業經歷是最理想的:)。本科的數學,然後轉向計算機,通訊或其他什麼理工類專業,思維往往非常深刻嚴謹。沒的話說了。:)

我:^_^怎麼說呢,雖然數學僅學了個半吊子,但後來我回頭看,最重要的課程"微積分"(嚴密思維)其實已經在大一學掉了,我記得教微積分的那位老教授的課,是相當有意思的,在整個大學生涯中,也僅有這一門課,去聽過;也僅有這一門課考了90分向上。後來大三大四就是在軟院讀的了,偶爾跟過去的舍友聊聊數學系在上什麼課,感覺後來學的近世數學就開始繁複了,不復原來的簡潔優美。另外,每次考試前的包夜(臨時抱佛腳)也極大的鍛鍊了理解力,一兩個晚上需要基本搞定一學期的內容,一般我的策略就是撿最重要最本質的內容理解(而不是記憶),其餘的就管不着了,結果每次都混個過關:P

雖然最終數學沒學到太多東西,但在嚴密思維以及理解力上面的鍛鍊還是相當有益的;或許,正如系主任所說,在學新東西的膽量上面,也有作用:-)

Googol Lee

受到兩位大牛的感染了,我也拉拉雜雜寫兩句:

我接觸電腦算是早的了。小學4年級還是5年級的時候,學校搞了一批中華學習機,其實就是一種appleII的兼容機,然後組織我們學basic。當時鬼使神差的就報名了。後來學校組織我們去考計算機奧校。話說考試題目完全沒有計算機的內容,除了語文就是數學。(至今對語文卷子的最後一道題記憶深刻:問,是否知道曹衝秤象的故事,如果知道,舉一個你生活中的例子。我當時糾結了半天也想不出類似的例子,所以答案寫了個"不知道"。)

之後,居然鬼使神差的考上了!每週末要去上計算機課,5年級那會兒以算法和數據結構爲主,但並不系統,而且都是用的basic,對指針啥的沒有概念。主要像線性表,列表,排列組合,深廣度搜索都學到了。話說,那會兒老師最喜歡出的題就是報數殺人,開始是一遍遍順序報數,之後是折返來回報數,在最後轉圈報數……(爆個老師的八卦:那老師寫大寫字母都能連筆,每次看他在黑板上寫程序都要辨認半天……)

之後上了初中,就是奧校哪個學校,在所謂的計算機班。而且家裏給買了臺386電腦。記得那段時間最喜歡的就是用各種技巧把基本內存弄到630k左右。上課學了pascal(所謂計算機班嘛,總要有點特色,別的班學的是wps),算是接觸到指針類的語言了,還短暫接觸了一點OO,但只知道是把函數放在結構裏(turbo pascal對oo的擴展太弱了),還不懂啥叫封裝。最大成就是用pascal寫了個分割文件的小程序,使用命令行,用一個函數來判斷輸入是否合法(當時還是8.3的文件名,輸入8個字符後就必須輸入'.',之後只能輸入3個字符;還有隻能輸入數字、路徑等不同的合法限制),還會判斷目標位置是否足夠容納,會自動分割。(後來上了高中,找原來同學玩時,發現他還在用我寫的這個程序,興奮。可惜現在那個程序找不到了……)然後記得有年暑假,看了一遍譚浩強的《C程序設計》,算是入了C的門了。還看過一本講ARM C++的書,算是入門了C++。(這本C++的書沒講命名空間,以至於大學有人拿着書上例子問我using是啥我都不知道,汗……)期間參加過幾次比賽,最好成績好象是區第二?記不得了,反正成績不咋樣……

高中基本都在圍着高考轉,也沒有啥計算機上的進展。不過,報考志願時倒是一直想上計算機系,無奈分不夠,只能報了自動化(2000年,那年是唯一一次先出分後報志願)。

大學開始接觸的windows編程。入門書是《Visual C++ xxxx》(忘了,反正就是ms出的配合VC6的那本),砸重金考了個MCSD,算是對COM有了一點點理解。(不知道這個證書,在我第一次找工作時,有沒有起作用……)也就是在大學,在學校圖書館借了《C++沉思錄》,算是上了C++的道兒,開始對語言本身着迷。不過自身懶,雖然學校的計算機系不錯,我也從沒去蹭課過,想想後悔啊。而且當時總覺得拿着個C++就啥都能幹了,什麼GUI數據庫之類,無非就是數據結構+算法嘛。現在對這個想法真是汗顏,年少輕狂……

畢業後,先是在上海一家臺灣公司做光驅(在張江,可能這裏不少朋友知道那裏吧)。基本上感覺是被騙去的。說是程序員,結果去了工作都是針對CD盤調整firmware參數……後來辭了,去了北京華爲。在這裏算是開始接觸軟件工程的相關思想。從華爲圖書館借了《代碼大全》(第一版,還是複印的……),讀了後才知道以前的淺薄。於是開始大量看書。正好華爲內部買書挺便宜(工卡里的錢不要稅的,而且只能在內部用),於是《深入理解C++對象模型》,《C++設計新思維》等書也是在那會兒看的。並且工作中接觸了Java和Unix。對Java倒是沒啥好感,倒是被unix的命令行迷倒了(比dos強多了啊)。不過華爲的工作,大家也都是知道,看的東西雖然多,沒時間實踐。現在在一家公司做linux,開始接觸python,linux系統本身等方面,還有很多東西要學……

唯一的遺憾,大學玩的太多了,而且太狂了。好歹那會兒應該看看操作系統和編譯原理。這東西現在靜不下心看啊。

KatKat Lim:

俺第一次編程是在小學或者初中的時候。第一個程序是:

hello

不是hello world,因爲我看到小霸王學習機手冊上面寫着:人機對話……

Niu Jin:

也不是科班出身,本科學的生物醫學工程。

大一時一大堆無聊的課程裏就覺得C語言程序設計比較有意思,老師是剛畢業的,開堂第一節課說:"C語言我不是很熟,大家共同學習"。於是自己天天跑機房,做的是譚浩強那本C語言程序設計的習題。

後來,一堆同學報了國家計算機等級考試,也跟着報了。那個南開一百題我讀起來比讀小說還有味道。考試上機過了,筆試沒過,因爲壓根沒看(我知道我錯了,不該浪費父母血汗錢……-_-!)。

再後來,無意中在網上發現了pongba的blog,無意翻到pongba的那篇《我的C++學習歷程》。也去翻翻pongba提到的那些C++名著,然後就上了賊船^_^,大學剩下兩年半將一本本C++名著讀下來(全是早飯錢換的)……

現在畢業未滿一年,工作是數據庫維護,對罈子裏的諸位大大的談吐無限敬仰,每日來潛水。 ^_^

星染流雲:

現在想想當年那些電腦雜誌裏最好的一本,應該是《電腦高手》,其內容之強大,至今無出其右者。不過後來改版了,我就再也沒買過。

代數,我倒是認爲是相當優美的,因爲可以把各種數學結構用統一的角度看待。清華出的高等代數學(第2版)挺好的。

分析,也不錯,就是感覺有些瑣碎,各種教材角度也不同,要麼偏應用,要麼偏理論。應用+理論的話,同濟版的高等數學+Rudin的數學分析原理,我覺得是一種還不錯的組合。

語言上,靜態的、動態的各學兩門。

yzzrn:

小學最後一年的時候用小霸王步步高之類的學習機學會了英文的ABCD,學會了五筆字形。

初中的時候用了一下學校的DOS:每次上機插入一張軟盤,最喜歡玩的"遊戲"是TT。學習了一些DOS命令,用了用UCDOS和當時很牛的WPS。

高中的時候喜歡看電腦報,最愛乾的事就是修改我表哥一臺P2的機器的註冊表。

後來城裏有了無盤工作站的網吧,於是經常去修改網吧的機器(解除其中的一些限制),還經常安裝冰河:-)

大學在南京NUAA上的,信息安全專業:大一上學期學了C(譚浩強版本),大一下學期學了C++,我們老師自己整的一本E文書(不知是否原創),當時他很自豪地說他的書裏有一個string(即std::string),在別人的書裏是沒有的!!後來想寫界面,於是自學了MFC(書是JJHou那本),認識了虛函數多態的妙用,被臺灣術語搞暈了(繁體電子版JJHou那本書,後來自己買了一本簡
體的,大三的時候送給圖書館了,至今下落不明),被JJhou對MFC一堆宏的解說搞暈了,不過framework倒是瞭解了不少。後來看了GOF的那本書,於是對DP無比崇拜。接着是:Bob大叔的3P書,martin的Refactoring,C++設計新思維……

然後就大學畢業開始工作了,發現書與現實的差別巨大無比。目前還在與VC6,MFC做鬥爭。

劉新宇

其實我是上週五才注意到這個TopLanguage的。和前面幾位相比,看來我可以賣賣老了:-)

"諸事無成,但尚能飯"。

我是初二接觸計算機的,也是Apple II。參加了一些競賽,不過印象都不深了,印象最深的是這幾件事:

  • 拿剪刀在double density的5寸盤的左側剪一個缺口,然後在普通軟驅上當雙面用。
  • 期末考試結束後,寫個冒泡排序幫老師算年級排名和平均分。……終於親自驗證了計算機可以幫助提高生產力。
  • 晚上調程序太晚,機房和教學樓都鎖了,和老師一起跳窗戶出來。

然後進入高中,接觸了pascal,接觸了幾個同學+好朋友,也搞競賽,牛人真的很多。不過比賽得獎能一起看個電影什麼的也蠻有意思。印象深的有這樣一些事情:

  • 學習了些數據結構,並且在計算機小組活動上,利用老式光學幻燈機給大家講。
  • 機房的機器都是意大利贈送的ollevitti(拼寫可能有錯,中文據說是"好利獲得"),相當於8086, 意大利鍵盤。
  • 第一次和好朋友們一起逛中關村,大開眼界,逛了不少展覽會,拿了不少好看的資料。

然後是大學和讀研,這個比較複雜,列舉事情似乎不夠了。說說一些變化吧。

  • 專業課裏計算機相關的不多,C語言,彙編語言,算法與數據結構,也就這些了。現在很佩服當初的課程設置,老教授們的確看的很遠,他們知道什麼是工具,什麼是知識,什麼是要培養的能力。數學,物理培養的是科學的素養,數字電路,模擬電路,信號與系統,自動控制原理培養的是工程專業知識。實驗課程培養的動手能力和——非常重要——自信。相信自己有能力解決真正的工程問題。(對了,我是自動化系)
  • 可惜年輕氣盛,沒有能夠及時理解老師們的苦心,自己在大量的語言學習,Windows編程上浪費了不少時間。
  • 認識到這個問題是逐漸逐漸的,真正的生產需要紮實的基本能力和基本概念。
  • 我在大學裏出過很多差,到過2次湖南農村的汽車廠裏幫助開發汽車自動檢測線的控制程序,到過7次江西的火電站幫助開發發電系統自動檢測程序。接觸了一線工程後,我知道了計算機的威力,也感到了自己的不足。
  • 這個不足就是硬件能力,於是悔之晚矣,我拼命學習硬件知識,動手製作電路。
  • 開始讀論文,認識到研究是一件非常神聖的事情,後悔當初沒有好好學習數學和專業課。
  • 接觸圖像處理,被極大吸引,發現Matlab是個好幫手。嘗試靜心研究,寫論文,可惜歲月蹉跎,留給我的時間太短了,我畢業了。

求學

  • 畢業後我空了半年時間,一邊幫助老師做工程項目,一邊幫助朋友寫程序。這一階段犯的錯誤是滿意自己已經完全能夠寫任何程序解決工程問題了,現在看來,人一刻也不能自滿。
  • 到日本學習機器人開發,發現自己擅長的程序設計和電路設計,單片機開發都不使不上勁,發現了另一個弱點:機械設計。
  • 努力學習機械設計,搞定了幾個機器人。
  • 開始學習新的C++,包括STL。
  • 意外,被迫中斷學業,回國。

工作

  • 找工作,很艱難。先在上海工作,學習了設計模式。明白了所謂大公司裏的軟件開發流程。遇到了很多事,明白了社會是個殘酷的大學。
  • 回北京,很長時間懷疑自己,很矛盾,曾請甚至覺得"讀書誤人"。
  • 繼續工作,要承認現實。接着腰部生病,人生想法發生極大改變,珍惜活着的每一刻,生活,工作,薪資,都是身外之物,家人和親情最可包括,人生要隨遇而安。
  • 開始每月寫技術文章,到現在積累2本:(《聽雨集——C++小品文集》《看雲集——軟件開發雜文集》
  • 偶爾在cpper灌水。
  • 接觸squeak,明白了工作和業餘愛好的區別。
  • 現在越發覺得自己精力腦力大不如前,大量的非技術工作也逐漸佔據了我的技術工作的部分。最近看看lisp,編譯原理,Smalltalk和haskell,希望能夠活到老,學到老。

對了,說個題外話,我的同學很多都發生了極大的轉變,有很多事自己主動做出了重要的人生決定,列舉一些:

  • 認爲理工,尤其是工程技術並不是自己追求的,大學期間開始學習經管的雙學位,畢業後毅然出國學習經濟。
  • 畢業工作一年後,毅然轉行學習集成電路;學成後一致在集成電路業內工作。
  • 工作後轉入半導體行業。
  • 堅持老本行,工業自動化行業。
  • 創業。
  • 轉入純軟件行業……這個可能最多。
  • 當然,還有大量出國從事研究的。

 

你的技術之路是怎樣的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章