當(dāng)我們?cè)趯W(xué)習(xí)編程語(yǔ)言時(shí),我們?cè)趯W(xué)習(xí)什么?

今天上班的公交上看到一篇文章,叫《學(xué)習(xí)編程語(yǔ)言時(shí),我們?cè)趯W(xué)習(xí)什么》,想想自己這幾年的學(xué)習(xí)經(jīng)歷,覺(jué)得文中的許多觀點(diǎn)說(shuō)的很有道理,于是整理成文,僅供參考。
在程序員這條路上,我們注定會(huì)面對(duì)或者學(xué)習(xí)多種不同的語(yǔ)言,對(duì)于一門編程語(yǔ)言, 我們到底學(xué)習(xí)什么東西呢?

1、基本語(yǔ)法

首先肯定是語(yǔ)法, 像數(shù)據(jù)類型、標(biāo)識(shí)符、關(guān)鍵字、運(yùn)算符、注釋、 流程控制語(yǔ)句等等。如果你之前學(xué)過(guò)一門編程語(yǔ)言,再去學(xué)新的語(yǔ)言,會(huì)發(fā)現(xiàn)在基本的語(yǔ)法層面, 這些語(yǔ)言都差不太多。因?yàn)槎际敲钍骄幊陶Z(yǔ)言, 程序員要精確的告訴計(jì)算機(jī)用何種指令做事情, 是對(duì)計(jì)算機(jī)硬件的抽象,命令式程序本質(zhì)上就是一個(gè)馮諾依曼機(jī)的指令序列。如果你學(xué)的是函數(shù)式編程, 那就大不相同了。對(duì)于命令式編程, 最基本的控制語(yǔ)句就這么三種: 順序、分支、循環(huán)。當(dāng)然不同的語(yǔ)言, 對(duì)于這基本的流程控制會(huì)有一些變體, 例如do ... while, switch .. foreach 等等, 但本質(zhì)都是一樣的。
對(duì)于基本的語(yǔ)法, 我相信很多人都能迅速掌握。

2、基本的數(shù)據(jù)結(jié)構(gòu)

想象一下, 假設(shè)OC中沒(méi)有集合框架, 什么東西都需要自己來(lái)做, 那寫起程序來(lái)該有多累!現(xiàn)在的語(yǔ)言除了基本的語(yǔ)法之外 ,都會(huì)有內(nèi)置的強(qiáng)大的數(shù)據(jù)結(jié)構(gòu), 方便程序員來(lái)編程 。這些數(shù)據(jù)結(jié)構(gòu)中最常見(jiàn)的是這幾個(gè):

字符串

實(shí)際代碼中會(huì)有大量對(duì)字符串的操作,現(xiàn)在的語(yǔ)言都有良好的支持, 需要學(xué)習(xí)下相關(guān)的API。

可以動(dòng)態(tài)增長(zhǎng)的數(shù)組

這也是一個(gè)非常常見(jiàn)、非常有用的數(shù)據(jù)結(jié)構(gòu), 在Java 中就是ArrayList, OC 就是NSArray, Ruby 中稱為數(shù)組。 由于其應(yīng)用的廣泛性, 一定要好好學(xué)習(xí)下它的用法。

用來(lái)存儲(chǔ) key - value 這樣值對(duì)的集合

Java 中的Map , OC 中的字典, ruby的hash 表均屬此類。
絕大部分程序,經(jīng)常使用的也就是上面三個(gè)數(shù)據(jù)結(jié)構(gòu), 其他的還有無(wú)重復(fù)元素的集合(Set)等等。

3、面向?qū)ο?/h4>

看完語(yǔ)法和數(shù)據(jù)結(jié)構(gòu), 接下來(lái)可以看看面向?qū)ο笤谶@個(gè)語(yǔ)言中是怎么實(shí)現(xiàn)的,對(duì)于命令式編程, 面向?qū)ο蠛?jiǎn)直就是標(biāo)配, 沒(méi)有面向?qū)ο蟮闹С郑?簡(jiǎn)直就不好意思和別人打招呼。
有人說(shuō)面向?qū)ο笠阉溃?實(shí)際情況呢? 絕大部分軟件還是以面向?qū)ο鬄榛A(chǔ)構(gòu)建起來(lái)的, 所以不要聽(tīng)風(fēng)就是雨, 老老實(shí)實(shí)地去學(xué)封裝、繼承、多態(tài)吧。
如果你已經(jīng)掌握了面向?qū)ο蟮脑O(shè)計(jì)和編程的思維, 那對(duì)于學(xué)習(xí)新語(yǔ)言的OO來(lái)說(shuō), 那真是太簡(jiǎn)單了, 基本上就是一點(diǎn)點(diǎn)語(yǔ)法的區(qū)別。
例如繼承, Java用extends , OC用“:”, Ruby 用“<” , Python 用 括號(hào)來(lái)表示, 大同小異, 只不過(guò)有些語(yǔ)言只支持單繼承, 有些支持多繼承, 更加復(fù)雜一些。
對(duì)于封裝, 各個(gè)語(yǔ)言也是差不多,一般都有private , proteted , public 這三個(gè)保護(hù)的級(jí)別,也是表現(xiàn)形式不一樣。
對(duì)于多態(tài), 這是很多靜態(tài)語(yǔ)言的專利, 動(dòng)態(tài)語(yǔ)言用的是Duck Typing , 比多態(tài)更加靈活, 需要仔細(xì)揣摩下和多態(tài)的區(qū)別, 優(yōu)勢(shì)和劣勢(shì)。

4、突破內(nèi)存

學(xué)到這里, 你應(yīng)該可以用這門語(yǔ)言來(lái)寫程序了, 但是你很快就會(huì)發(fā)現(xiàn),程序只能在內(nèi)存中折騰,最多能輸出到毫無(wú)趣味的控制臺(tái)上, 還無(wú)法訪問(wèn)硬盤和網(wǎng)絡(luò), 這也是編程語(yǔ)言必須提供的重要特性。不同的語(yǔ)言對(duì)硬盤和網(wǎng)絡(luò)的抽象大相徑庭, 例如Java 試圖把所有的東西都稱為IO, 抽象出了一套優(yōu)雅但是不太好用的API。 相比而言像Ruby 和 Python 對(duì)硬盤文件的操作就簡(jiǎn)單的多。對(duì)XML 和 JSON的操作是必須要掌握的技能, 因?yàn)樗麄兊挠猛緦?shí)在是太廣泛了。對(duì)于網(wǎng)絡(luò)編程, 至少要理解Socket和HTTP, 一個(gè)是傳輸層,一個(gè)是應(yīng)用層, 各大語(yǔ)言對(duì)Socket和Http 編程都有很好的支持。

5、讓多任務(wù)并發(fā)執(zhí)行

線程的概念對(duì)于初學(xué)者,或者說(shuō)沒(méi)有計(jì)算機(jī)基礎(chǔ)的同學(xué)們學(xué)起來(lái)有點(diǎn)難度, 因?yàn)橐斫馐裁词沁M(jìn)程, 什么是線程 ,為什么要有進(jìn)程和線程, 有點(diǎn)偏向計(jì)算機(jī)的底層了。并發(fā)編程會(huì)涉及到線程之間的同步和通信, 如何加鎖,防止死鎖, 線程池等很多煩人的知識(shí)點(diǎn), 雖然說(shuō)在實(shí)際工作中都封裝好了, 業(yè)務(wù)編程中用的少, 但是要理解概念。對(duì)于各個(gè)語(yǔ)言來(lái)說(shuō), 良好的線程支持也是標(biāo)配, 要了解相應(yīng)的API, 至少能用他們寫出小程序來(lái)。

6、語(yǔ)言特性

各個(gè)語(yǔ)言都有自己的特性, 例如Java 的反射/范型/注解, OC 的block, 元編程, javascript的原型/閉包/函數(shù)等等。 這些特性對(duì)于寫出優(yōu)雅漂亮的程序有極大幫助, 一定要掌握。

7、GUI

GUI一般指的桌面編程和手機(jī)端編程的圖形用戶界面, 各大語(yǔ)言都有支持, 但是除了Android(Java), iOS(Objective-C) 和微軟系的語(yǔ)言(C#,VB.NET...)外, 別的語(yǔ)言直接寫GUI的相對(duì)不多。
Java 的Swing 和 AWT 應(yīng)用領(lǐng)域狹窄, 我知道的只有在金融領(lǐng)域, ERP, IDE 有所使用,所以不用下大功夫去學(xué)。
如果你是做桌面編程和手機(jī)端編程,需要關(guān)注如下幾點(diǎn):

1. 界面是如何描述的?

界面的控件有哪些? 如何進(jìn)行頁(yè)面的布局?

2. 數(shù)據(jù)如何獲?。?/h4>

現(xiàn)在的程序基本上都是聯(lián)網(wǎng)的, 很多數(shù)據(jù)都來(lái)自服務(wù)器, 這又涉及到了前面提到了網(wǎng)絡(luò)編程。

3. 界面和數(shù)據(jù)如何綁定?

因?yàn)閿?shù)據(jù)一般是外部來(lái)的,是變化的, 需要在GUI上展示, 綁定數(shù)據(jù)到界面必不可少。

4. 用戶在GUI的操作該如何處理?

現(xiàn)在基本上都是事件驅(qū)動(dòng),例如用戶點(diǎn)擊了一個(gè)按鈕,就會(huì)調(diào)用onClick 函數(shù)。

總的來(lái)說(shuō), GUI中用MVC相對(duì)比較多, 需要掌握學(xué)習(xí)。

8、Web

終于到達(dá)Web編程了, 這是個(gè)非常大的主題, 其實(shí)已經(jīng)超越了一門語(yǔ)言的范疇,涉及到HTTP, XML, Javascript , JSON, Servlet, JSP 等基礎(chǔ)知識(shí)。 當(dāng)然更重要的是框架。

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • TITLE: 編程語(yǔ)言亂燉 碼農(nóng)最大的煩惱——編程語(yǔ)言太多。不是我不學(xué)習(xí),這世界變化快! 有時(shí)候還是蠻懷念十幾、二...
    碼園老農(nóng)閱讀 5,592評(píng)論 2 35
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,001評(píng)論 25 709
  • 如何成為一個(gè)很厲害的人 我們應(yīng)該怎樣對(duì)待時(shí)間 態(tài)度 一個(gè)人如何對(duì)待他的時(shí)間,決定了他可以成為什么樣的人。 鄭重 不...
    lashengcheng閱讀 1,216評(píng)論 1 1
  • 來(lái)荷蘭這么久了,但是除了上課之外基本上都是在公寓度過(guò)的。這開學(xué)四周以來(lái),周末我基本上除了窩在公寓玩游戲,看書,做作...
    鈐魚擺擺閱讀 153評(píng)論 1 1
  • “看,那個(gè)女孩,她是光頭誒,臉那么大,還沒(méi)有頭發(fā),好丑啊。” “沒(méi)關(guān)系的,我已經(jīng)習(xí)慣了不是嘛?!毙∮艨嘈α艘宦暠隳?..
    方方不圓閱讀 847評(píng)論 19 10

友情鏈接更多精彩內(nèi)容