經過了將近5年的工作沉淀以后,終于確定了自己的職業發展方向。從現在開始終于可以有的放矢了,不再迷茫了。回想以往,找到這個方向,確實不是一件容易的事情,一路也是迷茫的走過來,隨著知識和工作經驗的積累,慢慢找到了自己的技術發展方向。
高中考大學,由于高考沒有考好,沒有考上自己理想的大學——北大呵:)。不過當時要是真考上了,我也不會選擇這一行了,因為肯定到不了北大計算機相關專業的分數。失落歸失落,但是還是報了另外一所還不錯的理工院校。專業嘛,當時信息工程非常火。實際上呢,當時我根本不知道信息工程是干什么,只是聽著信息二字,總覺得跟計算機相關,但又不是只局限于計算機。其實,當時的我對計算機還是很感興趣的。不過之前一直都是拿著電腦打游戲。要是好好學習的話,說不定也能考上北大的計算機呢。
上了大學以后,才知道所謂的信息工程,無非是新瓶裝老酒。至少我們學校是這樣,我們是電子工程系。總體來說,學的都是偏硬件一些的,電子電路,模電,數電,微波,電磁場等。上大學的時候,還是不知道自己要做什么。課程呢,我就對電路和計算機相關課程感興趣,這些課分數一般都挺高的。其它科目的分數則很一般了。 關于計算機的學習,也僅局限于課程上的東西。——想到這里,感覺中國的大學教育太差勁了,我和同事屢屢談及此點,都是痛心不已,太耽誤人了。整體說來,大學4年,就是混過來的。現在想起來,特別的后悔!那是多么珍貴的4年啊,有著大塊的時間和良好的環境去學習,結果自己沒有珍惜。
大四,我當時一心三用。找工作,考研,考公務員。工作呢,但是拿到了一個輕工業部下屬的一個研究所的offer,公務員從來沒有復習過——從來沒有復習過,直到考試時才知道是什么題型,最后沒想到依然通過了筆試。我報考的是公安部,不過面試沒有通過。但是有個公安部領導推薦我去秦城監獄,結果我沒去。一是因為當時覺得監獄,聽起來不好,二是但是考研也考上了,就沒有選擇去那。現在想來,如果去了的話,就成了體制內的人了哈
。那小日子過得多得啊。
研究生上的還是通信專業。研一依然是迷茫的上課混日子,研二的時候算是一個轉折,開始了自己的技術發展之路。當時我的導師跟大唐的一個領導關系不錯,于是我就跑到大唐實習。當時,一接觸真正的項目,發現自己差得不是一般兩般的遠啊。上學學的那點東西,根本不夠使的。不過呢,大唐的國企色彩太濃重了,工作壓力一點都不大,邊學邊干也能應付了。這算的上我的第一個專業方向,嵌入式開發。不過當時由于基礎太差,并不能完全領會整個產品的精粹。如果是現在的我,在那呆上半年,收獲絕對是現在的好幾倍。不過當時對于嵌入式開發,還是有了一定的認識,于是在我的學習領域上,ARM和嵌入式開發占了一席之地。
大唐的項目當時沒什么可做的了,我就離開了大唐,又找了家小公司實習。這個公司是做一款手機軟件的,但是還以為是嵌入式開發呢。在那做了一段時間,才發現公司的產品真的是好小啊。不過小有小的好處,作為一個初級開發人員,產品的代碼量不大,這樣可以讓我吃透整個產品。而且公司不大,鍛煉的機會就比較多。我當時還未畢業,就已經作為公司的主要人員,去和其他公司搞項目合作,集成去了。而且,當時公司的學習氣氛比較濃,在那的一年里,我的技術有了突飛猛進的發展。我的學習領域又加上了手機軟件開發,涉及Symbian,Windows Mobile等開發平臺。
07年我加入了現在的這家公司。在這里,我得到的鍛煉更多。因為之前的公司產品太小,已經沒有發揮的空間。而現在這家公司,是做Linux平臺的網絡產品的,無論是Linux還是網絡方向,都有近似于無窮無盡的東西去學習。從07年到現在,我幾乎是接觸到一個新的東西,都要去學學。雖然學到了很多新東西,但是因為沒有一個重點,還是感覺有點無處使勁的感覺。但是也有一些進步,總算把自己定位于Linux方向。隨著時間的推移和自己的不斷的思考,技術路線也就越來越清晰。
剛畢業:各種編程語言:C, C++, Java;
實習:C/C++,嵌入式開發
第一份工作:C/C++, 各種手機平臺,MFC
第二份工作:C/C++, Linux,各種腳本語言
?? ? ? ? ? ? ? ?==>C/C++,Linux,腳本語言,網絡協議和配置
?? ? ? ? ? ? ? ?==> Linux的網絡開發(從內核的網絡模塊到QoS和Load Balance應用)
到了今天,在路上我終于想明白了。以后我以后的技術方向就專注于Linux網絡開發,從內核的網絡模塊到QoS和Load Balance的應用。決定要用上半年或者一年的時間,把這一方向的內容徹底研究得比較透徹。
?
?
一個程序員的年終總結:學會取舍
說到年終總結,首先讓我想到了我深惡痛絕的國企和政府部門,那種裝腔作勢,官僚主義的態度。不過看到CU的新年征文,也就這個契機,好好總結一下吧。君子一日三省其身。只有好好的總結過往的經驗和教訓,才能夠成長。
這次的題目姑且叫做“學會取舍”吧。
按照一個固定的套路,要先回顧過去。記得在11年3月份的時候,我發了一篇博文《終于確定了自己的技術發展方向》?當時自畢業以來,一直比較迷茫于自己的發展方向,終于那天在回家的路上,確定自己還是往網絡開發這個方向發展。這樣,這個目標也算我11年的一個計劃吧。
下面看看11年最后我自己到底都干了些什么:
1. 開始閱讀Linux Kernel的TCP/IP部分的源代碼,也寫了50篇左右良莠不齊的筆記吧——只能算得上筆記呵;這個還是有一些收獲的。這樣對于數據包接收——從網卡到socket,和發送——從socket到網卡,大體的流程基本清楚了。
2. Linux的APP開發的一些文章,則是我平常解決的一些bug和幫助同事解決問題時的總結。不過由于現在基本上很少寫真正的app了。所以后面就很少寫這樣的文章。現在對于app的興趣就在于一些API的實現,有時候可能會去看一下Linux的API的實現。
3. 寫了幾篇關于如何編寫安全代碼的博文。現在我對于自己代碼的健壯性還是很有自信的。一般來說,除非是typo,我基本上不會有代碼上的錯誤。也就是說。在代碼風格和C的細節上,兄弟是很有自信的。但是在工作中,在改Bug的時候,可能調了半天,發現是一些同事犯了很低級的錯誤。大部分都是由于代碼風格不好,或者對于C的細節不了解造成的。這時候,真是讓我郁悶到極點。其實一個好的代碼風格和了解C的細節,是一個程序員的必修課。當你還不了解你的工具時,就開始使用它,能不犯錯?
4. 11年我還萌生過換工作的念頭,原因是多方面的。也借了這個契機,決定好好的補一下自己的短板,算法。所以11年對算法也學習了一段時間,并且有了一些收獲,有了自己的體會——學習算法,重要的不是學會那個算法本身,是學會那個算法的思路。
5. 11年末的時候,又再次想到一些大師的經驗。對于一個程序員,最好多學會幾種語言,尤其是有著不同語義的,這樣可以開闊個人的視野。所以我選擇了從未接觸過的面向函數的編程語言。最早是想學習Lisp,但是不喜歡它的語法,后來看中了haskell,目前還在學習中。希望可以把它學好。這樣我對于面向過程,面向對象和面向函數的編程語言就都有了了解。
6. 前面關于說自己對于C的細節的了解,說得有點自負了。今年我讀了一遍C99標準,感覺對于C這樣一個簡潔的語言,就有如此多的細節,說自己了解C的細節,真是太大言不慚了呵。謙虛使人進步,一定要記住這點。
說了半天,一定沒有說到主題,“要學會取舍”。下面開始。
1. 技術方面:作為愛好者,難免會愛好廣泛,這是一定要學會取舍,貪多嚼不爛。盡管我對kernel很感興趣,但是某些時候一定要壓抑自己,過多的去關注暫時用不上的東西,對自己目前的幫助并不是很大。這時還是那句話,要找到自己興趣和工作的契合點。對于我來說,還是kernel的網絡模塊,這部分既滿足了我對于kernel的好奇,也和工作很好的結合起來。
2. 職業發展方面:今年在萌生找工作念頭的時候,只去面了一家企業,就是Nokia。順利拿到offer,當時還真是想去啊。待遇和福利都不錯,而且離家特別的近。可是最后還是放棄了那個offer。一個是因為不舍得當前熟悉的環境,熟悉的技術和熟悉的工作環境,二是因為目前的公司還真的有可能上市。如果IPO成功的話,個人的收益還是不錯的。對于我這個選擇,我舍掉了一個大公司的工作經歷,舍掉了舒適的環境,而看中的是熟悉的環境和方向,以及潛在的個人收益。
11年過去了,對比五年前初出茅廬的我,感覺自己成熟了很多。不僅在技術方面,還有一些人生經驗。對于全新的12年來說,目前定幾個小目標吧:
1. 熟悉haskell,領會函數式編程語言的精髓;
2. 繼續學習Linux的TCP/IP源代碼;
3. 繼續提高自己的算法;
我想起一本書來,名字叫做《coder at work》。忘了是網易的云風,還是劉未鵬了,給這本書起了個中文譯名為《我編程,我快樂》。雖然有些調侃,但是卻顯示了英文名字背后的意思。不過對我來說,這個譯名還是不滿意,我也找不到更合適的翻譯。還是讓我們直接領會英文的含義吧,coder at work。
有的感覺是無法翻譯的。
對于我來講,做個coder,很快樂:)
對于大多數程序員,不要一輩子埋頭搞技術混飯吃,準備好技術創業
我個人不贊成下面人的看法,覺的搞技術完全沒前途, 我身邊就有很多靠技術起步,做老板做老總的。世事無絕對,自己要多注意培養自己各方面的能力,同時技術其實也很重要,因為中國正在大轉變,不能只看眼前,創新有眼光有能力的技術人員也會越來越吃香,如果各方面能力和條件比較成熟,也可以自己干,技術創業會成為將來創業的主流的。
?
別人的看法:
我現在是自己做,但我此前有多年在從事軟件開發工作,當回過頭來想一想自己,覺得特別想對那些初學JAVA/DOT .NET技術的朋友說點心里話,希望你們能從我們的體會中,多少受點啟發(也許我說的不好,你不贊同但看在我真心的份上別扔磚頭啊)。
一、在中國你千萬不要因為學習技術就可以換來穩定的生活和高的薪水待遇,你千萬更不要認為哪些從事市場開發,跑腿的人,沒有前途。
不知道你是不是知道,咱們中國有相當大的一部分軟件公司,他們的軟件開發團隊都小的可憐,甚至只有1-3個人,連一個項目小組都算不上,而這樣的團隊卻要承擔一個軟件公司所有的軟件開發任務,在軟件上線和開發的關鍵階段需要團隊的成員沒日沒夜的加班,還需要為測試出的BUG和不能按時提交的軟件模塊功能而心懷忐忑,有的時候如果你不幸加入現場開發的團隊你則需要背井離鄉告別你的女友,進行封閉開發,你平時除了編碼之外就是吃飯和睡覺(有錢的公司甚至請個保姆為你做飯,以讓你節省出更多的時間來投入到工作中,讓你一直在那種累了就休息,不累就立即工作的狀態). 更可怕的是,會讓你接觸的人際關系非常單一,除了有限的技術人員之外你幾乎見不到做其他行業工作和職位的人,你的朋友圈子小且單一,甚至破壞你原有的愛情(想象一下,你在外地做現場開發2個月以上,卻從沒跟女友見過一面的話,你的女友是不是會對你呲牙裂嘴)。
也許你拿到了所謂的白領的工資,但你卻從此失去享受生活的自由,如果你想做技術人員尤其是開發人員,我想你很快就會理解,你多么想在一個地方長期待一段時間,認識一些朋友,多一些生活時間的愿望。
比之于我們的生活和人際關系及工作,那些從事售前和市場開發的朋友,卻有比我們多的多的工作之外的時間,甚至他們工作的時間有的時候是和生活的時間是可以兼顧的,他們可以通過市場開發,認識各個行業的人士,可以認識各種各樣的朋友,他們比我們坦率說更有發財和發展的機會,只要他們跟我們一樣勤奮。(有一種勤奮的普通人,如果給他換個地方,他馬上會成為一個勤奮且出眾的人。)
二、在學習技術的時候千萬不要認為如果做到技術最強,就可以成為100%受尊重的人。
有一次一個人在面試項目經理的時候說了這么一段話:我只用最聽話的人,按照我的要求做只要是聽話就要,如果不聽話不管他技術再好也不要。隨后這個人得到了試用機會,如果沒意外的話,他一定會是下一個項目經理的繼任者。
朋友們你知道嗎?不管你技術有多強,你也不可能自由的騰出時間象別人那樣研究一下LINUX源碼,甚至寫一個LINUX樣的杰作來表現你的才能。你需要做的就是按照要求寫代碼,寫代碼的含義就是都規定好,你按照規定寫,你很快就會發現你昨天寫的代碼,跟今天寫的代碼有很多類似,等你寫過一段時間的代碼,你將領略:復制,拷貝,粘貼那樣的技術對你來說是何等重要。(如果你沒有做過1年以上的真正意義上的開發不要反駁我)。
如果你幸運的能夠聽到市場人員的談話,或是領導們的談話,你會隱約覺得他們都在把技術人員當作編碼的機器來看,你的價值并沒有你想象的那么重要。而在你所在的團隊內部,你可能正在為一個技術問題的討論再跟同事搞內耗,因為他不服你,你也不服他,你們都認為自己的對,其實你們兩個都對,而爭論的目的就是為了在關鍵場合證明一下自己比對方技術好,比對方強。(在一個項目開發中,沒有人愿意長期聽別人的,總想換個位置領導別人。)
三、你更不要認為,如果我技術夠好,我就自己創業,自己有創業的資本,因為自己是搞技術的。
如果你那樣認為,真的是大錯特錯了,你可以做個調查在非技術人群中,沒有幾個人知道C#與JAVA的,更談不上來欣賞你的技術是好還是不好。一句話,技術僅僅是一個工具,善于運用這個工具為別人干活的人,卻往往不太擅長用這個工具來為自己創業,因為這是兩個概念,訓練的技能也是完全不同的。
創業最開始的時候,你的人際關系,你處理人際關系的能力,你對社會潛規則的認識,還有你明白不明白別人的心,你會不會說讓人喜歡的話,還有你對自己所提供的服務的策劃和推銷等等,也許有一萬,一百萬個值得我們重視的問題,但你會發現技術卻很少有可能包含在這一萬或一百萬之內,如果你創業到了一個快成功的階段,你會這樣告訴自己:我干嗎要親自做技術,我聘一個人不就行了,這時候你才真正會理解技術的作用,和你以前做技術人員的作用。
小結
基于上面的討論,我奉勸那些學習技術的朋友,千萬不要拿科舉考試樣的心態去學習技術,對技術的學習幾近的癡迷,想掌握所有所有的技術,以讓自己成為技術領域的權威和專家,以在必要的時候或是心里不暢快的時候到網上對著菜鳥說自己是前輩。
技術僅僅是一個工具,是你在人生一個階段生存的工具,你可以一輩子喜歡他,但最好不要一輩子靠它生存。
掌握技術的唯一目的就是拿它找工作(如果你不想把技術當作你第二生命的話),就是干活。所以你在學習的時候千萬不要去做那些所謂的技術習題或是研究那些帽泡算法,最大數算法了,什么叫干活?
就是做一個東西讓別人用,別人用了,可以提高他們的工作效率,想象吧,你做1萬道技術習題有什么用?只會讓人覺得酸腐,還是在學習的時候,多培養些自己務實的態度吧,比如研究一下當地市場目前有哪些軟件公司用人,自己離他們的要求到底有多遠,自己具體應該怎么做才可以達到他們的要求。等你分析完這些,你就會發現,找工作成功,技術的貢獻率其實并沒有你原來想象的那么高。
不管你是學習技術為了找工作還是創業,你都要對技術本身有個清醒的 認識,在中國不會出現BILL GATES,因為,中國目前還不是十分的尊重技術人才,還僅僅的停留在把軟件技術人才當作人才機器來用的尷尬境地。(如果你不理解,一種可能是你目前僅僅從事過技術工作,你的朋友圈子里技術類的朋友占了大多數,一種可能是你還沒有工作,但喜歡讀比爾。蓋茨的傳記)。
2011年Android iOS WP回顧及趨勢分析
自1990年微軟推出首款AT Work OS手機操作系統至今,11年間誰也沒有料到移動互聯網發展會是今天的樣子,即便是1996年Plam 推出Polot、1998年 Psion組建塞班,乃至21世紀第2個年頭才出現的RIM OS。
如果要問是什么力量拉動了今日移動互聯網的發展,那么,手機終端本身、操作系統和應用商店當是強勁的三駕馬車。從各核心廠商的移動互聯網布局中可以非常清晰的看到這一點。

▲?圖表 1:各企業移動互聯網布局
操作系統是移動互聯網廠商競爭的戰略高地
終端是連接用戶和業務的載體,在增強用戶體驗、業務承載上發揮著極其關鍵的作用,這也是作為互聯網服務提供商的Google、軟件服務商的微軟以及作為運營商的中國移動爭相推出自有手機終端的原因之一。
應用商店模式是蘋果公司首創的移動互聯網環境下新的商業模式,基于一個平臺聚集眾多由第三方開發商提供的應用服務,為某個或某系列終端提供應用服務下載服務。
相比終端和應用商店來說,操作系統是手機產業鏈的核心。控制了操作系統,就等于控制了手機產業鏈,占據了行業競爭的主動權。這也是中國移動在其他兩大運營商積極尋找明星終端廠商合作時,推出自有操作系統OMS的原因,也是三星轉戰多家操作系統后獨立開發自有操作系統Bada的原因,也是微軟不斷開發新版本操作系統以致重新開發更高版本WP7操作系統的原因。操作系統之爭成為移動互聯網競爭的第三大戰略高地。
?
源碼資料下載:
Android 15本經典教材和應用功能150多個實例源碼