我平時有在Girls Programming Network,一個社團,做志願者。教什麼呢?教3-7年級的小學女孩子學Python和代碼入門。學到什麼程度呢?大概就是INFO1110前7-8周的內容。學的有多快呢?這個社團一年教4-5節課。另外更多的小孩子還會參加一個National Computer Science School每一年和雪梨大學的暑期活動,一個月intensive的學習,基本上出來都有INFO1110這門課左右的水平。而這門課裡還有一個advance stream的, 比的基本上就是AI方向的了。高中生啊!小孩子啊!我都不知道他們怎麼寫的。可能在這裡讀過高中的同學會覺得澳大利亞的高中和高考特別輕鬆,非常簡單。這一點是真的!但我覺得這也恰恰是CS這裡容易出local大佬的原因。因為他們有著更充裕的時間在高中學著自己喜歡的東西。而隨著學習computer science的學生越來越多,作為讀了兩年書的學姐,我不得不感到壓力。
在讀的各位並不是所有朋友都是一心想走學術路線的,可能有些是還沒有考慮好,想多體驗一下,比如想拿一次獎學金,去其他學校交換一次或者多找一些實習…
所以我想為大家介紹一下如何最大限度的」走捷徑」,我個人在computer science不僅上花了很多心思去學,而且因為課程限制的原因必須要讓自己利用好能選課的所有時間,所以還是有許多心得體會的。
心得 1:善用Google
編程新生剛入門的時候很容易遇到一個問題就是很有挫折感。遇到了一個問題(而且往往是安裝, 配置類),不知道要怎麼解決,百度了半天都沒用。另外比較大佬一些的同學也會有煩惱:有些問題總是自己想,雖然很有成就感,但是時間投入也太多容易熬夜。這個時候我就想推薦一些比較折中的學習方法:遇到問題就Google,直到你時間用完/耐心耗盡之前,儘量不去麻煩tutor/學長學姐,但是一旦問了就要有準備的問多問,一次性問很多問題。
首先, 為了切合實際, 以下我所介紹的所有所以, 我們要怎麼高效使用google呢?
1. 問答類
大名鼎鼎的Stack Overflow。如果用合適的關鍵字來提問,就能很快的找到和你具體問題相當答案. 關鍵字的組合很有講究。假設是程序報錯了,而你自己看了半天又不知道是怎麼回事,我們一般要搜索:
最近引發程序報錯的那行錯誤 + 使用的語言版本 + 電腦的環境 + 你的目的是什麼
到一定階段之後同學們就會有擅長的領域。據我的前輩說,如果可以在自己的擅長領域裡面多多答題拿到贊同就可以積累積分,這會是你求職方面的敲門磚。
那麼剛剛所說的提問方式也完全適用於平時的Google搜索,以及向老師和tutor提問的時候。
2. CSDN
CSDN應該是最大的中文IT技術社區了, 上面有許多電子書的資源,博客,教程,提問和解答。有的時候如果用英文搜不到你想要的答案和教程,不妨用中文也試驗一下。但是我的個人感覺是CSDN上的資料需要自己分辨優劣。
心得 2:善用學習類網站
大一的時候我並不知道其實進了USYD之後大多數是自學。學校的教學更多的起到一個確認和督促的作用。很多朋友戲稱自己的學費都可以交給Youtube了,因為知識都不是上課的時候學會的,而是自己去Youtube搜相關知識慢慢啃下來的。我發現在computer science的許多學科這個其實非常有道理。學習有很多種方法,並不是說一定要啃書才是學習。我們之前說過computer science的課程很多涉及到演算,比較抽象,視頻資源可以用動畫過程的方式來解釋,但是如果是書的話就需要花很多篇幅來表現,或者說就很難做到。再加上科技的發展日新月異,學校的只是可以說是一門學科必不可少的基礎和入門,非常的重要,但是基本上很難是出了校園馬上應用的。而就業市場上比較火的技術因為它時效性的原因也不會在大學的教材裡佔有大的篇幅。
除了YouTube以外,我還會推薦翻一翻廖雪峰,阮一峰老師的博客。個人技術博客偏向於讀書的學習方式,但是技術更新,很優秀的是現在的很多博客都有網頁內允許運行代碼展示代碼的功能。我所推薦的這兩位老師是中文技術博客裡非常出名的。
心得 3:趁早明確目標
1. 靈活但具體的職業規劃
說完如何在課程裡偷懶,那麼我們來說說更大時間尺度上如何在大學四年裡偷懶。
我觀察到一個比較有意思的事情:我有幾個Local朋友,雖然考試分數不高50分飄過。甚至每年都要掛科,但是不妨礙他們找到很好的很優秀的實習。首先我想說這些實習是面向所有人的,也是純科技類的實習,我們排除身份和networking問題不談,首先成績差掛科這一點是不是許多人就覺得啊完蛋了啊?其實不然。我們看不見的是,他們在某一些課程裡掛掉了,但是自己真心喜歡,真心擅長的技術方向則是120%的投入,並在相關的課程裡且拿到很高的分數。這其實也是一種很好的策略。
我不是鼓勵大家掛科,逃課,而是希望大家能儘早去思考自己的職業規劃。大學裡我們普通人很難做到所有的課程門門俱到的HD,媒體比如知乎上也會有些很恐慌的論調說澳洲的企業對於國際生非HD不要。我以自己的觀察認為,這是誇張了的。在基本保障自己的平均分在D左右或者Credit就可以的情況下,如果學有餘力,請花一些時間思考,嘗試自己喜歡的專業方向,並且開始學精。在本科或者研究生期間,我們的職業規劃都是可以變的,但有一個喜歡的方向,則是展示了自己有規劃,有自學能力,有思考的一點。
2. 切實可行的大學計劃
大學可以做的事情很多。做研究,社交,結識人脈,實習,出國交換,保持成績,談戀愛, 做志願者,參加學生工作。
作為普通人,我想說我們幾乎是不可能把所有的事情都同時做到很好的。我個人比較推薦, 容易上手的大學計劃是這樣的:你可以最後沒去實習,沒去交換,沒去做研究,等待等待,但是請多多嘗試一下。最重要的事情之一是確定一個初始的興趣方向。
我自己大一的時候是一個建築和土木工程雙學位的學生,想造好看的房子。但是通過一次機緣巧合的網頁設計實習開始對科技類感興趣,然後通過ENGG1801這門課第一次開始學編程,開始體會到了敲代碼痛並酷炫著的感覺,經過土木工程的一次實習認識到了自己對這個職業並無太大的熱情。然後才開始敲代碼的。如果自己能對自己適合什麼,可以忍受多枯燥的學習,對什麼topic感興趣這些問題有一個比較清楚的認識,那就能對自己什麼該優先做什麼該放一放有一個比較明確的答案。
3. 心態調整
去年我經歷了斷斷續續的一段找工作的時間,中間很多時候因為能力不達標或者各種機緣巧合的時候懷疑過自己。我總是想著 「我這個技能點不會,等我學會了再來申請吧」。但是後來當我最終入職之後,發現首先我在工作中所用到的工具幾乎70%都是之前沒有接觸過的。我做的工作也是之前我完全不會的,而在我之前的實習生相比我可能基礎和能力可能更不達標一些。首先在開始找工作或者開始學習的時候,我覺得需要自信與自我motivate,而不是暗示自己」還不夠格,還沒準備好」。在具體找工作的時候,差不多根據職業描述,自己能力符合在50-60%左右的時候就可以一個比較好的match了。
4. 求職資源
經歷了找工作的之後我感悟到,你最重要的資源是:你的同學,你的同事,你的前輩。我轉到computer science之後的第一份實習就是當我在當tutor的時候,另一個tutor同學推薦我的。在我離開實習的時候我的上司和同事也會希望多多保持聯繫。慢慢的我了解到,在澳洲比較主流的一個入職方式是內部推薦,很多時候工作都在這些connection之間消化掉了,甚至來不及被展示出來給網絡上看到。如果有時間多多參加活動,並且積極展示自己,將會比只投簡歷的命中率更高一些。對於computer science的同學而言,展示自己的機會除了競賽和成績這種競爭性強的方式,也可以寫個人博客:一方面可以積累,一方面展示你的職業規劃和主動學習的態度,他強任他強,我們可以笨鳥先飛,聚沙成塔。
心得 4:高分的二八法則
1. 什麼課程值得用心學
可能很多前輩會推薦好刷分的水課,我其實也很認同這個觀點:在覺得學習可能會有些吃力的情況下,一學期選一門水課可以讓你更多時間發展自己專精的技能和集中注意力在更重要的課上拿高分。水課我不做推薦,但是有以下特徵的可能是水課:沒有prerequisite, presentation多,assignment少,group work多,lab test少,有固定的quiz可以拿分,然後最重要的一點是:沒有final。
那什麼課程值得花很多時間去學呢?你感興趣的內容, 你期待的職業方向, 你喜歡的老師。只要你覺得喜歡的課程,好好去學就不會有問題。
如果暫時沒有很清楚感興趣方向的大一同學,請務必學好以下幾門課:
INFO1110,INFO1113,這兩門是入門,重中之重,基礎一定要打好,養成編碼習慣;COMP2123,COMP3027,這兩門是碼農們面試找工作的基本功;COMP2017,對計算機有更深入的理解。
2. 分數設計決定投入時間
在一門課比較challenging的時候,我們要學會選擇性放棄。在讀的課多了之後我會發現 50%左右的final分數都會來自每一個topic極其基礎的一部分,也就是一個tutorial的前幾題。
而80-90%左右的分數則基本可以由精做tutorial來複習到。這是雪梨大學的一個教學特色,過是不難的。
USYD computer science的另一個特色是assignment可能會布置一些榮譽分,比如大家一起比賽程序誰效率高,只有前百分比多少多少的人才可以滿分。這種作業我的建議是量力而為。這些分值非常少,但是需要投入的時間非常之多,建議是嘗試一下,以理解到教學目的為主;得高分最需要的是全面複習final,final的一道大題可能就等於一整個assignment的分數。
3. 選課和選老師
前面講完了選課,選好一個tutorial和tutor也是決定性的。
適合你的學習方式的tutorial和tutor才是好的選擇。有一些tutor喜歡直接給答案,有一些tutor喜歡直播敲代碼,有一些tutor喜歡寫白板,或者什麼都不做。每一個人都有自己喜歡的學習方式,各個tutor教授的水平也不一樣。所以,選擇一個好的tutorial真的可以給你的分數加很多分。
Computer science的課程傾向於不太會記attendance。哪怕是會記attendance的課程,也可以申請直接換一個tutorial。哪怕是不允許你換課,你也可以隨意參加第二個tutorial。比如在你自己的tutorial上沒聽懂,你可以隨便去其他的tutorial繼續聽。
4. 從Midterm之後就開始複習
我們的final有50%左右的分數,許多CS的課程是考理論為主的,需要很多記憶。我們final之前有一周放假的study week,但是我的個人體驗是你是很難在一個複習周學完和記憶完這些內容。我的建議是從第七周到第八周左右的時間就開始給自己做一個複習大綱:把你覺得每一章節重要的內容都寫到一個文檔裡,用word文檔就好,然後期末期間把這個複習大綱列印下來拿著一點點背,至少背一次默寫一次。
5. 重視Past paper和往屆的經驗
許多的課程在final中的考點是有偏向的。比如COMP2017這門課。當如果你認識不少學長學姐都表示某一個topic往年都不考的時候。那也預計著這個topic也不太可能會考。(雖然我不是叫大家不複習的意思, 而是選擇性的優先複習)
許多課程也是有past paper的,對於題目類型的參考意義很有價值,甚至有可能會出原題。Engineering的同學們敲黑板了,很多engineering的課程因為教學大綱二十年不換,老師會把二十年的past paper都放出來,然後其實刷題就可以刷到D。