前幾天我們為大二的小夥伴們帶來了CSC選課講座,但是不少小夥伴反應說想要一個更加詳細的課程介紹文字版本以便於收藏。
於是EZ4.0部門的導師們就為小夥伴們精心準備了這一份CSC大二選課攻略,大家快在選課來臨之前收藏起來吧!
希望這一份攻略能對你的選課有所幫助哦~
大二CS Programming必修課, 這門課首先會接觸新的程式語言Java, 並且通過Java這個語言, 系統的學習一個靜態類型的面向對象語言的各種feature.
在這之後, 這門課會正式進入introduction to software
development. 從最基本的designing開始, 學習各種常見的software design pattern. 這門課同時會帶大家go over一些面向對象語言的principles, 以及一些常見的在寫code時的指導。
學期末期, 會接觸regular expression這個在工業領域很常用的technic。這門課對於已經到大二並且準備開始寫項目的小夥伴來說, 非常主要. 課程中會有一個大project, 佔這門課的主要分數. Project內容可能是desktop application 或者android application.
由於這門課的課程涉獵範圍非常廣, 內容非常細碎, 導致了這門課的學習進度非常的快, 十分的依靠學生的自學能力. 比如在最開始, 這門課沒有像大一學習Java的時候一點點帶小夥伴們go over每一個重點的syntax. 而是在PCRS上非常簡短intro後, 要求大家回答問題進行訓練。
同時Lecture上並不會對重點考點進行細緻的講解,比如學期中的Midterm (or quiz) 的考試, 其實有一個非常好用的固定套路, prof的課上並不會對這個技巧進行系統講解。後半學期的Project內容, 教授也不會細緻的講解一些在software development life cycle中重要的aspects, 只是給大家一個introduction, 然後要求大家自由發揮. 對於具體的application development, 如android平臺的開發, 課上也是非常淺顯的給了一些basic instructions。
總而言之, CSC207這門課, 是非常考驗學生自學能力的, 並且主要壓分項在於團隊project和個人assignment上。
課程均分為B左右,Midterm和Final的考試中, 我們有很多套路和技巧, 可以使周課學生拿到不錯的分數。但是如果沒有接觸到具體的解題技巧和成熟的知識體系梳理,考試中還是有非常多的陷阱和細碎知識點可以導致丟分的。
作業的難度主要在於instruction的不足, 需要學生進行大量的課外學習來了解作業的requirements,以及完成作業。
統計專業:STA247/STA257/STA237
計算機專業:CSC236/CSC258
數學專業:MAT235/MAT223/MAT224
Individual Assignment
Group Project (in 2 phases)
Quizzes 3 x 5%
Final Exam
Paul Gries
CS專業老牌教授, 相信所有看過CSC108 PCRS的小夥伴都不會對他陌生的, 這位prof在CS教學領域有著極高的建樹, 授課風趣幽默而且非常認真負責。
他任教CSC207的時間不長,基本只出現在Fall Term, Paul的CSC207相對而言instructions明確,一般不會在marking中出現分歧或者錯誤。但同時, 對於Project中需要用到的android和desktop application, Paul同樣不會做豐富的講解.
Lindsey Shorser
已經持續在這門課上任教3年了. 好壞都在於她的懶. 課上幾乎沒有什麼幫助. Assignment handout經常delay, 導致了她經常要extend ddl。同時作業也經常出現instruction不清等問題. 好的部分在於, Lindsey的考試套路, individual assignment幾乎完全沒有變化。可以讓小夥伴們在這部分拿到不錯的分數。只是我們經常要去找她remark, 成功率極高,就是要等很久。
這門課程首先是學習了Java這個非常popular, 並且在職場被廣泛應用的語言。這門課程的topics非常的sexy,會讓學生接觸到很多的在職場中廣泛應用的topics. 只是由於課程設置上,並沒有對這些topics很practical的深入了解。
周課中會有很多的practical的例子和實用性的講解來幫助小夥伴們真正的接觸到introduction to software
development.
1.Linux 入門(Basic shell commands)
2.C語言基本語法和邏輯(Basic C syntax)
3.System Call and Memory Model
4.多進程編程(fork)以及網絡編程(socket)
5.Shell Script
Shell, fork, socket
Linux 是一個Learning Curve比較大的工具,而209是第一門UofT CS學生接觸它的課程,所以上手可能會有點難度。Linux是由C語言編寫的,209大部分其實都是在講C,這裡由於學生已經有了108,148 Python,207Java的基礎,所以教授不會著重強調C語言的語法,而會focus在邏輯算法上。
這裡大部分學生覺得困難的兩個知識點是多進程編程(fork)以及網絡編程(socket),慶幸的是這兩個midterm都不會考,不幸的是兩者分別佔據了A3以及A4,Final中也會涉及到一部分,所以總共加起來大約40%的總成績。
Lab以及PCRS基本送分,Midterm佔百分比不高,主要難度在於A2、3、4以及final
上學期207,下學期209
其他內容相符CSC課程: CSC369, CSC367(難)
PCRS
Lab
A1
A2
Midterm
A3
A4
Final Exam
Note: You need to score at least a 40% on the final exam to pass the course.
Michelle Craig: PCRS製作人之一,教學經驗豐富,課程較難
Jennifer Campbell: 人非常nice,上課使用iPad Pro,筆記清楚且上傳至網站
另外還有:Karen Reid, Mark Kazakevich
CS Specialist進專業後的第一節必修課,競爭激烈,不能懈怠,且難度不小。為之後的CSC369打下基礎。
繼續深入學習induction以及time complexity analysis。不僅在證明方法上會再介紹165沒有提到過的well ordering principle(這個知識點在MAT246也會講到,不過側重各有不同),很多問題也不再僅限於CSC165階段的iterative algorithm。
CSC236會介紹更多的算法分析所需要的手法以及帶同學們分析更多不同種類的algorithm。會接觸到correctness proofs for iterative and recursive algorithms。並且藉由recursive algorithms,會詳細講解recurrence equations and their solutions,探討是否有closed form和如果有closed form怎麼求解。
CSC236另外一個比較重要的也是課程收尾的知識點是automata and formal languages。
重點之一是recursive algorithm。很多知識點都是相關於recursive algorithm的。比如correctness proofs for recursive algorithm或者是recurrence equations and their solutions。
另外一個同學們會覺得比較陌生不太好理解的知識點是automata and formal languages,尤其是後者。不僅僅是因為形式和內容對同學們來說是比較新並且和其他知識點有相當區別的,而且有很多證明上的trick和手感需要反覆的練習,雖然說有模版可以套,但主體部分的完成仍然有一定難度。
CSC236每個assignment的均分一般都很高,通常八十分以上的均分是很正常的。Midterm均分相比於assignment會稍低一些,但通常也能夠在七十分左右。
Final難度會比之前的midterm有所提升,但總的來說並不會突然出現一個斷崖式的特別低的均分。整體來說CSC236的均分一般都不會太低,可以達到67%-72%左右。
CSC: CSC207, CSC209
MAT: MAT223, MAT224, MAT235 OR MAT237
STA: (STA247, STA248) OR (STA257, STA261)
Assignments (3)
Quizzes (9)
Term tests (2)
Final exam
Interaction and peer instruction
(bonus)
Nuances: The three assignments are worth, collectively, 21%, so we will weight your best piece 10%, your worst piece 4%, and your middling piece 7%. Your best term test will have weight 16% and your worst 8%.
Your best 3 quizzes will have a weight of 3% each, your next 3 best will have a weight of 2% each, whereas your worst 3 will have a weight of 1% each.
No modification of the exam weight is possible: it will be 37% of your final grade, and you must achieve at least 40% of the possible marks on the exam in order to pass this course.
一般來說CSC236的師資力量都是比較令人滿意的,講解也比較細緻。Course coordinator常常會是下面這兩位prof之一:
Danny Heap: 非常和善可愛,通常會把所有課程資料整整齊齊放在course website上,並且會放出很詳細的annotated slides,但是Danny的書寫有的時候並不那麼容易辨認,所以建議同學們還是認認真真去課上自己做筆記。Danny出題一般比較中規中矩,有一定難度,但不會特意為難學生。他的CSC236常常會有一些interaction或者peer instruction的設置,給大家送一點bonus。
David Liu: 多大CS男神prof之一,並且相比較其他CS prof,在發量上具有絕對優勢。他對於課程的方方面面都有非常嚴謹周全的安排,講課也很生動幽默。David Liu常常喜歡不把課上說到的每一個觀點都仔仔細細地注釋在slides或者課堂筆記上,而是寫下key points輔以比較詳細的口頭講解或者實際demo。所以最好還是能去現場認真聽他的課。David Liu出題會有一定難度和思維量的,不過通常他的考試會一定程度把assignment作為一個很重要的source,也就是說他的考試題目的測試目的之一是看看同學們的assignment是不是自己認真完成並且弄懂了每一道題,並不只是靠隊友拿了一個高分。
對於後續數據結構和算法分析的學習,165的知識僅僅只是一個入門,而CSC236的概念性和證明手法在廣度和深度上都有了不小的提升。CSC236當中對於recursive algorithm的學習是非常有用的,好處之一是能幫助小夥伴們入門divide-and-conquer,這也是大家在CSC373通常會接觸到的第一個topic。CSC236不僅會繼續研究running time complexity,還會教同學們如何證明correctness。這樣可以大大幫助algorithm design以及pseudo code的書寫,避免盲目coding。
大二計算機半年課,課程被普遍認為是depressingly horrible, 主要是由於Lab部分難度相比課程而言跳躍過大,且花費時間過多(後期pre-lab幾乎是7-10小時一個)同時課程內容多且廣,從最底層的電路、Transistor,一直到circuit,device,FSM最後到CPU,邊邊角角有很多東西,極其容易迷失方向。Lab中我們需要使用一種語言叫Verilog, 個人認為這種語言在課程中的學習並不足以完成他規定的Lab, 這就是這門課神奇的地方,它Assume我們知道很多,但實際上,剛剛從165 148上來的大二學生是無法完全handle這樣的內容的。
上面也說到,主要是Lab的Pre-lab部分,需要在每周三個小時lab前完成,有時他lab的描述寫得十分晦澀、冗長,讀起來十分難受,儘管對於Pre-lab, lab TA給分還是不錯的。考試內容(如果是Steve Engles教的話)很有套路可循,只要把他帶的年份的卷子都刷完即可,其實考試內容反反覆覆就那幾個知識點,他甚至有時會頻繁使用原題。
如果能把Lab全拿滿分(其中Lab6,7可以拿125%)midterm穩住,即可。就像之前說的,這門課如果是Steve帶,套路性很強。時間commitment :Pre-lab 7h + Lab 3h + lecture 3h + 複習 ?h (所以每周至少13h+) ,而周課中導師會帶大家過pre-lab的內容,所以可以減輕負擔。同時也會把零散在slides的知識點合併,並且輔以真題,針對性更強。
計算機:CSC209 (因為會設計一個共同知識點 pointer), CSC236(共同知識點FSM (Finite State Machine))
Labs:(7 total, 4% each)
Project:(2% proposal + three 4% demos)
Midterm exam:(closed-book)
Final exam:(also closed-book) ➔ you must get 40% on the final to pass the course
Regular Term: 這門課授課最多的coordinator就是Prof. Steve Engels,被學生公認為是CS系200level講課最好的教授之一 (我個人認為可以去掉「之一」),上課永遠保持微笑!且思路非常清晰順暢,從來不卡頓。他的考試套路非常清晰(2012,2013,2014,2015,2018都是他帶的),且題目會出得十分精簡:即,完全指向某個考點,絕不會拐彎抹角浪費時間。且他會頻繁使用原題,如果某次midterm他只給了部分年份的題目,沒有給答案,那你只要找到那些答案,刷了題,基本就穩了。2018年Fall時,甚至出現把2014年Final整張卷子抄下來給我們考的情況(連裡面的typo都錯的一模一樣)。其他會有一些不定期的教授,如Lim (一個韓國人,講課水平實在不行),以及一些ECE(電子工程)系的教授,不過他們都沒有Steve有經驗,也不如他教得好。
Summer: 這次的教授是Rabia Bakhteri,一個馬來西亞來的新教授,上學期和Steve搭檔教課,summer她獨自扛起整個258。她依舊沿用steve的風格,slides和lab全都照抄,一點不變,所以我認為套路和風格應該和Steve是持平的。往年Summer也不一定,會有一些流動教授。
由於是必修躲不開,所以不喜歡也要上。不過另一方面說,他能夠增進我們對於計算機原理的理解:能知道CPU的原理,手機內存的原理,2進位的應用以及底層語言Assembly Language的使用,能讓我們「知其所以然」,對後面的計算機學習還是有幫助的。同時,如果是未來想向硬體方面發展的同學,這門課就十分重要了,相當於是硬體的職場啟蒙課。
大二CS算法必修課, 經過了一年半的的鋪墊, 我們在CSC263中終於正式進入了相對practical的算法學習。從這門課開始, 我們開始接觸不同的data structure以及通過這些data structure來解決實際的問題。課程主要介紹了CLRS中的一部分topics 如:AVL Tree, Heap,Graph等。
Graph是CSC263上非常重要的topic, 佔據了整個後半學期的學習,這個topic之後很多大三大四課程都有涉獵。同時這門課會學習一些analysis technics如average case analysis和amortize analysis等。在CS領域面試中, CSC263中的topic會佔很大比重。
這門課的對於不僅對之前的165和263中證明技巧以及邏輯功底有很高的要求,同時也要求了學生practical programming的熟練程度。這門課的每個topic都涉及到證明,以及算法構建兩個不同的分支,題型多變而且可考範圍非常廣。同時考試中題量非常的大,如果對知識的了解不夠全面,很有可能答不完卷子。課程中需要一定的統計課程知識,如sta247,sta257。如果學生對統計的內容掌握的不紮實,會在runtime analysis的topics 出現一定困難。
這門課的平均分在C+左右, 拿高分很難,主要難點在於高難度的考試,考試中對知識點的考察非常詳細,並且可以針對不同的lemma等等進行概念理解,算法構建的考察。考試中需要作答的內容很大,如果學生出現對一些考察知識點的不熟練可能會導致一整道答題的丟分。
統計專業:
STA248/STA238/STA261
計算機專業:
CSC209/CSC258/CSC343/CSC384
數學專業:
MAT235/MAT223/MAT224/MAT246
Homework: (5×8% each)
Midterm:
Final Exam:
Sam Toueg
263的金牌教授,對這門課的理解非常高深,而且講課經驗豐富。Sam的課程講解非常精湛,同時課程內容十分豐富。Sam的課一定要去聽課,他不喜歡在網站上po課程資料,同時他也不會public他的往年past papers。(周課有)
作為最核心的算法課之一,這門課對後續很多大三大四課程的學習都非常重要,尤其是graph的學習,會在各個領域中都有常見的身影。
數據結構和算法的學習可以很大程度上訓練小夥伴們的coding能力,同時這門課作為interview當紅課程,學好這門課可以對之後找intern有很大助力。
SAS大禮包獨家放送,想要!趕緊!
Tableau學習資料大禮包等你來領!
免費Excel VBA大禮包只需戳下圖!