大學如何學習編程
來自專欄輪子工廠
4 人贊了文章
主要寫給大學生看的。
基本上認為你是0基礎。
最基本的能力
學會網上搜索。你的問題網上都有答案。
逐漸學點兒英文(或者使用翻譯技術。) - 這個要求也許有點高。就當是學英文了。
學會在正確的地方提問題,(別在知乎上提!)
在這兒提問題:
Stack Overflow - Where Developers Learn, Share, & Build Careers
軟體行業的簡單介紹
計算機語言
主流計算機語言:CC++, Java, JavaScriptHTMLCSS, Python。
註:我把.NET的技術去掉了,主要原因是Java技術應用範圍比.NET廣的多。
不建議學CC++,枯燥無味。
應用範圍
- 應用軟體
計算機上的大部分軟體都是應用軟體,可以分為命令行/桌面軟體/網站應用。
- 大數據
大數據技術,顧名思義是處理大量數據的問題。大型網站的伺服器上一般都會使用相應的技術。
- 人工智慧
人工智慧技術涉及的面比較廣。現在不建議大家學習。
- 手機軟體
- 單片機
- 運維
- 測試
- 安全
學習的步驟
- 利其器
* 學習使用github
github不僅僅可以託管你的代碼,也可以管理你的軟體項目。
建立一個github賬號。
建立一個項目(公開的,因為免費)
* 學習使用vs code
vs code是一個輕量級的代碼編輯器,帶有各種各樣的擴展,可以支持不同的編程語言。
下載vs code,創建一個目錄,和github的project關聯。
學習如何submit/push你的代碼。
* 建立自己的博客
可以用github pages功能建立博客。
或者去博客圈建立一個賬戶: 博客園 - 開發者的網上家園
博客園的好處是,博客園是一個開發者的社區,多多少少可以了解一些開發的消息。
* 學習markdown
markdown是一個文本內容編輯語法。可以用來寫博客。
許多網站和工具都支持。
- 學習的一個關鍵問題
任何系統的學習一定要有輸出。筆記+代碼。
如果你看了一本C語言的書,不寫筆記,不寫程序,那你只是浪費時間。
這就是為什麼需要建博客的原因 - 放你的學習筆記。
為什麼要使用github - 放你的代碼。
- 如何學習計算機語言
寫一個總結:語法語言特性和示例
下載和閱讀語言對應的代碼規範。
學習語言要了解一個叫做"framework"的概念,每種語言在設計的時候都有特定的目的,也可以理解為語言的需求。
語言的需求是幫助開發者實現某個方面的功能。
為了這個需求,每種計算機語言會提供一套API。
開發者對語言的使用,更主要的是對語言提供的API的使用。
所以,學習語言 = 語法 + framework。
關於framework,學習的時候,不用太詳細,先總結一個分類就可以了。
還有一個概念是:生態環境。
可以理解為:許多第三方的開發者,為這個語言提供了更多的API。
這個也很重要,在你的開發中,多多使用高質量的第三方包,既方便,而且質量也高。
這些東西,和別人多交流,網上多看看,慢慢就了解了。
- 必備知識
* 如何學習數據結構
寫一個總結:
數據結構的類型,每個類型的元素和特點,每個類型對應的演算法有哪些,演算法的作用是什麼。
使用Java實現一些數據結構和演算法。
這時候,可以同時學習Java。
* 如何學習資料庫原理
可以裝一個MySQL和對應的開發平台。
學會以下內容就可以了:
如何創建表(數據類型至少含有varchar2, int, double, datetime),有外鍵的表,和一個Tree表。
如何刪除表
學習如何寫SQL:
Select/Update/Insert/Delete
Count/Max/Min/Avg/Group By
Join/Left Join/Right Join/Outer Join
Where/Union/Order By
學習編程的幾個發展方向
- 演算法方向
主要是學習數據結構、演算法和CC++,刷ACM競賽試題。
好處:技術上比較專註,適合學生。
如果你沒有極大的興趣,也可以放棄。
實際上大多數開發根本用不上這些東西。
- 小軟體導向
通過寫一些小而有趣的程序,慢慢鍛煉自己。
有人問,如果,不知道如何寫怎麼辦?
方法:確定技術分解問題網上搜索
拿魔方遊戲舉個例子,(我也沒有做過。)
首先我會在網上搜索Web的3D技術有哪些?
其結果可能是選擇一個js 3d的類庫。
然後,這個類庫肯定有官方文檔。
現在是分解問題的時候了。
首先學習怎麼畫一個正方形。
然後是怎麼畫出一個立方體。
然後是如何讓它旋轉,等等等等。
還有一個暴力方法:直接搜索別人寫成的源代碼,拿過來研究。
舉一些例子:
* 寫一個2048遊戲
使用HtmlCSSJava Script寫一個2048遊戲。
* 寫一個爬蟲
使用python爬一個網站,找到擁有某些關健字的文章。
可以學慣用sqlite,保存一些信息,比如,文章的URL和內容等等。
用Java再實現一遍。
* 寫一個魔方遊戲
學習如何解魔方
使用HtmlCSSJava Script完成一個3D魔方遊戲。
- 網站方向和大數據方向
這兩個方向和現在軟體行業的就業比較match。
但是,需要人指導,所以,現在不講。
什麼是編程
編程是一個分解和組裝的過程。
分解:就是把需求分解成小功能的能力,我們稱之為設計。
組裝:把代碼合理的拼湊起來,我們稱之為框架(architecture)。
基本編程能力的進階
編程是使用編程語言實現一個業務問題的解決方案。
- Level 1:學會使用賦值語句/分支語句/循環語句完成一個小功能。
- Level 2:分拆代碼的能力,使用多個子方法來解決問題。
麵條式代碼(Spaghetti code):就是將一大堆代碼寫在一個方法里。這是需要避免的。
可以理解為寫作文中的分段一樣,將不同功能的代碼封裝到不同的子方法中。
- Level 3: 結構化編程
認識到在一個功能中的數據有哪些,學習合理的封裝數據,形成一個或者多個數據結構。
可以理解為數據抽象。
- Level 4: 功能封裝。
這個術語上稱為「內聚性」。
比如,把操作字元串的方法,寫到一個StringHelper的類中。
把操作文件的方法,寫到一個FileHelper的文件中。
- Level 5: 面向對象編程
面向對象編程 = 數據抽象 + 功能聚合。
面向對象的封裝性,繼承性需要以後慢慢理解。
- 層次框架能力
層次是框架的一種簡單形式,是對框架的初步理解。
將代碼形成多個層次,比如:常見為3層,表示層/業務層/數據訪問層
表示層: 把和用戶交互相關的代碼。
業務層: 業務邏輯代碼,和UI無關。
數據訪問層:讀寫數據相關的代碼。
層次的作用:
方向性:只能從前層調用後層的功能。
隔離性:不能調用不相鄰層次的功能。
- 代碼閱讀能力
能夠快速地從代碼閱讀中,明白代碼的用意。
- 業務理解能力
能夠很好理解業務,並且能夠構想出業務在項目中是如何實現的。
到這兒,就差不多可以算是入門了。
什麼是高手
願意寫詳細準確的注釋
願意花時間給變數、方法命名
願意花時間提高代碼的可讀性
學習代碼規範優化代碼風格
注重代碼的性能
注重安全性
推薦閱讀:
※python odoo框架之新增 「待審核」訂單狀態
※為什麼你編的數控程序會撞刀、彈刀、過切?而遠歌編的就不會?!
※如何學好UG?看看下面這位UG高手是如何分享自己的學習的心得的!
※.net core下對於附件上傳下載的實現