(四)大學的時候
接上文。在大學的時候有各種各樣的社團,出于對做網站的喜歡,當時加入了一個網絡社團,想學學做網站的東西,當時對社團裡面會動态語言做asp網站的人欽佩的不得了,于是回家買了一本asp的書:

我真正的啟蒙書,當時我室友也是會一點html和靜态網站的,他看了我學asp就說你不要嘗試了,這個很難學的學不會的。後來我還是沒有放棄,堅持照着書上的例子做,大概幾個月的時間我發現居然會用asp做一些小系統了,由于和網絡學會一個學長關系比較好,于是他拉我和其他幾個學長一起“創業”接一些外包的小網站來做,當時我們這個小團體有美工而我就是程式員,用asp或php技術來做一些網站,比如什麼旅遊網站啊,什麼小的購物網站。後來我自己也做了一個自己的個人網站,叫《随緣居》域名也是suiyuanju.com,現在早就不在了,然後寫了一個系列文章叫《十天學會asp》。我覺得自己學習asp的經曆是比較痛苦的(沒有人教),後來學會了之後發現asp其實也就是幾天就可以學會的東西,特别最開始的開發環境搭建自己摸索比較痛苦。雖然現在回頭看來比較小兒科,但是這個系列文章當時好像在網絡上火了一把,有人說好,也有人罵,說是如果所有人都像你這麼搞的話其它程式員都要失業了,當然也有人說浮躁,怎麼隻說怎麼做不說原理,說實話在這個時候原理我自己都不清楚。後來我又寫了什麼《十天學會php》《十天學會asp.net》(
http://blog.csdn.net/byebye8742)(後來發現有網友把我的文章打包成了電子書,表示感謝)的文章,現在看看是膚淺的一塌糊塗,當時我覺得這些都差不多,無非就是幾大重要對象,知道怎麼通路資料庫,知道怎麼從表單擷取值,知道怎麼把内容輸出到頁面就掌握了動态網站的開發,沒有任何oo概念的。
2003-2004年的時候sql注入好像比較火,當時在自己的網站寫了這麼多文章也釋出了一個論壇(開源的随緣論壇)程式,後來自己的論壇被别人sql注入了,那哥們說就你這個技術還開源論壇。後來我研究了一下sql注入,發現我的論壇程式在get的地方考慮到了類型轉換,但是post的地方忽略了,我意識到一個很大的系統隻有有一個地方有注入漏洞,整個系統都可以攻破(如果一個資料源的話)。回去之後我和寝室的某geek讨論了一下sql注入,沒想到幾天後這哥們居然告訴我我們大學的某個系統居然有sql注入,再經過幾天的研究後我發現,除了這個系統,甚至還有教務處等系統等也有注入,犯的錯誤和我一樣,post的地方可以注入,特别是那種次要子產品的post地方(比如新聞子產品的搜尋),導緻整個資料庫都暴露了出來,通過工具可以輕易了解整個表結構以及輸出整個表的資料,甚至可以下載下傳到表。經過研究之後,學校的大部分系統都可以順利注入,得到需要的資料,當然還好當時沒有用這些資料去做一些錯事,也沒有去改資料(要改分數甚至都很容易),否則可能就被開除了。被發現之後将功補過,幫學校做一些系統(比如學校的官網),在快畢業的時候代表大學參加了上海市第一屆大學生網站設計大賽。3個小時的時間按照給出的命題做一個網站,去了之後才知道自己太誠實了,别人都是帶u盤進去直接整合論壇新聞系統的,3個小時做出來的網站有論壇有新聞有聊天室?我和我那geek哥們做出來的網站隻有一個新聞系統,在答辯的時候明顯處于弱勢。還好這個比賽評分有公開投票和評委投票兩個部分,于是我就想了要麼sql注入再來一次?公開投票是一個ip隻能投一次的,我發現組委會的這個php系統也是有注入口的,于是通過注入上傳了一個木馬,可以改伺服器上的任意檔案,自己做了一個php上去刷票,刷票後我們的作品當然排名第一,沒過幾天發現另外一個學校的作品居然遙遙領先了!後來到背景一看原來那學校也注入了,我們兩個“黑客”在背景碰面了,最後的結果就是組委會發現網站被黑取消了網絡投票的程式。。。我們通過評委投票隻拿到了第三的名次,不過獎品還算不錯,一台聯想P4的電腦。
在學校的後兩年讀書倒不多,外面做了不少網站,賺了一點學費,黑了學校不少系統,最後也拿了一個小獎。
(五)第一個階段
雖然之前有這些經曆,畢業後找工作要想找到大公司的工作也不是特别容易,别人重記住,而我這些都是應用層的小打小鬧。第一家公司用的是asp.net的技術,特别感謝師傅領進門,讓我接觸到了很多架構上的東西,剛畢業的時候總是學習最快的時候,那個時候開始喜歡上csdn論壇(
http://www.cnblogs.com/lovecherry/gallery/21836.html),想的是如果自己能在csdn做一個版主是多麼有面子的事情啊。第一年的時候雖然自己知道的也不是很多,在csdn努力回答問題,慢慢從三角(褲衩?)混到了星星(猩猩),通過csdn回答問題自己學習了很多,提高了很多,工作第二年的時候也就是2006的時候嘗試申請微軟MVP居然成功了,成為了一名ASP.NET的MVP,說來也慚愧現在看起來那個時候的技術還很差呢。在csdn混了一段時間之後有了4星,也申請成了asp.net區的版主(當時csdn叫lovecherry)。當時在csdn記得有幾個像神一樣的人物,一個是思歸,一個是孟子e章,那些高手搶分都特别厲害,基本一個回答一個準,當時也就以他們為目标。在csdn一段時間之後,發現csdn的問題偏向于入門,于是去的時間慢慢變少了,在部落格園注冊了lovecherry的帳号,
http://www.cnblogs.com/lovecherry,一開始大概寫的文章都比較實用吧,看的人挺多的,是以覺得分享是一件快樂的事情,可以和大家一起讨論,也可以幫助大家,慢慢喜歡上了寫部落格。總之,不管是泡論壇還是寫部落格,在解決了别人的問題别人表示感謝之後會覺得很滿足,這也是一個非常巨大的動力。我技術發展的第一個階段就是靠csdn以及寫一些部落格開始的,一開始論壇上可能20%的問題是自己可以解決的,後來發現80%的問題自己都可以解決或能找到解決方法之後,感到自己對搜尋引擎使用的能力有了巨大的提高,寫部落格可以提升自己的基礎,因為自己不掌握90%以上是很難寫出部落格的。通過csdn我獲得了微軟MVP,讓我對社群貢獻有了更大的責任感。
(六)第二個階段
到了第二家公司的時候,由于是MVP的關系吧,出版社聯系到我想讓我寫一本有關ASP.NET入門方面的書籍,在經過了一些思想鬥争和策劃之後決定花半年時間來寫,于是後來就寫了這麼一本《ASP.NET第一步》。由于是兼職寫的,是以感覺寫書的時候太累了,那半年基本除了上班都在寫書。而且寫書要求自己懂100%,那是比部落格更高的要求,而且要有連續性條理性,還不能出現重大的錯誤。可以說寫書是對自己技術的第二個階段的重大提高。在這裡想說兩點,一當時為什麼想寫一本書是因為覺得自己的自學比較苦,技術上有很多東西是一點就透的東西,我希望讓更多人通過我的書可以快步入門,很多東西自己琢磨可能需要幾個月,但是如果看一本思路清晰的書有人手把手的話話可能隻需要幾周就可以入門,第二,由于時間關心和精力關系當然也由于水準的關系這本書并不是很滿意的,寫好之後編輯也說錯别字實在是太多,有很多地方還虎頭蛇尾,這裡要和讀者說對不起了。在此時此刻現在看來,當時寫的書還是比較膚淺的,可惜現在沒時間了,否則真的想再寫一本書,我覺得現在可以分享的東西比幾年前多的多。在寫書之後,還和出版社合作參與過幾本書的翻譯工作,如果說寫書是練技術的話,翻譯書練的就是英語的閱讀能力,我記得在剛翻譯第一本書的時候是需要查字典的,一頁紙的翻譯大概在2-3小時左右,也就每走一步都很困難。到了第一本書翻譯完成之後發現自己的翻譯速度提高了好幾倍,而且不用查字典了,當然後來再翻譯了幾本書之後計算機英語書籍的閱讀速度就和中文的閱讀速度差不多了,對英語資料的閱讀從反感到了喜歡。國内中文的資料往往會慢國外英文的資料1-2年,這是因為書籍的翻譯和發行需要這麼一個過程,而且國内社群對技術的讨論沒有老外這麼多,是以我個人是很喜歡用英語關鍵字來搜尋相關資料,也喜歡看英語的一些文檔部落格和書籍,我會推薦同僚安裝英語作業系統和各種架構,因為這樣在遇到問題的時候系統給出英語的提示我們才可以直接搜到國外的資料,否則有的時候甚至需要把中文的異常資訊再翻譯成英語去搜尋。在這個階段的時候感覺自己的技術怎麼說呢,在.NET這個領域基本可以解決大部分問題,但是設計上有欠缺,在一開始幾年比較難了解oo的一些東西,從.NET社群來看也不像JAVA這塊這麼“先進”,有一點井底之蛙的感覺。在學習了設計模式之後,可以發現自己一下子可以了解抽象層和實作層這種繼承實作的設計上分層的意義了,思想可以從純過程化到使用OO語言到真正采用OO開發的轉變了,有很多同僚一直在說可以看懂OO的代碼,但是很難自己寫出這樣的代碼,我覺得這必定是需要一個過程的,通過設計模式的學習和閱讀别人寫的代碼可以加速這個過程,但肯定需要一個過程。隻有在重構中抽象,通過無數代碼的改良過程才能體會出其意義。
(七)第三個階段
在第三家公司的時候,我還是專注于.NET,但是這個時候開始看許多設計方面的書籍,也對各種經典設計模式比較熟悉,在OO上進行一定的實踐。同時還在繼續翻譯一些書籍,對微軟技術進行進一步拓展,緊跟.NET的新技術。并且,開始去了解和實踐一些IOC、AOP、ORM,以及繼續自己多年在SOA方面的實踐。當然,在這家公司雖然在技術的廣度上沒有發展,但是另一個好處就是英語得到了進一步的提高,如果說以前是解決了隻是閱讀這一關的話,在一個純英語環境下工作可以解決寫和聽說的關,英語的學習對于外國人來說從簡單到難個人認為是讀寫聽說,最難的也是實踐最少的就是說。碰巧的是工作中合作的産品經理是老外,是以聽說上有點長進,至少英語敢說,不怕丢臉就成功了一半了。
(八)第四個階段
在第四家公司接觸到了.NET之外的世界,覺得自己從井底爬了上來,沒想到開源的世界有這麼多東西,以前真是井底之蛙了,也注冊了一個新的帳号就是現在這個
http://www.cnblogs.com/lovecindywang。在接觸了.NET之後,又接觸了Java、Linux、Python、Ruby,然後又接觸到了比較火熱的移動開發iOS和Android。發現很多東西其實是非常相通的,比如如果說ASP.NET MVC很熟的話再去接觸Zend、Struts2、Rails沒有任何難度,ObjectiveC中也有C#類似接口、委托、查詢表達式等等一些概念。。。我覺得人其實是有一個舒适區的,比如一直在.NET這塊就是一個舒适區,如果可以突破就會發現其實其他東西學習起來沒什麼困難的,因為技術上是觸類旁通的,特别是了解了一些諸如編譯、記憶體、虛拟機、線程等基礎的東西之後,這些東西到哪個語言都是差不多的,唯一要學習的隻是每一個語言文法層次的東西和API層次的東西。因為,我現在在學習一門新語言的時候,往往隻會先花1-2天時間看語言特性,然後花1-2天的時間過一遍API,然後就是重點要看語言背後VM或說平台層次之類的東西,因為這才是這個技術最重要的部分,比如對于web語言來說,其記憶體模型,線程模型以及編譯方式就很重要,這些基本的東西不了解很難把握住語言。在這個階段的時候由于從一個架構的使用者到了一個架構的設計者和開發者,閱讀了很多開源的代碼,也會考慮參與一些開源的東西,此事我發現,如果說寫部落格是和國内開發人員一起讨論技術的話,參與開源項目那麼就和國際接軌了,因為全世界的人都可以看到你的代碼,當然要參與開源項目英語也是一個必要的鋪墊。
總結一下吧,我是通過下面的方法提高自己的技術的,在社群回答技術問題、在部落格發表技術文章、寫書翻譯書、閱讀開源代碼參與開源項目,我一直覺得分享是一種很好的提高技術的機會。不要怕分享出去了别人會搶你的技術,永遠不會,這個世界上山外有山,高人多的是,你分享出去的東西可以讓人受益,同樣也會有很多高人來給你的東西提意見,絕對不會因為分享自己丢了什麼,往往是通過分享可以學到更多的東西。另外,從我的經曆來看突破自己舒适區是一個很重要的事情,我以前面試過不少人工作了幾年連最基本的一些原理都不知道,他們知道怎麼基于别人搭好的SSH架構來做東西,但是甚至不明白什麼是IOC以及IOC對于解耦上的意義。遇到過很多人總是抱怨工作環境學不到東西,我覺得是這樣的,學東西要靠自己,工作環境隻能說是有一個加成,比如說是有一個更好的平台來學習,而不能期望别人來教你什麼。有的時候是先有雞還是先有蛋的問題,自己的水準還不夠好,往往就進不了大公司,自己水準夠好了進了大公司往往公司又不能讓自己學到什麼,其實想想也對,别人給你工資是要你創造價值的而不是說要來教你什麼,是以在一個環境學東西是靠自己的。
最近兩天在家整理了一下書櫥,發現有很多書找不到了,也發現居然有一些書買重了(書重了,說明其确實是一本好書,在自己不同的階段都會意識到需要再讀,其中重複很多本的是自己翻譯的,出版社送的樣書,一般來說園子裡的朋友寫的書我都會買來看一下,一個是支援第二是知道書不會太差)。
第一層都是一些.NET書,.NET的書買的真不少啊,第二層左邊是其他的一些.NET書,中間是資料庫相關的書,右邊是C/C++相關書。
第三層是基礎類的、設計類的以及重構和方法學類的書籍,第四層是Java、Linux等開源技術的書籍,第五層左邊是管理類的書籍,中間是前端開發的一些書籍,右邊是移動開發的書籍。
随着自己對技術的了解很多書從看不懂到了看得懂,也越來越發現基礎的重要。對模式、重構需要有時間的積累,對任何一門語言來說先學好其特性再學其運作時的一些東西很重要,不能說會了ifelse和while就認為是會了一門語言。而且年紀大了之後,發現技術其實是成功的其中一個因素,也不是百分之一百重要的,正因為如此對待技術沒有什麼可以張揚的,人會越來越低調。我一直認為,我比你多懂一點隻是自己多走了幾步,沒有什麼可以炫耀的,不管到哪裡教别人分享都是一件很快樂的事情,山外有山低調總是沒錯的。而且,對技術的心态也從玩技術到了用技術,技術要能用好才能發揮其價值,如果一味使用高端的不成熟的技術,雖然說很先進但是很可能造成項目的失敗,把最合适的技術用在最合适的地方才是成功。
此文送給我之前的同僚,希望你們各自在自己的崗位上做出好成績,和公司共同成長,也送給我自己,希望我之後的發展可以順利。
作者:
lovecindywang本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。