關於課程整體的心得大概 10 天前有寫一篇在 Medium 上:程式導師實驗計畫 — 半個月報告, 也寫了兩篇完整記錄 Lidemy HTTP Challenge 的通關過程。JAS0N HUANG @Medium
我大概每個同學寫的進度報告都會讀過(真的就當刷 FB 在看……),然後看到同學在進度報告或是 slack 上面提問的時候就會想要回應……
除了 slack 公開群組上的回應,也大概有私訊回應了 10 個同學以上吧!除了其中一個超蠢的烏龍回應(對不起啦 Boison 同學,沒看清楚你的問題就回答了……),其它的希望真能幫助到卡住的同學 XD。
至於進度快慢,我真的覺得一點都沒差,我自已現在會快一點點,也是在五月的時候就花了快「三週」的時間先把 ALG101 都修完了,LIOJ 上的題目當時也解的差不多了,不然現在肯定也是落後的一群,但是落後、超前又怎樣,大家也都很清楚「持之以恆」才是最難的事;更重要的,是要真的找到自已想要的東西,學習應該是讓人感到有成就感、感到快樂的,人生已經這麼難了,就不要強迫自已再堅持去做感到痛苦的事情了……(至少我是這麼跟自已說的!可以辛苦,但不必痛苦!)
前四週大部分都是已經看過或學過的內容,只是以往學的不夠全面,很多細節都不瞭解,看過這些課程然後做完所有作業之後,對於課程內容的東西也比較能掌握了。下面稍微整理一下在這幾週課程裡學到的新技術。
ls、cd、mkdir、man……等等比較基本的指令在課程開始之前都已經用一段時間了,所以還算熟悉。 在課程裡新學到的主要就是 grep 裡面字串處理的用法、curl 用來抓網路資料(後面用來串接 API) 以及 shell script 的寫法,也因為研究 Git 的資料夾結構找到 tree 這個軟體。
課程開始前也就一直有在用 Git 但是都只是個人的練習,但是課程內把交作業的流程設計成像是工作上的開發流程,所以才真的學到 branch、checkout。
另外自已去翻了一遍 .git/ 資料夾,瞭解一下 git 底層的運作機制,在下每個指令的時候也比較清楚自已是在做什麼事情了。
開課之前也自已自學過一些 JavaScript,跟著課程再系統化的重新複習一次,發現還是有很多基本概念沒有搞清楚,下面記錄自已在課程裡關於 JavaScript 的收獲。
-
變數命名方式
以往都沒有注意到變數要怎麼好好命名,課程裡經過老師的強調才注意到命名的重要性。
自已選擇一種常用風格(camel case、snake case……)然後統一依照這個風格命名。(慣例是用 camel case)
常數(不是 const)慣例是用全大寫 snake case 命名。
isX 用來命名回傳 Boolean 值的函式,getX 用來命名取得某個數值或資料的函式……等等。 -
Immutable 基本型別的不可變性,以及 JavaScript 底層其實只有 call by value 的性質,這些以往也都沒有仔細去瞭解。
-
位元運算子
以前也都沒有注意到有這個東西,感覺好像不是很實用 XD 但是用起來蠻有趣的,搭配一些練習題與挑戰題,有種與電腦拉近距離的感覺…… -
練習用 Switch
其實在其它課程裡也有看過這個語法了,但是以前使用判斷式的時候還是都習慣直接用 if else,後來在串接 API 的作業裡發現還真的有比較適合用 switch 的場合。 -
學會一些內建函式的用法
陣列的 .map()、.reduce()……等等,字串的 .split()、slice()……等等。 -
模組化
雖然之前就知道這樣的用法,但是也沒有實作過,透過課程影片、仔細瞭解 LIOJ 上 readline 模組的用法、串接 API 的時候引入 request 、http 或 axios,以及學習用 jest 寫測試,才比較熟悉模組的運用。 -
測試
顯然不是一個大家都有時間去做的事情,就像老師在直播裡說的,商業利益還是大於測試,有時間當然是拿來賺錢阿!但是總是要知道測試怎麼寫,也透過第二週的作業練習寫了一些測試。 -
ES6 再熟悉一次 ES6 的語法,透過 eslint 的
逼迫幫助,在所有應該使用 const 的地方都使用 const。
學會解構式語法,然後安裝 babel-node 讓自已在寫 code 的時候習慣 ES6 的語法。
藉著經典問題:「按下 enter 後發生了什麼事?」一步步理解網路的架構。
第一週的簡答題在伺服器回傳資料、瀏覽器如何解析 HTML 資料,如何建構 DOM 的地方有錯誤,所以在看第四週影片的時候也比較有感覺。這部分應該也是到第七、八、九週之後才會有更深入的教學。
以往也都有大概聽過網路層級,也看過鳥哥寫的文章好幾次了(但是真的都有看沒有懂……),透過胡立淺顯易懂的故事,還不敢說真的就瞭解這些複雜的機制,但是至少在腦海裡留下一個深刻的基本概念,之後再慢慢延伸學習了!
一直覺得演算法超級難,但是經過 ALG101 與幾個挑戰題之後自已可以用 BFS、Dynamic Programming 的方法解出題目,總算不再那麼害怕演算法了。(但是其實還是很怕……)
API 這個聽到爛的詞直到上到這個課程才真的比較清楚它的定義以及使用方法,跟著課程的內容學著去看 API 文件,試著去瞭解 OAuth 到底是什麼,也總算知道 RESTful API 不是什麼魔法,就只是一種建構 API 的風格。
透過 API,我們寫的程式不再只是理論上的練習,而是可以跟真實世界有連結了,可以抓到實用的資料讓人自我感覺超好阿!
API Offres d'emploi v2 文件
本來想說應該可以自已看文件拿到 Token 串接 API 然後抓到想要的資料,但是在拿 Token 的時候卡住了一下,只好求助老師,結果是在拿 OAuth 2 Token 的時候 Scope 少加了一項,所以拿到的 Token 一直都是無效的。
因為拿到的資料直接就是 JSON 格式,所以還算好處理,但是薪資的部分是一個敘述性的字串,有點像是:「月薪 2000 到 3000 以 12 個月為基準」、「年薪 32000 到 40000 以 12 個月為基準」……,也有不少公司寫的是「面議」或「依條件給薪」,所以還是必需自已處理一下資料。
程式裡已經設定只查詢不需要經驗或一年以內經驗的條件(所以查詢工程師職缺的結果比較少,很多都要求 2 年以上經驗……),只要在執行程式時帶上一個引數做為想查詢的職業關鍵字就可以找到相關的月薪資料,平均起薪,以及提供或未提供薪資資料的公司數量。實習薪資的部分是依照法國現在的最低工資設定的,低於最低薪資就會直接算為實習薪資。
感覺寫出來的程式還有超多優化、重構的空間(就覺得自已寫的東西有點混亂……), 資料處理上也可以更細緻一些,但是想說還是不要花太多時間在這上面,先把該上的課上完再來慢慢處理吧!
程式運行截圖:
查詢銷售員起薪(vendeur 為法文之銷售員)
查詢 Angular、React、Vue 起薪
- Client ID 與 Client Secret 附在程式裡面(應該三天後會把它換掉),有興趣的人可以試試,後面引數可以用其它職業名稱或關鍵字查詢,但是要用 Google 先翻譯成法文就是了(可能有些英文也可以……)
- 我用前端三大框架(Angular、Vue、React)查了一下,發現法國好像 Angular 職缺最多,有寫明薪資的就有 16 家,其它兩個只有各兩家公司,當然這只是很粗略的查詢,參考性如何就不知道了……
- 薪資單位皆為歐元。