如何系統有效的學習程式設計知識

  一開始接觸程式設計的學習,猶豫不知道怎麼學習,容易使人喪失興趣,為此,以下是小編分享給大家的系統有效的學習程式設計知識的方法,希望可以幫到你!

  系統有效的學習程式設計知識的方法

  一、基礎篇***理論與硬體***

  這一部分關注的是計算機的基本理論與基本實現。包括硬體結構理論,以及軟體與硬體的互動。以理論開篇,在機器語言部分深入,最終在作業系統部分達到高潮。

  1、計算機實現計算的原理。這包括閘電路是如何實現計算的,時序電路是如何實現儲存的,馮諾依曼體系結構是如何將二者結合實現了真正的現實世界的計算機的,以及它是如何反映圖靈機這一理論計算模型的。其間會學習布林邏輯。

  2、如何控制計算機硬體。這部分使用的“工具”就是機器語言和組合語言。我們需要理解機器語言的本質,以及它如何以“組合語言”這種更容易理解的形式為程式設計師提供了控制硬體裝置的機會。這部分可以學習到很多非常低階但是本質的內容。

  3、作業系統是如何工作的。如果你理解了上一部分的計算機硬體相關的問題,那麼理解作業系統的工作原理將不會那麼困難。另外你將明白作業系統作為硬體和上層軟體的中間層次,是如何大大簡化了人們對硬體的操作過程的。

  二、進階篇***軟體系統***

  1、程式語言。這包括結構化程式語言以及面向物件程式語言。因為有很多選擇,其實以一門語言開始即可,如果你在前面正確的理解了硬體與機器語言,那麼C語言入門真是太簡單了,如果你運氣不好,覺得C很困難,那麼即使是從Python、Javascript開始學習也沒問題。重點在於理解程式設計中和語法相關的基本概念,並瞭解一些簡單的演算法知識。

  2、資料結構與演算法。說白了就是如何合理的組織資料,通過其結構特點來簡化程式設計或者提高計算的效率。這裡的內容是模式化的,所有人都需要學習無序結構、有序線性結構、樹結構、圖結構等。另外,排序演算法、查詢演算法必須學好,特別是演算法策略如遞推、遞迴、蠻力***窮舉***、分治、動態規劃等也必須有所實踐和了解。切記不必深陷其中,這裡是個大坑,你不可能真的“精通”他們。

  3、程式語言是如何實現的。這裡主要涉及編譯原理。當你站在高階程式語言實現者的角度再來認識程式語言本身的時候,許多問題豁然開朗。這會深刻的改變你的程式設計觀。可惜的是即使是很好的學生在這裡也會遇到很大的阻力。真正的問題不是這方面理論性有多強,而是教材都很爛——包括國外教材***什麼龍書虎書鯨書都根本不是為初學者準備的***,而且語焉不詳。這導致大部分人都感覺莫名其妙高深莫測。如果你不是有志攀登軟體設計的最高峰,可以繞行。否則從表示式運算解析開始,逐步引入變數,型別,控制結構,函式,再到物件,一步步構建出解析器,然後結合前面學習的硬體介面知識,將其轉換為低階表示,最後你會發現沒有那麼可怕。

  三、基礎領域篇***必備領域知識***

  1、網際網路絡是如何構成的。這部分包括網路的基本知識,主機間通訊的原理,轉發裝置的實現,以及網際網路絡的構成。這是網路程式設計所需的基礎知識。除了理解低階協議,也要花一些時間瞭解應用層的協議,特別是 SMTP、POP3、FTP、HTTP 等,重點是瞭解他們的基本原理,而不是每個細節。因為每個協議都有自己的標準,光 HTTP 協議就夠你研究 6 個月以上了。這裡注重的是原理。

  2、如何管理大量的資料並在其上建立資訊系統。資料庫是一個很好的例子。包括資料庫系統的基本理論,實現原理,以及設計原則。同樣,這裡不是真的在教你如何構建一個數據庫系統,而是在學習他的核心原則,重點是學會如何合理的設計表結構,以及實現效率良好的SQL查詢語句。

  四、擴充套件領域篇***特定領域知識***

  1、基於特定平臺的軟體開發。如何在Windows平臺、Linux平臺、Mac OS平臺或者手機、平板、電視機、微波爐上完成開發?這需要學習特定的軟體平臺提供了哪些程式設計介面,如何編譯並部署,如何除錯和測試等知識。這部分就是軟體工程師職業生涯中最耗費時間的部分。

  2、有效的軟體研發是如何實現的。這包括軟體結構的設計知識,軟體實施流程的管理知識,以及一些細微而繁雜的內容。人們通常用軟體工程一詞來概括。但事實上軟體工程站的角度要更高一些,這裡只是涵蓋軟體工程的一小部分。

  五、科技領域篇***研究性知識***

  如果你對人工智慧、科學計算、影象處理感興趣,這裡還有大片的區域等待你探索。

  事實上,上面的描述有些嚇人。每一個領域都夠耗盡去很長的時間。不過好訊息是大部分知識都只要求在理論上理解。真正的耗費時間的部分還是在與程式設計、程式設計、程式設計。不是每個人都會用到資料庫系統,也不是每個人都需要懂得組合語言。但是這些背景知識會對你有幫助。讓你不再害怕,對自己更有自信。

  如果你希望自己成為一個很棒的開發人員,那麼上述知識都是必須的。但是卻依然遠遠不夠。

  學無止境,電腦科學尤其如此。

  我說的實在太多了。思考和打字差不多耗費了我一個小時。我不太確定這些對你是否有幫助。我希望有,至少有那麼一些。但我有點害怕,似乎我的描述不是在幫助你克服困難,而是製造了更多看似難以逾越的高山。

  但我想說:走入程式設計,然後走出程式設計。程式設計是為解決問題服務的,我們應當多思考想要解決的問題是什麼。這會在我們迷茫的程式設計生涯中起到指南針的作用。它會告訴我們需要學習什麼,然後由我們自己來回答如何學習。

  我的一位朋友是做生物科技的,他需要在海量的DNA序列裡快速的進行基因片段的比較。為了完成這一任務,他學習了 Python,並著重學習了資料結構和演算法相關的內容。雖然最後他寫出來的程式外表看起來很簡單,但是卻速度飛快,為他的事業貢獻了無形的資產。

  這就是他的起點。但是他並不滿足。他繼續學習如何增強程式的穩定性,如何編寫更好的介面等等。現在他的軟體真的非常棒,一些關鍵的效率相關部分已經替換為C++實現,介面也做得很專業。

  天啊,真的無法相信,這就是一位生物領域的研究人員自己親力親為的成果。即使是用苛刻的眼光來看,現在他的軟體也相當不錯。

  我舉這個例子,想說明的核心在於,知識的學習,要想高效,一個廣為大眾所接受的觀點就是應當圍繞一定的具體的目標來進行。如果我們知道我們想要解決的問題是什麼,那麼我們進一步確定要學習哪些程式設計知識就會比較容易。相反,為了學而學,泛泛而看,效果通常都是很差的。只能給你留下一些大致的印象,而無法成為你真正的可用的知識。

  學習程式設計知識的建議

  先有一個想法,像學鋼琴也有一開始想彈奏的曲子,提出一個想用生產出來的產品,或者買一本評價好的入門書,做出書中提出的“產品”為目標

  將這個目標細化,可以找專業人士幫忙,梳理出知識的“切入點”以及周圍的“關聯點”,然後開始計劃第一次迭代***做出第一樣東西***,可以是一段很短的程式或者一個作品,但必須有具體的產出

  每次產出後都重新調整計劃,重要的是自己或者專業人士要能具體地評估這次產出的價值。如果是跟著書就自然容易了,就是跟書上對一下就是了

  如果要具體給到一個切入點,那麼我的建議是兩個選擇:

  從C語言開始,然後學習演算法,走科班路線

  從網頁製作開始,然後學習網站工程,走產品路線,這是產品中最好入門的了

  不必太擔心學錯,因為到達工程級別,你學過的八成知識都不會被作為工具使用,而它們的只是實現了它們的歷史使命——成為你現有某個實用知識的中間點/橋樑、為你現在的學習效率做了一次鋪墊。

  實際一點地說,對於一個“畢業了”的程式設計師,學習一門新的程式語言,可能只需一週,而熟悉需要三週,熟練地用於開發是三個月,精通只需一年。這也是大概而已,嚴謹地說,不同的語言所關聯的知識點的數量是不一樣的。這也不影響舉例,因為在這之前,一個大學生在學習他們的第一門語言,通常是C/C++,用了一個學期,還可能掛科呢***那是態度問題或者是Dota的問題***。

  首先吧,別想速成。這要能速成,那麼我們專業人士不就該喝西北風去了?

  所以要真解決了學習範圍的問題後,你下一個問題應該是“要實現**應該具備那些知識”一類的了。等你在某個點扎根後,想的就是利用這個學習能力,去另一個自己更喜歡的領域,還是就此為據點擴充範圍,亦或者深入這個領域***也是擴充的一種吧,方向不同***。

  最後重申的一點,就是軟體開發本身就是一個學習的過程,只是產出的程式碼具備不同的價值而已。軟體的特殊性已經導致了難以重複地寫出兩段相同的程式碼,一般只會改寫重寫,或者重用原來的程式碼***就是複製黏貼或者引用呼叫***。

  程式設計這個領域的知識是怎麼樣的

  然後要延伸一下時代問題。

  從面向物件開始,網際網路時代興起,到現在的移動網際網路時代,程式設計絕大部分的目的是在於創造“軟體”,而創造軟體也由於世界上最聰明的人群高速集中湧入,以及時代的需求壓力,已經形成了一整套工程學,也就是“軟體工程”了。

  現在“程式設計”被集中在“軟體工程”的需求中,產生的一個結果就是“工程化”,而“工程化”就是整個生產體系開始逐步分化以及逐步專業化,從而出現了這個領域中的各種針對性專業,比如“前端工程師”、“測試工程師”、“演算法分析師”、“.NET軟體工程師”。

  在整個軟體的開發週期中,我們都需要跟不同的人在不同程度的合作。即使是個人開發者,都會用到開源的程式碼、各種下載的人家做好的工具。

  這就是工程化後的結果,也就是“程式設計”被和其他不同的專業,比如數學、醫學、建築、人文等科學結合在一起然後具體地分化成了各個關聯的模組。這些模組有一個特點,就是整體上“臨近相連”。

  這什麼意思呢?

  舉例說明就是,但從***某個***網站開發而言,就有客戶、老闆、美工、前端工程師、服務端工程師、資料庫管理員、網路推廣等等。這些角色兩兩間可能有工作上的直接關聯,單指這個軟體專案的開發工作的話。

  無論哪個是因,哪個是果,現在的情況都是沒兩個角色間的知識必定關聯和有交集。在往廣度上看,整個軟體工程領域以及世界都如此,只是軟體工程領域如建築領域一般,有比較大的定量的專業化,一切都是有根據有標準的。

  而至此,形成的一個結果就是,沒有人能掌握所有知識;所有知識都是有關聯的,追尋著關聯的路徑學習產生的效果普遍情況下是最大的。

  後面那條可以簡單地證明,假設兩樣知識八竿子打不著,那麼你就要等很久它們才能連起來,發揮加成效用。雖然喬幫主說過,總有一天這些dots總會連起來的,但是嘛......靠譜點也不是不好。

1.學習電腦知識

2.學程式設計需要哪些知識

3.初學者應該如何開始學習程式設計

4.大學c語言學習心得感悟

5.c語言學習心得6篇