天天看點

我的軟體開發生涯 (10年開發經驗總結和爆棧人生) - 靈感之源

我的軟體開發生涯 (10年開發經驗總結和爆棧人生)

2015-09-13 18:53 

靈感之源 

閱讀(50985) 

評論(119) 

編輯 

收藏 

舉報

總結我這10年來的開發生涯,從開始接觸計算機,到工作經曆、如何成為程式媛、人生感悟、如何成為一名雇員、開發品質,到最近的各個技術棧的爆棧等。

簡介

網名靈感之源,智能實驗室創始人,從事軟體開發超過10年,寫過千萬下載下傳量軟體,熱衷開源,寫過多個爆棧項目(系統開發技術棧、.Net技術棧、資料庫技術棧、前端開發技術棧)。現定居于澳洲悉尼,研發經理,從事系統架構開發。

爆棧人生

現在流行說全棧。每種開發都有其相關的技術。您是否覺得難以羅列某種開發所包括對技術(技術棧)呢?

您是否想過:

  • 我做的這個職業,究竟包含哪些技術呢?
  • 我所掌握的技術這個子集,在整個技術大系這個超集裡面占的比例是多少呢?
  • 我究竟還沒有掌握多少技術呢?
  • 面試的時候會考哪些技術呢?
  • 那麼,開發是否也應該有這樣的技術棧概覽圖呢?

我搜尋了很久,沒有找到一個符合我要求的“較為全面”地表述各種技術大系的圖表。是以我建立了爆棧,覆寫了以下技術棧:

系統開發技術棧

您是架構師/設計師嗎?您可以在系統開發技術棧這裡找到比較全面的基礎、分析、項目/計劃、文檔、設計/模組化、實作、品質、管理、編譯、測試、釋出、維護、排錯和學習等。

我的軟體開發生涯 (10年開發經驗總結和爆棧人生) - 靈感之源

Web前端技術棧

您是前端攻城師/設計師嗎?您可以在Web前端技術棧這裡找到比較全面的浏覽器、平台、類庫、架構、工具等。

我的軟體開發生涯 (10年開發經驗總結和爆棧人生) - 靈感之源

資料庫技術棧

您是資料庫開發人員/管理者嗎?您可以在資料庫技術棧這裡找到比較全面的關于SQL Server和Azure等資料庫系統的技術細節。

我的軟體開發生涯 (10年開發經驗總結和爆棧人生) - 靈感之源

.NET技術棧

您是.NET碼農嗎?您可以在.NET技術棧這裡找到比較全面的關于.NET技術的架構、平台、IDE、開發包、桌面系統、web開發、SOA、資料通路、生産力、元件、工具等資訊。

我的軟體開發生涯 (10年開發經驗總結和爆棧人生) - 靈感之源

這些技術棧不僅提供相關技術的描述、網站、GitHub位址等,還提供互動式的HTML預覽,友善你全面了解各種技術點的關系。

不管您是否前端攻城師/設計師、資料庫開發人員/管理者還是.NET碼農,我們都歡迎您加入我們的行列!

爆棧的官網:http://overflowstack.github.io/

軟體生涯的開始

上初二,學校開了電腦課。電腦老師叫鄧騰飛,

第一次上課,眼睛裡看見的是一台台白色的機器,帶了個像電視的東東,能顯示東西,真神奇。課程上多了,覺得電腦挺好玩的,感覺就像在跟電腦交談,而且比較聽話,從來沒有人這麼聽我的話。不過問題來了,當時安裝的是DOS3.x版,滿螢幕是英文,很多都不認識。這個時候我就更加希望能把英文掌握好。

到了初三,終于有了屬于自己的第一台電腦,386,DX40,4M記憶體,120M硬碟,當時感覺很好了。以前是一個月才回家一次,有了電腦後就常常回家了,一到家就“抱”着它,經常搗弄到淩晨4-5點。

後來電腦更新了,486,DX80,開Turbo的,4M記憶體,210M硬碟,光電滑鼠,還帶個鈎可以挂到顯示器邊上的,很有趣的設計。至今,這台電腦還放在老家,或許,多年後,要麼放博物館,要麼給孫子說:你看,你爺爺當年的電腦是這樣的。

初三畢業,會考,我的英文拿了滿分,英文老師很替我高興,說這麼多年沒有人拿這麼高分,說要獎勵我一本英文文法書,名字忘記了,但我仍然記得封面顔色是紅是的,而且到現在還保留着,放在老家。當時就有那麼一個念頭:我是為了電腦學好英文的。

電腦老師的電腦,記得是Novell的無盤工作站,我們當年為了要拿權限,試圖模拟個登入界面,蕩老師輸入密碼時,這樣我們就可以盜取了。不過最後沒有成功。後來學生們的電腦用上了DOS 3.x。先用的GWBASIC,後來接觸了Quick BASIC和Pascal。

上了高中,在電腦課中認識了幾個志同道合的人,我們平時會常常交流技術。但大家都想做自己的事情,成立自己的工作室。這跟我以後所認識到的個人英雄主義很類似。我記憶中最大的便是我們幾個曾經在一個暑假中進行一個比賽,用自己最熟悉的語言寫一個程式,比一下技術水準,看看誰寫得更好,可惜最後不了了之(沒有評比)。當時大家的作品我仍然保留着,後來一次硬碟壞了,所有以前研究的東西都沒有了。

其中一個厲害的家夥是張敏鋒,他在DOS下利用QuickBASIC實作了一個類似x-windows的圖形化的界面 ,支援中文直接寫屏、滑鼠、帶中文輸入法、圖檔(自己定義的位圖格式!)、動畫和音樂,實在讓我驚歎不已!可惜他現在不再寫程式了,實在太遺憾了。

另外一個是“道友”,他更牛,特别擅長用PASCAL和QuickBASIC,他的算法功底很紮實,經常給我們示範他寫的算法,并用圖形表現出來。後來他上了大學了,用Delphi+DirectX寫了一個很著名的《決戰坦克》,效果好得不得了。多年前他在珠海金山公司開發WPS。

還有一個,名字忘記了,用彙編寫了個圖形功能庫,在QuickBASIC中調用,實作真彩色,因為QuickBASIC的Screen12模式就支援16色。可惜現在不他的知道下落。

還有一個,阿祥,用PASCAL的牛人,實作了類似張敏鋒的圖形化界面,多年前他在騰訊公司寫QQ。

還有一個,Chicken,這家夥最喜歡鑽研技術,從DOS下的QuickBASIC到Windows下的Visual BASIC,再到VC++,再到Java,多年前在21CN做開發,現在在創業。

還有一個,Silly,這家夥好像學了10多種語言,有一些我根本沒有聽說過的。現在下落不明。

實際上,我們高中畢業那一屆出來的,很多出來都做軟體開發,可能是那一年開始市場比較熱吧。

事實上,我們從正規電腦課程中沒有得到多少專業知識,這應了一句老話:師傅領入門,修為在個人。在高中的時候,我們做了不少荒唐事情,其中一件跟學習電腦最難忘的是:我們“入侵”電腦老師的房子。

那應該是在讀高二的時候,一個周末,我們幾個熱衷學習程式設計的在學校留宿的同學,跟平時一樣,到電腦老師的房子用他的機器,因為周末的時候電腦室不開,而且電腦老師也樂意于讓我們學習電腦。但那個周末老師不在家,而我們習慣了每個周末都用他的電腦,大家又沒有鑰匙,碰巧另外一個老師經過,說:"break in啊",當時就震驚。然後大家都說:你看,這老師都讓我們闖進去了,那就闖呗。最後,我們爬窗進去了。當晚大家的确研究了不少東西。我們還在老師的房子裡面開小竈,弄了一鍋粥,吃得挺開心的。大家累了倒頭便睡。第二天早上,老師開門看見我們和變樣了的房子,“責罵”了我們一頓,他其實也沒有什麼的,呵呵。不過我們之後都沒有在未曾得到老師的同意之前“入侵”他的房子了。

在高中,從求伯君先生的作品WPS了解到他的個人經曆,很欽佩他,便把他作為我的偶像和目标,或許這便是個人崇拜吧。至今仍然記得DOS下的WPS打開文檔的萬能密碼是CTRL+QIUBOJUN (求伯君的拼音)。

我把所有課餘時間都放到學習電腦和程式設計中了。很少玩遊戲,而且比較少參與課外活動,周末和假期都把所有時間都投入到學習程式設計中。

高中,學習的确繁重,但我仍然把相當多的學習時間都放到學習程式設計中。

畢業後知道電腦老師自己開了間電腦公司,但沒有了解其近況。

第一次開發人生的感悟

在大學的時候寫了篇感悟,現在原文放出來。

我是一個英文專業的大學生,但我真正想做的,卻是成為一位IT人。六年多以來,廢枕忘食,連那“黑色七月”前的莘莘學子浴血奮戰,殺得昏天暗地的瘋狂日子裡,我仍然是“兩耳不問窗外事,一心隻顧程式設計式”。更離譜的是,連在答國文考卷的時候,我不由自主地想起前一陣子的還沒有完成的程式來。聯考結果出來卻有點出乎意料,考上了第一志願。

這六年多以來,我想成為一位IT人的願望越來越強烈,這更讓我瘋狂地學習電腦知識,盡可能地接觸與電腦有關的東西,關注有關電腦的資訊,對自己不斷“充電”。在家裡時,我常常在白天構思程式,晚上從别人開始入睡的時候開始上機,大概是11p.m.吧,一直地打到窗外第一屢陽光射進我的工作室為止。原因有2: 1.晚上安靜,我的思維為一天中最清晰的,這樣能更好地讓我發揮; 2.晚上正常的人都睡了 。

考上大學的近一年來,我總在問自己,“到底有沒有選擇錯了?”為什麼我會有這個想法呢?我理科不大好,害怕考不上大學,是以在高中分科的時候選擇了文科,希望能考上大學後可以選擇與電腦相關專業,即使是旁聽也好。但是考上大學後,發現這根本是不可能的事情,因為我所在的大學不但沒有電腦專業,連相關的專業也沒有。當獲悉這令我頓感近乎絕望的事實,我消沉了。不能學電腦,又能怎樣?

我平時行為不羁,獨來獨往,不受束縛,穿着更是以舒服為重,是以經常成為老師跟同學“攻擊”我的借口。老師曾多次找我做“說服”,苦口婆心地向我表明作為freshman應該盡量接觸英語,多讀英文名著,擴大詞彙量......,如此雲雲。我當然明白老師的出發點是很純潔的,但是,老師,你可知道,對我來說,英語,是作為我學習電腦的工具,而非電腦作為學習英語的輔助工具。我曾多次對自己說:“一定要在保證英語過關的基礎下,才能搞電腦!”但往往不能keep promise,是以我常常感歎:“到底有多少人能信守承諾,又有多少人可以達成願望?”

我每當遇到不如意的事情的時候,經常以“世事沒有完美”來安慰自己,應該說是欺騙才對,因為我深知這僅僅讓心裡好過點,如此而已。但在這以後,又可以做些什麼呢?但一件事讓我明白到一句古語——“隻要有恒心”的的确确是不假。體育課要考1500米,要是以前,我根本是不會害怕的,但幾年來已經荒廢了,頗有“廉頗老已,尚能飯否”的感覺。真正站在起跑線上時,我知道,該來的都會來了的......我不大擅長描寫心理活動,想必很多網友都有過同樣的感覺。結果怎樣?跑了個第一。不但重拾了當年的感覺,而且深深明白:成功貴乎堅持。雖然很多網友都明白這點,但是,又有多少人能真正在實際中運用了呢?先輩雖然留下了不少的至理名言,但是,沒有多少能真正體會到個中含義,這不能不說是個遺憾。

是否,

有過不知方向的感覺?

問自己,

“為什麼?”

生活中,

往往決定方向的,

不是自己,

而是衆說紛纭,

不知所措,

其實,

真正的方向,

是自己決定,

不由别人左右。

有感 于1999年

職業軟體開發生涯

工作經曆

1. 大學四年級(貌似)的時候去深圳蛇口工作了幾個月,算是第一份工作吧,做的是醫藥銷售管理系統(GSP)。公司效益不好,同僚們紛紛離開,我是倒數第二個走的,最後公司倒閉了。或許這就是謠言很厲害的說我做過的公司都倒閉的來源之一吧。其實我有一個碼農同僚,他最近做的3家公司都倒閉了。主要用ASP和VB,SQL Server好像是6.5什麼的,還是用的MMC的管理器。在這間公司認識了一個程式媛,工作期間交流多了,關系好起來,她成了我的女朋友。後來中學70周年紀念,帶她回去,感覺很自豪。大家常說:“做軟體開發的,哪裡會有女朋友?”,其實,書中自有黃金屋,書中自有顔如玉。做開發的也可以找到女朋友。不過,後來因為一個經典的原因,分了。

2. 畢業後第一份正規的工作是做辦公自動化(OA)的,應該是中國第一家公司使用ASP.NET+VB.NET+SQL Server做的。當時還是.NET 1.0 Beta,那裡我第一次接觸.NET,學了VB.NET (我的背景是DOS下的GWBASIC、QuickBASIC,一路到Windows下的Visual BASIC)。不過,當時很多事情發生,一直影響到現在,其中一樣就是,我在那裡遇到了我現在的老婆。你看,做軟體開發還真能找到老婆的。 部門經理經常删除我的代碼,我離職了,還冤枉我破壞伺服器,公司克扣了我近兩個月工資,然後我就直接回老家和老婆結婚了。後來這個部門經理被查出倒賣産品源代碼,被炒了。對了,這個源代碼當年在網上流傳很廣泛,相信很多做.NET的都下載下傳過。在這裡掌握了ASP.NET、VB.NET、SQL Server等。

3. 第三份工作是一家給南方航空做新線上售票系統的公司,用的Java,那是我第一次接觸Java,做了好像3個月不到,不喜歡,走了,沒多久,公司劇變,要倒閉,員工們都在周末回公司搶機器來抵工資。

4. 第四份工作是一家做房地産管理系的公司,在這家公司呆了5年,完善.NET和資料庫技術,就是在這個期間寫了個人的千萬下載下傳量軟體。如果不是移民澳洲,可能會提前走。對了,在這裡用到了Silverlight,這個技術已經被淘汰。語言主要用的C#,掌握了Oracle和O/RM等技術。

5. 第五份工作是來澳洲後的第一份,做能源管理的,呆了兩年,老闆是斯裡蘭卡人,公司大部分員工是印度人,部門經理是伊朗人,其它都是印度碼農。在這裡接觸到海量資料(起碼當時來看算吧,單表30億條,每天更新數百萬),數千存儲過程,在這裡,做了大量資料庫優化,性能暴升,我的資料庫技術大增,還重寫了主系統,掌握了ASP.NET MVC、Bootstrap、Knockoutjs等等一票技術。

6. 第六份工作是做Care的,接觸到醫學方面的知識,譬如身體檢查就有近20個的項目,複雜的算法,幾百個問題,過百頁的算法。這裡呆了2年,菲律賓大媽,你還安好?在這裡掌握了Service Bus、angularjs、bower、yeoman等。

7. 第七份工作是做金融/财務貸款/支付的,呆了4個月,老闆是猶太人,比較懂得把錢用到極緻。經常要我加班,有些時候加班到晚上10點多,一些時候甚至星期天淩晨。

這個公司剛上市了,同僚們都成富翁了。。。我還是窮人,悲從中來。。。

8. 第八份工作是做GIS相關的,目前呆了快一年,這裡在微網誌吐槽了幾十回了,不再細說。在這裡掌握了團隊管理/GIS、增強了WPF/資料挖掘/資料倉庫等技術。

好了,說完經曆就說職場吧。一句話:職場黑暗。遇到好多不爽的事情和混帳的人,有人的地方就有漿糊,有利益就有買賣,就有手段,博弈。這麼多年就隻有一個半公司尚算正常能讓我好好地搞研發。

跳槽是加薪的最佳辦法,跳槽是加薪的最佳辦法,跳槽是加薪的最佳辦法。重要的事情要說三遍。

如何成為一名程式員

說明:文章中提及的技術大部分已經過時,正确點來說,應用範圍已經比較小了。是以我并不是介紹新技術,隻是談談程式人生。

從事軟體開發,可以是科班出身,也可以不是。我知道從事軟體開發的,除了計算機專業的(計算機科學/軟體工程等),還有科班是學電子、化學、生物、數學、醫學等等,不一而足。而我,是學英語的。

做開發,首先是個人的能力。個人能力可以包括很多方面,不過,我覺得最重要的兩樣是:學習能力、交流能力。

可能有一些程式員會問怎樣學習好英文,除了在課堂上認真學習英文外,可以盡量多看些英文節目、連續劇、新聞、廣播來練習聽力,多看英文技術書籍、文章提升閱讀能力,多在英文技術論壇、部落格交流提升表達能力。

我偏好高品質的代碼。剛畢業的時候,寫了一篇20多頁的《VB程式設計标準》,想發表在《電腦報》上,可惜沒有給編輯采納,可能是我的語言表達太差了,但我仍然希望能在原來公司裡面推行,可惜能了解的人太少。

這些年來,遇到各種各樣的開發人員,各有各的程式設計風格,水準參差不齊。中國的程式員有個性,他們中的部分人相信能憑一己之力就能把一個系統做好,實際上,單槍匹馬的英雄時代已經過去,開發人員應該是實幹家,不應該發白日夢。他們為什麼會拒絕接受程式設計規範呢?理由很簡單:“我有我的習慣,為什麼要花時間重新學習别人的規範?别人的規範不一定就好。”是的,别人的規範的确不是最好的,但在工作實踐中總結出來的規範能切合實際需求,能讓開發快速進行并完成,最關鍵的是能滿足客戶需求。同時,遵循同一規範,無論在開發交流還是工作移交,都能快速領會。

掌握好開發語言是每個程式員必須做的。但怎樣才算及格呢?很多人說,掌握越多越語言越好,一些則說掌握一種就夠了。我認為都有道理,但我相信在很好地掌握一種語言的基礎上,舉一反三,觸類旁通地學習并能應用其它語言就更好了。實際上,我們不能強求不同的客戶需求使用同一種語言,開發必須為客戶需求服務。現在.NET大行其道,想想在2003年很多論壇上還有大量的文章,主題都是圍繞是否放棄現有掌握的技術,去學習.NET。這種問題類似于一直以來的争論不休的兩種語言之間的優劣,最後還是不了了之的。實際上,任何語言都有其存在的理由,不必去争論什麼,關鍵是自己用得舒服,能滿足客戶需求就好。我在工作中也要根據不同需求用不同的工具。除了語言本身,還的掌握好IDE(開發環境)/工具,工欲善其事,必先利其器。

要做好開發,除了個人/團隊技術過硬之外,還應該多學習同行,前人總有讓我們學習的地方。我的做法是:做開發之前,先客戶需求分析,再下研究一下市面上領先的同類軟體/系統/解決方方案,借鑒他們的優點,注意,是學習優點,不是抄襲。

怎樣成為一名雇員

大部分程式員都得找工作糊口(一小部分可能自己給自己打工,做老闆),這樣就免不了要找工作:首先是寫好一份履歷,然後是過面試關,然後是協同開發,還有跟同僚相處了。

這些年來,我既做過應聘者,也做過面試官。最近我在找新工作,網友調侃:“你不是在去面試的路上,就是在面試中”。

首先,是寫份好履歷。之于履歷,我更強調過硬的個人能力,不過現在僅僅談談履歷。

一份好的履歷很重要,它是你的應聘某份工作的敲門磚。履歷内容因人而異,但宗旨是要誠實。實在太多的人寫自己精通xx了,有更離譜的, 稱自己精通幾種甚至十幾種語言。我相信世界上最偉大的程式員都不這樣說。還有工作和項目經驗,很多人寫得很玄,一看就知道是捏造的,經典的如北大青鳥的學生的履歷,都是套模闆的,水分太大,建議大家老老實實地寫。不過,仍然可以有點技巧的:那就是專業規範化的文字描述。建議多看看各大技術網站的相關文章。

需要強調的一點,那就是證書。現在社會風氣是很強調證書的,各種證書多得我看證書縮寫根本認不出來是什麼。很不好意思的告訴大家,我連初級程式員都不是,因為我從來沒有參加過國内任何認證考試。大家可能覺得很奇怪,為什麼我做軟體開發這好麼久了仍然還不考一個證書;可能大家更加關心的是:我沒有證書怎樣成功應聘職位。我不大注重證書。我覺得證書隻是能力某種程度上的展現,并不是能完全代表你的所有能力。或許也就是這樣,很多程式員考了一大堆的證書。

寫好了履歷,就是投履歷了。除了直接投,還可以“騷擾”獵頭。除此之外,還可以找熟悉的人做内推。當然,如果你名氣大,直接就被雇主騷擾了。我當年沒經驗,把自己當萬能膏藥,同時投了同一個公司應聘多個職位,我以為招聘公司會把我當全才,但實際上他們會認為你什麼都不行,純粹為了混個工作做做。是以,應該有針對性地投心目中感覺最對口、最有可能的那個。

關于職位廣告,部分或真或假或誇張,如果分辨,那是門學問。

關于獵頭,獵頭大多不懂技術,而且部分真的很爛,說得不好聽,這些爛中介就是買賣人口的,譬如一些從來不答複你,一些說:"行啊,我晚點回複你,然後就沒下文了"。

未完待續

接下來還有第二部分,包括:

  • 擴充能力
  • 開源人生
  • 開發品質與性能追求
  • 理想與将來
  • 分類 1.每日一得

    , 6.程式人生

  • 标簽 開發

    , 爆棧

    , 回憶錄

    , 生涯

我的軟體開發生涯 (10年開發經驗總結和爆棧人生) - 靈感之源