在CMU學習15319/619 Cloud Computing是種怎樣的體驗?
求問CMU神課cloud computing的學習感受如何?
據傳聞每周耗時近50個小時,快趕上15410了,求真相~以及fall和spring上這門課有什麼區別嗎?如果上這門課,求問需要提前看什麼書,掌握一些什麼技術會比較好?據說是門很好的課,有利於找big data方面的工作。求前輩學習感受!
CC是一門典型的工具類型的課程,它的初衷除了帶你了解和Cloud相關的技術以外,更多的是要你親手實踐,熟悉工具,所以
Get your hand dirty! Get your hand dirty! Get your hand dirty!我是13 Fall 上的,在作業上話的時間主要是周日的晚飯前和做晚飯跑Hadoop,最後Project跟小組成員熬了兩到三個通宵弄出來的。對我而言花的時間應該少於12學分應該的時間。
但為何傳說得這麼恐怖呢?因為這顆有大量外系的同學上,當然,作為工具類的課程,也很適合本科非CS的學生上。但是,這些Project做起來過於瑣碎,太多小的知識點,關於SSH,關於Linux,關於寫Script等等等等。讓很多本科沒有接觸過的同學不得不一點一滴地把這些課堂上並沒有老師教過的東西自己補齊來,自然痛苦,自然耗時。但是,這也正是之後工作中正常的情形,老師教的知識點並不夠用,只有多做這些Project才能把相關的零碎補齊。周圍一般都有很多大腿,緊緊抱著,見賢思齊,成長更快。
而你們流的汗與淚,我在本科的時候都流過了。要學習新東西,這些痛苦的經歷都是少不了的。更何況都來CMU了,談什麼休息呢?
"My heart is in the work."經歷過15FALL CC的人來說一下看法
之前上這門課,我包括我寢室另外兩人,很痛苦很痛苦(這個很大部分是因為我們都是轉CS的,基礎薄弱,而且第一學期就作死選CC,這個稍後說),以至於每個周日(一般都是周日due)連飯都吃不上。而且每次due完之後我們三個人都要開會討論為什麼選這個課。但是上完這個課之後,感覺是脫胎換骨了一樣,好像學到了很多東西。當時有個好友也申請上了下學期的TA,我就笑稱他是上學期去討伐惡龍的戰士,在殺掉惡龍後卻變成了下學期的惡龍。其實就連我也想,如果我是下學期的CC TA的話,我也會「點到為止」地讓學生們「去嘗試不同的東西(踩各種坑)」,因為」只有試過了才會對知識更加了解呀!」,「成長怎麼會不經歷痛苦!」。
但是,第一,這樣對學生們真的好嗎?第二,真的學到了很多東西嗎?真的學到了很多東西嗎??我想了很久這些問題,現在就給大家說說我的看法:第一,假如你站在一個迷宮裡面,四面八方都是路,其中只有一些路是通向終點的,另外一些路甚至不知道通向什麼地方。這時候你去問TA,TA說:「你可以都嘗試一下每條路哦,就算達不到終點,那你也掌握了『這條路達不到終點』的這個知識啊,而且還很可能在路上撿到西瓜芝麻什麼的哦!」 如果是你,你會怎麼做?你敢花大力氣在一條路上一路走下去嗎?你怎麼知道這條路是不是死路呢?為什麼一開始就不告訴我們哪條路可以走?我覺得老師和TA就應該是領路人,雖然不是司機,可以載你走完這條路,但是起碼可以告訴你這條路是可以走下去的,是付出與收益比最高的,告訴你「你只要沿著這條路努力奔跑就行了!」這樣剩下來的才是個人的努力問題。而不是在選錯路,付出比別人更多努力之後,發現還不如那些一開始就選對路的人付出卻很少的人(雖然可能他們自己也不知道自己選對了路)。有些人說這門課很接近實際的工作環境,讓你自己去搜索和解決各種可能在工作中出現的奇奇怪怪的問題。拜託,這門課叫「Cloud Computing」,不是「How to get out of 坑」,不是「Prepare for working environment」。而且就是為了在工作中少踩坑,不是應該多學到知識嗎,多認清楚更多的坑,多知道什麼該幹什麼不該幹嗎?「為了讓你提前準備好在工作中踩坑而現在多體驗踩坑的感覺」這是一個什麼奇怪的邏輯?
退一步講,好,我願意在挫折中成長,我願意嘗試不同的路。但是這門課:第一,有嚴格的Budget限定。第二,有嚴格的Deadline,而且沒有Grace day! 這讓每個願意多嘗試的學生都要面臨受到懲罰的威脅。一方面想要學生多嘗試,一方面又嚴格限定budget和時間,這不是矛盾的么。而且這門課每周都有一個Quiz,每次光這個就會花掉你半天到一天的時間去看很多資料,總共有12個Quiz,一共佔25分(這一屆是20分)但是平均分只有60%~70%,所以光這個就要扣差不多十分,這意味著拿A已經很難了,再在其它地方出點差錯,拿個C,可能連書都沒得讀了(CMU要求總績點在B以上,C以後就要被退學了)而且Majd老師對於作弊的教條就是「寧可錯殺一千,也不放過一個」,所以經常會出現一些莫名其妙的警告郵件。只要你在同一個時間同一個IP開始做,或者答案或Code相似,都有可能收到這種警告郵件,目的就是威懾你讓你放棄甚至有一點和別人合作的想法。第二個問題才是最重要的,真的學到了很多東西了嗎?我們容易產生錯覺的地方在於,只比較了收入,而忽視了成本。對於15213,你可能每周花15小時學到了15小時的東西。對於CC,你可能每周花40小時,但只學到了20小時的東西。確實,學到的東西多了啊,但是性價比呢?CC最不合理的地方就是本來明明可以很簡單就解決的東西,偏偏就是不告訴你,偏偏要弄得很花時間才能解決。而且有些人走出了迷宮之後,可能會認為自己收穫了很多,「我熟悉這條路上各個地方的坑,知道哪裡有西瓜芝麻」,但殊不知,自己選的路儘管能出去,卻是最遠的,有很多別的路上就沒有的坑。新東方(不要吐槽新東方,一線的老師都是超級有水平的)的陳虎平老師說過:「站在巨人的肩膀上才能看得更寬,走得更遠。」 為什麼CCTA就不把自己上的這個課的心得體會跟大家分享一下呢?為什麼覺得公開Report,每個人都會拿滿分?換句話說,我們的目標不就是讓每個人都盡量地獲取這門課所能學到的知識從而獲取更高的分數嗎?非要辛辛苦苦學的才算知識,輕鬆能學到的就不是知識了?我想,如果我當TA,我不告訴他們什麼地方有坑,讓他們走自己以前踩過的坑,那麼充其量他們也只能達到我當時的高度,或者只是比我高一點點。但是如果我把我上這門課的心得體會告訴他們,那他們就能夠超越我走得更遠,學到更多的東西,這不是教育的初衷嗎?
每年的CC學生,每年踩同樣的坑,每年出來的水平都一樣。明年的CC學生,站在前一年學長的肩膀上,水平越來越高。哪個更好?在這一點上,我力頂小土刀,我不僅支持他寫博客,而且我自己也竭盡所能幫助了一些這學期上CC的人,我也打算自己也寫一個類似CC Writeup的博客,說一下自己的心得體會,幫助一下之後的學生。被請喝茶什麼的,在天朝呆久了查水表都不怕還怕喝茶?其實一開始,我真的非常想看他們痛苦地不斷踩各種坑又從坑裡爬起來的掙扎的樣子。因為自己在其中傾注了太多的心血,從而產生逆向合理化的心理效應,覺得這就是所謂的「吃得苦中苦,方為人上人」,覺得只有在痛苦中得到的東西才會更加深刻更加珍惜。可是這樣我自己不也漸漸變成惡龍了嗎?我覺得,我要幫助他們超越我自己,而我自己為了防止被他們超越,也會更加努力地學習,只有這樣才能達到雙贏,對他人對自己都是大有裨益的。最後我覺得最本質的原因是,現在的環境有點畸形,很多人來CMU都是來轉CS當碼農的,然後又聽說CC這門課對找工作很有幫助,所以很多不應該上這門課,或者是說現階段還不適合上這門課的人都來上了這門課。搞得現在CC都像是所有想轉CS的學生的必修課一樣。像我和我室友三人都是轉CS的,又才剛開始補基礎,所以才會上得舉步維艱。如果像我當時科班出身的幾個同學那樣,基礎很好,每周花兩天以內的時間就可以搞定,這才能夠「樂在其中」。所以給以後想上CC的同學的建議是:
第一,至少基礎搞好了才來上CC,不要連Linux基本命令都沒操作過就來趕鴨子上架,那會是相當痛苦的。第二,看你喜不喜歡做Cloud,以後走不走這條路,而不單純僅僅是為了在簡歷上多幾行字。雖然上完這個課後好像確實是可以在簡歷上寫很多東西,但是找不找得到工作的因素有很多,你性別寫成「女」都可能比你在上面寫CC的項目能收到的面試多,誰知道是哪一個因素影響你找工作呢?再說一句,其實這一屆的CCTA已經好很多了,比如說成神啊浩原啊神奇的振宇哥啊,至少當初是我CC的私人TA,告訴了我所有我想知道的東西,至少這次也非常努力改進了writeup,標出了不同的坑。但是在Majd的教育體系下,學生們還是要從受苦受累中獲得知識。
最後說一句,以後CC有不懂的可以直接來找我!!========= 更新 =========昨晚跟這次的TA@王成 聊了大半個通宵,感覺自己確實地圖炮開得有點廣,傷及了一些兢兢業業想要努力改善這們課還有對學生真的好的人。而且因為自己想要看到別人受苦而認為別人也那樣想也很不妥,可能是因為我這個人比較壞吧~所以就這樣想了。但我寫本文的本意就是避輕就重,專挑不好的方面講,得罪人也再所難免。不過通過這次對話也再次印證了這門課的不合理性,TA辛辛苦苦幹了一學期,學生累死累活撐到學期結束,結果誰也不討好誰。學生覺得TA不干事,TA覺得學生難伺候,就是這一種怪現象。上過這門課的人來現身說法。
50個小時有點誇張了,30個小時是需要的。
厲害的人可能需要的時間少一點。基礎比較差的也不怕,TA office hour和piazza都是特別好的資源,只要認真肯花時間,一定可以學到特別多的知識。spring上的話有優勢,因為有一個7天的春假可以用來趕619的project. Fall的時候會比較緊張。
上這門課之前,熟練掌握一門語言會比較好,java 或者python. 我同學在上這門課之前,自己先閱讀過一些hadoop的書,表示有用。
確實是一門非常好的課。老師給分也很慷慨。
課程大綱請見:http://www.cs.cmu.edu/~msakr/15619-s15/15319_15619_s15_Syllabus.pdf
quara上有類似的問題,我的朋友們是這樣回答的:
Jiali Chen"s answer to How is the CMU Cloud Computing course?Chao Zhang"s answer to How is the CMU Cloud Computing course?Aaron Hsu"s answer to How is the CMU Cloud Computing course?
接下來放一些私貨:
這門課在cmu是以workload之重而聞名,還沒上這門課的時候,就聽說「做大project的時候,只睡3個小時」,「醒來在做cc,睡前也在寫cc」,"一門課的workload比我其他的課合起來都多"的聞言。自己是轉專業來念cs的,cs基礎很薄弱。那時候很猶豫要不要選,還反覆諮詢了陳然(感謝大神耐心回復^ ^)。最後還是決心挑戰一下自己,來了cmu總要選門神課才算完整人生嘛。後來證明這個決定特別正確。我第一學期每晚都是12點以前回家,選了cc以後,半夜回家的時間變成---2點,3點,4點,6點,7點…… 似乎很辛苦,但自己從來不覺得苦逼---因為CC的project實在太有趣啦!
cc的project給錢讓我們玩轉aws,一學期里,我們接觸了很多的新工具新技術,如 MapReduce, Spark, Hadoop, Hbase, Redshift, RDS, DynamoDB, hive, EC2, S3, LoadBalancer, AutoScaling, Haproxy, GraphLab. 每樣都是新的,每樣都讓我覺得那麼新奇!有趣!神奇!project的成績都是自動,即時評定的。實際反饋的數據,往往會讓人忍不住思考:要怎麼更好地提高performance?! 於是我們就會自動自覺主動地去查資料,去了解相關的原理,試圖通過了解project的運作原理以想到更好策略 提高我們的性能。這樣的過程, 在我人生中好像是第一次發生:我不再是照本宣科地完成課業,我帶著求知慾,帶著熱情帶著問題,主動地在學習知識!
另外組隊也特別重要,我很幸運地組了兩個特別好的隊友,他們聰明,勤奮,認真,有很強的求知慾,又很好溝通。我們夜以既日地一起工作,我們討論解決的方案。思維的碰撞,往往產生靈感的火花!我非常享受和聰明的人一起工作,非常享受思維的交鋒。同時也因為這門課,我和其他幾個隊伍的人變得熟稔,我們互相請教,他們誇我肯定我,我也常常驚嘆於他們的理解力和解決方案。
總而言之,這門課是我在cmu最美好的體驗之一。:D
非常鼓勵熱愛學習,態度認真,有足夠時間投入的人選選這門課。:D看到前面於雷的答案,不黑不吹我舉雙手雙腳支持。屁股決定腦袋,不同的角色當然有不同的看法,這個倒也沒啥。但是珠玉在前(比方說 15213),一味洗地就沒意思了。我覺得自己的要求並不高,作業和文檔規範一點,代碼專業一點就可以了。TA 的時間是時間,我們的時間就不是時間了么?因為話說不清楚浪費大家時間簡直就是犯罪。
另外我怎麼就被查水表了呢?
=======================
更新一下,如果還是這種藏著掖著不讓大家好好學的態度,真的別上了。從未見過如此荒謬可笑的理由,不讓大家花的時間真正學到點東西,反而想著是不讓下屆同學輕鬆拿滿分。
真的是噁心。有時間裝逼為什麼不好好設計弄得現在怨聲載道呢?
雖然我不是最厲害的,但是這一搞,我一定要把整個系列重寫一次了。雖說官方動用行政壓力分分鐘逼死同人,但是這次我會寫得讓他們找不到理由舉報。如果你有一定的計算機基礎(對我說的就是15213)以及對網路有一定的了解,那麼這門課對於你會有較大的幫助(了解業界最新的雲平台,以及基本的雲計算基礎)。但是如果你對這些都沒有了解,基礎不算太好的話,我認為沒必要一定要選這門課,會很辛苦。更大的可能是每個星期疲於奔命地完成個人作業,但沒有時間去深入理解消化其中的知識(甚至為了完成個人作業)。
這門課的確能讓你了解許多業界最新的技術,什麼MapReduce Framework, Spark, HBase, Kafka and Samza。但是說實在的,這樣淺嘗輒止地學,並不會對你的能力有較大提升(除非你課下就某個新技術進行專門學習)。
這門課有一個重要環節就是組隊項目,大概就是搭建一個整套從前端到後台資料庫的高並發的網路服務。我覺得這個項目還是有點意思的,首先工作量足夠大(你可以干一個人的活,也可以干兩個人的活,看你的目標了),其次,你學到的東西可以拿去吹一年(笑)。
勿忘初心,不要跟風。 組隊有風險,選課需謹慎。 善待你的隊友(特別是任勞任怨不求回報的隊友)
===============================================================
這門課workload比較大,特別是對網路,Linux命令,java語言基礎這些不熟的話,會更加掙扎。但只要你肯花時間(當然你也得有時間),沒有什麼是過不去的,真的可以學到很多東西。
其次團隊項目也很有講究,既可以鍛煉你的合作能力(沒有的話那就鍛煉你的個人能力),也可以鍛煉你的抗壓能力
這門課的策略有幾種,其中一種是同一個專業很多人選,可以互相幫助,或者專業裡面有一兩個大神(會寫筆記的),就可以帶動整個專業的節奏;還有一種就是你個人能力比較強,就可以在cc群裡面回答問題幫助別人,既可以鍛煉自己,又可以認識更多的朋友,還可以有飯吃(劃掉),何樂而不為(哭);還有一種是Maybe你的個人能力有點欠缺,那就多問人,多花一點時間,學到東西比什麼都重要。
最後,真的不要全力帶人,會很傷的
看到學弟在某新生群里分享這個帖子,我也來試著回答一下這個問題。
我上學期學的cc,我看網上對cc評價很高,但周圍學長都不推薦,兩極分化很嚴重。當時沒想太多,尋思我就上上唄,然後,很後悔。
我覺得現在cc已經變味了,超級大的workload與很低的性價比使得這門課成為我上一學期花時間最長又經常熬夜來學的一門課,但實際說,真正學到的東西一般般。
前面幾位學長給的高分答案我不過多評論,因為據說以前cc安排還是很好的,但現在而言,花三周做三個查api和調參數的project,又有讓你一周從零開始學hbase+mysql的任務,還有group。代碼量不大而且簡單,大部分時間用在踩坑和學習各種新鮮事物(時間短學不深不是一件好事)上,我覺得這門課真的安排得不好。據研究表明,布置比人正常能力多一點的任務會激發人的學習能力,但要是布置的比當前能力超出太多,那就p都學不到了。
有八個字形容cc非常好,「包羅萬象,淺嘗輒止」。綜上所述,我和幾個上過這門課的同學觀點出奇一致:cc對於新手來說,非常不適合,還不如花時間學點乾貨打打基礎甚至刷題找工作都比這個價值高。對於很牛逼的大神來說,我覺得可以作為工作前的練手,了解一些別的內容還是好的。或者對於學習能力極強的人,忽略我之前的話,能把cc給的內容全都搞懂的話還是能學到不少東西。
當然,我周圍還是有少許同學覺得這門課不錯的,不過讓我說絕對不推薦。作為參考,我這學期選了15618(parallel computing,好課,推薦),覺得cc耗時大概是這門課的近兩倍吧。
祝好,歡迎選擇cmu。
----回答下問題
以及fall和spring上這門課有什麼區別嗎?沒啥,越來越難(雖然傳聞說要減負)(後面自行打臉 12/19/2016)如果上這門課,求問需要提前看什麼書,掌握一些什麼技術會比較好?
computer network,database,distributed system(hadoop,spark)據說是門很好的課,有利於找big data方面的工作。求前輩學習感受!
感受前面說過啦,也沒覺得對big data有太大幫助,不過找亞麻工作是確實有幫助。----update at 12/19/2016
又過了一學期,我對這門課有點新的想法,也覺得我以前對這門課苛刻了些,和大家分享下。1. 這門課能學到東西嗎?看怎麼定義「學到東西」。因為就算記不住(就像大多數課程一樣),也會讓你對aws, hdfs, network, database 等有個大體的概念,以後工作中(或者其他課程中233)遇到都會有個大概的概念,至少再學會快,也減少些緊張,所以還是有用的;
2. 這門課耽誤時間嗎?我一年前上這門課覺得很耽誤時間,有兩個原因:一是這門課的proj沒有很符合我的期望,比如沒有很難卻有很多配置上的坑,調這些真的是一點用都沒有畢竟以後遇到的估計是不一樣的;二是我的時間管理有問題,外加水平不高不自信,導致對這門課的厭惡,從而做的時候效率低下,時間浪費了很多。由於有自己的因素,所以之前把鍋全部甩給cc也是不理智的,在此說明一下。
3. 推薦嗎?我覺得基礎好的同學可以用cc拓展視野,啥都會的同學可以把cc當作工作前的練手;像我一年前那樣什麼都不會上來硬剛,如果不是學習能力超強(或者不喜歡睡覺),學會的東西確實不多,依然不推薦。不過據說現在cc難度下降了(都這麼說,也許真的?還說我們那一級是最最坑爹的,掀桌),所以也許老師發現了強度太大對我們真的不是件好事吧。
4. 對找工作有用嗎?這個沒覺得,也許可以豐富簡歷吧,有cmu cs背景都很好過簡歷,過了簡歷基本就考刷題了。上cc那個學期時間消耗很大對於找工作還有影響。。
其他問題想到再說吧,希望有用。祝好!既然問到了cc 那麼作為下學期cc的TA就來講講這課 (′-ι_-`)
最重要的一點 這課跟你上過的所有的傳統型的課都不一樣 我認為這門課是最接近實際工作情況的一門課 傳統型的課我指的是那種老師在課上把這個領域的知識點都跟你講了 一些學術界工業界也沒有定論的問題老師也會在課上提出來讓學生討論各種解決辦法的利弊 然後得出一個it depends的結論(746 storage system的prof greg最喜歡這句話 (??????‵)/ ) 課下的proj基本就是實現一個已有的東西(640實現一個簡易的HDFS和hadoop 746實現一個fsck和一個cloud fs)來讓加深你對工業界現有的解決方案的理解 並且通常會對實際要做的東西進行很大的簡化 讓你專心解決一個問題就行 對課程內容或者project有不懂的地方 問老師問TA 他們都會有答案 (當然他們能告訴你多少這就另說 【就不告訴你就不告訴你 (ゝ??) 】)
在這種課程設置之下 學生很容易培養出的習慣是更關註解決一個問題的方法 但是實際的工作情況又是如何呢?
以前我在startup的時候需要自己從後端寫到前端 其中遇到了很多很多奇怪的問題 沒有任何人能幫你 只能自己不斷地更換不同的關鍵詞去google 慢慢找線索 現在我在google實習 host扔給我了一個project 他自己也不知道要怎麼做 只是把需求告訴我了 然後我就需要各種查相關資料了解各種標準 然後自己思考怎麼去解決這個問題 再code並且test 出錯了再思考是哪裡的問題 真實的工作就是這樣 很少會找到一個人跟你遇到一模一樣的問題 所以工作上需要的是你有一套探索出解決問題的方法 而cc這課的目的就是讓你學會找到解決問題的方法的方法 【有點繞 你懂就好 ( ?° ?? ?°) 】
cc並沒有課堂 每周的lecture都只是TA來對當周的project做一些介紹和答疑 可以理解為recitation 那如何讓學生學到東西呢? 通過project 這門課從第一周開始每周一個個人project 每個project的handout會把你需要用到的解決這個project的工具介紹一下 然後就扔給你自己來解決了 目標只有一個 解決問題 至於你用不用handout里給的工具來解決並不重要 prof會鼓勵大家去探索不同的解決方法 如果你喜歡挑戰新東西 可以有自己的解決辦法 遇到問題怎麼辦?問prof 問TA 可以通過office hour面對面 可以通過piazza在線問 但是跟其他課不同的是 這門課不會為你簡化實驗環境並且做出很多假設 你所有的測試都是基於真實的production environment 所以可能你遇到的問題prof和TA都完全沒遇到過 所以他們能給你的就只有一些建議 告訴你可能出問題的地方在哪 你需要自己去探索解決 而你在跟他們交流的過程中 除了要儘可能詳細的描述你遇到的問題 還需要花點心思去思考他們跟你說的每句話 你跟他們描述完問題之後 他們還追問了什麼問題?他們為什麼會追問這個問題?他們是通過觀察哪些問題特徵來給出建議的?他們的建議是不是有道理?我之後遇到類似的問題能不能跟他們一樣這樣去思考從而給自己提出建議?
所以 我覺得這是cc這門課最大最大的亮點 就是讓你學會從問題中找線索 然後找到解決方法
當然這門課涉及的內容之廣也是一大亮點 短短一學期的課你會接觸到computer networks, distributed system, storage system, machine learning等課上的內容 會需要用到mapreduce, spark, mysql, hbase, graphlab, hive, loadbalancer等各種技術 當然還有linux操作等基本功 again 工作上遇到的問題並不是只需要一個領域的技能就能解決 即使你單純的做data analysis 你也可能需要寫一些python或者bash script來處理你的數據 我始終認為 一個合格的engineer應該是會有學習使用任何需要的工具的能力 並且能熟練使用自己領域常用工具
=====
唔。。發現講了這麼多還沒解答完問題 (ò?ó?)1. 據傳聞每周耗時近50個小時,快趕上15410了,求真相~
個人project對我壓力不大 大概就一周花個一兩天的時間 但是team project出來之後 我每天早上10點起來除了上課就在做cc 一直到晚上兩三點睡覺 live test前幾天會四五點甚至通宵 不過因為我的兩個隊友都是妹子。。。。所以其實參考性不強。。。。。2. 以及fall和spring上這門課有什麼區別嗎?
沒區別 不過想上趁早 這課一個學期比一個學期難度都在增加 14fall的時候這課team proj的數據量只有500G左右 到15spring就1T了 15fall就先不透露 但是能劇透的是 project難度會又增加了哈哈哈哈ヽ( ^?^)?3. 如果上這門課,求問需要提前看什麼書,掌握一些什麼技術會比較好?
提前熟悉一下linux的常用操作和mysql的相關知識 如果你之前完全沒接觸過的話 =====好了 講了這麼多 還是要來賣個廣告 15fall的小夥伴們選cc吧! 雖然下學期難度又會提高一些 但是這才是挑戰啊! Be a man! Fight like a man! 歡迎下學期在piazza上調戲我 (逃 .?(? ???ω??? ?)?Please do me a favor and stay away with Majd Sakr.
到目前為止也上了一大半了,講講優點和缺點吧。感覺這課最大的優點就是培養解決問題的能力,做project過程中碰到的問題稀奇古怪,需要一點點推敲,排除,搜索,嘗試來解決的。內容設計也挺豐富的。缺點是單位時間收益不高,可以在學到相同東西的前提下更省時間,project設計上還可以多聽取 feedback,優化一下。具體例子我就不舉了,趕緊去做team project。
還有一點忘說了,TA的負責程度明顯參差不齊,有些TA討論兩句感覺思路一下子開闊起來,有些感覺真的是啥都沒準備過,連這個project做的什麼都不記得了。更新一下:
至此CC已經結束,總結一句:很累,學的東西不深入,team project沒講解啥也沒學到。https://www.quora.com/How-is-the-CMU-Cloud-Computing-course
附上quora上類似問題的回答,最後說一句:如果再讓我選一次,我一定不選CC非常耗時間的一門課,尤其是到了最後team project live test階段。如果你想在live test中取得好成績,連續熬夜是必不可少的,因為需要不停的嘗試,不停的debug。所以強烈不推薦選這門課。不過看在妹子是下學期TA的面子上就不多黑了。 @Jenny L
我現在正在上這門課,來盡量客觀的回答一下好了。
15319/619這一門課完全有資格成為像15213一樣的神課,但現在充其量只能說是一門好課。
在這門課中,我們能學到很多有用的知識與技巧。比如說AWS,多線程編程,各種資料庫,前端架構以及Linux。雖然有些大雜燴,但整個流程走下來,整體實力還是會有提升。但這門課也有缺點,簡單說就是:坑太多。而且很多坑是毫無意義的。
----------------------------------------------------------------------------------------------------
1. 冗長的writeup。
寫writeup的人還是很負責的,基本上每一個模塊都會設置一個長達好幾段的故事背景(比如你正在面試,或者公司遇到xxx問題)。這些故事在我看來是毫無必要的。CMU不止這門課workload重,而對於CMU學生而言,時間是異常寶貴的。學生好不容易寫完其他作業想儘快學習CC寫完作業,然後抓緊時間刷題找工,你卻說別著急我給你講一個故事吧。講故事直接加大了writeup的長度,使重點更加分散。作者在講故事時也可能說一兩句要點。不看?恭喜你,等著入坑吧。
這也是為什麼小土刀的CC博客(小土刀 | Agony is my triumph)會那麼受歡迎。小土刀做的,無非就是本著「我不下地獄誰下地獄」的原則,將writeup重構一下。提取出關鍵點,寫成一篇簡潔清晰的博客。不過小土刀已經被老師請去「喝茶」,我們再也沒有這種福利了。一個外國老師會留意到中國學生寫的中文博客,細思恐極。
我不太清楚其他人,其實我想要的writeup,就是盡量用簡潔的語言告訴我該做什麼,怎麼做。每句話的信息量大一些,信噪比高一些。有時間聽故事,還真不如去打一局爐石。我現在基本都是周四開始做,跟節瓜(微信號:guoskyhero)問清楚題目要求後,做起來還是很快的。
瓜瓜已經找到工作了,CC需要火力支援的單身妹子快去騷擾吧2333
最近發現習題課的課件有很多提示與要點。我覺得完全可以刪掉故事,把這些要點寫到writeup上。畢竟習題課不是人人上,但writeup是人人都會看的。
2. Java or Python ?
一開始上這門課我還是蠻開心的,因為我看到作業要求都是在Java,Python,Batch裡面選取一種來答題。自由度這麼高的課程一定是好課。然後到後期劇情反轉,改成只能用Java了。我問過一個TA,得到很中肯的答覆:做兩套架構太麻煩了。其實用Java也沒什麼不好,但麻煩請在一開始就告訴我們,後面的Project只能用Java。同一種東西學兩套API並不是什麼太開心的事情。
3. 令人崩潰的demo code
當我看到Azure的demo code,其實我內心真的是崩潰的。很難想像這是官方樣例。不想過多評價。總之如果我的teammate寫出這種代碼,一定會被我噴死。
CMU很多碼農課TA都會搭好架構,讓學生實現核心部分。當我看到以下注釋時,真是哭笑不得。
刻能是我英文不好,我真心不知道對於這個函數,是要「Do not change this」還是「Add code to here」。寫代碼是很嚴謹的事情,一有歧義我就會慌。而我將TA提供的library導入eclipse時,看到下面的自動提示時,瞬間很佩服TA。反正我記不住arg0-3到底是啥,還得打開瀏覽器再查一下writeup。
這些其實都是小問題,花些時間再好好看一遍writeup就能理清的。4. 令人詬病的提交系統
CC的提交系統要求你在提交時,所有代碼都能通過測試。也就是說,你的所有server在那時都要開著而且運轉正常。
如果你提交代碼後發現遺漏了什麼(比如漏提交一個腳本文件,或者想在reference里加一條參考文獻)。恭喜你,你要把所以機器重開一遍。如果你為了省錢把機器都terminate了?那請開一台新機器,把RDS,HBase,Mongo重新配一遍吧。
這是昨天我見到的真人真事,估計當事人已經把所有能問候的人都問候了一遍。遺漏要點是學生的責任,但在那麼冗長的writeup面前,真的很容易漏掉什麼。
-----------------------------------------------------------------------------------------------------
好像有點跑題了。。總的說,這門課還是強烈推薦的,真的能學到很多東西。真心希望619能夠越來越好。
最後,求加一波爐石好友jackqdyulei#5567當年這課拿了第一,馬吉德連個巧克力都不獎,本來我還準備給我們大水系爭光來著。不過馬吉德十年如一日的改進這個課,真的是非常贊。課上講的東西很有用。上面的答案說的很好了,補充下:必上。不上後悔。
沒上過,布吉島。但是他們都說cc寫簡歷上特別好看
我沒有在 CMU 上過課,卻有幾個人不約而同的邀請我來回答這個問題。我看了看,並不是不能答。倒不是來講修課經驗,而是隨便說說,主要是讓關注我的同學們進來看看:是什麼造就了 CMU。
雖沒有去 CMU 念過書,但是我手裡送到 CMU 的學生可能可以組兩個足球隊了^_^。不管是從哪方面獲來的信息,都讓我對 CMU 課程壓力之大有很深的印象。正是這些課程造就了 CMU,也造就了文科生在 CMU 上了一門課就進了 Google 的神話(也可能是謠傳=_=)。
不過,有理想的學弟學妹們不要怕,CMU 不是每門課的壓力都那麼大的,你也不是要修很多門這門大壓力的課。首先我是16 Spring CC的,剛才本來在知乎上搜有沒有好用的微博客戶端(是的最新版的微博iOS客戶端沒有夜間模式時間線還是亂的),但是看到關注的這個問題有新回答了,讀了一遍之後又把大部分答案看了一遍,感覺不吐不快。這個問題下面好多答案大都是同期的大神以及TA,所以我還是匿名談談作為一個學渣選修這門課是個什麼感受。
第一,刺激
這門課每周公布一個writeup,告訴你這周要幹啥,要用到的技術是啥,預算有多少。然後你就去干吧,就像給你一點線索,然後讓你完成一個任務,從開始到結束你能用到的就是Google,剛開始讀了一遍writeup一臉蒙蔽的樣子想想自己在未來的一周里居然要完成這麼些事那感覺簡直就是諜影重重啊。於是各種查官方文檔,搜stackoverflow,每看到一個新技能就感覺到刺激,每解決一個小問題就感覺到興奮,直到最後完成任務。第二,成就感
對於大部分小白以及像我一樣的水貨選手而言,敲過的代碼少,手裡的技能少,肚子里的經驗少,有時候即便上了很多課讀了很多書依然對自己沒什麼信心。而這門課,每周一個趕鴨子上架的個人項目,能讓你在一個學期之內迅速經手很多事情:Hadoop、MapReduce、AWS、AWK、Linux、Maven、Scaling、Caching、Load Balancer、MySQL、HBase、Hive、Spark、Scala種種。項目做多了,掌握的技能多了,成就感也多了。說實話,上這門課之前我聽別人說「we developed a j2ee application and deployed it on the AWS cloud server」的時候感覺卧槽這是啥?怎麼聽上去這麼高端?我特么怎麼啥都不會?這門課上了一半之後再聽到有人這麼吹牛逼就感覺尼瑪不就是把project打成war file然後scp到ec2上tomcat的webapps路徑下再啟動server么。第三,累
每周沒什麼時間休息,deadline放在周天就乾脆連周末的時間都霸佔了。這裡的累倒不是指寫代碼累,主要是被writeup那不清不楚的表述弄得太累了。每周這門課所花的時間裡,有三分之二以上是在研究writeup究竟想幹什麼上,這是其一;其二是writeup上給你的信息和線索有時候會誤導你,甚至其中的範例代碼不規範以至於你不得不花很多時間來debug。所以項目做到最後你就恨不得掐死那個寫writeup的TA,為什麼?你告訴我魚香肉絲的關鍵詞是魚和肉,要有辣味,等我做出一鍋水煮魚的時候你說親愛的你做錯了魚香肉絲雖說有個「魚」字但是跟魚無關當然要用別的肉炒,這馬上就due了你的預算也花光了所以這次你得零分歐耶!說到累,TA也很累,工作量大、提前把要做的項目過一遍、然後搭系統、要有吞吐量、還必須夠健壯。當工作量大、報酬低並且學生怨聲載道的時候,我相信TA們夾在中間也不舒服。老師一方面想保證教學質量,一方面又不肯在TA上加大投資,這就形成了一個矛盾。學生學得好,除了學生自己努力外,教學質量也非常重要,而老師指望派幾個TA再弄幾個項目就能教出逆天的學生簡直是痴人說夢。
最後還有一點感受,就是不甘
本周是這門課的最後一周,本學期總共有13個個人項目和三個團隊項目,這些項目做完了、交上去了、打分了,但是沒有點評沒有總結。古人有云:學而不思則罔。而我們這些學生乾的事情就是在不停完成各種項目,項目能完成不代表解決方案是最優的,我們特別想知道每周那些佔據榜單前幾名的同學他們是如何優化性能的,或者老師能給我們一個目前最優解決方案。但是老師沒有這麼做,也不答應這麼做。所以每屆學生也就在重複著同樣的體力勞動,最多能和往屆學生達到一樣的水平,卻無法站在他們的高度上創造更高的記錄。最後的最後,這門課的坑特別多,做項目時每個人的代碼邏輯、配置環境、解決方案都可能不同,所以出了bug之後照搬別人的經驗很難解決自己的問題。因此每個人都必須一點點從自己的代碼里找出蛛絲馬跡,推斷bug原因,然後驗證,再修改。所以這門課與其叫做Cloud Computing,不如說是在Cloud Computing的背景下,Troubleshooting能力的高級強化班。技術永遠在更新換代,但是解決問題的能力永遠不會過時,而對於一個有戰鬥力的開發工程師而言,這種能力才是至關重要的。我聽說這個課就是教你用AWS啊,大老遠來CMU別上這麼無聊的東西。AWS你上班之後學兩周就會了。(利益相關:已經滾蛋的AWS S3工程師)。
利益相關,我是前CC TA,參與過CC大小項目的出題和OJ系統搭建,現在在FG中的一家,也面試過太多的CMU同學,也看到過很多同學簡歷上有這門課的出現。
首先我覺得這門課本來就不是適合所有人來上的,打個比方,這門課有點像獵人學校(請搜索),進來之前你首先就要先衡量一下自己的程度,現在網上公開的資料這麼多,還有那麼多前輩可以諮詢,你先看看自己是不是滿足了這門課的最低要求(比如有一段時間的編程經驗,比較熟悉Linux命令行等,這裡我覺得CC是應該要有一個prerequisite的,甚至要有一個prerequisite的考試,這樣對大家都好)。不要一開始就把自己想像的太厲害,因為這不是一門混混就能過的水課,當然也不要把這門課當做神課,好像學出來以後就有一個質的變化。當然作為教授也應該在一開始就說明這門課的強度,甚至在一開始的第一周就設置能體現這門課強度的任務,這樣可以讓部分學生知難而退,也對大家都是好事情。如果繼續留下來,那就意味著你接受了這個挑戰,在課程中途就沒有借口理由抱怨,因為你抱怨也改變不了什麼。
大家都是成年人,我相信一句話,就是一個人要為自己做的選擇決定負起全部的責任。這門課本來就不是一門普通的課,在我感覺,是最貼近企業工作的一門課。你要不是做科研,以後不就是去企業工作嗎?你以為企業里的任務都會像學校里那樣那麼規範?不是的,很多問題都是很模擬兩可,不要說沒有一定的答案,有時候連問題是什麼你都要自己去發掘。
這樣子你也能理解為什麼「第一,有嚴格的Budget限定。第二,有嚴格的Deadline,而且沒有Grace day!」
前面有回答問,為什麼一開始就不告訴我們哪條路可以走?因為現實工作中本來就不知道哪條路可以走。比如你在代碼中遇到一個bug,你百思不得其解,問遍了公司所有人,結果發現原先寫這份代碼的人已經離職,這份代碼已經沒有人接管,估計連文檔都沒有或者已經過時,那你能做的只能是靜下心去讀代碼。當然,你可能遇到好心同事幫助你一起看,或者回答你一兩個問題,但是你好意思三番五次就去問嗎?別人可能會給你指一個可能的方向,但是不可能設身處地地替你去分析代碼甚至debug。你以為現在多學到知識,多認清楚更多地坑有幫助,錯!如果這些知識都是不勞而獲的,我相信對你也沒有價值。再說,以後遇到的都是新的知識,新的坑,重要的快速學習的能力,授之以魚不如授之以漁。
還有人說:「本來明明可以很簡單就解決的東西,偏偏就是不告訴你,偏偏要弄得很花時間才能解決」 我想說,這種現象在工作中很正常,你以後很有可能花了一兩個星期,翻看無數的文檔,研究了無數的代碼,然後最終發現是要用unsigned int而不是int。這種能力現在不鍛煉,將來到工作中也是要鍛煉,當然代價也更大,因為你可能會拖累你們組的進度。既然總是要經歷痛苦,為什麼早些經歷?
還有同學提到組隊的問題,這也是在以後工作中很現實的問題,比如選組,選老闆,以後工作你照樣可能遇到要給離職同事擦屁股,甚至功勞被人搶走的問題,現在只是提早體驗罷了。
CC這門課當然有要改進的地方,至少我覺得一個就是要一開始就說明這門課是不同於其他CMU課程的,也要有prerequisite考驗的。
最後我知道的是,CC這門課真正用心學,肯吃苦扛下來的同學,他們要不聰明,要不勤奮,最後都進了最一流的公司。而那些滿口抱怨的人最終都銷聲匿跡。
CC 17 Fall親歷,作為一個轉專業的學生談一談CC這門課的價值。
先說結論:對於轉專業的人來說,是非常有幫助的,這種幫助不僅僅來源於知識和常識,還包括培養學生以更有效率的方式去解決各種各樣的問題。下面是我的個人經歷。
我在轉專業之前對計算機也算是有興趣,C++,python都曾自學過,七七八八的小項目(字面意思上的小)也都做過一些,也接觸過一些框架(比如openCV, TensorFlow),但是如果要總結一下我做的所有這些事,以一個半調子來形容是毫不為過的。
通常都是心血來潮對某個東西感興趣,花個兩三天把文檔粗略看一遍,環境配置一下,然後跑幾個demo,之後自己要做東西了,遇到點小問題,卡半天,時間一長,也沒什麼激情了,等到主觀能動性退去,項目也就不了了之。
造成這種現象有幾個原因。
首先非計算機科班出身的人,對於一項工作的難易程度是往往是缺乏認識的,我這裡所指的難易程度主要是工程方向的。比如說調整一些輸入輸出編碼,linux系統里有些東西不適配如何使其work,各種配置文件如何設置,所有這些問題,對於一個好好學習的科班出身的人,應該是不困難的,就算他不清楚具體該怎麼操作,他好歹知道一個問題可能是由什麼原因導致的,完了找幾個關鍵詞Google,一般都會有解答。
而非科班出身的人,遇到問題就比較麻煩,根據報錯信息第一時間基本是沒辦法判斷錯誤原因的,有些人說不是有Google嗎,那行啊,拿報錯信息直接google,這個時候如果運氣好,會造成這個問題的原因比較單一,碰上了,那照著步驟該幹嘛幹嘛,問題暫時解決了。但經過這麼一趟了解到了什麼,學到了什麼嗎,並沒有。
舉個例子,比如說你的遙控器突然失靈了,你並不知道遙控器需要電才能工作,所以你就上網去搜,我的遙控器是XXX型號,失靈了該怎麼辦。網上有人說:打開後蓋,把兩節圓柱形的物體取出,從商店買兩節七號的電池,把電池以一正一負的順序安裝,切記是一正一負哦。你照辦了,遙控器可以工作了,但你依舊不清楚這個電池是幹嘛的,也不知道電才是使其工作的關鍵。等到下次你遙控器又壞了,但這回要五號電池了,明明是個簡單的問題,結果繼續抓瞎。要是倒霉一點,壞的是裡面的主板,等把5,6,7,8,9號電池都試過也沒用,該怎麼辦吶。而同樣的例子給對有常識的人來說,就很簡單,失靈了,可能是沒電了,google一下最近的超市,買個電池換一下,解決了。換電池也沒用,估計主板壞了,直接換個遙控器。
說回CC,CC這門課一旦上了,這種工程性的小問題是無窮無盡的,如果每個問題都以一種碰運氣的方式去解決,5,60個小時的工作量完全不是聳人聽聞,在這種情況下,如果不想著動歪腦筋,那就不得不逼迫自己尋找一種更加高效率的方法去解決問題。而這種精神,可以說是程序員最需要的。
我這一學期上下來,有一些粗淺的體會:
- 遇到問題,在google之前先好好看看報錯信息,想一想可能的原因,不要老是第一反應就是去搜同樣的報錯信息。
- 看文檔要耐心,當然文檔也有好壞,實在讀不下去了。。。可以再找找別的文檔。如果僅僅只看StackOverflow我覺得是一個壞習慣。
- 有好的技術,最好一開始就把之後的原理搞清楚,條件適合就要用,不要想著拿舊的修修補補還能用,因為這之後可能會成為大坑,項目初期用上了可能為以後省很多事。
- 有Bug不要慌,慢慢來,一步一步排查,速度可能不快,但能從中學到的東西是最多的,以後再遇到印象也會更加深刻。(兩個小時調不出來的bug就調六小時,六小時還調不出來就吃個飯再調@ 姚冬)
第二個原因,缺乏看得見的激勵和壓力。大部分人做學生的時候難免會有些好高騖遠,照照鏡子卻發現自己弱得可憐,這時候通常會選擇逃避,這也沒辦法,人類的天性。我當年在圖書館看量子場論看到懷疑人生,也算是逃避轉的專業,但現在想來也不是什麼壞選擇。不過在自身進步的過程中如何克服逃避,CC這門課幫了我很多。
幾乎每周都有project,而且難度對於沒啥基礎的人還不小,有基礎的也要搞10-20個小時,在deadline的驅使下,不得不去找各種辦法去解決問題,而且這門課的peoject的設計是在下一步大棋,如果前面幾個做不完就放棄了,後面更難的上來了肯定更做不完,更不要說最後的Team Project幾乎要用到以前項目里學到的所有知識。
在如此的壓力之下,回報也是不小的,比如第三周的時候寫了一個Auto Scaling的腳本,看見那麼多台伺服器在我的控制下行動,沒見識的我還是蠻激動的。之後的項目比如寫一個類似facebook的後端,搜索名詞的聯想。能夠把平常會用到的東西實現出來,這種正反饋是相當強烈的,至少相比於以前自學C++只能對著個黑框不知道高到哪裡去了。這些小project更大的作用是破除一些迷信,比如以前覺得,一個facebook需要那麼多人來干,是不是一個小互動就要幾千幾萬行代碼,但實際做過才會了解到所謂的這些業務代碼實際上是在幹什麼,關鍵代碼其實也就只有十幾行。這裡說的又變回了對難易程度的認識,CC在無形之中幫助學生建立起對於整個互聯網生態的認識(不過一周還有一個quiz,說無形有點過,呵呵)。
好啦,就說到這兒吧,如果有轉專業的小夥伴也想選這門課,記得一定要利用好TA的資源。
上學期Phase3 Live test第一的組來強答一下。
這門課的優點是作業的深度跟其他153/156課差不多,但廣度大很多,就使得你(似乎)可以多學到很多東西。缺點是由於廣度太大,而且還在繼續加大,很多新的project給人感覺都設計(看似)很精美,但是往往writeup里的幾個重點/autograder的bug會讓你多花一兩天時間在上面最後才知道不是自己的鍋,因此在(某些)項目的同學之間還會互相流傳一句「助教xx」來吐槽。另外team project方面基本上中規中矩的用MySQL還是可以隨便過的,但是Hbase我們(我們組和Phase2第一的組)最後全都徹底拋棄了,給人的感覺就是這個team project全靠自己摸索,試的越多分越高。
另外馬老師有微信號,還有很多好友,而且還知道有一個微信群,並且說裡面討論的內容非常unethical。。。我只能說拜託系統的反饋做得好一點,好幾次因為最後輸出格式說的不清楚花時間做無聊的測試,用System.out.println 和System.out.print()的區別
推薦閱讀:
※cmu miis 這個項目如何?與ucsd比較?
※還有那些像《編碼-隱藏在計算機軟硬體背後的語言》這本書一樣,把深奧的知識講的如此深入淺出的書?
※數據結構與演算法中,樹一般會應用在哪些方面?為什麼?
※大學期間的兩到三萬的代碼量從哪裡來?可以做些什麼來增加代碼量?
※計算機系統內的字長到底指的是什麼?
TAG:雲計算 | 程序員 | 計算機科學 | 卡內基梅隆大學CarnegieMellonUniversity | 大數據 |