<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          邏輯是個好東西

          共 3630字,需瀏覽 8分鐘

           ·

          2022-07-04 15:42


          導(dǎo)讀:編程的必要知識,也是日常的基本能力。


          作者:Crossin先生
          來源:Crossin的編程教室(ID:crossincode)




          “英語不好能不能學(xué)編程?”
          “編程是不是對數(shù)學(xué)要求很高?”

          翻譯一下就是:數(shù)學(xué)/英語是否是學(xué)編程先決條件?

          我覺得這個問題有點像,身高不高能不能打籃球一樣。雖然對于職業(yè)籃球運動員來說,身高是非常關(guān)鍵的因素,但對于普通籃球愛好者,甚至一個籃球相關(guān)從業(yè)人員來說,這并不是非要不可的條件。放到編程上,數(shù)學(xué)和英語都很重要,但:

          1. 在入門階段,你完全不用在意這些,照著一本教程好好跟著模仿就行
          2. 對于大部分的日常開發(fā)來說,中學(xué)程度的數(shù)學(xué)和英語水平已經(jīng)可以應(yīng)付
          3. 和身高這種先天條件不同,英語和數(shù)學(xué)是可以通過學(xué)習(xí)提高的,哪里不足補哪里唄。網(wǎng)上流行一句話:“以大多數(shù)人的努力程度之低,根本輪不到拼天賦。”你能長期堅持背背單詞,看看書,就足以提升自己。總是把XX不好掛在嘴上恐怕更多是在給自己找借口。

          不過,有一項能力,確實是在學(xué)習(xí)編程初期就需要足夠重視的。然而這一點,很多教程不會專門強調(diào),相關(guān)書籍也往往假定你已經(jīng)掌握,以至于很多學(xué)習(xí)者并沒有意識到自己在此方面的薄弱,為之后的學(xué)習(xí)留下隱患。我要說的就是:

          • 邏輯

          某種角度來說,邏輯可部分算作是數(shù)學(xué),在高中數(shù)學(xué)課本中就有相關(guān)內(nèi)容。這部分內(nèi)容也恰好是我們學(xué)編程時最需要了解的基礎(chǔ)。



          01 布爾代數(shù)

          真(1)、假(0)兩種狀態(tài),以及與(and)、或(or)、非(not)三種基本運算組成。布爾代數(shù)看似簡單,卻與數(shù)字電路中開和關(guān)兩種狀態(tài)相對應(yīng),是計算機的邏輯基礎(chǔ)。你可能聽說過,電腦上的一切在內(nèi)部都是由0和1所表示,那換句話說,計算機的所有行為,本質(zhì)都是由布爾邏輯所實現(xiàn)的。

          在編程語言中,布爾類型(bool)也是極為重要的存在。沒有它,我們就做不了條件判斷,也就無從控制程序的執(zhí)行。Python 的 if、while 語句都必須依賴布爾類型作為判斷條件。

          因此,即使你不想深入學(xué)習(xí)邏輯,布爾代數(shù)的基本規(guī)則也是無論如何必須了解的。簡單來說,就是下面這張“真值表”

          p
          q
          not p
          p and q
          p or q
          1
          1
          0
          1
          1
          0
          1
          1
          0
          1
          1
          0
          0
          0
          1
          0
          0
          1
          0
          0

          這些基本規(guī)則又會組合出更復(fù)雜的邏輯,比如: 

          not (p or q) 等價于 (not p) and (not q)

          (示例:“不是管理員或者會員”相當(dāng)于“不是管理員且不是會員”)

          實際開發(fā)中面臨的邏輯判斷復(fù)雜多樣,但歸根結(jié)底還是會轉(zhuǎn)化到最基本的這幾個規(guī)則上。

          思考題1:如何用邏輯語言表示“通過活動注冊的新用戶或者充值超過100元的老用戶,內(nèi)部人員除外”


          02 命題邏輯

          真值唯一的陳述句叫做命題,不能分解成更簡單的命題叫做原子命題。比如,“1+1=2”是原子命題,“所有貓都是白的”是原子命題(假命題),“存在外星人”也是原子命題(雖不能判斷真假,但結(jié)果必然唯一)。命題和邏輯運算相結(jié)合,又會產(chǎn)生更復(fù)雜的邏輯。

          比如充分必要條件

          如果命題p必然推出命題q,那么p就是q的充分條件,q就是p的必要條件,記作 p→q。

          比如漢樂府的詩句“山無棱,天地合,乃敢與君絕”,用邏輯語言表達是怎樣?

          (山無棱 and 天地合) → 與君絕?

          想一想是不是不大對勁?根據(jù)語義來看,“山無棱”、“天地合”是“與君絕”的必要條件,如果“與君絕”為真,那必然存在“山無棱”和“天地合”,反過來卻未必。所以正確的邏輯是:

          與君絕 → (山無棱 and 天地合)

          再比如三段論

          ①不掌握基本的邏輯知識就無法學(xué)好編程
          ②Python是一種編程語言
          所以,學(xué)好Python需要掌握基本的邏輯知識

          一個大前提加上一個小前提,可以推導(dǎo)出一個結(jié)論。這是日常使用最多的論證形式,看似簡單,但也總有人在這上面犯糊涂。舉個錯誤的例子:

          ①有錢人都用 iPhone XS Max
          ②我用 iPhone XS Max
          所以,我是有錢人

          這些邏輯關(guān)系、推導(dǎo)過程與程序中的邏輯結(jié)構(gòu)息息相關(guān)。如果你對此不能保持思路清晰,寫出的代碼很可能與預(yù)期有出入,或是在一些特殊情況下存在漏洞。

          思考題2:一個每天簽到領(lǐng)獎的小功能,在每天的11~13點和18~20點開放,普通用戶每天可以領(lǐng)取一次,會員用戶可以在每個時段分別領(lǐng)取一次。如何實現(xiàn)這段程序的邏輯結(jié)構(gòu)?(我時常拿這個作為面試題,很多人都不能在短時間內(nèi)給出正確的答案)



          03 歸納

          有時候,我們并不能通過邏輯推導(dǎo)出必然的結(jié)論,但仍然可以通過一系列的經(jīng)驗和已有結(jié)論,找出其中基本遵循的規(guī)律。

          比如:

          ①X團隊歷來給所有成員都配備Dell筆記本作為工作電腦
          ②C老師最近剛加入X團隊
          通過這兩點,我們可以推導(dǎo)出,C老師很可能也使用Dell筆記本。

          但你要清楚歸納的結(jié)論并不必然為真,如果遇到邏輯推理出的必然反例,即使再不符合常理,歸納的結(jié)論也會被推翻。

          比如除了上述兩點,我們還知道:

          ③C老師簽約了蘋果公司代言
          ④蘋果公司的代言人不得使用其他品牌的手機和筆記本
          那么,上述“C老師使用Dell筆記本”的結(jié)論便不成立。

          雖然歸納不是必然,但在解決問題時依然重要。尤其在開發(fā)中遇到錯誤需要 debug(調(diào)試)的時候,并不是所有錯誤都可以直接從報錯信息看出問題(比如 Python 開發(fā)時經(jīng)常出現(xiàn)的亂碼問題),這時如果有豐富的經(jīng)驗和較強的歸納能力,效率會大大提升。這也是資深程序員和初級程序員之間差距的重要體現(xiàn)。

          現(xiàn)在網(wǎng)上的編程教程鋪天蓋地,不過呢,大家都喜歡寫寫怎么編個爬蟲抓圖片、抓數(shù)據(jù)之類,卻很少有文章愿意講講背后的思維過程。寫了讀者也不愿意看,因為看不出什么效果,哪有調(diào)幾個函數(shù)就出結(jié)果來得爽快。

          以至于你發(fā)現(xiàn),照著例子也能寫個一樣的代碼出來,但是一旦報錯或者沒有預(yù)期的結(jié)果,就完全抓瞎了,只能把參數(shù)東改改西改改,反復(fù)運行,期待某一次奇跡出現(xiàn)。以后換個新的問題,依然不知道從何下手。

          這就是因為并未理解程序背后的邏輯。我常在答疑群里說:遇到程序出錯了不要去猜!要去做假設(shè),再通過輸出驗證假設(shè),最終定位問題所在。

          文本只是一個引子,不可能讓你對邏輯融會貫通。但前面講的那些邏輯基礎(chǔ),任何一本《離散數(shù)學(xué)》或者《邏輯學(xué)》的書上都有,而且僅僅是最開始的一小部分就很受用了。找一本來看一看。

          真想好好學(xué)編程,不要只局限于讀網(wǎng)上的教程,這些都是別人嚼爛喂到你嘴里的。如果你只能接受這樣二次加工過的知識,而沒有自己咀嚼的過程,那么你學(xué)習(xí)上的乳牙永遠都掉不了。

          了解邏輯學(xué)和思維具有邏輯性并不完全等價。有人沒學(xué)過邏輯,說話做事一樣很有邏輯性,而有的人雖然學(xué)過邏輯,也不過是當(dāng)做數(shù)學(xué)公式在背,整天“邏輯思維”掛嘴邊不代表做事就講邏輯。

          在網(wǎng)絡(luò)上,你經(jīng)常可以看到一些邏輯謬誤,舉幾個常見的例子:

          • 以偏概全:你說用X產(chǎn)品遇到了Y問題。有人就反駁說,我也用X產(chǎn)品,我身邊人也用X產(chǎn)品,都沒有問題,所以你一定是故意黑。
          • 關(guān)聯(lián)當(dāng)因果:某地區(qū)的人喜歡喝生牛乳,同時該地區(qū)人平均壽命高于周邊地區(qū),所以喝生牛乳可以延年益壽。
          • 非黑即白:網(wǎng)上都在抨擊某個產(chǎn)品竊聽用戶聊天,并且之前也有發(fā)垃圾廣告的前科。你說竊聽從技術(shù)上來說不現(xiàn)實,目前也缺少明確證據(jù)。然后就有人認(rèn)為你不一起噴,你就是水軍、洗地。
          • ……

          類似的不講邏輯充斥著網(wǎng)絡(luò)。

          我們的周圍有很多偏見、歧視的觀念,還有很多喜歡爭論的“杠精”,歸根結(jié)底,你會發(fā)現(xiàn)這些人都有一個共同的特征:邏輯混亂。比如,之所有有人會有性別歧視、地域歧視,就是因為以偏概全地由一些特例而對整體作出推論。而偷換概念、顛倒因果、動機揣測,更是杠精們喜歡濫用的邏輯謬誤。

          不僅僅是在編程上,如果我們更講究邏輯,這個世界的矛盾就會少很多。即使沒經(jīng)過專門的學(xué)習(xí)和訓(xùn)練,只要保持謙遜,學(xué)會傾聽,以包容的心態(tài)對待不同的聲音,多去思考一下對方的觀點,從不同的角度看問題,你的邏輯就會更完備。

          感謝轉(zhuǎn)發(fā)和點贊的各位~


          延伸閱讀??


          延伸閱讀《因果論:模型、推理和推斷》


          干貨直達??


          更多精彩??

          在公眾號對話框輸入以下關(guān)鍵詞
          查看更多優(yōu)質(zhì)內(nèi)容!

          讀書 | 書單 | 干貨 | 講明白 | 神操作 | 手把手
          大數(shù)據(jù) | 云計算 | 數(shù)據(jù)庫 | Python | 爬蟲 | 可視化
          AI | 人工智能 | 機器學(xué)習(xí) | 深度學(xué)習(xí) | NLP
          5G | 中臺 | 用戶畫像 數(shù)學(xué) | 算法 數(shù)字孿生

          據(jù)統(tǒng)計,99%的大咖都關(guān)注了這個公眾號
          ??
          瀏覽 33
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆成人久久精品二区三区91 | 一区二区专区无码 | 逼特逼视频免费 | 爱爱短视频电影无码免费 | 狠狠干,狠狠操 |