CS50 完結篇 - 關於程式的那些事
文章推薦指數: 80 %
以前的我,靠著上一個月的JS課入門程式設計,主要是在工作上自學,學習未從細節開始,所以常常寫出一堆莫名自己難解釋的bug。
謝謝,不厭其煩跟我說著 ...
跳到主要內容
分享
取得連結
Facebook
Twitter
Pinterest
以電子郵件傳送
其他應用程式
5月22,2018
CS50完結篇
花了1hr翻閱以前的課程和作業,從去年7月開始學習的點點滴滴逐漸清晰浮現。
當初學習動機很單純:
1.完全免費
2.有一直想學的演算法和資結
3.是屬於通識課範圍,我想獲得CS基礎知識
4.有huli老師導讀
5.這堂課很有名我知道
想不到學習曲線極陡,一開始就從最底層的binary開始講,透過撕電話簿讓我們思考何謂演算法和程式邏輯。
並介紹Scratch,之後馬上轉化類比成C語言。
接著說了很多程式細節,包括preprocessing->compiling->assembling->linking,以及singlequotes或doublequotes等等,再擴展到loop、function、condition等等。
以前的我,靠著上一個月的JS課入門程式設計,主要是在工作上自學,學習未從細節開始,所以常常寫出一堆莫名自己難解釋的bug。
謝謝,不厭其煩跟我說著很瑣碎卻很重要的事,讓我寫出安全可靠且具設計感的code。
CS50很多時候就像在床邊說故事的感覺,娓娓道來很多最重要的小事:測試程式時要注意cornercases、程式設計要abstraction、factoringofcode與readabilityofcode、floatingnumberimprecision等等。
再者,CS50中我學習到一個很棒的debuggingtechnique:rubberduckdebugging,這技巧很適合只有一個人寫code遇到困難時。
透過verballywalkingthroughyourowncodes,你會發現有遺漏的地方,因為youhearyourself。
另外,CS50課程內容設計豐富:我永遠難忘為了寫cryptography的作業花一星期,連睡覺時都以為在解題,雖然每天起床超累想到要去公司繼續寫code就有些overwhelmedXD但我卻收穫很多。
我喜歡CS50透過肢體教會大家演算法和資結。
肢體不比肉眼敏捷,剛好能模擬電腦行為。
也很感謝huli老師提供的網站,讓我在寫作業時,能不斷透過演算法實作過程去實作成C程式。
當然也遇到很多人害怕的指標,這裡我有找到一個對我很受用的連結:https://kopu.chat/2017/05/15/c%E8%AA%9E%E8%A8%80-%E8%B6%85%E5%A5%BD%E6%87%82%E7%9A%84%E6%8C%87%E6%A8%99%EF%BC%8C%E5%88%9D%E5%AD%B8%E8%80%85%E8%AB%8B%E9%80%B2%EF%BD%9E/
CS50裡面定義*代表dereferenceoperator,也就是gothereoperator,也就是gotosomeaddress。
所以如果s為isaddressofachar,那*s為meansgotos,但int*x或int*x的int*為theaddressofints。
課程透過實作如何複製文字讓我們分辨address和value,以及給予我們temp的觀念。
而在記憶體的結構也有很多著墨,包括程式呼叫過程記憶體裡的變化,說到駭客會透過破壞return去攻擊程式,以及一些bufferoverflow或bug中常見的segmentationfault、memoryleak等等。
說到如果寫C,呼叫malloc()後忘記free()常常是造成memoryleak。
記得有項作業是要我們記得用Valgrind去檢查有無leak,很不錯的工具。
指標重要是因會帶到linkedlist或hashtables等等資結。
其中CS50不僅以圖示表現資結,也透過C的struct表示資結。
兩相比較下,會更佩服程式的抽象化能力,太美麗、純粹了!
課程後半難度回到人間,首先說明HTTP,是這堂課讓我真正了解router到底如何運作,CS50很詳細一直traceroute給我們看封包的傳遞過程,也telnet聯現好幾個網站,讓我們更了解原理。
第七堂課是MachineLearning,透過由淺入深方式,從最簡單的數學圖形,到用Python實作NearestNeighborClassifier等K-means。
讓ML不再難懂。
課程中也說到ML的圖片辨識和之前用C實作forensics最大不同在於我們事先不知道圖片的結果是什麼?不像之前只是去除雜訊,求得原圖。
因為時間關係,DeepLearning未能好好說明,幸好最近公司內訓有TensorFlow課程,補足那時大多只夠聽到ML的遺憾。
CS50這時也將C一一對照成Python,會發現,各種語言本一家。
其實動態語言也有compiler,只不過不由開發者動手。
且像JS的Object和Python的dict都是從C的strtuct發展而來,只不過威力更強大,多了很多內建的API,因而嚴格來說不全等於struct,但是struct的擴展加強版XD
再來介紹了SQL,說到如何normalizingthedatabase以防duplicateddata儲存情形。
以及如何用flask_sqlalchemy實作ORM(Object-RelationalMapping)。
其實在交易網站作業時,CS50有說有餘力能以ORM寫,但我沒有用,光是寫整個網站還要防一堆呆,¡Nomejodas!(不知為何想起西文XDD)
CS50透過幾堂課將MVC觀念貫串其中,先講HTTP時先來個前端介面,之後介紹Python,用Flask做後端。
最後透過CSV、Googlespreadsheet介紹到SQL。
雖然課程中有介紹SQLinjectionattack,但覺得最印象深刻是huli老師直播攻擊過程,好有臨場感,讓開發者認知重視資安重要性。
最後是我最熟的JS,CS50將C的pointer對照成JS裡的reference的觀念,也介紹Ajax、GoogleMaps或localStorage等等我已知的事(抱歉我前端起家的)。
課程大概說完了,其實CS50學習花了近10個月的時間。
因為要工作,而且同學一個個要結婚,不是要去當伴娘,就是要喝喜酒。
或是一堆有的沒有節日,不是家庭旅遊,就是臨時有行程。
加上是英文授課,加上需理解時間。
且寫作業前也是需先複習一次。
作業規格還是一堆英文,就拖到昨天才完全寫完。
當然CS50最後有finalproject部分,這就不在學習範圍內了。
想不到哈佛的通識課這麼有深度,但我一直很感謝遇見了CS50,讓我對CS領域有了commonsense,成為一個基本的工程師。
很喜歡課程中很多的細節,往往是這些細節成就真正的不凡。
也很感謝作業中的WalkThrough,真的很替學生著想,一步步就像嬰兒學步,教導如何拆解問題,培養解決問題的能力。
印象很深一句話,DavidMalan曾說:遇到未知的問題別怕,你要想你很幸福,身邊還有類似console或terminal的方式去驗證或找出問題所在,全部你需要做的,只是去tryit。
最近是學習程式(相等於從事程式工作)滿2年的日子,開始思考職涯或人生規劃的事,最近在看一本程式界的心靈雞湯,不敢先說是因為想等有收穫或心得時再看要不分享也不遲。
這本書比CS50範圍更廣,是全方位的。
當然,因為現在上TensorFlow,見招拆招,也是有趣的學習方式。
過去有陣子找不到工作,有些缺錢(都拿去買書或上課,最後沒錢只好自學XD),是因自身觀念被語言侷限,拒絕一些工作offer,最後實在沒錢,在皆是全端需求工作機會下,到現在公司上班了,
很謝謝CS50讓我體認語言是工具,解決問題原是根本。
分享
取得連結
Facebook
Twitter
Pinterest
以電子郵件傳送
其他應用程式
留言
熱門文章
11月30,2016
unicode編碼[\u4e00-\u9fa5]指中文範圍
分享
取得連結
Facebook
Twitter
Pinterest
以電子郵件傳送
其他應用程式
張貼留言
4月18,2019
Java-Java8中新出現的map()和flatMap()差別結論
分享
取得連結
Facebook
Twitter
Pinterest
以電子郵件傳送
其他應用程式
張貼留言
LucreciaLin
瀏覽簡介
封存
2021
1
三月
1
2019
66
十月
1
八月
3
七月
6
六月
7
五月
12
四月
17
三月
20
2018
38
十二月
1
十一月
4
八月
10
七月
12
六月
2
五月
4
CS50完結篇
CS50Pset8
Promise文章分享:WriteBetterJavaScriptwithPromises
React.js學習(入門)
四月
1
三月
1
二月
3
2017
42
十二月
3
十月
2
七月
2
六月
1
五月
4
四月
4
三月
4
二月
12
一月
10
2016
111
十二月
31
十一月
60
十月
20
顯示更多
顯示較少
檢舉濫用情形
延伸文章資訊
- 1上一堂有趣的電腦課:哈佛大學的免費線上課程Computer ...
... 線上課程Computer Science (CS50). 我是一個PM ,大學沒有修過計算機概論的那一種。 程度大概是讀過幾本書、一些些影片,自學HTML/CSS 這樣子的。
- 2CS50 完結篇 - 關於程式的那些事
以前的我,靠著上一個月的JS課入門程式設計,主要是在工作上自學,學習未從細節開始,所以常常寫出一堆莫名自己難解釋的bug。謝謝,不厭其煩跟我說著 ...
- 3cs50 中文討論區
這個社團主要是討論與cs50 有關的任何事情若是對cs50 不熟悉的,可參考這篇心得: http://huli.logdown.com/posts/687027-cs50-programming...
- 4[CS50] 導讀哈佛大學程式課程 - Lidemy 鋰學院
CS50 是哈佛大學開設的程式通識課程,內容包山包海,從最簡單的Scratch 教到C ... 如果你想更了解我,可以參考:自學、哲學、講學:我的程式之路以及一個工程師的履歷 ...
- 5撕書吧編程小白!哈佛CS50,全美最受歡迎計算機入門開放
自學計算機,到底如何入門?哈佛大學計算機導論課程CS50推薦給編程小白們,這門課是哈佛最受歡迎的課程之一,老師風趣幽默,帶你少走彎路, ...