我給新手程序員的實(shí)用建議
做一個(gè)高效的、充滿(mǎn)好奇心的問(wèn)題解決者吧!這會(huì)幫助你成為一名成功的程序員。
你是否曾經(jīng)遇到過(guò)這樣一種情況:你想解決一個(gè)問(wèn)題,并且你在 YouTube 或 Google 中找到了相關(guān)的教程。嗯,你覺(jué)得看會(huì)了,可真做起來(lái),卻止步不前,大腦一片空白。你感覺(jué)自己每一行代碼都看懂了,可一旦離開(kāi)了那個(gè)教程,就步履維艱。如果你在 HackerRank 或 LeetCode 上看過(guò)別人的解題過(guò)程,你就能體會(huì)到,一個(gè)有追求的程序員第一次看到這些挑戰(zhàn)時(shí),他會(huì)是何種感受。舉例來(lái)說(shuō),假設(shè)你正在學(xué)習(xí)一門(mén)新語(yǔ)言,在你剛開(kāi)始理解這門(mén)語(yǔ)言的基礎(chǔ)知識(shí)的時(shí)候,你看了一個(gè)教程,摩拳擦掌,結(jié)果發(fā)現(xiàn)自己無(wú)法獨(dú)立應(yīng)用學(xué)到的知識(shí),這反過(guò)來(lái)可能會(huì)導(dǎo)致你懷疑自己的知識(shí)和能力。
把教程付諸于實(shí)踐
你應(yīng)該從頭開(kāi)始嗎?如果你這么做,你可能很快就會(huì)發(fā)現(xiàn)自己重復(fù)學(xué)習(xí)了很多次相同的知識(shí)點(diǎn)。雖然從頭開(kāi)始并不一定是種浪費(fèi),但是,你該如何變得更高效呢?
死記硬背在編程中完全是行不通的。話(huà)雖如此,但你也不能夠忽視熟悉語(yǔ)法的重要性。因?yàn)椋烙浻脖澈宛B(yǎng)成習(xí)慣之間是有明顯區(qū)別的。習(xí)慣是很難打破的。要養(yǎng)成多使用編程語(yǔ)言的常規(guī)語(yǔ)法、函數(shù)、方法、模式、范式和構(gòu)造的習(xí)慣,這樣你才能掌握它。掌握一門(mén)編程語(yǔ)言需要大量的創(chuàng)造力和練習(xí)。練習(xí)語(yǔ)法是非常必要的,直到它們能在你的腦海中自然地浮現(xiàn),就像血液在血管里流動(dòng)一樣。
“問(wèn)題解決”的工作原理
那么,你該采取什么樣的方案呢?這實(shí)際上取決于許多因素。這些因素可以是任何東西,下至技術(shù)限制,上至用戶(hù)需要。世界上有無(wú)數(shù)的問(wèn)題,每個(gè)問(wèn)題都有許多解決方式。如何選擇一個(gè)最好的?這就需要 “問(wèn)題解決”(problem-solving)的技巧了。
下面是一個(gè)簡(jiǎn)單的例子。你需要把兩個(gè)數(shù) 相加 ,讓它們等于 6 。顯然,你有多種方式可供選擇:
3 + 3 = 6 或 4 + 2 = 6 或 5 + 1 = 6
同理,如果你需要讓兩個(gè)數(shù)字,經(jīng)過(guò)一次減法、乘法或除法運(yùn)算后,得到的結(jié)果為 6 。你仍然有很多選項(xiàng),包括:
8 - 2 = 6 或 12 / 2 = 6 或 3 * 2 = 6
每種方案都有它固有的限制,且各不相同。當(dāng)你在現(xiàn)實(shí)生活中嘗試做出一個(gè)高效的方案時(shí),你必須要考慮到所有的限制。這個(gè)方案可行嗎?有什么障礙嗎?有可操作性嗎?是否可擴(kuò)展呢?而如何最小化約束,并做出一個(gè)最優(yōu)方案,就取決于問(wèn)題類(lèi)型和業(yè)務(wù)需要。
練習(xí)很重要
編程的目標(biāo)不僅僅是解決問(wèn)題。因此,從工程視角理解代碼 如何 工作始終是一個(gè)優(yōu)勢(shì)。這就是代碼審查在企業(yè)級(jí)開(kāi)發(fā)中發(fā)揮作用的地方。編程的最低要求是具備基本的編碼知識(shí),包括語(yǔ)言的語(yǔ)法、函數(shù)和方法。歸根結(jié)底,“寫(xiě)代碼”是需要你去 寫(xiě) 的,所以練習(xí)總是有助于提高你的技能。流暢的寫(xiě)作和復(fù)雜方案的開(kāi)發(fā)都來(lái)自于持續(xù)的學(xué)習(xí)和訓(xùn)練。
學(xué)習(xí)編碼
我撰寫(xiě)和分享這篇文章,是為了鼓勵(lì)新程序員去探尋自己的內(nèi)心,尋找那個(gè)“優(yōu)秀的問(wèn)題解決者”。請(qǐng)不要停止相信自己。
要成功編碼,你需要培養(yǎng)許多習(xí)慣。下面是我在學(xué)習(xí)編碼時(shí)保持高效的方法:
一個(gè)包含語(yǔ)法、方法和函數(shù)速查手冊(cè) 總能應(yīng)付不時(shí)之需。
將問(wèn)題分解成更小的部分,便于追蹤。
嘗試?yán)斫獯a運(yùn)行的核心概念。
構(gòu)思解決方案時(shí),大可發(fā)揮你的創(chuàng)造力 —— 但剛開(kāi)始還是要注重基礎(chǔ)。
在練習(xí)時(shí),創(chuàng)建盡可能多的應(yīng)用和組件。
永遠(yuǎn)不要從 Stack Overflow/Exchange 等開(kāi)放平臺(tái)上復(fù)制/粘貼代碼,特別是在不了解上下文的情況下。
跟著教程做了一遍后,嘗試從頭開(kāi)始構(gòu)建所有內(nèi)容。即使你只能獨(dú)立完成一半,那也仍然是一個(gè)成就。
祝我們所有人好運(yùn)!