只需一年時間,編程小白就能成為同事們敬仰的編程大神

編程是什麼?也許每個人都有不同的見解。

有人認為編程是一份工作,也有人認為編程是一種愛好,甚至有人認為編程是此生追求。其實,編程就是編寫程序。

首先,從“編”字分析,它既可以表示編寫,也可以表示按一定的原則、規則或次序來組織或排列。但,都離不開思考。

“程”字,它既可以表示工程,也可以表示行進的距離。但,都離不開執行。

簡單來說,編程就是不停的思考,不停的執行。

編程與做別的事情相同,沒有執行捷徑,只有思考的方式不同。

章節預覽:

  • 1. 成功案例
  • 2. 為自己定製一個小目標
  • 3. 提升“絕對力量”
  • 4. 分析每一次“執行”
  • 5. 你已進入“天才”領域

章節內容:

1. 成功案例

說起編程界的“天才”,我們首先想到的就是Linus Torvalds。

linus Torvalds的成名之作是我們熟知的linux內核,在它的基礎上誕生出許多著名的操作系統,比如:Slackware、Debian、RedHat、Fedora、Ubuntu、LinuxMint等。

linux從初期被人們瞭解,到中期被人們熟知,甚至到後期佔據絕大部分內核江山,都離不開linus Torvalds的宏偉目標。接下來,我們一起了解linus Torvalds的成長之路:

上世紀八十年代,Unix開始向商業化方向發展,大部分學生由於支付不起昂貴的授權費用,不得不停止相關的研究。1987年,荷蘭有一位大學教授編寫了一個類Unix的應用系統並命名為Minix,用於教學使用。Linus Torvalds起初接觸Minix是為了學術研究,接觸一段時間發現Minix一些設計觀念與自己的理解存在一些差異,但是他不能輕易修改和發佈該系統的源碼(由於Minix的許可證等問題)。

1991年,Linus Torvalds為當時新推出使用Intel 80386微處理器的計算機開發了一款全新的操作系統,並命名為Linux。

期初,Linus只是在自編寫的內核中植入gcc編譯器和Shell。由於Linux完全遵循GPL協議主題,發佈到互聯網後得到強烈的反響,很快吸引了眾多開發者、黑客對其代碼進行修改和維護。

Linux內核從發佈到現在經歷了4個大版本以及眾多小版本更新,linux發行版也從Slackware最初發布到後來的Debian、RedHat、Fedora、Ubuntu、LinuxMint等等。

上述故事中,我們可以分析出一個關鍵字,就是“成長”。Linus Torvalds剛開始只是為了學術研究,迫不得已編寫自己的內核,內核發佈後,發現許多人面臨同樣的問題,這也讓他萌發了新的思想——與大家一起完善這個內核。就這樣,linux內核從初期只能編譯、執行簡單程序,到後來一步一步走上正規化,這些都離不開思想“成長”。

其實,並不是只有偉人的想法可以稱為思想,我們每一個人的想法都可以稱為思想。思想既表示我們未實現的想法,也可表達為我們未來的目標。

有想法是件好事情,它寄託著我們對成功的嚮往。接下來,我們為自己定製一個小目標,每一次實現都代表著我們在前進、在成長,並離成功更近一步。 然後我們通過數個小目標,完成我們的遠大理想。

2. 為自己定製一個小目標

為自己定製一個小目標很簡單,可以是學會幾個單詞,也可以是學會一門語言的基本類型,甚至可以是理解一篇文章。

目標越細越好,也更容易實現,它更能激發我們求知的慾望。因為目標過大,容易使我們退縮,甚至放棄。而目標過小,太容易實現,無法從中得到“成就感”。

定製目標應根據自己的實際情況做決定,定製目標的原則可以分成以下三步:

1. 預算一週或一個月能夠完成;

2. 目標分成多部分執行,執行中如果發現某一部分走不通或太難實現,應修改這部分計劃甚至重新定製目標。

3. 目標每一部分足夠細緻,至少在定製過程中每一步在腦海中都能走通。

生活中,我自己也不停的定製新的目標,執行過程中也遇到不少彎路,好在及時糾正,沒有造成過多的影響。

我從正式入職工作到現在也接近五年了,這幾年也跨越了幾個領域,雖算不上光輝事蹟,但也作為大家的參考對象,分析一下:

  1. 剛入職時,我是一個編程小白,未使用過VS2008編譯器,基本的調試都不會,迫於工作壓力,第一個月硬著頭皮向同事求助,在他們的幫助下,第一個月我學會了調試程序、發佈程序,並且學會了分析結構和結構中的代碼含義。
  2. 入職兩個月,我習慣了厚臉皮,也習慣了與他們打鬧嬉戲。那段時間裡,我有了較大的進步,甚至能寫出令他們頭疼的代碼。
  3. 入職三個月,我具有了獨立編寫新項目的能力,硬是在接下來的一個月裡,使用QT寫出了工作一年才能寫出的項目,並且也得到了領導賞識,後來讓我做了C++項目負責人,並管理四位成員的代碼。
  4. 入職一年多,通過大量閱讀文章和參考書籍,讓我有很大的進步,並通過這篇文章,正式開始業餘作家之路。
  5. 入職兩年多,那段時間裡我接觸了不同領域的代碼,比如DSP、DMA,甚至FPGA代碼我也會參考一下。那一年我也學習了windriver,用於Windows下的驅動編寫和理解。後來開始使用Linux系統,接觸Linux驅動,並在一個月後編寫出了字符驅動。
  6. 入職三年多,先後編寫了幾個不同硬件的Linux驅動,並做到Windows、VXworks、Ubuntu的驅動思路互通,以及下位機的編寫。後來,帶領團隊自主定製安卓系統,從最初的4.4.4版本在模擬器裡執行,到後來的6.0.1版本成功移植到我們的硬件板卡中。這期間實現了許多功能,比如IOS風格定製,小程序排列在屏幕中間位置,去除各種無用部件,單屏雙顯,陀螺儀座標定位,開機動畫修改,framework框架修改等。
  7. 入職四年多,定製linux內核,增加硬件適配,使用設備樹控制基於芯片的相關硬件等。也在GitHub發表了一些原創,比如胸章設備支持中文等。

私下裡,我一直保留著寫博客的習慣,每一篇文章都記錄著我的成長經歷,這些經歷包含著我心酸的往事、也包含著我對編程的激情。

以前的經歷從現在來看,都很輕鬆、隨意,但也是我曾經做了好多努力才做到的,這段經歷也是我曾經頭疼的經歷。

最近這段時間,我自己編寫的書籍也篇目過半了,我還在繼續為我的以後定製著計劃。

任何大的目標都是從一個小目標,甚至是一件小事情做起,只有經歷過了才明白其中的艱辛和“成就感”。

3. 提升“絕對力量”

絕對力量不是任何負面因素,它代表我們的編程基礎。

編程基礎非常重要,日常編碼中,我們的每一行代碼都由它們組成。剛開始,我並不看重基礎知識,因為那時候靠想法編程,幾乎是異想天開的想法。但經過一次又一次的打擊才發現,基礎知識深厚才能編寫出優質代碼,現在我更願意按照基礎知識編程,因為這樣的代碼更可靠,也更容易理解。

後來,為了學習基礎知識,我參考了大量書籍,每一本都非常認真的分析,每當遇到難點都用鉛筆或水筆記錄在筆記本內。

再後來,基礎知識穩定後,參考任何書籍或任何代碼都非常輕鬆,跨平臺、跨語言也可以很快上手。

使用基礎知識,可以讓我輕鬆分析透STL中每一份完整代碼,比如Vector,map,List等,也可以讓我分析透甚至編寫出每一個設計結構,比如二叉樹、紅黑樹,甚至我自己編寫一個多容器框架。

2018年,我通過自己設計的內存池、紅黑樹、List,結合在一起做出了一個智能框架,設計它的目的是為了突破多線程中讀寫的限制。比如在我自己設計的內存池中緩存數據,通過紅黑樹平衡數據,並通過List儲存或刪除數據,達到數據同時讀取和寫入完全不用加鎖。但最後還是失敗了,那時候能力還是不足,只能在少量數據中做到同時讀取和寫入不用加鎖,大量數據時,則會出現數據錯誤。當然,以後有時間也許我會重新設計這個結構。

基礎知識對於我們的代碼來說非常重要,不能為了快速提升自己的能力而忽略基礎知識,畢竟少走彎路才是最快的路徑。

4. 分析每一次“執行”

編寫程序的精髓在於每一次失敗,每一次失敗都會發現很多不足之處,也許是設計思路不對,也許是內存管理不到位導致,也許是算法使用不當。

編寫過程中,代碼執行結果在意料之外也是常事,不能因為結果不對就否認這份代碼。遇到這種情況,首先要做的就是冷靜下來,然後仔細分析容易出錯誤的代碼範圍。當然,能調試的情況下,儘量調試代碼,錯誤的出現可能是一個條件的優先級問題,也可能是數據未對齊,或是數據溢出,也或是數據訪問越位。這幾種情況我們通過眼睛很難觀察出原因,只有通過不斷的調試,一次又一次的分析數據結果來判斷問題所在,調試分析也是最省時間的一種方式。

我在設計新結構時,也遇到過眼睛無法檢查出的錯誤,比如之前寫完全隨機加密算法。我分析了每一個函數,每一個循環結構甚至是每一條語句,都沒有檢查出錯誤。後來調試中想起來,四個字節數據向一個四字節單位位移,如果前三個數中有負數,將會得到一個錯誤數值。根據這種情況,每次位移時都增加了“&”運算,確保數據的準確性。

坦然面對每一次失敗,並總結出失敗的原因,是我們成長的路上不可缺少的因素。

5. 你已進入“天才”領域

上述2、3、4中,每一條如果你都能做到,或者都能處理好,那麼恭喜你,你成功進入“天才”領域。

所謂的“天才”都是通過日積月累的練習,不斷的突破自己,最終脫穎而出。

生活中,如果你是一個仔細的人可能會發現,那些看起來笨笨的人經過一段時間的努力,都會有驚人的進步。其實,這部分人並不笨,他們只是更相信自己,更願意通過自己的實踐來證明事情的對錯。因為自己努力得到的結果,比別人口頭說出的結果更準確。

幾年前,我和普通人的想法一樣,認為高手就應該比別人更聰明,比別人更強。但這幾年努力後發現,高手不願意與別人比較,他們更願意與自己比較,突破自己才是正確的方向和目標。

持續更新,未完待續……


你知道的越多,你不知道的越多~~~~



分享到:


相關文章: