01-為什么需要學(xué)習(xí)編程?「編程百問(wèn)」
1. 為什么需要學(xué)習(xí)編程?
你好,我是悅創(chuàng)。
今天,我將為你開(kāi)啟悅創(chuàng)的:編程百問(wèn)。如今,學(xué)習(xí)編程的人分為兩類,一類是程序員,另一類是期望成為程序員的人。
編程這個(gè)事兒,在大多數(shù)人眼中還是一種特定領(lǐng)域的、專門的技能,認(rèn)為學(xué)的人都是需要以此謀生的。
其實(shí),在小編基礎(chǔ)編程的五年以來(lái),逐漸發(fā)現(xiàn):在不久的將來(lái)(也許三五年,也許十來(lái)年之后),編程將從一個(gè)職業(yè)技能逐步蛻變?yōu)槁殘?chǎng)通用技能。
對(duì)此,我們可以類比“識(shí)字”這個(gè)技能來(lái)看——
在十年前,大多數(shù)老百姓都不認(rèn)識(shí)母語(yǔ)文字。當(dāng)年具備了“認(rèn)字”這一技能的人,就可以獲得比大多數(shù)人更優(yōu)越的工作環(huán)境,報(bào)酬更高的職位。你看,在那時(shí)識(shí)字無(wú)疑是一種必備的職業(yè)技能。
但到了今天,識(shí)字率已經(jīng)差不多100%了,具備此技能已經(jīng)不再是職場(chǎng)的加分項(xiàng)了。相反,如果在今天不認(rèn)字,那恐怕注定只能從事低端工作了。而現(xiàn)如今的職場(chǎng)環(huán)境,要比之前要求的多,除了基本的電腦辦公軟件,要求會(huì)編程,也在各個(gè)互聯(lián)網(wǎng)公司的面試中開(kāi)始蔓延開(kāi)來(lái)。
覺(jué)得還不夠理解?其實(shí),類似的技能還有:
駕駛——汽車工業(yè)發(fā)展起來(lái)后,職業(yè)司機(jī)越來(lái)越少,駕駛逐漸成為人們的通用技能。
在未來(lái),編程就會(huì)成為人人都會(huì)做的事情,作為勢(shì)必要踏入職場(chǎng)中的一員,除了要具備聽(tīng)說(shuō)讀寫本國(guó)語(yǔ)言的能力外,還需要能夠讀寫代碼。
再來(lái)一個(gè)例子,你就懂了:
假如你是一名記者,這個(gè)時(shí)候你的職業(yè)是可以和我做?中文采訪?采訪。ok,這顯然很好理解。那這個(gè)時(shí)候,如果你會(huì)英文,那你就可以做:英文采訪?。你看,這樣就能更好的輔助你是不是。
不久的將來(lái),職業(yè)寫代碼的人,將越來(lái)越少。取而代之的,編程將是每個(gè)職業(yè)人的必備技能,擁有更多技能的人,就更有拿到好 offer,升職加薪的機(jī)會(huì)。
即便現(xiàn)在一時(shí)之間無(wú)法達(dá)到社會(huì)全員編程的地步,至少是朝著這個(gè)方向發(fā)展,未來(lái)3年或5年,編程將成為互聯(lián)網(wǎng)從業(yè)者的必修課。所以,在此我們要把握這個(gè)機(jī)會(huì),勇敢的迎上新時(shí)代的機(jī)遇,只有把握先機(jī)的人,才會(huì)在未來(lái)的發(fā)展中有一席之地。
2. 那么編程的核心是什么?
從語(yǔ)言特征(詞匯、語(yǔ)法等)的角度來(lái)講,最復(fù)雜的編程語(yǔ)言遠(yuǎn)比最簡(jiǎn)單的自然語(yǔ)言簡(jiǎn)單得多?。
我們學(xué)習(xí)各種自然語(yǔ)言是為了日常生活與人交流、收發(fā)信息,那么,學(xué)習(xí)編程語(yǔ)言又是為什么呢?
其實(shí)是為了用編程語(yǔ)言來(lái)描述事物、概念,以及它們之間的相互關(guān)系和運(yùn)行方式,將我們身處在的大千世界轉(zhuǎn)化為一臺(tái)計(jì)算機(jī)能夠理解的電信號(hào),驅(qū)動(dòng)硅晶金屬構(gòu)造的計(jì)算機(jī)部件去完成任務(wù)!我們學(xué)會(huì)了這門語(yǔ)言,用來(lái)和計(jì)算機(jī)交流,再反過(guò)來(lái)作用于自己,創(chuàng)造更多的價(jià)值。
編程的核心?在于通過(guò)各種各樣的算法去實(shí)現(xiàn)具體的業(yè)務(wù)邏輯,把繁雜的過(guò)程抽象化、可計(jì)算化。
從純粹軟件的角度講,甚至可以說(shuō):算法 + 數(shù)據(jù) == 計(jì)算機(jī)程序?。
受過(guò)計(jì)算機(jī)科班教育的人一定上過(guò)一門課:數(shù)據(jù)結(jié)構(gòu),這門課是計(jì)算機(jī)科學(xué)的基礎(chǔ),它的核心內(nèi)容就是各式各樣的算法,它們是幾代計(jì)算機(jī)科學(xué)家從解決現(xiàn)實(shí)問(wèn)題中提取出的套路——這些才是編程的核心。
3. 經(jīng)得起時(shí)間考驗(yàn)的通識(shí)技能
從計(jì)算機(jī)技術(shù)從誕生起就處在飛速發(fā)展之中。編程語(yǔ)言從無(wú)到有,從少到多,從最初的01代碼,機(jī)器語(yǔ)言到后來(lái)百花齊放的高級(jí)語(yǔ)言,此消彼長(zhǎng),興衰交替?!井?dāng)然,這里還是要說(shuō):不管計(jì)算機(jī)如何發(fā)展,底層終將只識(shí)別:0、1?!?/p>
各種工具、框架更是日新月異,各領(lǐng)風(fēng)騷三五年乃至三五月就被淘汰者成百上千。但是經(jīng)由現(xiàn)實(shí)問(wèn)題中提煉出來(lái)的經(jīng)典算法,卻經(jīng)得起時(shí)間的考驗(yàn)?!竞竺娼o你講:算法是個(gè)啥東西】
這些經(jīng)典算法是計(jì)算機(jī)發(fā)展過(guò)程中世界上最聰明的一小撮人千錘百煉出的,解決某些模式問(wèn)題的方法和策略。
這些方法和策略基于人類幾千年文明史的思維積淀,又經(jīng)歷了最嚴(yán)格的數(shù)學(xué)分析和驗(yàn)證,本身既是人類文明的結(jié)晶,同時(shí)又是一種有效的思維訓(xùn)練。這種邏輯思維能力,也能用于平時(shí)的生活中解決問(wèn)題,當(dāng)你的邏輯思維被打通,你會(huì)發(fā)現(xiàn)沒(méi)什么難事,都會(huì)有解決方法。
用數(shù)值表達(dá)現(xiàn)實(shí)事物,用運(yùn)算描述任務(wù)目標(biāo),再通過(guò)算法處理數(shù)據(jù)找到達(dá)到目標(biāo)的最優(yōu)化路徑——這個(gè)思維的形成過(guò)程,遠(yuǎn)比學(xué)會(huì)模型本身更為難得。
經(jīng)過(guò)這種思考訓(xùn)練內(nèi)化出的思維能力,也是學(xué)習(xí)者可以相伴終身的助力。
4. 算法究竟是個(gè)啥東西?
算法,究竟是什么呢?(令人抓耳撓腮,想不明白)
編程百問(wèn)會(huì)持續(xù)更新,就簡(jiǎn)單分享一下兩個(gè)概念:廣義算法、狹義的算法。
廣義而言,做一件事情/解決一個(gè)問(wèn)題的方法,就是算法。
比如:Case1:烙餅得把面粉加水和成團(tuán),搟成片,加油鹽后卷成卷切成大面劑子,面劑子封口后搟成圓形,上鍋烙,反幾次直到兩面焦黃,出鍋乃成——這是烙餅的“算法“。是不是瞬間 Get! Case2:做條裙子要先量尺寸,再裁布,然后縫紉鑲邊裝拉鎖——這是裙子制作的“算法“?!?/p>
所有的算法都體現(xiàn)為一個(gè)過(guò)程:
這個(gè)過(guò)程由若干工序(或稱為步驟)組成;
這些步驟按照一定的流程來(lái)加工某些原料;
最終產(chǎn)生某種結(jié)果。
當(dāng)然,要說(shuō)起來(lái),萬(wàn)事萬(wàn)物都有過(guò)程——一個(gè)東西放在那里不動(dòng)還會(huì)生銹老化呢,都有“結(jié)果“的產(chǎn)出——比如鐵銹。你是不是會(huì)想,那是不是萬(wàn)事萬(wàn)物皆為算法呢?
所以不用搞得那么玄妙,算法,原本就是人類創(chuàng)造的概念,四季更迭、萬(wàn)物消長(zhǎng)這類“上帝的算法”并不在我們的討論范圍內(nèi)。
我們關(guān)心的是:那些能夠?yàn)槲覀兺瓿扇蝿?wù)或者解決問(wèn)題的方法。換言之,我們討論的算法一定有明確的目標(biāo),最終的產(chǎn)出也是為了達(dá)到目標(biāo)。
那么總結(jié)一下,算法的幾個(gè)重點(diǎn)要素就是:
1)目標(biāo)
2)流程
3)原料
4)產(chǎn)出
小貼士:其中的流程是由若干步驟組成的,既然要產(chǎn)出結(jié)果,就不能沒(méi)完沒(méi)了。所以,流程中的步驟必須是有限的。這一點(diǎn)也叫做算法的有限性。
5. 計(jì)算機(jī)領(lǐng)域的算法「狹義的算法」
作為廣義算法的一個(gè)分支,計(jì)算機(jī)算法自然也具有前面說(shuō)的幾個(gè)要素。廣義算法流程的有限性對(duì)與計(jì)算機(jī)算法同樣適用,此外,計(jì)算機(jī)算法的任何步驟都需要:
有確切的定義 ——?確定性。 能夠被分解為計(jì)算機(jī)可執(zhí)行的基本操作,并且每個(gè)操作都能可以在有限時(shí)間內(nèi)完成 ——可行性。
計(jì)算機(jī)算法的流程實(shí)則是一個(gè)有限的操作序列,具體操作通過(guò)計(jì)算機(jī)指令來(lái)實(shí)現(xiàn)。
至于原料和產(chǎn)出,計(jì)算機(jī)處理不了面粉布匹,它能處理的只有數(shù)據(jù)而已。因此,無(wú)論是“原料”還是“產(chǎn)出”,于計(jì)算機(jī)算法而言,都是數(shù)據(jù)。
所以對(duì)于計(jì)算機(jī)算法而言,我們將原料稱為輸入數(shù)據(jù),簡(jiǎn)稱輸入(Input),產(chǎn)出稱為輸出數(shù)據(jù),簡(jiǎn)稱輸出(Output)。
那么把上面幾點(diǎn)綜合起來(lái),計(jì)算機(jī)算法就是(劃重點(diǎn)):
一個(gè)有限的、通過(guò)計(jì)算機(jī)指令實(shí)現(xiàn)的可執(zhí)行操作序列; 這個(gè)序列接受輸入; 對(duì)輸入數(shù)據(jù)進(jìn)行有限步驟的處理; 最終產(chǎn)生確定的輸出,用以實(shí)現(xiàn)算法的目標(biāo)。

這個(gè)定義這么看起來(lái)貌似有點(diǎn)亂。沒(méi)關(guān)系,我們可以從內(nèi)外兩個(gè)方面來(lái)直觀地了解一下算法是什么。
小貼士:從現(xiàn)在開(kāi)始,我們所說(shuō)的“算法”,如無(wú)特殊說(shuō)明,指的都是計(jì)算機(jī)算法。
一講就停不下來(lái)了,算法的剩下部分,請(qǐng)聽(tīng)下回分說(shuō)。
“AI悅創(chuàng)·推出輔導(dǎo)班啦,包括「Python 語(yǔ)言輔導(dǎo)班、C++輔導(dǎo)班、算法/數(shù)據(jù)結(jié)構(gòu)輔導(dǎo)班、少兒編程、pygame 游戲開(kāi)發(fā)」,全部都是一對(duì)一教學(xué):一對(duì)一輔導(dǎo) + 一對(duì)一答疑 + 布置作業(yè) + 項(xiàng)目實(shí)踐等。QQ、微信在線,隨時(shí)響應(yīng)!V:Jiabcdefh
”
黃家寶丨AI悅創(chuàng)
隱形字
攝影公眾號(hào)「悅創(chuàng)攝影研習(xí)社」
在這里分享自己的一些經(jīng)驗(yàn)、想法和見(jiàn)解。
長(zhǎng)按識(shí)別二維碼關(guān)注


