第一次自學的是java,學完基本語法,好像懂了,又好像啥都不懂。 通俗點講,就是做項目毫無思路。 後麵接觸到了 單片機,深入了解後,發現這個編程簡單,有java基礎學c語言也賊快。 就是電路比較複雜,特別是模電,還好後麵發現並不需要太深的模電功底。 果斷買了塊開發板,按著教程順藤摸瓜,一個多月基本把開發板上的功能都實現了一遍。 曆史總是驚人的相似,雖然單個外設功能都會用,但一做項目就一臉懵。 後麵又做了一個智能小車項目,買了配件,也沒視頻教程,就看商家提供的教程死磕。 最後又自己獨立寫了一遍,做完以後明顯感覺自己水平提升了。 主要有幾方麵的提升: 1.學會看別人的項目代碼了 這個能力特別重要,雖然看得過程比自己寫還痛苦,實際工作中也經常要去看別人寫的代碼。 剛開始公司也不會讓你去研發產品,會讓你維護老產品,改代碼。 後麵你想提升,也需要有這項能力。 2.編程思維 也就是實現功能的思維,這個也是非常重要的。 如果你沒做過這種功能,最好的方法就是學習別人的實現的思路。 一般某種功能,你做過了,下次做就懂了。 這個隻能不斷通過項目去積累,在開發板上學不到。 3.編程水平 懂實現的思路和你能用代碼寫出來又是兩碼事。 我的辦法還是先模仿別人的代碼,然後分析他這樣寫有什麼好處。 過程也是比較痛苦的,但是隨著你經驗的積累,後麵會越來越輕鬆,最終達到望眼欲穿的高度。 做完智能小車不久,我就找到工作了。 剛開始接觸最多的是STC51和NXP的單片機。 工作了2,3年左右,基本大多數的單片機產品我都能把代碼獨立寫出來。 那個時候感覺自己已經很牛逼了,單片機編程太簡單不能滿足自己了。 直到後麵去到一家做導航的公司,有涉及到 gps、菜單、雷達檢測等功能。 我才知道自己的水平有多渣,才知道以前做的產品都太簡單了。 這家公司讓我的水平也提升了不少,以前一直不知道多級菜單怎麼做,從那以後知道了。 主要還是看老工程師代碼學出來的,掌握看懂別人代碼的能力很重要,能貫穿你整個職業生涯。 可以說那1年不到的時間頂我前麵做2,3年。 有時候不是說你做的越久,水平越厲害,關鍵還是看你周邊有沒有高手可以學習。 你在公司做1年,基本對公司產品就很熟悉了,都是同類型的,可能改改電路改改代碼就是一款新產品了。 呆久了,對你來說基本都是重複工作,水平提升也很緩慢。 這是我第一次水平有較大的提升,也重新刷新了對單片機編程的認知,並沒想象簡單。 第二次是後來跳槽到一家做 物聯網網關的公司,有語音、菜單、無線數據軟解碼、OTA、4G、Wifi之類的功能。 這應該是我有史以來碰到過最複雜的一個產品了。 類似於我們無際單片機編程實戰課程裏的第三個項目。 隻是為了很多基礎差的學員能快速上手,我把一些產品功能簡化了,盡量留下最常用最核心的東西。 雖然做了這麼多年,但是讓我獨立去做這個產品還是很吃力的。 主要是功能太多了,腦子就容易亂,不知道該怎麼整合。 做這個項目之前,我還把以前上班那些老工程師的代碼又重新研究了一下,看有沒有什麼能用的東西。 就這樣,一個地方拚湊一點,最後再慢慢消化創新形成了自己的東西。 這個項目我大概做整整一年,最後還是沒做穩定,因為那個時候第三方雲平台都不成熟。 主要是底層協議有漏洞,還有app不是很給力,導致用戶體驗感很差。 比如做離線推送功能,總是有很多型號的手機推送不了的。 所以,做物聯網的產品,很難做穩定就是這個原因。 涉及的東西太多,不是硬件穩定就行,還得看雲平台和做app的經驗是否足夠豐富。 再加上聯調都是遠程溝通,很多細節很難理解到位,開發周期也長。 這個項目對我的成長是最大的,就是有點費紅牛。 隻要沒特別的事,每天早上我基本都是最先到公司,公司也是初創公司。 老板每次看到我都很感動,這麼上進的員工不多了。 其實我是對這個項目很感興趣,一直想做這種中大型項目,就是沒機會。 我和大家的想法其實是一樣的,就是想盡快讓自己具備獨立做項目的能力,不管大小項目。 有時候,我經常在想,如果第一份工作那2年,就能接觸到這種項目並有人帶。 或許我2年就能達到別人5年甚至以上的水平。 再後麵,就是接觸了藍牙協議棧之類的開發,有了前麵的沉澱以後,研究起來輕鬆多了。 藍牙協議棧的係統算是我目前接觸到比較好的非RTOS了。 所以,我決定把它精簡以後,移植到STM32上麵來,以後為我所用。 雖然之前也寫過一個經過批量驗證的程序架構,但畢竟還是簡陋了一點。 比如說隊列功能,隻能入列和出列字節數據,如果能傳輸任意數據類型就更靈活了。 這個架構也是開源的,並在19年隨便錄了套視頻,有興趣可以去看看,對編程水平提升還是有挺大幫助。 最後總結:想快速提升自己編程能力,還是得不斷通過項目積累,但也是有捷徑可走的,就是跟資深工程師做項目,同樣是積累,效率天差地別。 |