我所理解的工程師簡單描述是指“能根據實際問題選擇適當的方法、適當的工具較好的達到既定的目標”這樣一類人,下面是我自己歸類的一些認識工程和解決問題的一些思路,背景是嵌入式+linux類問題的解決。
1.認識對象
這一步的全稱應該叫認識對象、考慮需求、確立標準,我剛開始決定學習嵌入式linux的原因是為了找一份較好的工作,在linux大環境下的服務器、ARM驅動or內核開發薪資待遇都是不錯的,而且有較好的上升空間,同時不想軟件那樣無休止的加班學習,但是后來一根筋扎進去學了一陣子后發現開始迷茫了,因為平時做項目的話我有一個分析對象,我還有用戶,我可以較好的建立工程并構思一些IDEA達到用戶需求,但是現在呢,我的用戶需求變成了找份好工作,對象是ARM+LINUX學習,于是陷入了一個學習無底洞,因為目的不夠清晰,同時變化較大,就比如說驅動開發,不同行業背景的要求不同、人才偏向不同導致招聘要求相當多,我從來沒見過這么麻煩的用戶,于是在我崩潰之前我決定好好思考為什么會產生這樣的一個bad loop。在整個過程中我的“用戶”不成熟,同時具有很強的功利性,同時我確定“用戶”的時候也不夠真誠,起碼脫離了我自己所認可的工程師的“品行”,經過一系列的自問自答后我做了如下的一些確定:
我希望的是成為一名工程師
我希望在某一類專業中具有較好的專業素養
在以上基礎下在考慮工作問題
因此,我的對象變成了做一個ARM(及類ARM)+LINUX(及類LINUX)方向的驅動開發工程師,這就是我所要解決的問題,也是我所面對的對象。
2.建立框架
全名是根據需求建立框架,要達到前面的標準,首先我需要選擇一款ARM,并以此種結構作為了解以后相似結構的基準,針對LINUX也是一樣的,于ARM來說,以后工作可能會遇到ARM的其他系列,也或者有DSP等等,系統方面可能還會遇到一些針對特定用戶的類LINUX系統,又或者我們接觸最多的Andriod,既然都是一脈相承,那核心不變也就是一些小的規則、一些處理問題的約定發生變化,相對來說并不會很難,因此以ARM+LINUX的某個內核作為基礎,以此來學習這個行業、掌握一種處理問題的方法是可行的。
如果把ARM+LINUX確定了,那么就需要根據這個對象來建立我的框架,我們可以確定一條主線,在主線的基礎上添加附件,我把主線確定為LINUX系統,在學習整個系統及移植的過程中,添加對ARM架構的學習,包括:建構相關硬件資源的原理及使用。
3.實施方法
一個LINUX系統我們可以將之分為u-boot、Kernel、Drivers三個部分,后面兩個部分其實是一體的,作為一名工程師,我們的目的就是解決我們的問題,因此在一個大型工程中,我們不能面面俱到,我們需要其他人的幫助,那么這個時候就確立了兩條基準:1.學習(學習方法、筆記、書籍資料、官方說明)、2.委托,所謂的委托就是我們在解決一些大問題時往往不用完全理解事情的處理細節,只要該種方法能夠合理的達到我要的技術標準那么我就直接使用,比如我要使用手機打電話,那么我并不需要知道手機是如何打電話的,這一部分我留給硬件方面的人才,但是這也不是絕對的,當我們涉及到一些委托的部分出現問題時就需要深挖了,而如何判斷哪些需要深挖哪些需要委托呢,這個完全就是經驗了,要么是一個技術骨干告訴你這里可以不用考慮,是全球通用的,要么就是自己的經驗之談了,總而言之,對付一個大工程,我們需要簡化他,但是所委托的部分我們必須知道給了他什么,他做了什么,達到了怎樣的結果,這樣就夠了,人力有限,不管是誰都需要有自知之明。
前面委托說的很清楚了,委托其實也算是一種學習,只不過始終宏觀學習,而學習這一步,就盡可能多的去了解了,在學習搜集資料的過程中,我們基本按照如下方法,1.他是誰?2.來自哪里?3.將要做什么?4.怎么做,只有深刻的了解了對象的各種形式的特征,我們才能更好地操作他,把握他的變化,采取應對措施。
最后還需要添加一點,關于筆記的,我們未來需要處理很多的對象,使用很多相關的芯片、架構、系統,那么針對不同的特征盡量有個筆記記錄,人的記性畢竟有限,而記錄的標準我們可以既定為:有價值、花費自己一定時間才思考出的。
4.優化
我們假定在第三部就完成我們的目標了(當然,實際會還有一些過程),任何一件事如果認真做,一直做,都會做到“得心應手”,那么這個時候我們可以考慮進一步的升華,也就是優化,比如編寫的大型程序,我們可以優化代碼段,調整局部實現思想,根據對結果的分析,不斷的做這些是,我想一個合格的工程師總是為此感到驕傲的。
-
工程師
+關注
關注
59文章
1571瀏覽量
68577
發布評論請先 登錄
相關推薦
評論