分享到plurk 分享到twitter 分享到facebook

版本 0b9dba983d13a8f6b135f02bb677fb8598849b27

User/quantabase13

Changes from 0b9dba983d13a8f6b135f02bb677fb8598849b27 to a645f3659429cb540c25f684036ed1a8ec4472b3

---
title: quantabase13(何昌祐)
categories: User
---

學歷
================
- 中央大學 化學學系 (2014-2018)
- 成功大學 資訊工程研究所 (2020-)

聯絡資訊
================
- email: ``j345274@gmail.com``
- github: [quantabase13](https://github.com/quantabase13)

2020 秋季班 個人評量
================
回顧
-----------------------
- 知道 x - y < 0 敘述為何不能寫為 x < y 嗎?
    - 沒有說明的情況下,用32 bits 表示 int 並將 y 用 INT_MIN 代入,-y 跟 y 的 bit representation 相同,因此 x - y 相當於 x + y ,將 x 用 1 代入,會得到 x - y = x + y 
< 0, 但 x > y。
- 知道如何寫出時間複雜度和空間複雜度皆為 O(1) 的 abs64 嗎?(沒有分支) 這樣的 abs64 又可用於真實世界哪邊?
    - 若要求 abs(x),令 tmp = x >> 63 ,return (x^tmp)-tmp。要注意不適用於 64 bit 的最小整數。
- 知道 fixed point 嗎?相較於 floating point,這樣的機制有何優缺點呢?知道真實世界如何運用嗎?
    - fixed point number 是定點數,相比浮點數來說用固定位數表示小數點後的值。 fixed point number 可以視為整數,因此可以在沒有 FPU 的處理器上執行。由於是使用固定位數表示精度,因此遇到像是 tan() 這種函數時在邊界會無法正確表示數值。實際應用上可以用在 3D 遊戲的算繪引擎,例如 DOOM。 

作業及筆記
-----------------------
- Homework1 
    * [開發紀錄(lab0)](https://hackmd.io/MJeG53AFSieIPdPJhTjPtw)/[github](https://github.com/quantabase13/lab0-c)
    * [開發紀錄(quiz1)](https://hackmd.io/nNGvM4twSzCRclUsyDSBSg)
- Homework2 
    * [開發紀錄(quiz2)](https://hackmd.io/rh3Xpa4RRyOJXqsws6bBiA)
- Homework3 
    * [開發紀錄(quiz3)](https://hackmd.io/RofJst2PSMS7Cin9w-1Ewg)
    * [開發紀錄(dict)](https://hackmd.io/dV45wUuMQFefwjiQMw_oyA)/[github](https://github.com/quantabase13/dict)
- Homework4 
    * [開發紀錄(quiz4)](https://hackmd.io/hD_NmCU5RGS0EA3yOtIt0A)
- Homework5 
    * [開發紀錄(quiz5)](https://hackmd.io/F4Q-TInWR2-HR-8G4AuWuw)
    * [開發紀錄(render)](https://hackmd.io/6fIWa9T4Qj-2txwAZAHy-Q)/[github](https://github.com/quantabase13/raycaster)

心得
-----------------------
- 這是我這輩子修過最硬、也是課程內容最豐富的課,沒有之一。
- 第一次點進課程相關網站(成大wiki)時,我就深深震撼於裡面資料的豐富程度。每一週的主題都有好幾份參考資料,以及老師的錄影解說(時數長的可怕!),從這兩點就能感受到老師的用心。
- 老師的授課方式以探討程式設計思維及系統軟體設計為主,搭配 leetcode 的題目。老實說,這兩者對一個大學幾乎沒有碰過C的我來說是非常大的挑戰,尤其是系統軟體設計這種需要用到多門資訊系學問的議題,如果沒有實際的例子和精闢的講解,很容易讓人有不知所措的感覺。幸運的是,老師會從可測量、實際應用的角度切入,透過效能工具量測的結果及原始碼分析,表達一個概念的實作以及對效能的影響。如果一時無法理解,還有成大 wiki上的資料及錄影可供複習。因為老師這樣務實且清楚的教法,讓我開始在平時也會關注一些系統軟體及效能方面的知識。
- 這門課還讓我有另一個大收穫,就是培養實事求是的態度。老師平常就要求我們讀第一手資料,我們在解釋程式行為時必須有憑有據(規格書),要掌握程式行為,同時考慮各種安全上的議題。以往我寫C的程式總是要求能動就好,有不清楚的地方也只會用 printf 隨便看看(因為從現在看來這甚至不叫檢查);現在我會在有問題時試著查規格書的相關規範,同時試著用一些 linux 的系統工具來驗證我的推論。
- 最後,這門課其實還有非常有趣又讓人受用的一點,就是老師會透過各種小故事(或者是嘴炮)、邀請知名外商公司的工程師,告訴我們未來可以走的方向(關鍵字),以及一些面試的要點。印象深刻的是其中一次 Google 工程師有提到,要進 Google只要基礎夠好、專業領域深入、履歷有些亮點加上英文能力夠就能進。
這讓我在審視自身能力時,觀察的角度跟以往有很大的不同。

自我評量分數 (1 到 10 級分)
-----------------------
- 我給自己 10 級分。這是我這輩子最認真上的課,沒有之一(目前)。上這門課前,我還是一個不知道計組的知識可以拿來作什麼、os 覺得只要會寫研究所考古題就很厲害的考試生 ; 上完後我深深感覺到計組知識在效能量測及最佳化時的重要性,以及考試的os跟實務的os完全是兩個世界(實務的比較困難但有趣多了),研究所的考科,上完這門課後都確實有了意義。另外,由於這門課要求大量實作,關於 hackmd 和 github 這兩個平台我花了不少時間在學習使用方法(尤其是在 hackmd 上用graphviz 畫圖),所以現在想做筆記和備份程式碼時相對以往比較知道要怎麼作。
- 我的基礎不夠,寫作業時很多地方都有力不從心的感覺,想程式寫法的速度也慢上別人許多,透過這門課更是讓我徹底體會到現實,不過也正因為如此,我的「無知之知」比起過去呈現爆炸性成長。我想這學期我的成長和努力值得肯定,因此決定給自己10級分,也算是給未來的自己的一個勉勵。