天天看點

談談:如何由淺入深的學習一門程式設計語言?

學習任何一門程式設計語言,都會面臨的第一個問題都是:如何學習這門語言?

不想多說什麼多看、多學、多寫、多練之類的廢話。世上事有難易乎?無他,唯手熟爾。誰不知道熟能生巧的道理?

有必要談談的是:如何由淺入深的學習一門程式設計語言?學習所有程式設計語言有沒有一個相對統一的學習方法?

為此,我特意請教了一位資深程式員大咖,希望能給正準備入門程式設計的同學一些參考。

這位程式員接觸過不少程式設計語言:Java、Python、Javascript、C、C++、Shell等等。每次學習一門新的程式設計語言,掌握程度或深或淺,但是學習的曲線卻大抵相似。

下面,是他按照個人的學習經驗總結一下,學習程式設計語言的基本步驟。

一、學習程式設計語言的步驟

談談:如何由淺入深的學習一門程式設計語言?

二、基本文法

首先當然是了解語言的最基本文法。

控制台輸出,如C的printf,Java的System.out.println等。

普通程式員的第一行代碼一般都是輸出 “Hello World” 吧。

三、基本資料類型

不同程式設計語言的基本資料類型不同。基本資料類型是的申請記憶體空間變得友善、規範化。

四、變量

不同程式設計語言的聲明變量方式有很大不同。有的如Java 、C++需要明确指定變量資料類型,這種叫強類型定義語言。有的語言(主要是腳本語言),如Javascript、Shell等,不需要明确指定資料類型,這種叫若類型定義語言。

還需要注意的一點是變量的作用域範圍和生命周期。不同語言變量的作用域範圍和生命周期不一定一樣,這個需要在代碼中細細體會,有時會為此埋雷。

五、邏輯控制語句

程式設計語言都會有邏輯控制語句,哪怕是彙編語言。

掌握條件語句、循環語句、中斷循環語句(break、continue)、選擇語句。一般差別僅僅在于關鍵字、文法格式略有不同。

六、運算符

掌握基本運算符,如算術運算符、關系運算符、邏輯運算符、指派運算符等。

有些語言還提供位運算符、特殊運算符,視情節掌握。

注釋(沒啥好說的)

七、函數

程式設計語言基本都有函數。注意文法格式:是否支援出參;支援哪些資料作為入參,有些語言允許将函數作為參數傳入另一個參數(即回調);傳回值;如何退出函數(如Java、C++的return)。

八、數組、枚舉、集合

枚舉隻有部分程式設計語言有,如 Java、C++、C#。

但是數組和集合(有些語言叫容器)一般程式設計語言都有,隻是有的程式設計語言提供的集合比較豐富。使用方法基本類似。

九、常用類

比較常用的類(當然有些語言中不叫類,叫對象或者其他什麼,這個不重要,領會精神)請了解其API用法,如:字元串、日期、數學計算等等。

十、語言特性

語言特性這個特字反映的就是各個程式設計語言自身的"獨特個性",這涉及的點比較多,簡單列舉一些。

談談:如何由淺入深的學習一門程式設計語言?

十一、程式設計模式

比較流行的程式設計模式大概有:

面向對象程式設計,主要是封裝、繼承、多态;函數式程式設計,主要是應用Lambda;過程式程式設計,可以了解為實作需求功能的特定步驟。

每種程式設計模式都有一定的道理,我從不認為隻有面向對象程式設計才是王道。

Java是面向對象語言,從Java8開始也支援函數程式設計(引入Lambda表達式);C++可以算是半面向對象,半面向過程式語言。

十二、語言自身特性

每個語言自身都有一些重要特性需要了解。例如,學習C、C++,你必須了解記憶體的申請和釋放,了解指針、引用。而學習Java,你需要了解JVM,垃圾回收機制。學習Javascript,你需要了解DOM操作等。

正在自學Java的小夥伴,需要Java相關資料,面試題,PDF文檔,學習視訊等可以進入我的Java圈766328863擷取資料,暗号:csdn
談談:如何由淺入深的學習一門程式設計語言?
談談:如何由淺入深的學習一門程式設計語言?
談談:如何由淺入深的學習一門程式設計語言?

十三、代碼組織、子產品加載、庫管理

一個程式一般都有很多個源代碼檔案。這就會引入這些問題:如何将代碼檔案組織起來?如何根據業務需要,選擇将部分子產品啟動時進行加載,部分子產品使用懶加載(或者熱加載)?

最基本的引用檔案就不提了,如C、C++的#include,Java的import等。

針對代碼組織、子產品加載、庫管理這些問題,不同語言會有不同的解決方案。

如Java可以用maven、gradle管理項目依賴、組織代碼結構;Javascript (包括 Nodejs、jquery、react等等庫)可以用npm、yarn管理依賴,用webpack等工具管理子產品加載。

十四、容錯處理

程式總難免會有bug。

是以為了代碼健壯性也好,為了友善定位問題也好,代碼中需要有容錯處理。常見的手段有:

異常

斷言

日志

調試

單元測試

十五、輸入輸出和檔案處理

這塊知識比較繁雜。建議提綱挈領的學習一下,了解基本概念,比如輸入輸出流、管道等等。至于API,用到的時候再查一下即可。

十六、回調機制

每種語言實作回調的方式有所不同,如.Net的delegate (大量被用于WinForm程式);Javascript中函數天然支援回調:Javascript函數允許傳入另一個函數作為入參,然後在方法中調用它。其它語言的回調方式不一一列舉。

十七、序列化和反序列化

首先需要了解的是,序列化和反序列化的作用是為了在不同平台之間傳輸對象。

其次,要知道序列化存在多種方式,不同程式設計語言可能有多種方案。根據應用的序列化方式,選擇性了解即可。

十八、進階特性

以下學習内容屬于進階性内容。可以根據開發需要去學習、掌握。需要注意的是,學習這些特性的态度應該是不學則已,學則死磕。因為半懂半不懂,特别容易引入問題。

對于半桶水的同學,我想說:放過自己,也放過别人,活着不好嗎?

并發程式設計:好處多多,十分重要,但是并發代碼容易出錯,且出錯難以定位。要學習還是要花很大力氣的,需要了解大量知識,如:程序、線程、同步、異步、讀寫鎖等等。

反射:讓你可以動态程式設計(慎用)。

泛型:集合(或者叫容器)的基石。精通泛型,能大大提高你的代碼效率。

中繼資料:描述資料的資料。Java 中叫做注解。

十九、庫和架構

學習一門程式設計語言,難免需要用到圍繞它建構的技術生态圈——庫和架構。這方面知識範圍太龐大,根據實際應用領域去學習吧。比如搞JavaWeb,你多多少少肯定要用到 Spring、Mybatis、Hibernate、Shiro等大量開發架構;如果做Javascript前端,你可能會用到React、Vue、Angular 、jQuery等庫或架構。

總結以上,程式設計語言學習的道路是任重而道遠的,未來是光明的。

最後一句話與君共勉:路漫漫兮其修遠,吾将上下而求索。