本來題目想寫為「十八年開發經歷總結」,但是一想我的開發生涯還沒結束,怎麼就總結了呢。 再說個人的一些積累和看法也不一定正確,所以還是改為小結比較妥當,言下之意自己還需要繼續積累進步。 本文主要談幾點個人的體會,這些內容有一部分可能只是我自己遇到的問題,相信還有一些其他程式師也曾遇到或者面對過。 之前看到這些問題也思考過,三言兩語回復過,現在以小結的方式寫出來,算是對自己十八年經歷的一個回顧。
一.如何開始寫程式的
第一次接觸電腦當然是在學校裡,可以說什麼都沒學到,也什麼都沒學會,相反只是增加了對電腦的恐懼。 第一次真正意義上讓我開始學習電腦是在1992年,我所在的部門負責銷售電腦。 由於那時PC(當時叫家用電腦)的作業系統是DOS的,所以為了使用電腦必須學習一下基本的操作命令。 我的第一次學會使用電腦就在那個時候,這為後來學習程式設計打下來了基礎,因為當時不會操作電腦是不可能學習程式設計的。
1994年7月開始在公司的人事部工作了。 當時人事部有一個386的桌上型電腦,那個時候386算是不錯了。 機器裡裝了WPS和Foxbase,這個可以說是標配。 我的第一門程式設計語言就是這個Foxbase。 應該說這個東西還是很容易上手的,再則當時領導不安排什麼具體的工作,所以有了大把的時間學習,結果很快就掌握了。 在完全趕走對電腦恐懼的同時,對編碼產生了濃厚的興趣。 當時我完全是自學的,3個月後已具備開發一個小型管理系統的能力了。 然後是學習C語言,我還特意買了一本書,書名是「C語言程式設計300例」。 編譯器是Turbo C 2.0。 應該說C比Foxbase要難一些,但是我比較幸運,還算是學會了。 作為一個成果是用C語言寫了一些小程式,操作Foxbase的資料庫檔案,實現Foxbase中的部分命令的功能。
這些經歷讓我意識到自己的特長在軟體發展方面,於是開始有萌發轉型為職業程式師的念頭了。
二.職業程式師轉型之路
發現自己的特長是一件好事,因為可以定位自己的職業方向和規劃,但是具體的操作卻不是那麼簡單的,我做了一些思考和評估。 其中涉及兩個問題:第一,轉型是否值得?第二,做職業程式師我的能力是否真的足夠。
對於第一個問題,我老爸的意見是不太支援我轉的。 應該說當時的人都比較相信國營單位的所謂鐵飯碗,安安逸逸過太平日子,少折騰。 而且當時程式師是吃青春的觀念非常濃郁,有的公司甚至以本公司程式師年輕作為炫耀的資本。 所以丟掉手上的鐵飯碗去幹一個相對風險明顯要高的職業,確實是一個很難下的決定。 所以我面對這個問題是猶豫不決的。 對於第二個問題,從我在本單位的表現來看,寫程式是我的特長。 但是與所謂的以寫程式為職業的那些人來說,我是否有優勢就不得而知了。 從各種關係得到的回饋是很不樂觀的。 主要是兩個原因:1.我的專業不是電腦,2.沒有實際開發經驗。
基於上述的情況,我做了一些準備工作,首先是我給自己出了一道題目,那就是開發一個病毒程式。 如果我可以獨立開發出一個符合當時公安部規定的病毒程式概念的程式,那麼我就下決定轉。 選這個題目是就很有講究的。 首先這個方向我很感興趣,其次這個問題足夠的難。 但是這個題目又不是難的完全脫離實際。 因為我已經學了很長一段時間的彙編,平時對病毒資料注意搜集,所以對實現病毒程式的每一個技術細節我是清楚的,只是沒有實際寫出代碼而已。 在此後的4個月的時間裡,反反復複經歷了好幾次噩夢一般的起伏,最終還是成功實現了。 整個病毒代碼大概1.4K,應該不算小了。 那個病毒程式發作的症狀是讓電腦的蜂鳴器發一次聲,感染的是當時一個非常著名的工具PC Tools。 當運行PC Tools時,聽到的那Beep聲,可能是我生命中聽到的最美麗的單一的聲音了。
這個病毒的成功研發完成,讓真正看到了自己的專長,於是下決心轉行。 針對學歷和經驗的問題,我當時是計畫用職稱來彌補。 所以報名去考了程式師資格與水準考試,這個考試在2000年改了,現在已經不叫這個名稱了。 那是1996年的事情,結果第一次考試沒有通過,那是一個非常大的打擊。 考試的經歷讓我意識到自己缺了一門課程,就是資料結構,從這件事情我發現有專業系統學習的和沒有專業系統學習的差距是明顯的。 所以一方面自學資料結構,另一方面參加了一個專升本的成人高考,專業就是電腦。 此後的幾年基本上就是在積累了,一方面程式還在自己找課題寫,另一方面在學習電腦本科段的課程。 三年以後我以本科學歷,高程證書,在2000年7月開始北漂,尋找我的第一份程式師工作,那年我已經30歲了。
希望我的轉型之路可以給有同樣困惑的朋友一點借鑒。 基本上我轉型的過程還是比較慎重的,屬於穩紮穩打。 其實這個過程還有很多的細節是挺考驗人的,限於篇幅就不寫出來了。 以後有機會寫總結的時候再來寫吧。
三.第一份程式師工作
2000年7月到了北京,然後在比較困難的情況下用互聯網應聘了一個公司。 我非常幸運,由於該公司正好有人離職,急著需要人來補上,所以我得到了那個職位。 這個職位的考驗在於需要維護一個串口通信程式,這類程式我從來沒有接觸過,並且所有的資料都是英文的,對我來說這個挑戰不小。 征服這個苦難的方法是兩個:1.硬著頭皮讀代碼,讀懂它;2.硬著頭皮讀英文文檔,讀懂它。 因為既然出來了,那就沒有退路了,只有拼了。 讀代碼的經歷讓我學到很多東西,基本上以後這類通信程式我可以寫的比較到位了。 所以這裡也建議各位同行,付出一點努力學點東西總是有益處的。
適應了這個職位後基本上就順手了,而且還主動配合部門經理説明其他的同事完成其他專案。 此後,我就和相當一部分的程式師那樣,不斷的在跳槽,在同一個公司都沒有能簽到第二份合同。 我就像一個沙粒一樣在茫茫的世界中飄蕩。
四.關於跳槽
在北京打工的幾年發現,要想在一個公司幹長是比較困難的。 即便是自己主觀上有這樣的想法,但是實際發生的事情卻總會導致跳槽的結果。 可能雇主和雇員之間的雇傭關係比較鬆散,同時雇員有較大的擇業自由也是一個原因吧。
首先想說的是,不要只是為了工資跳槽。 還有他若干因素的重要性並不比工資低。 比如:
1.工作是否穩定
對於大部分人來說,能力是差不多的,穩定的工作可以避免頻繁的跳槽,而導致去和比自己強的人競爭職位。 我個人的觀點是,今後在中國會出現越來越多的所謂大齡程式師。 其原因是70後和80後這一輩的程式師的年齡開始逼近所謂的大齡了。 在上世紀90年代非常流行的觀點是,程式師這個職業是吃青春飯的。 這裡面有一個誤區,那就是當時從事這個職業的確實都是年輕人,因為這個行業剛開始興起,沒有大量的老程式師。 就業市場缺乏比較和選擇,所以事實上造成了這個情況。 但是當市場出現大量的高齡程式師時,用人單位就會比較選擇了。 以近幾年看到的情況來說,40歲的程式師找工作也有很快的例子。 所以,一個穩定的工作越來越會成為一個實際的目標。
其次,我個人的理解是,所謂打工成功,不是在於你的工資有多高,而是在於你在一個公司能幹多久。 因為絕大部分的軟體公司都是合資,獨資或者民營的,隨著工作時間的增加,雇員和公司以及雇主會有越來深的情感,這在民營企業中尤為重要。 這種情感的積累是個人在公司得到好發展和高工資的最好的基礎。 所以如果能在一個公司幹長的話,就儘量不要跳槽。
2.公司領導對自己是否賞識和器重
一個有緣分的或者好的上司是一筆財富,如果自己能遇到,那就請珍惜。
3.從事的具體工作內容自己是否喜歡
開發工作包含的具體內容是非常多的,在一個職位上是否能夠得到自己喜歡的工作內容,不是一件特別容易的事情。 比如有的開發者,實際從事的是修改別人代碼的工作,這種讀別人的代碼再修改的工作,相信很多人都是不願意幹的。 如果公司提供的工作,允許你按照自己想法設計並寫代碼,這樣的工作體驗就大不一樣了。 所以如果你當前的工作內容正是自己的喜歡的,那麼就不要輕易跳槽了。
4.與同事的關係
與同事的關係在很大程度上決定了工作環境的好壞。 如果自己覺得和同事的關係不錯,合得來,相處的也很愉快,那麼跳槽的時候就考慮一下,在新公司是否也能得到。 我遇到的真實案例,就有人因為同事關係融洽,而不願以跳槽的。 另外,我也相信,一個公司的員工之間的關係都很融洽,那麼這個公司也應該是不會太差的。
5.其他
比如跳槽的機會成本,上班的距離等等。
五.創業
一直以來,看到不少打算或者已經創業,這裡談談我的看法。 我覺得創業不是一件今天想幹明天就能行動的事情。 創業需要等待機會,你需要一直準備著,等到機會來的時候就可以了。 不要等到自己感覺打工不行了再開始創業,這個基本上是晚了,或者成功的可能性也不高了。 就我自己來說,我真正開始創業是2009年開始的。 而產品的開發從2006年就開始了,之後一直斷斷續續的在持續著。 這期間解決了諸如核心技術問題,產品的定位,發展方向,市場調研等問題。 同時,公司的註冊,資金來源,辦公地點,設備配置,人員招募,公司管理事務等等,這些問題也是在這一期間逐步解決的。 於是在2009年回到北京,全職開發產品,正式開始創業。 所以我的體會是,以非常淡定的心態,長期積累和準備是可以開始創業的基礎。 切不可認為自己簡單搞一個東西賣錢,就可以創業了,這是不切實際的。 當今社會總體上是公平的,沒有什麼核心競爭力或者核心技術就想賺錢基本上是不現實的。
六.學習
記得我還沒有入行的時候,在電視中就聽到譚浩強老先生說過,電腦這行發展快,需要不斷的學習。 如果說現在要選最重要的一句話的話,那麼譚浩強老先生說的這句話對我來說,至少可以排在前三名。 對於程式師來說學習是終身的事情,當然這個學習是廣義的。
很多人的看法是,隨著年齡的增長,個人的學習能力在退步。 人在80歲時大腦只相當於20歲時的一半大小,所以這個說法當然不錯。 當初我也是這麼想的,所以一度花力氣準備考系統分析員資格,打算專職做設計,不用寫代碼了。 但是隨著自己年齡的增加,我發現對於還在職場的大齡或者高齡程式師來說卻不是這樣的,至少對我來說是如此。 這裡面一個關鍵問題是,大齡或者高齡程式師的經驗發揮了極為重要的作用。 對於一個學生往往是空白的被動接受知識,但是對於一個大齡或者高齡程式師來說,可以帶著經驗來學習。 所以學習的速度不但沒有減緩,反而是加速的,學習知識的速度會越來越快。 在知識的掌握和在編碼中的應用程度這兩點上,有經驗的程式師的優勢更為突出。 這是年輕人無法比擬的。
所以我覺得不要對新的技術和知識有抵觸或者畏懼的心理,嘗試去接觸,瞭解並使用其實不是很難。 技術雖然發展很快,但是畢竟也是逐步發展的,在每一步中更新的內容並不多。 所以,每次都跟上,不要掉隊,維持終身學習的狀態也不是一件難事。