小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

程序員學數(shù)學讀哪本書?

 walix 2021-04-11
在互聯(lián)網(wǎng)一直流傳了一個這樣的段子——

“一流程序員靠數(shù)學,二流靠算法,三流靠邏輯,四流靠SDK,五流靠Google和StackOverFlow,六流靠百度和CSDN。低端的看高端的就是黑魔法!”

雖然是段子,但其實也挺寫實的,因為你打開各大招聘網(wǎng)站,會發(fā)現(xiàn)越是高薪的IT崗位,對數(shù)學的要求越高。其實,我曾經(jīng)也不太明白數(shù)學為什么對程序員很重要,不明白為什么在大學里初入編程之門時,老師卻要求你去看《數(shù)學之美》。

但后來,我有幸閱讀了計算機大佬黃申寫的《程序員的數(shù)學基礎(chǔ)課 從理論到Python實踐》一書,才意識到數(shù)學對于程序員的重要性。


圖片

▲ 本書現(xiàn)在當當/京東都5折半價活動, 剛興趣的讀者可以在文末鏈接參與


正如他在書寫道:“數(shù)學對我們每一個程序員來說,都是最熟悉的陌生人。你從小就開始學習數(shù)學,那些熟悉的數(shù)學定理和公式陪伴你走過好多年。但是,自從當了程序員,你可能早就將數(shù)學拋在了腦后。 畢竟,作為一個基礎(chǔ)學科,數(shù)學肯定沒有操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、計算機網(wǎng)絡(luò)這樣的課程看起來 “實用”。

上大學的時候,我非常喜歡編程,不喜歡待在教室里聽數(shù)學老師講那些枯燥的數(shù)學理論和定理。再到后來,我讀了碩士和博士,開始接觸更多的算法和機器學習,猛然間才發(fā)現(xiàn)機器學習表面上是“寫程序”,剝?nèi)ネ獗恚?strong>本質(zhì)上是在研究數(shù)學?!?/p>

數(shù)學不僅僅是程序員的工具,更是從低端向高端進階的黑魔法。那么如何學好數(shù)學給自己夯實好進階的臺階呢?在《程序員的數(shù)學基礎(chǔ)課 從理論到Python實踐》這本書中,你一定可以找到答案!

程序員的數(shù)學思維很重要!

在V2EX論壇上有一個帖子一直掛著一個帖子,這個帖子的問題是“數(shù)學對程序員來說真的很重要嗎?”這個帖子下經(jīng)常有人來更新,回答的內(nèi)容幾乎都是說數(shù)學對于程序員來說十分重要。

圖片

其中,有一位網(wǎng)友的回答令我記憶尤深。

圖片

懂數(shù)學的才能叫程序員,不懂的只能停留在碼農(nóng)級別,這不是說你編碼用不用數(shù)學,數(shù)學本身就是邏輯思維的能力。”這個回答說得太好了!不僅一針見血地指出了程序員之間出現(xiàn)的等級差距,還進一步揭示了造成這種差距的原因——缺乏數(shù)學思維。

顯而易見,程序員如果缺乏數(shù)學思維會使自己處于劣處,造成天平的失衡。

正如本書中,以作者黃申多年的工作經(jīng)歷來看,數(shù)學學得好不好將會直接決定一個程序員有沒有發(fā)展?jié)摿?。往大了說,數(shù)學是一種思維模式,考驗的是一個人歸納、總結(jié)和抽象的能力。 

將這個能力放到程序員的世界里,其實就是解決問題的能力。往小了說,不管是數(shù)據(jù)結(jié)構(gòu)與算法還是程序設(shè)計,其實底層很多原理或者思路都源自數(shù)學,所以很多大公司在招人時也會優(yōu)先考慮數(shù)學專業(yè)的畢業(yè)生,因為這些人的數(shù)學基礎(chǔ)很好,學起編程來也容易上手。

如果編程語言是血肉,那么數(shù)學的思想和知識就是靈魂。它可以幫助你選擇合適的數(shù)據(jù)結(jié) 構(gòu)和算法,提升系統(tǒng)效率,并且賦予機器智慧。在大數(shù)據(jù)和智能化的時代更是如此。

總而言之,數(shù)學決定了一個人技術(shù)上能發(fā)展的上限,它對程序員來說意義非凡!

程序員學數(shù)學需要掌握的基礎(chǔ)思想

既然程序員的數(shù)學思維如此重要,那么程序員學數(shù)學需要掌握哪些基礎(chǔ)思想呢?

二進制

二進制(binary)在數(shù)學和數(shù)字電路中指以2為基數(shù)的記數(shù)系統(tǒng),以2為基數(shù)代表系統(tǒng)是二進位制的。這一系統(tǒng)中,通常用兩個不同的數(shù)字0和1來表示。

二進制是計算機系統(tǒng)的基礎(chǔ),數(shù)字電子電路中,邏輯門直接采用了二進制,因此現(xiàn)代的計算機和依賴計算機的設(shè)備里都用到二進制。每個數(shù)字稱為一個比特(Bit,Binary digit 的縮寫)。

圖片

(二進制)

余數(shù)

余數(shù)就是指整數(shù)除法中被除數(shù)未被除盡的部分,且余數(shù)的取值范圍為 0 到除數(shù)之間(不包括除數(shù)自身)。取余數(shù)運算 a mod b = c(b不為0)表示整數(shù)a除以整數(shù)b所得余數(shù)為c。例如:32÷5= 6…2,更專業(yè)的符號也可以寫作 32÷5=6 又 2/5,或者32 mod 5=2。

可不要小看余數(shù),無論是在日常生活中,還是計算機領(lǐng)域中,它都發(fā)揮著重要的作用。當然,計算機中的余數(shù)思想大多被運用在很多常見的算法和數(shù)據(jù)結(jié)構(gòu)中,而且有可能你在不知情情況下就運用到它。

圖片

(求余數(shù))

布爾代數(shù)

布爾代數(shù)是一個用于集合運算和邏輯運算的公式:〈B,∨,∧,? 〉。其中B為一個非空集合,∨,∧為定義在B上的兩個二元運算,?為定義在B上的一個一元運算。通過布爾代數(shù)進行集合運算可以獲取到不同集合之間的交集、并集或補集,進行邏輯運算可以對不同集合進行與、或、非。

可以說,布爾代數(shù)算是編程中控制邏輯的靈魂。因為真值可以在邏輯電路中表示為二進制數(shù)數(shù)或電平,這種相似性同樣擴展到它們,所以布爾代數(shù)在電子工程和計算機科學中同在數(shù)理邏輯中一樣有很多實踐應(yīng)用。在電子工程領(lǐng)域?qū)iT化了的布爾代數(shù)也叫做邏輯代數(shù),在計算機科學領(lǐng)域?qū)iT化了布爾代數(shù)也叫做布爾邏輯。

圖片

(布爾代數(shù))

迭代

迭代是重復(fù)反饋過程的活動,其目的通常是為了接近并到達所需的目標或結(jié)果。每一次對過程的重復(fù)被稱為一次“迭代”,而每一次迭代得到的結(jié)果會被用來作為下一次迭代的初始值。

數(shù)學中的迭代可以指函數(shù)迭代的過程,即反復(fù)地運用同一函數(shù)計算,前一次迭代得到的結(jié)果被用于作為下一次迭代的輸入。

在計算機科學中,迭代是程序中對一組指令(或一定步驟)的重復(fù)。它既可以被用作通用的術(shù)語(與“重復(fù)”同義),也可以用來描述一種特定形式的具有可變狀態(tài)的重復(fù)。

將迭代法和計算機強大的處理能力相結(jié)合,我們能創(chuàng)造出很有價值的數(shù)據(jù)結(jié)構(gòu)和算法。

圖片

(一個五邊形的迭代。將對角用直線段連起來得到一個五角星,后者中心圍成了一個倒過來的小五邊形。迭代地執(zhí)行這一過程會產(chǎn)生一系列嵌套的五邊形和五角星。)

遞歸

遞歸(Recursion),在數(shù)學與計算機科學中,是指在函數(shù)的定義中使用函數(shù)自身的方法。遞歸一詞還較常用于描述以自相似方法重復(fù)事物的過程。例如,當兩面鏡子相互之間近似平行時,鏡中嵌套的圖像是以無限遞歸的形式出現(xiàn)的。也可以理解為自我復(fù)制的過程。

程序調(diào)用自身的編程技巧稱為遞歸。遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用。一個過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計算,大大地減少了程序的代碼量。

遞歸的能力在于用有限的語句來定義對象的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。

圖片

(德羅斯特效應(yīng)是遞歸的一種視覺形式。圖中女性手持的物體中有一幅她本人手持同一物體的小圖片,進而小圖片中還有更小的一幅她手持同一物體的圖片,依此類推。)

數(shù)學歸納法

數(shù)學歸納法(Mathematical Induction、MI、ID)是一種數(shù)學證明方法,通常被用于證明某個給定命題在整個(或者局部)自然數(shù)范圍內(nèi)成立。除了自然數(shù)以外,廣義上的數(shù)學歸納法也可以用于證明一般良基結(jié)構(gòu),例如:集合論中的樹。這種廣義的數(shù)學歸納法應(yīng)用于數(shù)學邏輯和計算機科學領(lǐng)域,稱作結(jié)構(gòu)歸納法。

圖片

(多米諾骨牌效應(yīng):骨牌一個接一個倒下,

就如同一個值到下一個值的過程)

迭代和遞歸,以及與它們相關(guān)的數(shù)學歸納,是和基礎(chǔ)編程關(guān)系非常緊密的。迭代法和遞歸都是通過不斷反復(fù)的步驟,計算數(shù)值或進行操作的方法。迭代一般適合正向思維,而遞歸一般適合逆向思維。而遞歸回溯的時候,也體現(xiàn)了正向遞推的思維。它們本身都是抽象的流程,可以由不同的編程實現(xiàn)。

排列和組合

排列(permutation),一般地,從n個不同元素中取出m(m≤n)個元素,按照一定的順序排成一列,叫做從n個元素中取出m個元素的一個排列。特別地,當m=n時,這個排列被稱作全排列(all permutation)。

組合(combination),是一個數(shù)學名詞。一般地,從n個不同的元素中,任取m(m≤n)個元素為一組,叫作從n個不同元素中取出m個元素的一個組合。我們把有關(guān)求組合的個數(shù)的問題叫作組合問題。

動態(tài)規(guī)劃

動態(tài)規(guī)劃(Dynamic Programming,DP),是一種在數(shù)學、管理科學、計算機科學、經(jīng)濟學和生物信息學中使用的,通過把原問題分解為相對簡單的子問題的方式求解復(fù)雜問題的方法,是求解決策過程最優(yōu)化的過程。

20世紀50年代初,美國數(shù)學家貝爾曼等人在研究多階段決策過程的優(yōu)化問題時,提出了著名的最優(yōu)化原理,從而創(chuàng)立了動態(tài)規(guī)劃。動態(tài)規(guī)劃能減少不必要的排列 和組合,最終大幅提升算法的性能。

圖片

(算法中的動態(tài)規(guī)劃問題)

樹是圖論中最重要的概念之一,也是一種數(shù)據(jù)結(jié)構(gòu),它是由n(n>=1)個有限結(jié)點組成一個具有層次關(guān)系的集合。把它叫做“樹”是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。

它具有以下的特點:每個結(jié)點有零個或多個子結(jié)點;沒有父結(jié)點的結(jié)點稱為根結(jié)點;每一個非根結(jié)點有且只有一個父結(jié)點;除了根結(jié)點外,每個子結(jié)點可以分為多個不相交的子樹。

圖片

(數(shù)據(jù)結(jié)構(gòu)中的樹存儲結(jié)構(gòu))

在數(shù)學的分支圖論中,圖(Graph)用于表示物件與物件之間的關(guān)系,是圖論的基本研究對象。一張圖由一些小圓點(稱為頂點或結(jié)點)和連結(jié)這些圓點的直線或曲線(稱為邊)組成。

圖是一種多對多的數(shù)據(jù)結(jié)構(gòu),比線性表和樹更復(fù)雜,它由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為:G(V,E),其中,G表示一個圖,V是圖G中頂點的集合,E是圖G中邊的集合。

圖片

(一個有六個頂點,七個邊的圖)

......

《程序員的數(shù)學基礎(chǔ)課》如何能幫你搞定數(shù)學?

可能有的人看到上面那些數(shù)學的基礎(chǔ)思想,就開始感到煩躁。

畢竟數(shù)學是個博大精深的學科,有些數(shù)學名詞光是耳聞或目睹就開始令人撤退,但我們的目標不是成為數(shù)學集大成者,只要學好程序員所需要的數(shù)學,就足以培養(yǎng)好數(shù)學思維,逐步跨越等級鴻溝。

為此,本書的作者黃申也在書中,循序漸進,巧立重點——“程序員需要學的數(shù)學知識”,讓數(shù)學變得更加容易學習,程序員們也更快理解數(shù)學思維。

首先,他梳理了編程中常用的數(shù)學概念, 由淺入深剖析它們的本質(zhì),希望能夠幫程序員讀者徹底掌握這些基礎(chǔ)、核心的數(shù)學知識。這其中包括那些曾經(jīng)熟悉的數(shù)學名詞,如數(shù)學歸納法、迭代法、遞歸、排列、組合等。

其次,他將線性代數(shù)和概率統(tǒng)計中的抽象概念、公式、定理都由內(nèi)而外地講了出來,并分析它們在編程中的應(yīng)用案例,幫助程序員讀者提升編程的高階能力。對于這些內(nèi)容,他從基本的概念入手,結(jié)合生活和工作中的實際案例,讓程序員讀者更輕松地理解概念的含義。

按照這樣的講解路線,既能讓程序員讀者鞏固基礎(chǔ)的概念和知識,同時又能讓他們明白這些基礎(chǔ)性的內(nèi)容,對計算機編程和算法究竟意味著什么。

總而言之,這本書的內(nèi)容從概念到應(yīng)用,再到本質(zhì),層層深入,不但注重培養(yǎng)讀者養(yǎng)成良好的數(shù)學思維,而且努力使讀者的編程技術(shù)實現(xiàn)進階,非常適合希望從本質(zhì)上提升編程質(zhì)量的中級程序員閱讀和學習。

值得一提的是,這本書的作者黃申之前在網(wǎng)站上開過一堂以本書內(nèi)容為主的課程,贏得好聲一片。網(wǎng)友們紛紛評論:

“希望大神能帶我入門!”

“工作幾年,越來越覺得數(shù)學重要”

“在游戲領(lǐng)域做了8年了,越來越覺得數(shù)學的重要?!?/p>

“希望我那淺薄的數(shù)學底子能跟得上,堅持堅持!'

“希望自己能學到點,數(shù)學虐我千百遍,我待數(shù)學如初戀!”

“自己在學習算法與數(shù)據(jù)結(jié)構(gòu)時,就遇到了基本的數(shù)學思想與計算公式,來計算時間復(fù)雜度。需要從新拿起數(shù)學,正想著看視頻學習高數(shù),但學的又太多與編程無關(guān)的知識,太浪費時間,這樣的專欄果斷下單,跟著大神學習,提高效率,降低成本,時間太重要!”

“第一時間購買,數(shù)據(jù)結(jié)構(gòu)和算法很重要,但是很多算法又離不開數(shù)學!”

“已經(jīng)迫不及待了!”

......

而其中,也有一位讀者的留言讓我頗為感動:

圖片

“可能我一輩子也沒法成為頂級程序員,可我現(xiàn)在就想開始改變了?!?/strong>再渺小的人物也有遠大的志向,不論我們身處程序員哪一等級,只要我們心中有光,并為之努力奮斗,便都是頂級人才!就讓這本程序員補數(shù)學的絕佳伴侶《程序員的數(shù)學基礎(chǔ)課 從理論到Python實踐》陪伴著我們一同前行,創(chuàng)造黑魔法,成為優(yōu)秀的程序魔導師吧!

加油!相信自己!

圖片

(圖靈獎)

內(nèi)容簡介:

1.緊緊圍繞程序員的需求。

數(shù)學的課題非常廣泛,但本書沒有涉及數(shù)學領(lǐng)域的全部課題,而是從程序員的需求出發(fā),精心挑選了編程所需的常用知識點,并實現(xiàn)學以致用。

2.結(jié)合生動的案例和形象的比喻解讀難點。

降低技術(shù)理解的門檻,讓程序員更容易理解數(shù)學背后的邏輯,并對實際生產(chǎn)問題進行數(shù)學建模,進而設(shè)計出更有效的算法,編寫出更優(yōu)雅的代碼。

3.注重編程實踐。

除了闡述理論知識,書中還提供了要通過大量實踐才能積累的寶貴經(jīng)驗,讓讀者有機會親自動手編寫Python 代碼,進而加深理解。

4.提供源代碼下載。

文章編輯:羅夢婷  |  審校:劉鑫
參考來源:
https://time./column/article/70844
維基百科
《程序員的數(shù)學基礎(chǔ)課 從理論到Python實踐》 前言、第一章、第二章、第三章

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多