標籤:
任何一種移動開發生態系統其技術人員都是呈現金字塔式分布的。我藉此也說說Developer和Programmer的區別:
Programmer是真正意義上的程式員,寫程式的。靈魂級
Developer是碼農,搬磚的,砌代碼,體力活。肉體級
做Developer的感覺就彷彿行屍走肉,被工作綁架,被代碼綁架,而不是駕馭代碼。如果每天,你感覺自己彷彿就是一坨肉,每天把自己運到公司, 靈魂出竅式,條件反射式地CODING,然後下班又運回家,回到家你才真正解脫,真正找到自我。富士康的小弟小妹們也有同樣感覺。那恭喜你,你就是一名 “Developer”。應該說,廣義程式員範圍內,99%都是Developer,只有1%才能稱之為真正意義上的狹義的Programmer。軟體行 業也越來越變成,不需要每個人都具備創造力,而只需要大量軟體藍領的行業。而Programmer也正是讓軟體行業保持持續創造力的靈魂力量。
其實,真正讓軟體行業不斷往前發展,進步的應該是那些或許根本不會編程的電腦科學家,這個暫時不在這篇文章探討的範疇。
未來軟體發展的趨勢,就是“讓Programmer駕馭Developer”
普遍意義上現在中國軟體行業的工程師分為以下幾種
1)地板級,NULL層級
同事驅動型,這種純粹是“鳥籠型”公司用來湊人頭的,“坐台型選手”。
2)菜鳥級
Google驅動型,類庫王子,API王子,浮躁型選手,一般沒有網路就無法工作,極度容易陷入比較模式,喜歡在論壇和QQ聊天群裡面裝自己的B扯別個的蛋,又極度敏感,工作中擅長CPM模式(copy+paste+modify)。忽悠型技術人才,運氣好的時候,能混到一份不錯的工作。地板級和菜鳥級形成了中國程式員的主流人群,其他層級的在中國都可以稱之為“非主流程式員”。
3)大哥級
官方文檔驅動型,開始有獨立思考抽象問題的習慣,感慨虛度了大學時光,開始喜歡寫部落格,有一定的歸納概括能力,能獨立寫程式,身邊有一定數量的技術小弟。英語方面已經能初步有能力實現無障礙閱讀。
4)大俠級
理論驅動型,開始對理論書籍有獨特的鐘愛,什麼都喜歡上升到理論高度。能無障礙閱讀大型開源項目的原始碼,並理解其設計理念。
5)大牛級
論文驅動型,喜歡閱讀論文,並隨時關注前沿動態,能很容易地開發一些大型項目原型。
6)大師級
直接寫出對別人有實際意義的論文,在大陸屬“稀有瀕危物種”。
Android系統也是一樣,在龐大的Android開發人員群體中,我認為可以由低到高分為以下四個層次:
1)應用程式層開發
使用java語言,基於android的架構和類庫,進行應用程式層程式的開發。這類開發一般依賴於短期記憶,也就是我們所說的類庫王子、API王子。這類人員,只要會UI布局,熟悉常用的widget,寫幾個訊息回呼函數,鼓搗一下網路類,簡單的資料庫操作,會讀寫儲存點配置資訊,調用一下播放器,發一下短訊息。再用一哈比如Gallery這樣外行看起來表面上比較炫的類。
這類開發人員一般自我感覺良好,比較自大,認為android開發也不過如此。這類技術門檻很低,這類開發人員中的真正的熟手和高手,是充分熟悉官方文檔的,已經過了什麼都去Google的階段,達到了查什麼都直接去查
http://developer.android.com/reference/packages.html 的地步。
而且在大腦中已經形成了一個官方文檔的索引,查什麼都能達到時間複雜度為常數的地步。充分利用好官方文檔,全部類庫在大腦中有比較有條路的記憶,告別了雜亂無章的短期記憶。成為了一個進階的“類庫王子”。
雖然依然知其然不知其所以然,但是已經從“碼農”升級為一個“進階碼農”。所有的架構和進階語言技術,其實都是為了實現軟體的工程化,為廣大藍領工人準備的。這些工程技術,降低了軟體開發的難度,使一些比較難的,抽象的晦澀的進階技術和概念完全對應用程式層開發人員透明,但是這是以犧牲一定的軟體效率為代價的。
不過還好,軟體開發不是競技比賽,不是以難度值為判斷標準的,實用、經濟、快速適應市場才是最重要的,同時飛速的硬體和底層基礎性軟體系統的研究進展,和自始至終的軟體分層的思想,讓一切阻擋軟體工程化的障礙都不再存在。
這部分人中的大部分人,一般比較注重經濟利益,有一定的經濟壓力。尚未把編程作為自己的一種愛好和自我實現的途徑。多半感興趣的是怎麼找到一份好工作,怎麼得到一份好薪水。但是他們忽視了,從長遠來看,中國的軟體職場,最終的發展方向肯定不是“五分運氣,三分做人,兩分技術”。對於一個技術人員來說,技術才是獲得競爭優勢的唯一途徑。在技術上沒有競爭優勢,你就失去了一個技術人員的安身立命之本。
他們也推崇所謂的“實用主義”,強調“做出好產品才是王道”,但是真正的好產品,都離不開一個好的技術平台。另外不對自己實用的技術平台,有比較深入的理解,是不可能做出真正的好產品的。
2)中介層開發
中介層是為應用程式層提供 “Infrastructure” 基礎設施。 其需要更加深厚的技術功底。不過我覺得,從應用程式層開發達到一定技術水平後,轉到中介層或者稱之為“架構層”開發的人,比一開始就坐架構層開發的人,更容易深入。做過應用程式層開發的人,更有所謂的“切膚之疼”,從而更能理解一些策略和為什麼的原理性的東西。使用C/C++語言,基於NDK JNI方式的開發。需要對Android的整體架構機制和Android系統codebase非常熟悉,一般都會自己自己下載Android的系統原始碼,自己編譯IMAGE,熟悉Android系統的Custom Building System。能修改和擴充Android的架構和服務。移植和定製nativelibray 和架構 ,如opencore、opengl、webkit定製一套系統的UI,製作點ROM也就是我們國內所謂的自主研發的手機作業系統。
這類開發人員一般屬於稍微資深一點的,一般都有強烈的技術饑餓感,覺得自己懂的很少,不停的去提高充實自己。
3)作業系統層級的開發,系統定製
熟悉Linux驅動開發,Linux核心結構;針對特定硬體的移植。這類開發的技術含量其實和中介層開發差不太多,從某種意義上還不如。其實,驅動開發更主要的要求需要一定的硬體知識。這類開發人員一般是各大手機廠家的開發人員,由於接觸的面比較窄,技術饑餓感不如中介層開發人員。
第二,第三層的開發人員通常在國內的廠家任職,比如魅族、小米、HTC。只有這個樣的廠家經過一定的技術沉澱,才會向最高層進軍,中國軟體行業才會做出真正意義上的自主的平台。
4)找出Android的不足,協助Google持續改進Android
這種人是真正意義上的android程式員,他們會有選擇的去閱讀Android架構原始碼,會認真的去閱讀dalvik的原始碼。自身知識結構也比較成熟,知識面比較廣。會很多上面三類人都不具有的調試和跟蹤技巧。對一些作業系統和平台設計的思想和策略,了如指掌。在問題域和技術域之間左右逢源。
這些人,多半也精通其他移動平台,比如Symbian、Meego、IOS、WP甚至Windows NT, Linux edition for Server等案頭或者伺服器操作系。
轉自:http://blog.csdn.net/theorytree/article/details/6649825
沙翁向昨天要經驗; 向今天要結果; 向明天要動力http://www.cnblogs.com/shaweng/p/3835325.html
Android開發的技術層次