回覆列表
  • 1 # 使用者2139185725315

    熱愛寫程式碼,非常好,你有計算機行業從業的天然優勢了。如果長期保持這種熱愛,就不會覺得痛苦。

    但是,如果一味沉迷寫程式碼(熟練使用各種框架和庫),而不去研究其底層原理和實現,那就只能停留在程式設計師的水準。

    有什麼問題嗎?有,問題還很大。

    程式設計師的工作就是使用現有程式碼的組合解決某個特定問題,一般稱之為搬磚。搬磚是靠數量計算價值的,你每天能搬多少磚,取決於你搬磚的效率和次數。隨著不斷的鍛鍊,你每次搬的磚可以從1塊磚增長到10塊,每天搬磚的次數也可以從1次增長到10次。然而,搬磚是個體力活,而人的體力是有限的,一天的時間也是有限的。年輕時候你可以加班、熬夜,每天工作16小時,但是這樣的狀態你能持續多久?也就是說,你很快就會達到自身價值的天花板,並且很快就會開始下降。每年都會有大把比你年輕、比你能出苦力且願意拿比你更少的薪水的人等著取代你。

    那麼,怎麼提升自己的上限呢?這時候需要的就是基本功了。會寫幾行程式碼,懂幾門程式語言,不叫基本功。基本上稍有領悟能力的人都能在掌握一門程式語言的基礎上快速上手另一門語言。真正的基本功,是對程式設計的理解,也就是計算機科學的基礎知識。

    計算機科學的源頭是布林代數,因此離散數學是第一門基本功。

    硬體使用高低電平表示0和1,那麼如何使用數位電路來實現布林代數中的邏輯功能,就需要掌握第二門基本功數字邏輯。

    接下來,如何透過邏輯電路的組合來實現更高階的功能(運算器、控制器),如何設計相應的指令系統,使得計算機系統可以準確、高效地執行,就需要掌握第三門基本功計算機組成與結構。

    硬體的原理基本搞明白了,那麼計算機系統如何管理軟硬體資源(程序管理、作業管理、儲存管理、裝置管理、檔案管理),就需要掌握第四門基本功作業系統。

    資源的管理和分配就涉及到各種資料的處理,以及各種問題的解決方法,這時候,資料結構與演算法就是非常重要的基本功,好的資料結構和好的演算法可以在解決同樣問題的時候表現出千百倍的優勢。

    資料需要儲存,也需要良好的管理和加密,那麼一個優秀的資料庫系統就是非常重要的了,為什麼採用關係資料庫,2NF到3NF改進了什麼地方解決了什麼問題,3NF到4NF又解決了什麼,掌握了資料庫原理,才不會讓你的軟體系統為資料管理發愁。

    原理你都明白了,終於要程式設計實現了,那麼你用了C++、JAVA、C#、PHP、Python寫的那些亂七八糟的東西計算機是怎麼看懂的呢,這就需要掌握編譯原理,有這一門基本功,你完全可以創造屬於自己的高階程式語言。

    全世界那麼多人,一臺計算機可不夠用,大家又都想快速地傳遞資訊,不用再為了告訴40公里外的雅典戰爭勝利了而跑死一個優秀的戰士,那就需要計算機網路的支援了,OSI七層模型的優缺點是什麼,TCP/IP模型每一層的功能是什麼又是如何實現的,掌握這門基本功,你就能明白我們與這個世界是如何互聯互通的了。

    好了,現在你已經基本具備一個高階程式設計師的基本素質了,可以去開發專案實戰了,那麼問題來了,這個專案可行嗎,需要實現哪些功能,每個功能分別準備如何實現,程式碼碼出來瞭如何確保正確性和魯棒性,軟體後期執行出現問題如何維護,軟體工程會給你一些啟示。

    以上是九大基礎課,掌握這些基本功是成為優秀程式設計師的基礎。但是,程式設計師就是你職業生涯的盡頭了嗎,每天碼程式碼就是你的追求了嗎?再往上走,是專案經理、需求分析師、架構師、演算法工程師……等一系列更專業的崗位,需要你掌握軟體專案管理、軟體體系結構、雲計算、分散式計算……等一系列專業知識,無論是走技術向還是走管理向,專業知識都是你手中的鐮刀和錘子,那時候的你才能成為專家,而那些赤手空拳的,只能叫莽夫。

    最後,如果說了這麼多,還是有人覺得學這些沒用,會碼程式碼就行,那煩請出門左轉,看看滿大街某內、某某連出來的“程式設計師”,再回頭看看你讀的大學,你是不是對得起九年義務教育培養出來的這麼優秀的你。

  • 中秋節和大豐收的關聯?
  • 《許我向你看》 的結局?