前情提要
程式導師計畫第四期從 6/12 開始,到今天已經第七週了,此篇「第幾週」並不是根據實際時間,而是以 課綱 為主。這篇同時作為第五週的作業,整理加入計畫後至今的心得。
這篇會有什麼
內含ㄉ技能
- Command line 的使用
- Git 的基本操作
- JavaScript 基本語法及程式思維
- 網路基本概念
每週ㄉ速記
- 筆記
多花時間額外做的筆記。 - 心得
簡單紀錄,可能會偷偷挪用每日進度內容。 - 其他養分
在 Coding 前,先好好生活。 - 自我檢測題簡答
假裝自己在面試,用幾句話簡單回答。
每週速記
第一週(06/12 ~ 06/21):暖身週
實際時間: 6/12 ~ 6/23
筆記
[DAY4] 初學Command Line
[DAY8] 初學 Git (上)
[DAY9] 初學 Git (下)
心得
去年大學畢業終於被體制拋出,因為興趣太廣泛不知道要選哪個,乾脆毫無規劃的隻身一人到台南,以為隨便找份工作,過了一年什麼都不做,就會忽然知道自己要做什麼了。結論是我果然還太天真了,不只工作難找,畢業滿一年的今天,除了每天都有甜爆的美食,我依然是那個沒有方向的自己。
前幾天接到很久沒聯絡的學妹電話,說她找到了一份還不錯的工作,並問我在幹嘛。
「目前沒有工作啊。」我小海豹化。
然後不意外的被唸——都 23 歲,了是時候該為未來做打算了吧。
「……啊,但是我在學程式設計ㄛ。」
『三小?你不是心理系的嗎?』對欸,我都忘記這個設定了。
關於為什麼要學程式,這半年的契機太羞恥了請允許我先跳過。不過其實也不是最近裝水時才突發奇想,退一萬步也是高中裝水想到,早在升大學時就有想過填資工系了,最後因為いろいろ原因沒去。(請放過我留一些下次寫心得時可以講的故事 XD)
總之,這半年決定要學程式設計後,又跌跌撞撞了一段路,加上求職和就業等失敗經驗,送出履歷前大概是我對自己未來最絕望了時刻。就連履歷送出去前,都被幫忙看履歷的朋友看雖。當初想如果沒上我就試試看北科大的 Coding365 ,再不行就乖乖考個研究所好了,反正以我現在的能力出社會只會被打爆。終於,在一年內被拒絕無數次之後,居然收到 Huli 的信說我進了???
在快樂的像是(至少是我想像中的)蜜月期劈哩啪啦註冊完所有帳號後,用心發了自我介紹以及和同學社交(但又不能積極到被發現是怪咖qq),我馬上面臨第一個困難——如何上線上課程。
這個問題聽起來很白癡,不就跟到學校上課一樣嗎?但環境不同真的差超多,而且想偷懶的時候只要按暫停就可以去摸魚,超級考驗自制力的。尤其 CML 和 Git 雖然大家都說很帥很像駭客,不過實際上就是成就感超低的啊。這個問題到我將速度調快到一點五倍才暫時被改善(所以後來直播時是我第一次聽 Huli 用一倍速說話XD)。最嚴重的問題是,我該如何做筆記和寫每日進度?爬前幾屆同學的筆記,這已經不只是程式設計的計畫了,根本是筆記整理和幹話訓練班吧(???)
欸爆字數了,第二週心得待續好ㄌ
在 Coding 前,先好好生活
- 小說《她的身體與其他派對》
- 電影《蚵豐村》
- 影集《Brookyn 99》
- 左營看日蝕
- 高雄鹽埕第一市場
自我檢測簡答
- 你說得出程式如何執行
- 你理解寫程式的本質只是一行行的指令
以上兩題一起回答好了,程式不只是一行一行的指令,他還可以被化約成 2 進位的數字。(是這樣回答嗎我不確定qq) - 你了解前端與後端的區別
使用者可以看的到的部分都是前端,像是新增網頁和設計;後端則是負責和資料庫溝通。
用 Google 表單類比的話,我們在填寫表單時回答的問題是前端負責;如果設計者針對大家的回應開一個試算表,那麼和這個試算表溝通就是後端的工作。
當然大部分的功能需要前後端合力才能達成,例如用搜尋引擎時,前端負責接收我們輸入的關鍵字,交給後端去資料庫中尋找,並回傳結果給前端,最後由前端顯示結果。 - 你能說出從發出一個 request 到接收 response 中間發生的事
- 你傳送 request 給瀏覽器。這裡又細分瀏覽器傳給作業系統,再傳送給硬體,這裡瀏覽器、作業系統和硬體就像郵差送信一樣。
- 傳送到 DNS Surver , DNS Surver 會回傳 IP 位置給前端。
- 前端將 requst傳送到 IP 位置。
- Google 的 Surver 去 DB 找資料。
- 沿著原來的路徑傳送 Rrsponse 給 Survur 、硬體,作業系統、瀏覽器。
- 我們會在瀏覽器上看到結果。
- 你了解不同載具的差異在哪(Desktop、Mobile、Web)
- 你了解基本的 command line 指令
- 你知道 Git 在做什麼,以及為何我們需要 Git
Git 是一種版本控制的系統,有點像遊戲的存檔點,幫你沿路存檔。就算只有自己做專案,還是會碰到「新功能開發到一半,要先停下來修 bug 」的狀況,更別說多人協作各自負責不同區塊的時候,這時候就需要 Git 。 - 你知道 add、commit、push、pull 等基本 Git 指令
另外git pull <欲抓連結>
可將網路上的資料抓下來,與之相反的git pull <branch>
可將資料傳上去。 - 你知道怎麼使用 branch 並送出 Pull Request
pull request
可於上傳資料後,打開 GitHub 最上方就可以送出了。 - 你熟悉 Git Workflow(其實就是交作業的流程)
- 開一個新的分支
- 建立 commit
- pull request
- 其他人 review
- 合併回 master
第二週(06/22 ~ 06/28):程式基礎(上)
實際時間: 6/23 ~ 7/01
筆記
[Week2] 給自己看的 JavaScript 筆記 -運算
[Week2] 給自己看的 JavaScript 筆記-變數
[Week2] 給自己看的 JavaScript 筆記 - 迴圈、函式、其他觀念
心得
延續上一週,到底要如何寫出好看的筆記,最好是可以被助教勾選「值得參考」的呢?我花了超多時間想把筆記做得精美,寫了幾篇後發現 CP 值爆低,而且老師和助教都開始呼籲大家不要只顧著做筆記,推進進度比較重要。因此開始告訴自己 先求有再求好 ,雖然快了一點但效果還是有點差,這週給自己「幾小時挑戰」然後發現還是都超過了,因此之後幾週的策略就改成 沒有筆記也沒關係。
雖然立志待業中所以每天要學 8 小時,但每天至少有兩三個小時花在自我懷疑和逃避。Git 對我來說是全新的東西,在還沒看作業說明前,我完全不知道還要追多遠才能跟上大家的進度,因此焦慮又更深了,「我根本就不適合程式設計,放棄好了,才剛開始就被這種挫折打敗的我,根本就不喜歡寫程式吧,我只是碰到問題就逃避的廢物——」之類的鬼打牆不斷消耗自己,又更無法學習了。
另一個很焦慮的點是,現在社會的傳統想像中人們應該要超級精通一個東西,但如果每個人的興趣像遊戲的技能點,我明顯就是點的很分散的那種人,因此好擔心對程式的熱忱不如我想像中高,甚至沒有到達客觀標準。
這個選擇真的是對的嗎?
然後我想到前幾天朋友告訴我他唸超難畢業又前途模糊的研究所,並不是因為「想要成為什麼樣的人」,而是「想看看可以走到哪裡」。這個想法讓我感到舒緩一點,也許就像平板撐一樣,再多堅持幾秒,因為我很想知道,跨過這些障礙之後,我能看到怎麼樣不同的風景。
我想看看那邊的風景。
練習 LIOJ 時有一題卡了好幾天,用了各種方法都卡住,才決定在 spectrum 上提問。後來發現只是錯一個字母 orz 後來在每日進度吐槽這件事, JAS0N 同學特別來向我澄清他其實有給我線索,才發現原來我看起來在怪他 qq 但其實大部分在和別人聊天的過程(尤其是訊息聊天),我都在擔心「要如何讓對方覺得跟我說話/幫我解答是值得的」。所以在此特別再感謝一次不知道會不會看到的 JAS0N 和 Huli 大大(合十)
自我檢測簡答
- 你能靈活運用變數、迴圈、判斷式等等基本概念來解題
可以(咦是這樣回答嗎????) - 你能一行行的說出現在程式在做什麼
吃我 做給你看 辣 - 你知道「回傳」跟「輸出」的差異
如果把函式比喻成黑盒子,input 一些東西就會回傳
output,數學中的f(x)=y
中的 y 就是回傳值。在 Javascript 中用 return 表示,如果沒有 return 則預設回傳值為undefined
。
function print(a) {
return a;
}
print('hello')
// 會回傳 hello ,但不會顯示任何東西
console.log(print('hello'))
// 印出 hello
相對的, console.log()
只是單純將內容 輸出
。
function print(a) {
console.log(a);
}
print('hello')
// 印出 hello
console.log(print('hello'))
// undefined
- 你可以把用文字寫好的演算法轉成程式碼
咦???目前碰到的題目都還過得去???這個要怎麼證明辣跳過 XD
第三週(06/29 ~ 07/05):程式基礎(下)
實際執行: 7/1 ~ 7/14(整整兩個禮拜!)
筆記
心得
截至這週為止,我都只落後一兩天。一開始的契機可能只是腰痛到站不好。醫生說不要搬重物,但我忽然發現缺乏運動的我的身體,本身就是重物 QQ 導致我只能在床上工作,而且變得好嗜睡,又因為連續一週沒有休息,太緊繃往回彈進度就推得很慢,有些日子甚至只學三四個小時。進度一落後壓力就變大,根據壓力曲線,壓力大到一個程度效率會降低,如此形成惡性循環。
沒有推進太多進度得時候,我也就不趕寫太多每日心得。後來發現拖延是太想要完美,既然這樣那就乾脆就先捨棄一部份的完美繼續往前好了——明明前幾個禮拜就有覺悟了,要實踐果然好難。
這週起大家陸陸續續開始約實體聚會了,因為在台南無法參加,我也開了兩次螢幕共享,效果都還不錯。後來 zangwang 同學傳訊息跟我說,《注意力協定》一書中提到類似的效果,這有點像是大聲說「我要來努力了!」,之後如果跟大家說「抱歉啊我是個沒有毅力的人,先去玩一下動物森友會。」其實是有壓力的,雖然也不是完全不能這樣做(畢竟人生是自己的),但羞恥心之類的會讓偷懶這件事要付出的代價變高(而且比起之後進度落後,這個代價是要先付出的會比較有感覺),因此可以用契約提高專注力。
另外好像不小心習慣偷懶了,直接進入倦怠期,尤其越來越沒有幹勁寫每日進度(要怎樣一直產出高質量心的辣——於是我又落入完美主義拖延的困境)。在心得上提到這件事, Wozski 同學(嗚嗚嗚同學人都好好)就來私訊我說,不妨將學習當作習慣,如果今天很不想做的話就從五分鐘開始,再慢慢延長,重點不是今天做了多好(甚至多好),而是讓自己習慣每天做這件事情。我之前一直以為運動或被單字才有習慣可言,沒想到光是持續跟完課就是一個毅力上的挑戰了。
在 Coding 前,先好好生活
- 原來是戀愛漫畫的《炎拳》
- 奇美博物館之影子魔幻展
自我檢測簡答
- 你理解常用內建函式如何使用
隨便列幾個常用的內建函式:
str.length
或arr.length
:回傳字串或陣列的長度。
Number(str)
:將字串轉成數字。
arr.join()
:將東西加入陣列中。 - 你熟悉程式語法並知道如何解決基礎問題
可以——一時想不到要寫什麼(#) - 你知道為什麼我們需要 unit test
因為一個功能有很多部份 ,要是出錯的話,一個一個測試比較方便。 - 你知道什麼是 unit test
單元測試,就是將程式拆解成小部份(通常是模組或函式)分別測試。 - 你知道如何寫 unit test
- console.log 加爆
- 用 Jest (這裡之後回來補)
- 你知道如何測試一個 function
用單元測試(天好像鬼打牆……)
第四週(07/06 ~ 07/12):網路基礎
實際執行: 7/14 ~ 8/3
筆記
[Week4] JS 實作串接 API(一)
[Week4] JS 實作串接 API(二)
[Week4] JS 實作串接 API(三)
心得
因為之前偷偷學過一點 Python,這週終於又回到自己完全沒概念的東西了,懷抱忐忑的心情點開課程影片——咦,居然那麼好懂嗎?從傳紙條範例開始,每個概念幾乎都不太難,課綱為何要為了這種東西花一整週——然後才在作業找到答案:廢話,那是因為你還沒開始實作啊!
寫作業的過程艱難到我認為必須將其記錄成筆記,不然幾乎每一題都要先拆解答再看,超心虛的。比如說:為何 request 要放 (err, res, body)
?又或者 post 之後回傳的 body 是什麼?這些感覺好像是約定俗成的東西,都必須一個個去重新摸索。因為幾乎是看著解答寫,讓我超級超級心虛,還好之後有 HTTP-challenge 才比較扎實。
這週的定番果然還是焦慮以及失敗經驗被召喚,不過透過重新檢視這些經驗,似乎又讓自己稍微從這些困擾當時自己的記憶中被釋放,例如重追《排球少年》第二季,主角們好幾次太過著急撞到彼此,讓我想到大學打系排時撞過一次學姊,還因此留下至今還會復發的舊傷,當時我超級無敵愧疚。不過現在回想好像根本就不用那麼愧疚,也許是我太害怕失敗了,上次也看到類似研究說台灣人怕失敗的程度超高,相較之下看著少年們不斷犯錯就覺得好舒壓。
另外第二季新經理是個小時候話劇只演過村人 B 等不起眼角色的人,也沒有什麼值得投入熱情之處,猶豫時甚至還被母親說:「抱著半吊子的心態,加入認真奮鬥的人中,是很失禮的。」這個部分最後當然是被熱血笨蛋主角們感動了,但最讓我有共鳴的是同為球經的學姐說,她自己一開始也不是非常喜歡排球,有些東西是開始做之後慢慢喜歡上的。我覺得這個策略十分有道理,目前決定試試看。
這周開始買了咖啡廳月票,希望能將跟課變成習慣。看了 Huli 說的跳關,我本來還打算在這篇放用 curl 解 HTTP-challenge 和這四週的挑戰題,不過目前繼續往前進才是好的策略。就這樣啦,我要進入第六週了,掰掰。
在 Coding 前,先好好生活
- 《也許你需要找人聊聊》
- 《排球少年》
自我檢測簡答
- 你知道網路背後大概的運作模式
可看第一週。 - 你知道什麼是 Request 跟 Response
通常使用者會透過瀏覽器對後方資料庫發出 request ,收到 request 後會回傳 response。 - 你知道什麼是 DNS 以及運作原理
DNS 的全名是 Domain Name System ,也就是網域名稱系統。我們平時看到的網址叫網域(url),但實際上電腦可以讀的是 IP 位置,所以當我們將 url 傳送給 DNS 後,它會回傳 IP 位置讓電腦知道資訊要送去哪。 - 你知道 HTTP 與 HTTPS 的差異
HTTP 和 HTTPS 都是網路協定標準,只是 HTTPS 多了安全(secure)
。 - 你知道 localhost 跟 127.0.0.1 是什麼
localhost
是指「這台電腦」的主機名稱。而127.0.0.1
則是 localhost 預設的 IP 位置。 - 你知道 GET 與 POST 的差別
GET
可以得到資訊,POST
則是傳送資料(和 PATCH 不同, POST 會覆蓋舊的資料)。 - 你知道常用的 HTTP Header
Request URL
放目標網址。
Request Method
放 HTTP Method。
Status Code
表示連接狀態。 - 你知道什麼是 API
API 全名為Application Programming Interface
,中文翻譯為「應用程式介面」。簡單來說就是交換資料的管道。
舉例來說好了,今天你進到一家拉麵店,要如何和廚房說你要什麼品項?因為你已經來過很多次了,所以走到拉麵販賣機前點餐,而這個販賣機就是 API
。你和廚房可以透過販賣機溝通(使用 API),你開店的時候別人也可以從販賣機點餐(提供 API)。 - 你會使用 node.js 寫出串接 API 的程式
會,吃我上面筆記啦。 - 你知道 HTTP method 有哪些
最常見的就是GET
請求資料、DELETE
刪除資料、POST
新增資料、PATCH
修改資料。 你知道基本的 HTTP statud code,像是 200、301、400、404、500
status code 分成幾種:- 1xx = Informational(資訊)
- 2xx = Success(成功)
200:請求成功。 - 3xx = Redirect(重定向)
301:重新定位(相較 302 , 301 是永久重新定位) - 4xx = User error(客戶端錯誤)
400:此回應意味伺服器因為收到無效語法,而無法理解請求。
404:伺服器找不到請求的資源。 - 5xx = Server error(伺服器端錯誤)
500:伺服器端發生未知或無法處理的錯誤。
# 後話
好啦我先去趕進度了,看大家在討論切版切版卻不知道是什麼,覺得好孤單。看大家慢慢開始想最後幾週可以做的東西,目前的想法是想幫 社團 架一個網站~