時下有非常多時髦的名詞,嵌入式工程師,3G開發工程師,ANDROID開發工程師等等。
這些名詞我想十有八九是一些培訓機構發明的。不是說培訓機構不好,培訓機構針對市場的要求提出一個名詞,然後有針對性的開相應的課程沒有啥不對。
但是我知道,大家,尤其是想進入軟體開發這張門而尚未進入的新手,很容易被一些花哨的名詞給搞混。
在這裡我給大家說說我個人的看法。
首談嵌入式了:
其實剝掉外面這層華麗的衣服,我們可以看到。所謂的嵌入式其實是從單片機發展過來的。早些年,甚至我現在有一些朋友也在從事著單片機的開發。那他們這幫單片機開發人員基本都是軟硬通吃的。從畫原理圖,LAY板,寫代碼,調試等,可以說是一條龍服務,一個人可以搞定一個產品的原型。(有的甚至連美工和結構都全包了)
但現在所謂的嵌入式,就目前而言,我並未見過哪怕一個能有一條龍功力的人,哪怕就軟硬通吃的人也沒見過。為什麼呢?因為複雜度太高,你要把一部分做好都相當不容易。
所以,你如果相進入所謂的嵌入式這個行業,你要把範圍定的更小,普通來說,就分軟體和硬體羅。軟體又分為如下幾類,在我看來分為幾大陣營:1。LINUX。2。WINCE。3。VXWORK。4。其它各類即時作業系統,例如UCOS,NUCLEUS,ECOS等。
比如說MTK,他是基於NUCLEUS的一個平台,比如ANDROID,他是基於LINUX的一個平台,平台的概念我們等會再討論,先說作業系統這個更底層的“平台”。
就我個人而言,我比較看好LINUX。理由是:開源。免費。在LINUX下的開源軟體經過十年來的積累,已經相當多了。並且這些軟體的品質都不低。就核心本身而言,其穩定性和可靠性是有目共睹的。用腳趾頭想一下吧:GOOGLE和INTEL,NOKIA這些大公司都在向LINUX靠攏,其優勢不言而喻。LINUX就是即時性不夠,有的人說我的OS比LINUX的即時性好,光即時性強有什麼用?我在啟動後寫個大WHILE迴圈即時性更強。反正說LINUX不行的人,肯定是對其瞭解不深入。可能就是裝了用一下,感覺不符合自已的習慣,然後就說不行了。
如果喜歡其它作業系統的朋友可以上網尋找一些相應的介紹,然後再決定是否選擇它。
另外說平台吧。上面說了,ANDROID是基於LINUX的。其相當於在LINUX的基礎上,加上GLIBC,JAVA虛擬機器等、然後對其進行封裝形成的。說到這。就產生了一個層次:你是願意自已搭或者移植平台呢?還是願意用人家搭好了的平台呢?像我們公司就有專門的平台部。我們公司水平最高的人就在這樣一個部門。
好了。有了作業系統,平台等概念以後。我們大概知道我們要做什麼了。
首先是移植、擴充、裁剪作業系統。其次是開發、移植、擴充平台,再就是開發應用了。這幾個層次只是邏輯上的分層,實際開發過程中會重疊的。
這是軟體的三個層次。
這三個層次我也只是略窺門徑而已,只能說略懂,如果你也和我一樣,對這些東西感興趣的話,那麼你就得具備如下基礎知識:
1。C/C++(有的平台用C++的就要求會C++,如果平台不是C++的不會C++也沒關係)
2。一點點作業系統和編譯原理常識。
3。一點點彙編。(這個東西不是非常重要,硬是不會也不太會受影響)
4。一點點演算法和資料結構知識。
如果你都具備的話,那就OK了。就可以深入研究這些東西,直至成為高手。在這個過程中,你會發現你的分析調試解決問題的能力會越來越強,且各條經脈會漸漸相通。在相通的過程中你又會發現你有更多的經脈被阻塞。(哈哈,這就是學習的樂趣和苦惱)
其實學習的脈絡就是:
1。首先找准方向。
2。補充基礎知識。
3。猛搞猛搞。