Related Posts Plugin for WordPress, Blogger...

2020年10月30日

【程式學習】哈佛CS50x學習筆記_第8週最後作業

第8週作業不意外地也是難度很高


前言

最近在學習程式語言時有一個心得,那就是對比繁體中文的臉書社團(以臺灣人為主),以及英文社群(以Stackoverflow為例),英文社團的討論風氣似乎比較好?我使用疑問句是因為我本身並沒有沉浸在英文環境裡,所以不敢保證。但是根據使用經驗,中文的程式語言社群,有時會有學長姊趾高氣昂的情況,就是一種以貶低新手來增進自身優越感的氛圍。通常新手發問時都必須要謙卑的方式發問,如果有什麼問題讓學長姊不滿,就會出現各種嘲諷。閱讀Stackoverflow的文章,就很少看到這種情況。原因不明。所以告誡大家英文一定要學好,很重要,閱讀技術文件、詢問程式解法、甚至求職等,都會需要。

第8週作業

在整個cs50x學習旅程裡,我看過兩次YouTube上的解答,這是其中一次,因為對我來說難度頗高,知識量過大,無法全部吸收。在最後一份作業裡(期末作業不算的話),需要我們製作一個能夠註冊、登錄、購買股票、售出股票、呈現歷次購買資料的互動式網站。這份作業需要學生具有HTTP網路協定知識,包括了Session及Cookie的概念。
這些概念不太好明白,可見:
這裡大概簡述一下Session與Cookie的用途,以購物網站為例,如果我們登入購物網站後,只要重新整理,就必須再登入一次,一定會覺得很煩。最好是讓使用者登入後,不會重複要求登入。甚至可以讓使用者自訂,設定為定期只需要登入一次即可。使用者如果在網站上購買商品,網站也會記得你買了什麼,也會有你曾經購買過的歷史記錄。
為什麼網站無法記得你,是因為伺服器與客戶端的瀏覽器不會一直保持連線狀態。如果沒有留下記錄,下一秒再訪問時,網站只會覺得「你誰啊」。因此電腦技術天才引進了Session與Cookie的概念,Session的意思是工作階段,網站會把使用者登入狀態,或者購買商品的狀態記住,例如使用者的ID為KAI,買了Apple共5個,要送到指定的7-11。這些項目統稱為Session。Cookie是網站為了辨識使用者,儲存在使用者瀏覽器上的小型文字檔案,瀏覽器關閉就會消失。當然也能把儲存在使用者硬碟裡,所以每次訪問網站,它都會記得你。
所以我們只要把使用者Session裡的資料,放在伺服器內,然後發給使用者一個Cookie,也就是號碼牌的概念。使用者再次訪問網站時,就能夠從伺服器裡抓取原先的資料。另外還有一個方法叫Cookie-based Session,把Session所有資料都放在Cookie裡,再把Cookie給使用者。使用者買完商品後,離開網站,Cookie上的資料就直接丟棄,這樣伺服器就不用浪費空間儲存Session資料。
那你可能會想,這樣子我們使用 Cookie-based Session技術就好啦,可是Cookie的資料大小只有4k,所以也不一定都能夠這麼做。有些網站甚至會兩者並行。
我們在這次的學習是採用Python的套件Flask,它本身有內建session,另外也有擴充套件flask_session,從作業提供的程式碼看起來,兩者都有使用,目前我能力還不足,不知道為什麼他們要這樣寫。如果用內建的session,就是把Session儲存在Cookie,放在使用者端的瀏覽器裡。或者用flask_session,把整個工作階段資料存到資料庫內,cookie只是存session id而已。
在最底下是本週作業一部分,學生必須要在資料庫內新增一個購買股票歷史記錄的表格,在application.py完成指定的功能,以及在tamplates資料夾新增功能對應的網頁。我試著理解這些相關知識,並且用中文寫下註解。看起來不難,那是因為我咀嚼過知識了。如果在知識為0的情況下接觸,非常非常燒腦。

未來學習計畫

cs50x的期末作業並沒有限定格式,想做什麼都可以,主要是三大步驟。
步驟1:上傳 README.md ,裡面解釋期末作業內容。
步驟2:自拍一部影2分鐘內的影片,簡介作業,包括作業名稱、學生姓名、居住城市、國家等。必須包含操作畫面。將這影片上傳到YouTube。
步驟3:填寫Google表單
我自訂的期末作業很簡單,我會重新把第8週作業寫一次,也許做成簡易的商城。如果你的目標也是學習網站開發的話。向您分享我之後的學習計畫。初步目標是搞懂前端語言JavaScript,也要學習flask框架、網站建置原理、網站功能測試,以及如何部屬網站等等。進階目標是學習Django框架。
我的學習資源分為線上課程及書籍,底下這些學習資源,我會先選Codecademy關於Flask及部屬網站的部分來學,以完成期末作業為優先考量,趕在年底以前把作業交出去,也算是對自己一個交代。明年的主要學習架構是CS50的進階課程。
線上課程:
書籍:
  • Minguel Grinberg著,賴屹民譯,《Flask網頁開發》
  • Berenda Jin, Saurabh Sahni, Amir Shevat著,賴屹民譯,《Web API建構與設計》
  • Mike Amundsem著,賴宥羽譯,《RESTful Web Clinets技術手冊》
  • 劉超,《乾脆一次搞清楚:最完整詳細網路協定全書》
  • 陳惠貞,《HTML5、CSS3、JavaScript、jQuery、jQuery UI、Ajax、RWD網頁程式設計 》
底下向各位介紹本次作業程式碼,html部分就請各位自己寫了。
Happy Coding!!!

沒有留言:

張貼留言

謝絕廣告,感恩