大学如何学习编程
?
軟件行業(yè)的簡(jiǎn)單介紹
計(jì)算機(jī)語(yǔ)言
主流計(jì)算機(jī)語(yǔ)言:C\C++, Java, JavaScript\HTML\CSS, Python。
注:我把.NET的技術(shù)去掉了,主要原因是Java技術(shù)應(yīng)用范圍比.NET廣的多。
?
應(yīng)用范圍
- 應(yīng)用軟件
計(jì)算機(jī)上的大部分軟件都是應(yīng)用軟件,可以分為命令行/桌面軟件/網(wǎng)站應(yīng)用。
- 大數(shù)據(jù)
大數(shù)據(jù)技術(shù),顧名思義是處理大量數(shù)據(jù)的問(wèn)題。大型網(wǎng)站的服務(wù)器上一般都會(huì)使用相應(yīng)的技術(shù)。
- 人工智能
人工智能技術(shù)涉及的面比較廣。現(xiàn)在不建議大家學(xué)習(xí)。
- 手機(jī)軟件
- 單片機(jī)
- 運(yùn)維
- 測(cè)試
- 安全
?
學(xué)習(xí)的步驟
- 利其器
* 學(xué)習(xí)使用github
github不僅僅可以托管你的代碼,也可以管理你的軟件項(xiàng)目。
建立一個(gè)github賬號(hào)。
建立一個(gè)項(xiàng)目(公開(kāi)的,因?yàn)槊赓M(fèi))
* 學(xué)習(xí)使用vs code
vs code是一個(gè)輕量級(jí)的代碼編輯器,帶有各種各樣的擴(kuò)展,可以支持不同的編程語(yǔ)言。
下載vs code,創(chuàng)建一個(gè)目錄,和github的project關(guān)聯(lián)。
學(xué)習(xí)如何submit/push你的代碼。
* 建立自己的博客
可以用github pages功能建立博客。
或者去博客圈建立一個(gè)賬戶: 博客園 - 開(kāi)發(fā)者的網(wǎng)上家園
博客園的好處是,博客園是一個(gè)開(kāi)發(fā)者的社區(qū),多多少少可以了解一些開(kāi)發(fā)的消息。
* 學(xué)習(xí)markdown
markdown是一個(gè)文本內(nèi)容編輯語(yǔ)法。可以用來(lái)寫(xiě)博客。
許多網(wǎng)站和工具都支持。
?
- 學(xué)習(xí)的一個(gè)關(guān)鍵問(wèn)題
任何系統(tǒng)的學(xué)習(xí)一定要有輸出。筆記+代碼。
如果你看了一本C語(yǔ)言的書(shū),不寫(xiě)筆記,不寫(xiě)程序,那你只是浪費(fèi)時(shí)間。
這就是為什么需要建博客的原因 - 放你的學(xué)習(xí)筆記。
為什么要使用github - 放你的代碼。
?
- 如何學(xué)習(xí)計(jì)算機(jī)語(yǔ)言
寫(xiě)一個(gè)總結(jié):語(yǔ)法\語(yǔ)言特性和示例
下載和閱讀語(yǔ)言對(duì)應(yīng)的代碼規(guī)范。
學(xué)習(xí)語(yǔ)言要了解一個(gè)叫做"framework"的概念,每種語(yǔ)言在設(shè)計(jì)的時(shí)候都有特定的目的,也可以理解為語(yǔ)言的需求。
語(yǔ)言的需求是幫助開(kāi)發(fā)者實(shí)現(xiàn)某個(gè)方面的功能。
為了這個(gè)需求,每種計(jì)算機(jī)語(yǔ)言會(huì)提供一套API。
開(kāi)發(fā)者對(duì)語(yǔ)言的使用,更主要的是對(duì)語(yǔ)言提供的API的使用。
所以,學(xué)習(xí)語(yǔ)言 = 語(yǔ)法 + framework。
關(guān)于framework,學(xué)習(xí)的時(shí)候,不用太詳細(xì),先總結(jié)一個(gè)分類就可以了。
還有一個(gè)概念是:生態(tài)環(huán)境。
可以理解為:許多第三方的開(kāi)發(fā)者,為這個(gè)語(yǔ)言提供了更多的API。
這個(gè)也很重要,在你的開(kāi)發(fā)中,多多使用高質(zhì)量的第三方包,既方便,而且質(zhì)量也高。
這些東西,和別人多交流,網(wǎng)上多看看,慢慢就了解了。
?
- 必備知識(shí)
* 如何學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)
寫(xiě)一個(gè)總結(jié):
數(shù)據(jù)結(jié)構(gòu)的類型,每個(gè)類型的元素和特點(diǎn),每個(gè)類型對(duì)應(yīng)的算法有哪些,算法的作用是什么。
使用Java實(shí)現(xiàn)一些數(shù)據(jù)結(jié)構(gòu)和算法。
這時(shí)候,可以同時(shí)學(xué)習(xí)Java。
* 如何學(xué)習(xí)數(shù)據(jù)庫(kù)原理
可以裝一個(gè)MySQL和對(duì)應(yīng)的開(kāi)發(fā)平臺(tái)。
學(xué)會(huì)以下內(nèi)容就可以了:
如何創(chuàng)建表(數(shù)據(jù)類型至少含有varchar2, int, double, datetime),有外鍵的表,和一個(gè)Tree表。
如何刪除表
學(xué)習(xí)如何寫(xiě)SQL:
Select/Update/Insert/Delete
Count/Max/Min/Avg/Group By
Join/Left Join/Right Join/Outer Join
Where/Union/Order By
?
學(xué)習(xí)編程的幾個(gè)發(fā)展方向
- 算法方向
主要是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、算法和C\C++,刷ACM競(jìng)賽試題。
好處:技術(shù)上比較專注,適合學(xué)生。
?
如果你沒(méi)有極大的興趣,也可以放棄。
實(shí)際上大多數(shù)開(kāi)發(fā)根本用不上這些東西。
?
- 小軟件導(dǎo)向
通過(guò)寫(xiě)一些小而有趣的程序,慢慢鍛煉自己。
有人問(wèn),如果,不知道如何寫(xiě)怎么辦?
方法:確定技術(shù)\分解問(wèn)題\網(wǎng)上搜索
拿魔方游戲舉個(gè)例子,(我也沒(méi)有做過(guò)。)
首先我會(huì)在網(wǎng)上搜索Web的3D技術(shù)有哪些?
其結(jié)果可能是選擇一個(gè)js 3d的類庫(kù)。
然后,這個(gè)類庫(kù)肯定有官方文檔。
現(xiàn)在是分解問(wèn)題的時(shí)候了。
首先學(xué)習(xí)怎么畫(huà)一個(gè)正方形。
然后是怎么畫(huà)出一個(gè)立方體。
然后是如何讓它旋轉(zhuǎn),等等等等。
?
還有一個(gè)暴力方法:直接搜索別人寫(xiě)成的源代碼,拿過(guò)來(lái)研究。
舉一些例子:
* 寫(xiě)一個(gè)2048游戲
使用Html\CSS\Java Script寫(xiě)一個(gè)2048游戲。
?
* 寫(xiě)一個(gè)爬蟲(chóng)
使用python爬一個(gè)網(wǎng)站,找到擁有某些關(guān)健字的文章。
可以學(xué)習(xí)用sqlite,保存一些信息,比如,文章的URL和內(nèi)容等等。
用Java再實(shí)現(xiàn)一遍。
?
* 寫(xiě)一個(gè)魔方游戲
學(xué)習(xí)如何解魔方
使用Html\CSS\Java Script完成一個(gè)3D魔方游戲。
?
- 網(wǎng)站方向和大數(shù)據(jù)方向
這兩個(gè)方向和現(xiàn)在軟件行業(yè)的就業(yè)比較match。
但是,需要人指導(dǎo),所以,現(xiàn)在不講。
?
什么是編程
編程是一個(gè)分解和組裝的過(guò)程。
分解:就是把需求分解成小功能的能力,我們稱之為設(shè)計(jì)。
組裝:把代碼合理的拼湊起來(lái),我們稱之為框架(architecture)。
如果大家對(duì)C/C++感興趣的話,可以加一下我們的學(xué)習(xí)交流Q群:637 ?935 ?295,免費(fèi)領(lǐng)取一套學(xué)習(xí)資料和視頻課程喲~
基本編程能力的進(jìn)階
編程是使用編程語(yǔ)言實(shí)現(xiàn)一個(gè)業(yè)務(wù)問(wèn)題的解決方案。
- Level 1:學(xué)會(huì)使用賦值語(yǔ)句/分支語(yǔ)句/循環(huán)語(yǔ)句完成一個(gè)小功能。
- Level 2:分拆代碼的能力,使用多個(gè)子方法來(lái)解決問(wèn)題。
面條式代碼(Spaghetti code):就是將一大堆代碼寫(xiě)在一個(gè)方法里。這是需要避免的。
可以理解為寫(xiě)作文中的分段一樣,將不同功能的代碼封裝到不同的子方法中。
- Level 3: 結(jié)構(gòu)化編程
認(rèn)識(shí)到在一個(gè)功能中的數(shù)據(jù)有哪些,學(xué)習(xí)合理的封裝數(shù)據(jù),形成一個(gè)或者多個(gè)數(shù)據(jù)結(jié)構(gòu)。
可以理解為數(shù)據(jù)抽象。
- Level 4: 功能封裝。
這個(gè)術(shù)語(yǔ)上稱為“內(nèi)聚性”。
比如,把操作字符串的方法,寫(xiě)到一個(gè)StringHelper的類中。
把操作文件的方法,寫(xiě)到一個(gè)FileHelper的文件中。
- Level 5: 面向?qū)ο缶幊?/li>
面向?qū)ο缶幊?= 數(shù)據(jù)抽象 + 功能聚合。
面向?qū)ο蟮姆庋b性,繼承性需要以后慢慢理解。
- 層次框架能力
層次是框架的一種簡(jiǎn)單形式,是對(duì)框架的初步理解。
將代碼形成多個(gè)層次,比如:常見(jiàn)為3層,表示層/業(yè)務(wù)層/數(shù)據(jù)訪問(wèn)層
表示層: 把和用戶交互相關(guān)的代碼。
業(yè)務(wù)層: 業(yè)務(wù)邏輯代碼,和UI無(wú)關(guān)。
數(shù)據(jù)訪問(wèn)層:讀寫(xiě)數(shù)據(jù)相關(guān)的代碼。
層次的作用:
方向性:只能從前層調(diào)用后層的功能。
隔離性:不能調(diào)用不相鄰層次的功能。
- 代碼閱讀能力
能夠快速地從代碼閱讀中,明白代碼的用意。
- 業(yè)務(wù)理解能力
能夠很好理解業(yè)務(wù),并且能夠構(gòu)想出業(yè)務(wù)在項(xiàng)目中是如何實(shí)現(xiàn)的。
到這兒,就差不多可以算是入門了。
?
什么是高手
愿意寫(xiě)詳細(xì)準(zhǔn)確的注釋
愿意花時(shí)間給變量、方法命名
愿意花時(shí)間提高代碼的可讀性
學(xué)習(xí)代碼規(guī)范\優(yōu)化代碼風(fēng)格
注重代碼的性能
注重安全性
總結(jié)
- 上一篇: 最新编程语言排名:Python超Java
- 下一篇: 从零开始带你一步一步使用YOLOv3训练