大學如何學習編程

大學如何學習編程

來自專欄輪子工廠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下對於附件上傳下載的實現

TAG:計算機專業 | 計算機科學 | 自學編程 |