自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

編程新手:看懂很多示例,卻依然寫(xiě)不好一個(gè)程序

開(kāi)發(fā) 開(kāi)發(fā)工具
最近在和學(xué)員的溝通中,發(fā)現(xiàn)不少初學(xué)者面臨這樣一個(gè)問(wèn)題:了解了一些基本的語(yǔ)法,看得懂書(shū)上的示例,但是面臨一個(gè)新的編程問(wèn)題時(shí),依然感到無(wú)從下手。關(guān)于初學(xué)者很難獨(dú)立完成代碼,我的幾點(diǎn)經(jīng)驗(yàn)分享。

最近在和學(xué)員的溝通中,發(fā)現(xiàn)不少初學(xué)者面臨這樣一個(gè)問(wèn)題:了解了一些基本的語(yǔ)法,看得懂書(shū)上的示例,但是面臨一個(gè)新的編程問(wèn)題時(shí),依然感到無(wú)從下手。究其原因,主要是兩個(gè)方面:

  • 整體上,不曉得如何把問(wèn)題轉(zhuǎn)化為程序語(yǔ)言。
  • 細(xì)節(jié)上,不知道用什么方法去實(shí)現(xiàn)某個(gè)功能。

比如我們碼上行動(dòng)的編程實(shí)例里有一道題,大意是:生成 200 個(gè)優(yōu)惠碼,每個(gè)優(yōu)惠碼由8位字母組成(包括大小寫(xiě))。

當(dāng)然題目本身難度不高,和我們公眾號(hào)【每周一坑】欄目里的題相比,這個(gè)算是小 case 了。不過(guò)如果你是一個(gè)剛剛接觸編程不久,才掌握條件判斷、循環(huán)、列表的新手來(lái)說(shuō),還是有點(diǎn)小挑戰(zhàn)的。

以這題來(lái)說(shuō),有人是直接對(duì)生成一串字符沒(méi)有想法,不知道怎么辦。更多的人可能會(huì)有些思路,但在具體的環(huán)節(jié),比如如何產(chǎn)生隨機(jī)字母、如何拼成字符串、如果判斷重復(fù)上遇到麻煩。從學(xué)員的評(píng)論中可以看出,很多人驚呼:原來(lái)還有 xxx 這個(gè)函數(shù)、還有 yyy 這個(gè)模塊,完全都不知道。

那么在開(kāi)發(fā)程序的時(shí)候,怎么去解決類(lèi)似的問(wèn)題,并且找到合適的方法呢?我簡(jiǎn)單分享下幾點(diǎn)經(jīng)驗(yàn):

1. 學(xué)會(huì)分解問(wèn)題

有個(gè)關(guān)于數(shù)學(xué)家當(dāng)消防員的笑話:

消防隊(duì)長(zhǎng)問(wèn):如果巷子里一個(gè)貨倉(cāng)著火了怎么?數(shù)學(xué)家答:把消火栓接到軟管上,打開(kāi)水龍頭,把火澆滅。隊(duì)長(zhǎng)說(shuō):完全正確!那如果你來(lái)到巷子發(fā)現(xiàn)貨倉(cāng)沒(méi)著火怎么處理?數(shù)學(xué)家答:把貨倉(cāng)點(diǎn)著,這樣問(wèn)題簡(jiǎn)化到一個(gè)已知問(wèn)題上了。

拋開(kāi)笑話本身的夸張,作為一個(gè)程序員,你也需要有類(lèi)似的邏輯思維:分解和轉(zhuǎn)化問(wèn)題。

  • 生成 200 個(gè)優(yōu)惠碼 => 生成 1 個(gè)優(yōu)惠碼,循環(huán) 200 次
  • 生成 1 個(gè) 8 位優(yōu)惠碼 => 生成 1 個(gè)字符,循環(huán) 8 次
  • 生成 1 個(gè)隨機(jī)字符 => 生成一個(gè)隨機(jī)數(shù),轉(zhuǎn)成字符

生成一個(gè)隨機(jī)數(shù),這是個(gè)我們很早就提過(guò)的一個(gè)問(wèn)題,用 random 模塊即可實(shí)現(xiàn)。那么這個(gè)問(wèn)題的思路就已經(jīng)比較清楚了。剩下的就是處理好過(guò)程中的細(xì)節(jié):如果從數(shù)字轉(zhuǎn)換為字符、如何循環(huán)、如何拼接等等。

不過(guò)肯定會(huì)有同學(xué)說(shuō),我都不知道數(shù)字還能轉(zhuǎn)成字符。也會(huì)有同學(xué)表示,其實(shí)根本不用繞這個(gè)彎,明明可以直接生成隨機(jī)的字符。沒(méi)錯(cuò),就和點(diǎn)燃貨倉(cāng)的數(shù)學(xué)家一樣,我們這個(gè)邏輯沒(méi)問(wèn)題,但實(shí)際看來(lái)還是有點(diǎn)二。所以另外一個(gè)重要的經(jīng)驗(yàn):

2. 學(xué)會(huì)使用搜索

雖然大多數(shù)程序員在大學(xué)里的專(zhuān)業(yè)屬于計(jì)算機(jī)科學(xué)(science),但在企業(yè)中的角色卻是工程師(engineer)。也就是說(shuō),編程是一項(xiàng)更偏向?qū)嵺`而非理論的工作。我們的目標(biāo)是解決問(wèn)題,需要掌握的是解決問(wèn)題的手段和方法。對(duì)于程序員來(lái)說(shuō),搜索就是非常有效的一種尋找解法的途徑。

但可能很多沒(méi)有編程經(jīng)驗(yàn)的同學(xué)會(huì)覺(jué)得,學(xué)編程時(shí)通過(guò)搜索找到一個(gè)解法是一種“作弊”的方式,自己并沒(méi)有真正理解怎么解決問(wèn)題。這種想法大可不必。即使經(jīng)驗(yàn)豐富的程序員,也會(huì)在處理問(wèn)題之前,通過(guò)搜索來(lái)尋找有沒(méi)有更合適的解決方案。通過(guò)搜索找到解法這個(gè)行為本身會(huì)比寫(xiě)出這個(gè)小程序?qū)δ銇?lái)說(shuō)更有價(jià)值。這里我曾寫(xiě)過(guò)一篇,關(guān)于如何使用搜索引擎:編程初學(xué)者如何使用搜索引擎。

就優(yōu)惠碼這個(gè)問(wèn)題來(lái)說(shuō),通過(guò)一些簡(jiǎn)單的搜索,就可以發(fā)現(xiàn)不少類(lèi)似的問(wèn)題解法。當(dāng)然你不能去搜“如何制作 8 位優(yōu)惠碼”,而是搜“Python 生成隨機(jī)字符串”這樣的關(guān)鍵字。然后你就了解到:可以用 random 的 sample、shuffle,另外還有 string 這種模塊可以利用。

順便扯遠(yuǎn)些。有同學(xué)曾經(jīng)問(wèn)過(guò):你們的教程是不是包括了找工作需要的知識(shí)點(diǎn)。這也是一種類(lèi)似的誤區(qū)。我們不是去參加高考,按照考綱復(fù)習(xí)完備,然后再上考場(chǎng)?,F(xiàn)在的計(jì)算機(jī)行業(yè)可以說(shuō)比任何一個(gè)行業(yè)的更新都要快,你永遠(yuǎn)不可能“完全”掌握某個(gè)領(lǐng)域的知識(shí)之后再去開(kāi)發(fā),你需要不斷去面對(duì)新的技術(shù)和新的問(wèn)題。所以編程相關(guān)的知識(shí)是變化的,要掌握的是不變的解決方法。

知識(shí)的分布

況且對(duì)于任何一個(gè)領(lǐng)域來(lái)說(shuō),知識(shí)的分布就像這張圖,當(dāng)你越進(jìn)一步,你面對(duì)的知識(shí)空白就越多。這也是為什么很多同學(xué)學(xué)完基礎(chǔ)之后,表示找不到一本合適的教材來(lái)進(jìn)階。因?yàn)楦揪筒淮嬖谶@樣的教材。在初級(jí)階段,你提升能力的模式是 學(xué)習(xí)技能->拿技能去練習(xí),而到了一定程度之后,提升能力的方式則必須是 遇到問(wèn)題->想辦法去解決問(wèn)題,是一個(gè)由被動(dòng)變主動(dòng)的過(guò)程。所以,想更進(jìn)一步的同學(xué),不要去找教材,而是去找問(wèn)題,再用好“搜索”這個(gè)偉大工具去解決它。

我們秉持的教學(xué)方法也是一樣:我們不是給你教材,全互聯(lián)網(wǎng)的資源都應(yīng)該是你的教材。我們給你問(wèn)題,以及如何去找解決問(wèn)題的方法。

3. 學(xué)會(huì)查文檔

在程序員屆有這樣一個(gè)詞:RTFM(Read The Fuxxing Manual,去讀TMD文檔手冊(cè))

類(lèi)似還有一個(gè) STFW(Search The Fuxxing Web),就是對(duì)應(yīng)我前面說(shuō)的第 2 點(diǎn)。

我曾經(jīng)一位老師指著一本厚厚的編程教材跟我們說(shuō):你們根本不用去記這些函數(shù),只要用的時(shí)候知道去哪里查就足夠了。

搜索可以告訴你有哪些解決方法,而官方的文檔則是更明確的告訴你該怎樣使用,參數(shù)有什么限制,需要注意的地方等等。唯一遺憾的是,大多數(shù) Fuxxing Manual 都是英文寫(xiě)的。所以你說(shuō),英語(yǔ)不好到底能不能學(xué)編程。我只能說(shuō),可以,但強(qiáng)烈建議你好好補(bǔ)一下英語(yǔ)。(預(yù)告一下:我們已經(jīng)整理了一份適合 Python 學(xué)習(xí)的英語(yǔ)詞匯表,并做成了單詞本,即將放出。)

還是回到這道題目,通過(guò) Python 官方文檔,你就會(huì)知道 random 模塊還能做哪些隨機(jī)操作,以及 string 模塊可以生成哪些字符串。

我沒(méi)有找到特別好的 Python 官方文檔中文版,usyiyi.cn 這個(gè)算是相對(duì)新且完整的。如果各位有知道更好的,歡迎留言指出。

最后,還有提一點(diǎn)老生常談:

4. 不斷練習(xí),積累經(jīng)驗(yàn)

我已說(shuō)過(guò)無(wú)數(shù)遍:編程如樂(lè)器,學(xué)會(huì)語(yǔ)法只是開(kāi)始,還需要不斷練習(xí)來(lái)掌握。每個(gè)程序員都是一行行代碼堆出來(lái)的。如果你剛學(xué)編程不久,覺(jué)得自己缺少編程思維,經(jīng)常感嘆原來(lái)還有這種操作,寫(xiě)長(zhǎng)一點(diǎn)代碼就老出 bug 的話,相信我,你只是寫(xiě)得太少,看得太少。不用妄自菲薄,也不用急于求成,踏踏實(shí)實(shí)地先多練一練。等你把一本教程的示例代碼都自己在電腦上輸入運(yùn)行一遍之后,我們?cè)賮?lái)談?wù)勈裁词蔷幊趟季S。這不是什么我獨(dú)創(chuàng)的奇葩教學(xué)法,大多數(shù)程序員和計(jì)算機(jī)教師應(yīng)該都認(rèn)同這點(diǎn)。

【本文是51CTO專(zhuān)欄機(jī)構(gòu)“Crossin的編程教室”的原創(chuàng)文章,轉(zhuǎn)載請(qǐng)通過(guò)微信公眾號(hào)(rossincode)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2020-02-21 10:58:48

高質(zhì)量可維護(hù)代碼

2013-08-19 12:40:18

開(kāi)源項(xiàng)目

2016-07-26 13:47:49

程序員新手編程

2023-04-07 15:45:13

Emojicode開(kāi)源編碼語(yǔ)言

2022-03-24 14:42:19

Python編程語(yǔ)言

2022-01-04 09:01:10

開(kāi)源項(xiàng)目開(kāi)源技術(shù)

2021-10-10 12:45:13

編程語(yǔ)言開(kāi)發(fā)

2019-10-10 11:10:04

SpringBoot異步編程

2024-12-05 08:13:18

2010-08-31 15:04:39

2022-04-27 07:15:36

中臺(tái)產(chǎn)品微服務(wù)

2012-10-22 13:30:35

2022-02-28 08:07:17

Java類(lèi)開(kāi)發(fā)

2019-05-27 08:29:32

啟動(dòng)項(xiàng)目PMP

2009-06-16 11:11:00

基本規(guī)則Java程序

2010-03-08 16:36:53

攻略備案域名注冊(cè)淘寶網(wǎng)

2021-02-17 11:05:34

PythonPyQt代碼

2018-02-08 18:00:49

Spark文件測(cè)試

2019-04-30 09:05:16

項(xiàng)目啟動(dòng)PMP

2012-10-22 13:46:27

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)