【傳送門】
Part 1 - 數理基礎篇
Part 2 - 電腦基礎篇上
Part 3 - 電腦基礎篇中
Part 5 - 進階篇上
Part 6 - 進階篇中
Part 7 - 進階篇下

Meow~Meow~ 我是清大菸酒貓
放假超爽der
因此我就想說今天一口氣打完吧~

今天所介紹的就是資工系必修課之中
幾乎每個學校都會有,最重要的重點課程!
壓軸當然要放到最後啦XD

──────────────────────────────────────────────────────────────
二、電腦基礎課程
6. 計算機程式設計 Introduction to Programming

由之前介紹的課程之中,我們可以知道
電腦其實就是一台會進行加減乘除、比較的機器
而電腦要做的事情呢,其實就是由人類下達的指令來決定

那麼人類要如何下達指令呢?
這就要透過「程式語言」來做到啦!

程式基本上就是由一行一行的指令所組成
而工程師想要撰寫程式時,就是找一個可以打文字的地方
然後把指令一行一行的輸入
再由「Compiler (編譯器)」轉換成電腦容易處理的形式
最後讓作業系統轉交給 CPU 執行

這就是程式執行的流程

等等等等,甚麼是 Compiler 阿?

程式語言有很多種,主要可以分為高、中、低階
我們一般打出來的程式語言算是中高階的
差別在於,越高階的程式語言越直白
人類容易看懂,但是機器無法處理

機器只能處理像是我上一篇中介紹的組合語言 (低階語言)

因此我們需要一種特殊的程式做「翻譯」的動作
Compiler 就像是程式語言的「翻譯機」
幫我們把較直白的中高階語言,轉換成電腦可以處理的低階語言

因為學習組合語言需要一些關於電腦底層的基礎知識
所以通常學校會教學生中高階的程式語言
最常見的就是 C 跟 C++ 這兩個著名的程式語言

學完這門課之後,基本上就可以寫一些簡單的程式來玩了~
像是我大一修這門課的時候,期末用 C 寫了一個守塔遊戲
強者我同學則用 C 寫了一個貓咪武打遊戲 (超扯的)


7. 資料結構 Data Structure

學會了如何撰寫程式之後
再來就是要學習如何寫出可以「有效率管理資料的程式」

前一門課所學比較像是你有一本程式語言使用說明書
然後把這本說明書讀懂、會使用而已
但是也就僅止於「會使用」而已
不代表你可以寫出「好的程式」

有時候程式可能需要處理比較龐大的資料
例如全校 10000 個學生的 GPA 成績
裡面包含姓名、學號、GPA

那這些資料程式要處理的時候
要怎麼讀進來呢?讀進來後要怎麼存呢?

存的方式也有很多種
有不會浪費記憶體的存法
可以讓你快速搜尋的存法

學會各種資料的管理方式,以及了解不同存法之間的優缺點
就是這門課的主要目的

當然,除了要會使用之外
程式設計師也要會撰寫具備這些方法的程式
這也包含在這門課中


8. 計算方法設計 Algorithm

俗稱「Algo」、「阿狗」或「演算法」

資料結構在教如何「有效率的管理資料」
Algorithm 則是在教如何「寫出有效率的程式」

舉個簡單的例子
現在給你 10000 個學生的學號與姓名
這些紀錄都依照學號依序排好了

那麼現在給你一個學號,要你找出學生的姓名
請問怎麼找比較快?

最笨的做法
就是從第 1 個學號開始一個個看到第 10000 個

比較聰明的做法
就是先看中間 (第 5000 或 5001 個) 那一個
如果比你要找學號還要大,那你要找的一定在上半部
如果比你要找的小,那就在下半部
接著縮小範圍後,再看那個範圍最中間的數字
重複以上的步驟到找到為止
這就是著名的 Binary Search (二分搜尋法)

第一種作法最糟糕的狀況要看 10000 次
第二種作法最糟糕只要看 log2(10000) 次,也就是約 14 次

而程式常常會遇到這種狀況
不同做法的選擇就會讓你的程式有爬行跟坐火箭般的差別

Algorithm 這門課就是教你在各種狀況下
有甚麼樣的做法可以選擇
怎麼樣思考才能夠獲得更有效率的作法


9. 軟體實驗 Software Studio

這門課可能是清大資工特有
我不太確定其他學校有沒有

因為我們在程式設計課中所學到的技巧
只能讓我們寫出一些玩具程式,像是通訊錄、踩地雷、計時器之類的

對一個程式設計師來說
我們缺乏開發複雜且實用程式的能力

軟體實驗就是訓練學生開發比較複雜且實用的程式

一開始會先教學生另一種程式語言 (我們學校是教 Java)
這種程式語言的特色是,適合用來開發大型複雜的程式

再來,讓學生學習與組員合作
使用一些專案管理工具,像是版本控管 (Ex: Git)
然後再教導比較複雜的程式設計概念...等等

像是我們其中一門軟體實驗課
期末必須要寫出一款具有實際效用的 App
並且期末會有 Demo (Demonstration) 大會
學生必須要實際上台展現它的 App 給大家看

這門課可能有人會覺得像專題,但是它不像專題需要太複雜的理論
只是要訓練學生寫出一款實際能用的程式而已

──────────────────────────────────────────────────────────────
那麼以上就是我們系上必修課的內容
接下來我還會補充一些資工各領域的資訊

如果有問題也歡迎提問~

清大菸酒貓

熱門回應

23
寫一寫寫到天亮通常有兩個情況
1.寫得太順,太忘我,就跟作曲或寫小說很像,這時候中斷太可惜了。
2.寫得太卡,整晚都在除錯,滿臉的Bug
通常是情況2,附帶一下這種感覺,第五階段就天亮啦XD
Post images
==================================
太上皇

共 31 則回應

8
我最近在想 如果把醫學系所學打出來應該會超級長.....
4
我才剛把大一二寫完就放棄了

3
大三大四以後的東西我也真的不知道怎麼打
4
其實真的很想問一下,你們平均都睡多久啊?
據一個我資工的學長說有時候寫程式寫一寫就會不小心天亮是真的嗎?

中央肚臍
23
寫一寫寫到天亮通常有兩個情況
1.寫得太順,太忘我,就跟作曲或寫小說很像,這時候中斷太可惜了。
2.寫得太卡,整晚都在除錯,滿臉的Bug
通常是情況2,附帶一下這種感覺,第五階段就天亮啦XD
Post images
==================================
太上皇
0
沒錯 = = 你學長我有經驗
2
我們從大1就開始有 software studio 了 嗚嗚~~~
每2周都要寫 小型project = =
還有期中期末 project = =



原PO 你忘了加 compiler了 = = 這超硬的
- - 帥版蝦 - -
0
我也好想看醫學系上課的內容~
可以把大一大二的貼出來嗎XD

我還好啦~ 我都可以睡飽
不過確實有時候寫程式寫到狀態來的時候
就很難停下來了XD

據說工程師在半夜的工作力比白天高
所以很有可能晚上寫一寫就天亮~

感謝支援XD

我們是大二上的課~

話說 Compiler 不是我們系定必修
所以就沒有特別介紹囉~

清大菸酒貓
1
推~放假超爽der
覺得之前高中待的資訊社時,練習寫的程式根本小兒科www

B1 B2 B3 我也想看醫學系的介紹~
大三大四的可以簡單介紹就好 XD
讓我們知道大概情況就行,講太深容易悲劇,像我(x)

-語璇
1
同為資工系,有感....
真的會不自覺用天亮
0
菸酒貓你好

在下本身不是資工系的
但因為有興趣,有花時間在自學

有三個問題想請教你或者其他人能幫忙回答XD

1.照你所講CPU裡面是處理邏輯問題的,能否舉出關於藏在CPU裡面的東西大概長什麼樣子或照片?
現在裡面東西都很小我知道XD,有沒有比較老或過時的照片可以了解用呢?


2.關於邏輯問題,有個東西一直困惑我,到底怎麼用1,0,+,×,÷,比較,判斷之類的方式寫出一些複雜的軟體或遊戲阿??這中間的過程怎麼轉換的,有沒有一些開放原始碼可以邊看成品同時也知道程式碼怎麼寫的呢?

3.我看計算機也很多種,什麼計算機結構,計算機組織,計算機架構好多種,有什麼差別嗎?還有好像沒有一門課叫做演算法的樣子,都是跟資料結構一起上嗎?



3
真的有課叫做演算法
還有一門叫做 高等演算法

還有 現在寫程式 並不是用0 或1寫,只是到最後的source code 會被轉成那樣
用 程式語言 所以你不會在source code裡看到一堆0 或1
至於遊戲的判定方式 以簡單2D 射擊遊戲, 就是看 子彈的路徑上 是否有敵人 或是什麼東西的(可以想像成 在XY平面上 有條線(子彈) 敵人、障礙物可能是個點)
看說 線是否有通過點
- -帥版蝦 - -
0

遊戲製作教學範例:
1.先要有一個構想,假設我想要作一個老鼠吃起司的遊戲
2.然後具體化想法,例如老鼠怎樣吃,怎樣移動,吃到會怎樣
3.然後把'上述的轉化成文件後,丟給程序猿(一種從事Coding的動物)
4.登冷,產出結果,上架:
4個步驟就完成啦 (๑•́ ₃ •̀๑)

你講的計算機結構組織架構有點像是概論吧?
如果是指計算機概論其實就是電腦科學概論,那就是跟電腦相關的基礎知識吧
資料結構跟演算法是息息相關的,有一些課程會包在一起上三學分的資結,或是兩學分拆開上
==================================
太上皇
0
資訊社=口=!!!
挺令人意外的~
為什麼會想加入資訊社呢?

真的

感謝 B12 B13 幫忙回答XD
那我就挑幾個其他問題回答吧~

A1. 你要的 CPU 圖~
這是 Intel 最早期的 CPU Intel 4004 的電路圖
Post images
通常學校在教這門課的時候
課本內會用極度簡化的設計來介紹
所以如果你想知道的話,可以找找看「Computer Architecture」的課本

A2.
確實只用四則運算跟比較就能夠做出遊戲聽起來很玄
不過事實上,我們現在電腦中的各個資訊都是可以化成數字來處理的

例如,螢幕上看到的圖片
圖片其實可以切割成一個一個點
每個點又可以分為紅藍綠三種顏色
紅藍綠可以各用一坨 0 跟 1 的數字表示
我們只要把紅藍綠的數值跟那個點的座標傳送到螢幕上
就可以顯示出圖片了

而其他像是滑鼠的按鍵反應,敲鍵盤時按下哪個鍵
也都可以轉成 0 跟 1 的數字
那 CPU 只要把這些數字稍微加減乘除,然後擺到正確的位置就行

至於複雜的遊戲,說穿也是一堆數字的計算而已
例如,一個腳色往左邊走五步
那可能就是我們腳色有一組地圖上的座標
然後把這個座標往左加上 5
接著程式再把腳色的圖片資訊轉成 0 跟 1
送到螢幕而已

A3.
這個 B13 就有解釋了

話說我們學校資結跟演算法是各三學分的大必修課

清大菸酒貓
0
可惡,我們資管太弱了XD
0
話說我再補充一點
學中高階程式語言的好處
就是你不需要知道底層複雜的運作方式
就可以做到很直觀的事情

例如你要在螢幕上顯示「我是貓咪」
通常 C 語言會這樣寫:「printf("我是貓咪");」
這邊雖然只有短短一行
但是實際上電腦在處理的時候,背後涉及到一大堆數字的計算
可能這一行實際上會被轉換成幾十行甚至幾百行的組合語言
因此這就是為什麼一般都會鼓勵學中高階的語言

怎麼說XD
1
學分太少了XD,我畢業了之後深深覺得
先唸資工學士,在唸資管碩士會是比較妥當的路線
因為資工的底比較扎實,資管的理論不靠Coding去實踐根本沒屁用
而且公司都嘛要會Coding的人,管理這種動嘴巴的也不是一個菜鳥該作的
一進去都嘛是RD爬到SA在爬到PM之類的
大學學的SA等到作SA的時候早忘了吧XD

可惜當初是文組XDDD
0
B14 純粹是因為高中時沒什麼社團能選,但又需要修社團學分
想說之前電腦課寫程式沒遇過太大的問題
於是就進了資訊社 XD

但也就那樣,只是把之前電腦課交過的再複習一次
不過現在早把之前學的程式給忘光了www

-語璇
0
B5 超級認同這張圖!

天亮後決定小睡一下,之後起床去上完那天的課後,回來看code就發現問題了

還我昨天的時間來!!!!!!!!!!!!

PS.請問 B5 這張圖的原作是你嗎? 我可以轉貼嗎? 感謝!
0
B5 的圖超中肯XDDDD
0
恩恩~確實資工的底打得比較扎實
不過能學到經濟學什麼的也算是有點用啦XD

原來你會寫程式~
那你的數理邏輯可能沒你想像中的差哦!
搞不好只是缺乏訓練

也有人說晚上雖然工作效率很高
但是其實晚上精神差的時候,很容易打出詭異的 code
看來我們還是盡量維持良好生活習慣比較好XD

真的

清大菸酒貓
0
B19 不是喔,這是之前看到朋友分享我把他存起來的XD 原作應該是國外的!~
0
請問資管 資工寫程式差在哪
0
資管比較不扎實
資工學到深入
0
B24 會因為沒有學工程數學營響程式嗎
0
寫程式需要天份
0
這是謬誤阿~~~~
0
B27 不然呢🤔
0
太多人把寫程式神格化了
雖然不容易 但是也不是學不起來
能力的差距在於
接觸時間的長短 與 興趣熱情罷了
那些"大神"們 接觸電腦的時間比你我都長
當我們在耍廢看劇時 他們可能在學新技術
或是coding

不能否認的是 每個人頭腦智商是不同的
但不能一句 天份高
就把抹煞 他們的努力
0
通報 📢
好像有人對這篇文章有新想法唷,快來去看看!
0
目前也很努力在學
不過還是有許多一直搞不懂的地方
我覺得是自己邏輯能力不好...
馬上回應搶第 32 樓...
回應...