數學能力,對於一個程序員來講意味着什麼?

數學離程序員有多近?

ifelse也好、for循環也罷,代碼能夠說就是對數學邏輯的具體實現。因此敲代碼的程序員幾乎就離不開數學,難易不一樣而已。程序員

那數學很差就寫不了代碼嗎😳?不,同樣能夠寫代碼,能夠寫出更多的CRUD出來。那你不要總以爲是產品需求簡單因此你的實現過程才變成了增刪改查,每每也是由於你還不具有可擴展、易維護、高性能的代碼實現方案落地能力,才使得你小小年紀寫出了更多的CRUD!算法

與一錐子買賣的小做坊相比,大廠和超級大廠更會注重數學能力。數據庫

 

2004年,在硅谷的交通動脈 101 公路上忽然出現一塊巨大的廣告牌,上面是一道數學題: {e 的連續數字中最早出現的 10 位質數}.com。編程

廣告:這裏的 e 是數學常數,天然對數的底數,無限不循環小數。這道題的意思就是,找出 e 中最早出現的 10 位質數,而後能夠得出一個網址。進入這個網址會看到 Google 爲你出的第二道數學題,成功解鎖這步 Google 會告訴你,咱們或許是」志同道合「的人,你能夠將簡歷發到這個郵箱,咱們一塊兒作點改變世界的事情。設計模式

計算 e 值能夠經過泰勒公式推導出來:e^x≈1 + x + x^2/2! + x^3/3! +……+ x^n/n! (1) 推導計算過程還包括埃拉托色尼篩選法(the Sieve of Eratosthenes)、線性篩選法的使用。感興趣的小夥伴能夠用代碼實現下。微信

1、把代碼寫好的四步

業務提需求、產品定方案、研發作實現。最終這個系統開發的怎麼樣是由三方共同決定的!數據結構

地基挖的很差,樓就蓋不高架構

磚頭擺放不巧,樓就容易倒性能

水電走線不妙,樓就危險了學習

格局設計不行,樓就賣不掉

這裏的地基、磚頭、水電、格局,對應的就是,數據結構、算法邏輯、設計模式、系統架構。從下到上相互依賴、相互配合,只有這一層作好,下一層纔好作!

 

數據結構:高矮胖瘦、長寬扁細,數據的存放方式,是一套程序開發的核心基礎。不合理的設計每每是從數據結構開始,哪怕你僅僅是使用數據庫存放業務信息,也同樣會影響到未來各種數據的查詢、彙總等實現邏輯的難易。

算法邏輯:是對數據結構的使用,合適的數據結構會讓算法實現過程下降時間複雜度。可能你如今的多層for循環在合適的算法過程下,能被優化爲更簡單的方式獲取數據。注意:算法邏輯實現,並不必定就是排序、歸併,還有你實際業務的處理流程。

設計模式:能夠這麼說,不使用設計模式你同樣能寫代碼。但你願意看到滿屏幕的ifelse判斷調用,仍是喜歡像膏藥同樣的代碼,粘貼來複制去?那麼設計模式這套通用場景的解決方案,就是爲你剔除掉代碼實現過程當中的噁心部分,讓整套程序更加易維護、易擴展。就是開發完一個月,你看它你還認識!

系統架構:描述的是三層MVC,仍是四層DDD。我對這個的理解就是家裏的三居仍是四局格局,MVC是咱們常常用的你們都熟悉,DDD無非就是家裏多了個書房,把各自屬於哪個屋子的擺件規整到各自屋子裏。那麼亂放是什麼效果呢,就是自動洗屁屁馬桶🚽給按到廚房了,再貴也格楞子! 好,那麼咱們在延展下,若是你的衛生間沒有流出下水道咋辦?是不這個地方的數據結構就是設計缺失的,而到後面再想擴展就難了吧!

因此,研發在承接業務需求、實現產品方案的時候。壓根就不僅是在一個房子的三居或者四居格局裏,開始隨意碼磚。

沒有合理的數據結構、沒有優化的算法邏輯、沒有運用的設計模式,最終都會影響到整個系統架構變得臃腫不堪,調用混亂。在之後附加、迭代、新增的需求下,會讓整個系統問題不斷的放大,當你想用重構時,就有着千絲萬縷般調用關係。 重構就不如重寫了!

2、for循環沒算法快

在《編程之美》一書中,有這樣一道題。求:1~n中,1出現的次數。好比:1~10,1出現了兩次。

1. for 循環實現

 

使用 for 循環的實現過程很好理解,就是往死了循環。以後把循環到的數字按照字符串拆解,判斷每一位是否是數字,是就+1。這個過程很簡單,可是時間複雜很高。

2. 算法邏輯實現

 

如圖 20-3 所示,其實咱們能發現這個1的個數在100、1000、10000中是有規則的循環出現的。十一、十二、1三、14或者2一、3一、4一、51,以及單個的1出現。最終能夠得出通用公式:abcd...=(abc+1)*1+(ab+1)*10+(a+1)*100+(1)*1000...,abcd表明位數。另外在實現的過程還須要考慮好比不足100等狀況,例如9八、1232等。

實現過程

 

在《編程之美》一書中還不僅這一種算法,感興趣的小夥伴能夠查閱。但本身折騰實現後的興奮感更強哦!

3. 耗時曲線對比

按照兩種不一樣方式的實現邏輯,咱們來計算1000、10000、10000到一個億,求1出現的次數,看看兩種方式的耗時曲線。

 

for循環隨着數量的不斷增大後,已經趨近於沒法使用了。

算法邏輯依靠的計算公式,因此不管增長多少基本都會在1~2毫秒內計算完成。

那麼,你的代碼中是否也有相似的地方。若是使用算法邏輯配合適合的數據結構,是否能夠替代一些for循環的計算方式,來使整個實現過程的時間複雜度下降。

總結

單純的只會數學寫不了代碼,能寫代碼的不懂數學只能是CRUD碼農。數學知識幫助你設計數據結構和實現算法邏輯,代碼能力幫你駕馭設計模式和架構模型。多方面的知識結合和使用纔是碼農和工程師的主要區別,也是是否擁有核心競爭力的關鍵點。

學習知識有時候看不到前面的路有多遠,但哪怕是個泥坑,只要你不停的蠕動、折騰、翻滾,也能抓出一條泥鰍。知識的路上是發現知識的快樂,還學會知識的成就感,不斷的促使你前行。

若是你想更好的提高你的編程能力,進入到百度騰訊等大廠工做,好好學習C/C++編程知識成爲高薪軟件開發工程師的話!那麼你很幸運~

C語言C++編程學習交流圈子,QQ羣1090842465點擊進入】微信公衆號:C語言編程學習基地

分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!

編程學習書籍:

編程學習視頻:

相關文章
相關標籤/搜索