宅男程序員給老婆的計算機課程之12:作業點評
原創【51CTO獨家特稿】h1. 作業分析
作業是課程的一部分,實際上,還是這個課程最重要的部分。
如我在前面課程中提到的一樣:
很多初學者,或者說,編程的偽愛好者,他們,會熱衷于去四處請教大師,下載各種經典書籍,企圖讀一本編程圣經,然后一夜脫胎換骨。
這是,不可能的。
同樣的,如果僅僅是看了這個課程,而不做作業,那么在看課程前后,個人的能力是不可能有變化的。
充其量,跟看了一部或許好玩的小說差不多。
作業并不是考試,而是課程的延伸,是沒有可能參照著課程的內容,然后對作業做出回答。
每節課,僅僅只是指出一個方向,然后需要大量時間的去朝這個方向做學習、探索,然后以作業的形式做出對這個方向的回答。
這才是學習。
花幾分鐘看幾眼課程,然后就期待自己技術能力有變化?能夠有改變,從不會做作業變成會做作業?
別開玩笑了,如果能夠這樣,那么程序開發會是一門非常沒有技術含量,非常沒有含金量的行業。
只有用心好好完成了作業之后,才有可能獲得知識。
這個課程的作業,也完全不是:
小明有5個蘋果,他吃了一個。然后給小寒了一個,求太陽到地球的距離。
這樣無厘頭的題目。
每節課的作業,都是跟課程有直接關系的。
h2. 第一課
1. 用500字講述什么是Programming Methodology?
2. 列舉10種Data Structure.
3. 列舉10種Algorithm.
這課的作業實際上是在問,你對“編程本質”的內容掌握了多少,如果不夠熟悉,了解得不夠多,要趕快去學習。
h2. 第二課
1. 列舉10個Python Web框架
2. Python有多少種不同的解釋器?
3. Perl 跟 Python 有什么不同?
這課的作業,同樣是在問具體到Python這個語言平臺,在實際開發中可供挑選的現成工具有哪些?問的是對自身工作所使用的平臺熟悉程度。這課的作業,也完全可以根據使用的語言不同,而改成別的技術題目。
這課講的是實際中對工具掌控的熟悉程度這個方向,如果熟悉,那么這三個問題是很容易回答的,如果不熟悉,而為了做作業去打開Google,搜“python web框架”,然后填名字。那么就完全木有做作業的意義。
h2. 第三課
1. 找出一篇看上去很厲害的文章。
2. 找一本書,開始看,作為期中考書目。
這課講的是閱讀的重要性,兩項作業,一個要求閱讀的廣度,一個是要求閱讀的深度。
作業是要做的。OK,這課講了閱讀的重要,明白了,然后就洗洗睡了?自身的閱讀的東西,無論是廣度還是深度,都跟以前一樣,那學這課程有個毛用?
宣稱喜歡這個課程,并且表示關注、期待的同學,請問,你選擇的期中考書目,已經翻了幾頁?
如果一頁還沒有翻;那么請好好問一下你自己,你究竟是不是要學習提高改變自己的?
h2. 第四課
1. 林仕鼎是百度首席架構師嗎?
2. 看完曹政所有的blog。
這一課其實還是在講閱讀的重要性,以及對事物的好奇心。
如果,你對技術有熱情,有追求,課程中居然出現了“百度首席架構師”這樣的字眼,你必然會對他有無限的好奇,會去刨根問底的了解他。
那么,是很容易就發現林仕鼎根本就不是百度首席架構師,相反,caoz曾經更符合這個身份。
我列舉了兩個hacker風格的IT人物,一個是caoz,一個是云風。
作業有一項是看完caoz的所有blog,他的blog很好看的。如果你真的看完了,那么,請問你是否有完成這課實際上還有另一個隱藏的“作業”,“看完云風的所有blog”?
如果沒有,那是什么阻止了你?一個非常優秀的技術博客知識就放在你眼前,你,為什么不去看?
OK,沒有時間,很忙,這些我很了解。
我只問一個:是否有過要把云風的blog也看完的念頭?
如果連這基本的好奇心、求知欲都木有的話,那還是洗洗睡吧。
h2. 第五課
1. NoSQL的方案,如MongoDB還解決了SQL的什么問題?
2. NoSQL的應用場景有啥米?
這課是講數據庫,分析、比較了SQL、NoSQL,同樣的,需要課后去做更加深入的了解并且思考SQL、NoSQL的適用場景。
h2. 第六課
1. 使用一種編譯語言實現 Singleton 模式
2. 使用一種動態語言實現 Singleton 模式
3. 說說對 Provider 模式的理解。
如果連最簡單的Singleton模式實現都是上網google的現成代碼,那。。。還是那句話,洗洗睡吧。。。
這課講的是設計模式的必要以及局限,如果只是看到后面對設計模式局限的調侃,而無視了前面提到的:“開發中非常必要的知識,實際上,是非常基礎的知識”。
你究竟對非常基礎的設計模式了解得多深入了?第三題換個模式,你說得出理解么?
h2. 第七課
1. php 的 Smarty 模版的設計哲學是什么?
2. perl 的 Mason 模版的設計哲學是什么?
3. 什么是gettext?
4. 前端javascript實現的模版中,目前最成熟的是哪個引擎?
這課是講模版,模版有很多現成的實現,作業純粹就是在要求去了解、認識各種模版技術的實現。
h2. 第八課
1. 說說對 restful 的理解
2. 什么是 reverse proxy ?
restful / reverse proxy等,都是跟controller相關,但延伸出去的相關知識。
相關性究竟在哪里?這個可以做為獨立的一課去講述,但也完全是可以自學了解的。但這絕對不是在跟小明講了1+2=3后,問太陽與地球的距離。
h2. 第九課
沒有作業。
h2. 第十課
1. ED開發圣經PEAA究竟是哪本書?
2. 數據庫三范式是什么?
3. 關于Domain Model,什么是充血模型?什么是貧血模型?
第一題純娛樂,第二題是確認課本知識掌握;第三題則又是在要求延伸閱讀,實際上,也是在為下一課做預習。
h2. 第十一課
1. N-tiers架構的噩夢場景是?
2. 什么系統/場景需要充分使用特定數據庫的特性?
這課作業是在要求對課程做思考,寫課程時,我實際上是碼了很多字,去描述N-tiers的噩夢場景。但后來我又全部刪除。
因為,我前面已經講了很多關于分層、封裝的問題,也提供了The Law of Leaky Abstractions的連接,對N-tiers有了解,對分層的問題有了解,那么如果還不能認識到N-tiers這么一個多分層的技術的噩夢場景是什么的話;那么我還是只能說:洗洗睡吧。
整個課程,是在強調對數據庫的封裝。為了避免產生封裝就是好的教條思想產生,所有我又加了“使用特定數據庫的特性”這個作業,要求去思考一下相反的場景。
作業:
1. 補做之前的所有作業
51CTO系列: