學習編程時應該更注重語法還是算法? | 知乎問答精選

 

A-A+

學習編程時應該更注重語法還是算法?

2019年01月10日 知乎問答精選 暫無評論 閱讀 6 ℃ 次

【馮東的回答(20票)】:

你走路的時候更注重小腿還是更注重大腿?學習寫作的時候更注重句子還是更注重段落?

這兩個比喻不是很恰當,但是有些方面和這個問題是相同的。首先,語法和算法都是基本的,丟了哪個都不行。第二,語法和算法都是基本的,它們在編程學習中所佔的比例總共不會超過一年吧?犯得上顧此失彼嗎?

再舉個不恰當的例子,如果你覺得可以通過省掉這兩者中的某一項或者把某一項學的夾生一些來優化你的編程學習之路,不妨想想簡化字這個東西到底真正幫助消除了多少文盲。想想漢字本身的認讀到底在我們的學習生涯裡佔多大比重。這個東西除了讓人再也不能書寫正體字之外毫無意義。

優化一個東西要想清楚是不是 hotspot 。否則就是 premature optimization 。

【Filestorm的回答(9票)】:

在精通了一門語言之後,我強烈建議把盡量多的時間放到算法本身上而非去學第二門第三門語言。尤其考慮到多種近似的語言有時反而會讓你混淆(比如在CPP/C#/JAVA之間跳一度就讓我總寫錯。。。不過我程序猿資歷不深總共也沒寫過十萬行代碼。)

真正的價值,是通過算法的深度體現出來的。若是見到號稱會十種語言的那種人,我第一感覺不是敬佩,而是深刻懷疑此人是臨時工出身。。。

【flamingtop的回答(5票)】:

既不是算法也不是語法,是「概念」,是what和why,而不是how。

上大學的時候給Bjarne Stroustrup寫郵件,問他該如何學習C++,他的回信是:

先嘗試去理解概念(concept)而不是語法。

我覺得這條建議可能不局限於C++。算法是重要的,但不是在同一個層次上的重要。

【張小寒的回答(3票)】:

作為一名曾經計算機專業的學生,個人覺得,剛開始學編程時,應多注意語法問題,比如封號;引號 「 」 花括號 { ?}等的書寫,甚至代碼的排列,這些小問題雖說不是很顯眼,但是當以後我們寫的代碼需要寫100行,甚至1000,10000行時,一個小小的問題都有可能影響我們的結果,儘管現在的編程平台都有糾錯功能,但僅僅都是語法上及其簡單的小問題,但是,頭腦簡單的電腦是不會像我們人一樣考慮問題,比如稍稍複雜一點的算法問題或者是自己的筆誤,這些都是我們在初期必須注意的問題,這就好比任何學任何東西,你的基本功越紮實,後來的成就也就相應的會多大,對於這些基本功的重要性我也不在此多說,相信誰都知道哈。

然而,在基本功紮實之後,對於一些簡單的問題,算法的作用不是很明顯,但是當你的問題是複雜的,算法的重要性不言而喻,一個優秀的程序在於它的效率,而優秀的高級的算法會使你的程序效率高的驚人,之前我做飛思卡爾智能小車時,硬件要求很苛刻,內存只有8M,這時對算法的要求就相當高了,複雜的程序根本不好使,計算速度太小,之後我嘗試一個老師推薦的高級算法時,好多問題都迎刃而解,效率高了好多,我之前弄了好長時間的程序,好長的代碼,最後還不如那短短的幾行高級算法代碼,到這,你應該能明白我想表達的,不多說了,你好好學習編程吧,這東西只要入門就不會很難,希望能學好哈。

【wanfu的回答(2票)】:

學習編程最重要的是實踐,也就是寫代碼,寫代碼的前提肯定是語法要熟悉。可以在此基礎上針對問題不斷的優化算法,提高思維的能力。

【茉茉的回答(2票)】:

我以為算法是本,語法是綱。理解了算法,如有需要,可以用各種語言來實現。但前提是,你知道該怎麼去實現。所以,學好算法是一勞永逸的事;但若離開了語法支撐,那將永遠是趙括紙上談的兵。

【pansz的回答(3票)】:

這個問題很奇怪,就彷彿說,學習中文寫作是否需要認識中文字一樣可笑。

語法是內功,算法是套路。——語法是一切的基礎,沒有語法,你根本無法掌握算法。

就算你寫了千萬個算法,可是你不懂語法,寫的程序連編譯都無法通過,你連測試你的程序都不行,你有資格談算法麼?

所以說了,雖然算法比語法更有用,但是不懂語法確實萬萬不能的。

【石磊的回答(1票)】:

語法是基礎,不管你做哪方面的開發,學習一門語言最根本的就是首先掌握語法,至於算法,那就跟你具體的工作有關了,有些開發工作可能對算法要求並不高,只需要使用一些最基本的算法就可以,而有些可能需要的就是不斷優化算法。

【李瑞的回答(1票)】:

從算法的角度來看,對於純面向對象的托管語言要求就不像Native語言的要求那麼高,而面向對象的Native語言對於C語言來說,程序員需要對算法的理解程度就要低一些 。

? ? ? 面向對象的語言需要關注的更多是數據結構和生命週期,而C語言更多關注的是流程,算法。

「過多的關注工具的使用,那純粹是在浪費時間.」

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?---Andrew Koenig (Rumination on C++ 作者)。

? ? ?語言也只是實現目的工具,抽像才是編程的核心。但是工具都用不好的人,編程水平也不會太高。

【白順龍的回答(1票)】:

語法很難麼?大家吭哧吭哧講了半天。一個語言語法最多不超過一周搞定,快得python半天;算法難度無上限,根本沒有可比性。問題中語法改成慣用法和模式還差不多。

【志勇的回答(0票)】:

編程相當於寫文章吧,語法類似於你知道什麼地方該用什麼詞語,算法就相當於你的文章的文采優美不優美,語句通順不通順。是不是可以做到深入淺出

【JaxonXu的回答(1票)】:

不懂語法算法好不到哪裡去。算法固然是一種思想,但是只有結合具體一門語言才能實現。

意思就是你至少要熟悉一種語言的語法,才能可以開始學算法。

偽代碼只是方便表達算法的思想,但不實踐只是紙上談兵,不實踐不會深刻瞭解某個算法的精粹。很多算法很難單憑口讀來理解,一敲代碼,調試一下就容易明白了。

在實際項目中,算法的精粹在於高效解決問題,熟悉語法對提高效率也很大幫助。

比如C++裡,++i 和 i++,兩種語法,後者會產生臨時變量,如果單純自增,為了效率優先使用++i。

--------------------------------------------------------------------------------------------------------------------

PS:有朋友不太重視這樣細節。說做了簡單的實驗測試得沒什麼效率差別。我估計他只是做少量數據的測試。

其實單運行一個語句區別是不大,但大量重複某一個語句,差別就巨大了。

在++i 和 i++裡,如果i是一個線性表類,裡面儲存大量的數據,複製構造函數里有拷貝數據的動作(很常見),每產生一個臨時變量就需要執行時間複雜度為O(N)的拷貝數據的動作。那效率差別就大了。

這些細節不會太難,注意一下就能掌握了,何樂而不為呢。

【陳宗綿的回答(0票)】:

我覺得這個是分階段的..

第一步:如何掌握一門語言,瞭解他的語法,語言特性,能實現各種模塊功能是首要的..

第二步:代碼寫多了,功能寫多了,你就要需要思考如何讓模塊功能跑得更加順暢,穩定,高效,這個時候算法,具體的實現方法是首要的.

第三步:然後漸漸你會發現,各種語言只是一個工具,他們有不同的特性,和適用場景,不同的算法,模塊功能用不同的語言處理起來效果也不一樣.這個時候你就開始學習第二,三,四...N門語言,發揮他們各自的特性,讓合適的語言,合適的技術做合適的事情...

【黃曉焐的回答(0票)】:

算法是內功,語言是套路。

【袁崇煥的回答(0票)】:

編程語言變了又變,從C到C++再到Java,還有幾十種編程語言等著你,在語法上各有特色,但是算法和數據結構基本不變,我聽說很多編程語言落伍了甚至被淘汰了,但是算法巋然不動。

【李凱華的回答(0票)】:

先掌握語法。而且先掌握一門Native語言,比如Pascal, C, C++。理解透了語法之後再去研究算法,提高你的代碼的效率和精度。是的,精度。

一個瞭解了編程工作所有原理和環節的人學習一門語言也就一個月不到的時間。如果是現在流行的托管代碼到runtime的語言學習起來更快。因為甚至不需要研究底層的指針等知識。

我的建議,兩者都不可少。只是有一個順序問題。語法是基本功,算法是靈魂。

【Rollen Holt的回答(0票)】:

注意要解決的問題本身。

【黃偉鵬的回答(0票)】:

語言是個工具,是劍。算法是根基,是內力。

如果你有一身好內力,你不懂劍招,有點白搭。你劍法純熟,但是你內力極差,也只是不入流的劍客。

建議是雙管齊下。而且樓上有位兄台說的不錯,理念很重要。做計算機的要有計算機的理念與思維,這對你學習語言和算法都會有很大的幫助

【、夢Roger的回答(0票)】:

個人認為,比較注重語法。如果你是要寫一個程序的話,算法你可以和別人一起討論而得出結果,而且往往比較難的問題,你也不可能一個人就可以解決,肯定要靠團隊的力量。而語法,這是你寫一個程序的基礎,如果你基礎也沒有學好,你怎麼去和別人配合?你怎麼繼續後繼開發呢?

【Earthson Lu的回答(0票)】:

語法錯了,編譯都過不去啊。算法錯了,過了編譯得不到結果。算法差一點,運行慢一點。

不管怎麼樣,語法確實是基礎,而且其兩者者是沒有矛盾的。

【孫立偉的回答(0票)】:

學編程當然學語法,不用學算法。算法跟編程沒太多關係。但是你要是學軟件開發,就得學算法。

標籤:-算法 -學習 -編程 -馮東


相關資源:





給我留言