跳到主要內容


程式語言-學習大綱

學習大鋼

這是我學習程式語言的流程,前面的學習是以基本語法為主,學習完之後開始針對資料類型、、資料的存放、有效率的使用硬體、有效率的設計程式、有效率的接受使用者命令等議題進行練習,額外衍生出安全、程式碼管理、團隊溝通等議題。

程式語言學習清單

概念CC++C#PythonJava
介紹概論一
概論二
介紹介紹介紹介紹介紹
安裝安裝安裝安裝安裝安裝
變數變數
運算
變數變數變數變數變數
條件敘述條件敘述條件敘述條件敘述條件敘述條件敘述條件敘述
迴圈迴圈迴圈迴圈迴圈迴圈迴圈
函數函數函數函數函數函數函數
類別類別類別類別類別類別類別
開啟檔案常見檔案類型
圖片
開啟檔案開啟檔案開啟檔案開啟檔案
Excel
Word
圖片
音源
影片
開啟檔案
資料庫資料庫
MySQL
Mongodb
資料庫資料庫資料庫
MySQL-1
MySQL-2
Mongodb
資料庫
資料結構與演算法資料結構與演算法
資料結構
演算法

資料結構
演算法
資料結構
演算法
資料結構
演算法
資料結構
演算法
資料結構
演算法
資料結構陣列、串列鏈結
佇列、堆疊、串列
樹、圖
佇列、堆疊、串列
樹、圖
佇列、堆疊、串列
樹、圖
佇列、堆疊、串列
樹、圖
佇列、堆疊、串列
樹、圖
佇列、堆疊、串列
樹、圖
演算法排序、搜尋
單源最短路徑
多源最段路徑
排序、搜尋
單源最短路徑
多源最段路徑
排序、搜尋
單源最短路徑
多源最段路徑
排序、搜尋
單源最短路徑
多源最段路徑
排序、搜尋
單源最短路徑
多源最段路徑
排序、搜尋
單源最短路徑
多源最段路徑
函式庫函式庫函式庫函式庫函式庫函式庫函式庫
設計模式設計模式
工廠模式
建造者模式
單例模式
原型模式
Creational-雜談
調配器模式
橋接模式
組合模式
裝飾模式
外觀模式
享元模式
代理模式
Structural-雜談
模板模式
責任練模式
命令模式
解譯器模式
迭代器模式
觀察者模式
中介者模式
備忘錄模式
狀態模式
策略模式
Behavior-雜談
MVC
Server-Client

設計模式
工廠模式
建造者模式
單例模式
原型模式
調配器模式
橋接模式
組合模式
裝飾模式
外觀模式
享元模式
代理模式
模板模式
責任練模式
命令模式
解譯器模式
迭代器模式
觀察者模式
中介者模式
備忘錄模式
狀態模式
策略模式

設計模式
工廠模式
建造者模式
單例模式
原型模式
調配器模式
橋接模式
組合模式
裝飾模式
外觀模式
享元模式
代理模式
模板模式
責任練模式
命令模式
解譯器模式
迭代器模式
觀察者模式
中介者模式
備忘錄模式
狀態模式
策略模式
設計模式
工廠模式
建造者模式
單例模式
原型模式
調配器模式
橋接模式
組合模式
裝飾模式
外觀模式
享元模式
代理模式
模板模式
責任練模式
命令模式
解譯器模式
迭代器模式
觀察者模式
中介者模式
備忘錄模式
狀態模式
策略模式
設計模式
工廠模式
建造者模式
單例模式
原型模式
調配器模式
橋接模式
組合模式
裝飾模式
外觀模式
享元模式
代理模式
模板模式
責任練模式
命令模式
解譯器模式
迭代器模式
觀察者模式
中介者模式
備忘錄模式
狀態模式
策略模式
GUIlink
網路通訊Socket
ICMP
Telnet
FTP
POP
SMTP
IMAP
SSH
Http
DNS
DHCP
BitTorrent
P2P
RTSP
IRC
Modbus
SNMP
SNTP
SMB
link
Framework網站
視窗程式
機器學習
網路爬蟲
Systemlink
其他平行運算
多執行緒
link
程式優化程式容量
運算資源
link
link
link
link
link
link
link

主題討論

任何的主題其實都是資料處理,資料處理分成三個部分,獲取資料分析資料呈現資料,在電腦上任何資料都是以以下種類形式存在數字文字串影像音源影片,只是賦予的意義不同,而這些資料的來源不外乎自行蒐集、機器蒐集、他人蒐集,這樣說明對之後的各類主題分析可比較好理解。
  • 自行蒐集:
自行蒐集可以由問卷、書寫、錄音、錄影、照相的等方式,最後想辦法輸入到電腦。
  • 機器蒐集:
機器蒐集可由感測器獲得資料,並用程式自動記錄的方式,儲存下來,最後整合到電腦上。
  • 他人蒐集:
他人蒐集是由他人蒐集的內容,整合到電腦上,也有可能他人已經先行整合,因此就是從他人的電腦上獲得資料。

在獲取資料時,會去定義或是暸解資料的意義,在分析資料時,可以根據資料特性已知的物理模型已知的數學模型、有效的數學方法,如:統計、時域分析頻域分析,而這些分析的目的都是為了能抓取到資料的特徵來應用,資料結果的呈現可以用文字圖表模型

講到這邊會思考為什麼任何主體都是資料處理,用以下例子登入系統做解釋,今天一個登入系統,需要從使用者這邊獲得使用者的帳號跟密碼,也就是從鍵盤上輸入資料,然後經過分析之後,判斷能否登入,最後結果呈現在畫面上,顯示登入成功或是登入失敗。

用這個角度來看,就會發現任何系統都離不開這個概念,只是中間加了很多保護機制,不會讓人厭煩的過程。

以facebook為例子,從註冊開始,都是從使用者這邊獲得資訊,獲得資訊之後,讓使用者得到使用權,使用者行使使用權在該網站上,繼續輸入資訊,重複這個過程,就可以得到一個結碖,所謂的軟體、程式,就是不停的從使用者這端獲取資訊、分析、呈現。

數字(包含布林):
數字運算分析就如同數學上的方法一樣,今天拿到一堆數字,就要去理解這些數字的特性,而這些數字通常為二維,因為一維的資料還帶有順序的資訊,所以可以當作二維進行處理,拿到資料基本工作就是先畫圖,四維以上可能需要兩倆畫圖觀察特性,而這些資料是否錯誤、是否有物理意義、是否有數學模型可以描述等,影像、影音、影片也是如此。

文字串:
文字串,不外乎字串處理,目的是誰了獲得能夠處理的字串形式,以便後續的分析,而這些分析也是跟數字的分析是類似的,所以字串處理也是字串分析的基本,舉個例子來說,今天分析一篇文章分析,必須能夠分段、去除標點符號、去除不重要的字、並觀察出這段文章的重點,然後呈現,這過程其實跟人在閱讀文章過程是相同的。

在分析的時候主要可以分成三大類分類、群聚、回歸,分類就是不同性質分開,群聚是指類似性質放一起,回歸是指模型化。

在電腦發展的過程,其目的本就是為了幫助人類進行資料處理,但大部分前期的發展都在做使用的優化,從數字系統、文字系統、程式語言語法設計、資料儲存、資料結構、演算法等都是優化的成果。

以下的為建議的研究清單:
  • 編譯器
  • 購物車系統
  • 各類型資料使用機器學習
會用上述三個當作建議研究清單的理由如下:
編譯器加組譯器其實就是轉換高階語法到機械碼的過程,而編譯器跟組譯器構造類似,因此研究編譯器,而其主要工作就是翻譯,所以今天如果我想設計一個把中文翻成英文的程式其實可以視他為編譯器的一環,仔細去看會發現其概念是完全相通的,在自然語言領域也是相同。

購物車系統主要是針對瑣碎的資料比對、加密等議題做練習,做完這些練習基本上對大部分的系統都已經能夠輕易撰寫。

機器學習其實可以看成跟人學習東西的過程一樣,分類、群聚、回歸,就跟人會把不一樣的東西分開、類似的東西放一起、最後用數學模型去描述,概念是相同的,而各類型資料處理上的技巧不同,因此需要針對各種類型資料進行練習。

綜觀來看以上三個研究內容能夠透徹,在各方面對軟體的設計就不會有太大的問題,再來就是針對各種平台常用的方式,進行設計練習。

以下為各種平台類型
網路:https、其他通訊協定
桌面程式:windows、mac、linux
行動裝置:ios、android

在韌體或跟硬體有關的方面,其實離不開上述內容,只不過對於硬體的部分,會著重在如何讓硬體有效被使用、如何讓硬體被辨識上,所以會跟作業系統有關,這邊不詳細討論。

留言

這個網誌中的熱門文章

Python-資料庫-mongodb-pymongo

Python 資料庫 mongodb-pymongo 安裝: linux、mac:pip3 install pymongo windows: import pymongo client = pymongo.MongoClient("mongodb://localhost:27017/") db = client['demo_db'] col = db['demo_col'] dict1 = { "name": "ab123ab456g", "day": "1890-04-05" } result = col.insert_one(dict1)  dict2 = [   { "name": "ki", "day": "1666-1-1"},   { "name": "aa", "day": "1222-11-11"},   { "name": "gg-gg", "day": "1333-02-22"},   { "name": "T-T", "day": "1444-03-02"},   { "name": "f-f", "day": "1555-01-01"} ] result = col.insert_many(dict2) result = col.find_one() print(result) results = col.find() for result in col.find(): print(result) results = col.find() query = {'

程式語言概念-條件敘述

程式語言概念 條件敘述 上一篇的比較運算就是用來描述條件的,如變數a跟變數b,範例如下。 a>b a=>b a==b a<=b a<b a!=b 上一篇的邏輯運算可以連接不同條件,如:a>b and c>b。 在寫程式的時候,可以使用條件式加上需要的條件敘述,進行流程控制,達到程式結構化的目的,常見的條件式if-else、if-else if- else、switch。 條件式可以進行選擇流程,選擇流程種類如下。 單一選擇 雙向選擇 多向選擇 單一選擇: 用於當某些條件達成之後,就執行,如:下雨了嗎?沒有,沒事,有,帶傘。 流程圖 雙向選擇: 用於當某些條件達成之後,執行A,不然執行B,如:請問數字是奇數嗎?是,奇數,不是,偶數。 流程圖 多向選擇: 用於判斷某變數是否為A、B、C、...、其他,如:請問現在是什麼季節?春天、夏天、秋天、冬天。 流程圖  投影片-slideshare:程式語言概念_變數  影片-youtube:程式語言蓋面_變數  程式碼-Github:程式語言概念_變數 下一單元:程式語言概念_ 迴圈

程式語言概念-資料結構

程式語言資料結構 資料結構 在討論資料結構時,必須先暸解記憶體的運作過程,首先作業系統會將記憶體(RAM)分頁,切割成特定大小的區塊,來給運作的程式使用,在程式啟動後,會先將編譯過後的程式碼載入到記憶中,並運行,而這些程式碼有些只運行一次,有些則運行多次,如程式的初始化指運行一次,如程式操作運行多次。 而在運行程式時,會運行到有變數的段落,此時就會定義一段記憶體給該變數,而其大小會隨其資料型態改變,當有相同資料型態的資料需要儲存時,通常會用陣列,把需要的資料大小告知後,把相同類型的資放在一起,而陣列是一種資料結構,其一旦宣告後,其記憶體大小就不再改變,因此有靜態的特性,所以相對的,在操作資料結構時會改變其記憶體大小的就是動態的,所以動態的資料結構,會有如何建立、如何搜尋、如何更新、如何刪除的問題,這也衍生到資料庫的CRUD(Create、Read、Update、Delete)這概念,因此在討論的時候會把時間複雜度跟空間複雜度做介紹,這樣是比較全面的做法。 而在儲存資料的時候,會有需要自訂義資料的時候,這也會影響到資料的基本大小,而自定義的型態,通常會使用struct跟class來定義,在各種語言通常struct為value type,class為refference type,兩者在意在,struct 在定義完之後可以像一般的資料型態使用,定義的變數的資料內容是存值,所以不會相互干涉,而class則會,所以class 都會使用new的宣告新的物件,不過這些東西的細部定義需要參考該官方網站的內容,此外還有point type。 常見的資料型態 陣列 array 堆疊 stack 佇列 queue 連結串列 linked list 樹 tree 圖 graph 堆 heap 雜湊表 hash 串列 list 字典 dict 其他 陣列 為靜態的,其記憶體大小在初始化之後,便不能在變動。 連結串列 為動態的資料結構的基本型,由struct、指標跟變數組成,用來構成其它的資料結構。 堆疊 與 佇 列為相似的結構,由多個連結串列組成,目的是用來儲存資料,並後存放資料先被使用,想像疊書,疊十層高,然後從上面開始拿。 佇 列 由多個連結串列組成,目的是用來儲存資料,並先存放資料先被使用,排隊的概