|
對(duì)于很多初學(xué)者來說,學(xué)習(xí)的基礎(chǔ)不扎實(shí)的居多,因此很多人懷疑懷疑這將是學(xué)習(xí)單片機(jī)開發(fā)不可逾越的大山,對(duì)未來沒有足夠的信心。總的來說,知識(shí)儲(chǔ)備不是學(xué)習(xí)單片機(jī)開發(fā)的必備條件,但龐大的知識(shí)儲(chǔ)備對(duì)學(xué)習(xí)單片機(jī)開發(fā)大有助益。
這個(gè)問題,其實(shí)和“英語不好,可以學(xué)習(xí)編程嗎?”同屬一類。不可否認(rèn),英語基礎(chǔ)好對(duì)于學(xué)習(xí)編程確實(shí)是很有幫助的,但它并不是學(xué)習(xí)編程不可跨越的鴻溝。事實(shí)上,這并非無法克服。
注意,基礎(chǔ)薄弱并不等于 0 基礎(chǔ),如果是這樣,那在開發(fā)設(shè)計(jì)的過程中,確實(shí)需要適當(dāng)?shù)貝貉a(bǔ);如果數(shù)學(xué)基礎(chǔ)很差(例如僅有小學(xué)功底),就需要在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的過程中,有意識(shí)地惡補(bǔ)一下數(shù)學(xué)。這里所謂的惡補(bǔ),不建議讀者無目的地單純學(xué)數(shù)學(xué)知識(shí),而是在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的過程中,遇到搞不懂的數(shù)學(xué)運(yùn)算,再去刻意地翻閱相關(guān)資料。
舉個(gè)簡(jiǎn)單的例子,評(píng)判一個(gè)算法的時(shí)間復(fù)雜度,那么下面 C 語言代碼的復(fù)雜度是多少呢?
i = 1;
while( i < n ){
i = i * 2;
}
對(duì)于此段代碼來說,我們只需要求出 while 循環(huán)中代碼(也就是第 3 行代碼)執(zhí)行的次數(shù),即可輕松得到這段代碼的時(shí)間復(fù)雜度。可以看到,循環(huán)條件為 i<n,而變量 i 的值每經(jīng)歷一次循環(huán)都會(huì)翻倍,因此假設(shè)有一個(gè)臨界值 m,能恰好使 2m = n,此時(shí)循環(huán)將會(huì)終止,程序運(yùn)行結(jié)束。
求這段代碼的時(shí)間復(fù)雜度,只需要求出 m 的值即可。這就需要我們具備對(duì)數(shù)運(yùn)算的能力。此時(shí),如果讀者無法理解 m 值的由來,就需要惡補(bǔ)一下關(guān)于數(shù)學(xué)中對(duì)數(shù)運(yùn)算的相關(guān)知識(shí)。
當(dāng)然,對(duì)于絕大多數(shù)的數(shù)學(xué)運(yùn)算,也可以借助計(jì)算器或者網(wǎng)絡(luò)工具來計(jì)算得出。事實(shí)上很多工作,我們完全不必親力親為,要善于運(yùn)用網(wǎng)絡(luò)來解決遇到的難題。在實(shí)際開發(fā)中,很多網(wǎng)站都能提供幫助,例如 C++ 中可以使用 STL 標(biāo)準(zhǔn)庫(kù),Python 中可以使用 collections 模塊等等。這意味著,我們的項(xiàng)目變成了已封裝好的模塊的組合應(yīng)用,只需簡(jiǎn)單了解各個(gè)模塊,即可實(shí)現(xiàn)最初的目的。
讀者可能會(huì)說,學(xué)習(xí)單片機(jī)開發(fā)肯定是要具備相關(guān)知識(shí)的,沒有基礎(chǔ)空中樓閣也不能落地。這個(gè)是肯定的,只要讀者具備一定的學(xué)習(xí)能力,都可以學(xué)會(huì)。我認(rèn)為,更多的是要求我們具備一定的問題分析能力和空間想象力,項(xiàng)目只是C單片機(jī)語言的一種具現(xiàn)形式。總的來說,無論是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)還是學(xué)習(xí)算法,而至于知識(shí)儲(chǔ)備,龐大更好,沒有就要學(xué),這個(gè)直接決定最終的終點(diǎn)。 |
評(píng)分
-
查看全部評(píng)分
|