兩年嵌入式軟件開發的工作感想


    13年大學畢業至今已經兩年有餘,想想自己的工作經歷還是挺曲折的,之所以選擇了嵌入式軟件這個行業,一方面的確是比較感興趣,另一方面我覺得軟件行業薪資待遇還不錯。嵌入式系統是相對於桌面系統(PC)而言的,屬於專用軟硬件系統,而桌面系統屬於通用系統,對於我而言,通用系統不能完全滿足我喜歡動手實踐的習慣,比如說,利用硬件DIY一些好玩的東西。所以,能從事自己喜歡的一份工作還是挺滿足的。

    入職面試的時候,老闆給我上了一課,印象比較深刻,大概意思就是選擇一份工作應該先看行業後看職業,只有好的行業作爲前提,纔能有一個不錯的職業發展道路。電子產品在我們的日常生活中扮演者不可缺少的角色,半導體行業作爲電子產業的前端,理論上說應該是相當有潛力的,所以,半導體產業應該算是朝陽產業。我的目光比較短潛,其實我只看中了我做什麼,沒有上升到整個行業的層面,想着如果能在我的職業裏有一個不錯的表現就心滿意足了。可是到現在爲止,我仍傾向於我感興趣的職業,而淡化行業的選擇。實踐中也是這樣的,只有自己發自內心的感興趣了,才能全身心的投入進去,才能比較容易的走向一個相對不錯的職業發展道路。面試通過後我就滿懷希望的加入了我現在的公司。

    我所在的研發中心在成都,相比集團其他研發中心,我們這成立時間比較短,招聘大多是校招,所以我入職的時候資歷較深的研發工程師並不是很多,公司對新人培訓的理念是On job trainning, 也就意味着公司給了你很大信任,直接上手項目。這樣新人會很快的上手,相比其他公司,我覺得在這裏會成長的更快一些,新手意味着做出的項目的質量可能會不好,所以,經理會給新入職的同事很大的關照,各種review,各種提點,在完成了一兩個項目後,就差不多上手了,之後經理就比較少的搭理你了,這時候你的權利會比較大,很多時候需要自己做決定,這當然是基於領導對自己的信任。這個時候我們在做項目的時候就會多了一些責任感。

    之前參加過嵌入式軟件的培訓,全職培訓歷時大概有5個月左右,玩的操作系統是Linux,我們用的開發板是三星的OK6410開發板,用的內核版本是2.6.28,PC上裝的Linux系統是Ubuntu 12.04,從那時起就對Linux着迷了。Linux是完全開放的,裏面的很多理論都對我現在的工作有幫助,例如Makefile的編寫規則幫助了我更好的理解了VS工程的設置,VS的工程設置應該是在windows下的圖形化的Makefile的編寫,其理論應該是如出一轍。兩年時間裏,我大多是做的裸機開發的工作,比較少接觸Linux操作系統下的開發,對常用的通信,如SPI,I2C,USB,RS485,RS232等有了一定的瞭解。後期的開發主要基於xilinx的SOC平臺,BSP的使用省去了對寄存器的直接操作,使用起來更加方便了,只是如果需要對SOC架構或原理性的東西進行深入研究就得閱讀大量的文檔資料,也就在這個時候,我的英文閱讀及英文寫作能力有了較大的提高,當然這少不了平時各種寫文檔,各種寫郵件的幫助。
    
    初來公司,作爲新手,不到一週就接手了一個項目,當時的心情是欣喜加緊張和擔心,欣喜自己終於接觸到真正的項目了;緊張是因爲之前從沒有進過實驗室做過真正的項目,有的只是一些實訓的項目,沒有真正的商業用途;擔心是因爲擔心自己做不好,於是我拼命的加班,有一兩個月整月上班,週末基本不休息,分析之前做過的類似的項目,再研究同事提出的design spec。當然,加班不會一直都這麼瘋狂的,鬆弛有度纔是長久之計。4DX是我接觸過的一個比較好的管理理念,無論是生活還是工作,如果運用得當,就可以很大程度上幫助我們提高做事的效率。對於聚焦最重要的目標這一點是我比較有體會,工作中總是有很多搞七搞八的事要做,對於能否在給定的時間完成任務而言,聚焦最終要的目標就顯得尤爲重要;其實我們的很多經驗都是從失敗中積累的,所以,正確的看待失敗其實對我們很有幫助。

    談談我對Linux開發的一些個人見解,培訓的時候我們有一個月的課程是在學習學習Linux應用開發,還有一個月是在學習Linux驅動開發,我覺得Linux應用開發對C語言的功底要求比較嚴,之前做過一個基於Linux平臺的物流追蹤系統,包括一個控制板,GPS接收模塊和GPRS短信發送模塊,原理是GPS不斷接收位置信息,然後交給控制板解析,然後控制板監控接收客戶端通過GPRS發送的位置請求,之後再發送解析好的位置信息給客戶端,整個過程用到了多線程、串口操作、AT指令等相關知識點,其中我覺得最好玩的就是字符串解析,很多公司在面試的時候都會出一些字符解析的題目,這很考驗一個程序員的進本功,所以作爲一名程序員,字符串解析是一個很有意思的練習。迴歸正題,我覺得在Linux下的項目開發可以讓你瞭解很多機制性的東西。比如,Linux下需要自己寫Makefile,非常靈活,雖然麻煩一點,可是只需要寫一次就OK,而且你會對編譯器的行爲非常瞭解,你會變得越來越厲害;而在windows下就只build一下就OK,可是這其中隱藏的道理你卻很難去整明白。Linux應用開發會多一點涉及文件操作、多進程多線程、進程間通信,TCP(UDP)/IP模型等;我對Linux硬件驅動開發的理解是:硬件驅動開發=軟件機制+硬件寄存器操作;當然還需要一些語言功底,因爲同一硬件可能同時被多次調用,即多線程同時操作同一硬件,所以,一些同步的機制是必不可少的。驅動的開發一般都不是從零開始的,一般都是從一些框架或相近的驅動改過來的,所以我覺得很多東西其實並沒有我們想象的那樣觸不可及,只要我們大膽的去嘗試,未嘗不可實現。記得剛開始培訓時,老師說過一句話,管它學海有多深,學一分有一分的快樂,確實如此,不要一開始就被嚇怕了。
    
    D-K effect:中文名字是達克效應,我是在經歷了工作中的成長,再反思自己之前的一些行爲才體會到的,講的是一種認知偏差現象,這種認知上的偏差帶來的後果輕則驕傲自滿,影響自己上進的進度,重則影響團隊的協作和發展,所以能時刻保持一個空杯的心態真的很重要,尤其是像我們程序員這種需要不斷學習的職業。附上達克效應解釋的鏈接:http://baike.baidu.com/link?url=c2CXfrKPcpUrsnUij-U37DdMMnVXP6masoztwjMFLq2Dz7QkPq9G89JlPPlJWC0g9ykfGITCm8TShdSGw95tuq

    作爲一個程序員,加班是必不可少的,一天的大多數時間都是在辦公室或着實驗室坐着,時間長了,身體就會出現各種不舒服,每週堅持幾次鍛鍊真的很重要,身體是革命的本錢,即便是你的技術再厲害,沒有一個好身體作爲支撐也是不行的。
    
    講的有點亂,算作自己的一點感想吧!

    












    












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章