[CS101] 初心者的計概與 coding 火球術
容易理解的簡易版計算機概論
這是個全民寫程式的年代
近年來「全民寫程式」風氣正夯,甚至學校也搭上潮流,在不久的將來,程式設計極有可能成為國中小教育的必修課程。或許你也受到這風氣的影響,覺得在未來,一定要會寫程式才能生存。
於是你開始上網尋找課程,可能學了 python,學了 rails,或甚至學了 iOS。有許多大同小異的課程,總是用固定的開場白、同樣的教學方式。先從程式語言的歷史講起,接著教你資料型態,再來講 if...else 流程控制,然後 for 迴圈。課程是聽完了,語法也學會了。但是要你實際動手做的時候,你卻呆住了。
為什麼?因為你學到的只是程式的語法,而不是內涵。你知道 for 迴圈可以重複做同樣的事情,但卻不知道如何利用迴圈寫出一個九九乘法表的程式。相信我,這些我都懂,因為我也是這樣走過來的。
其實,在你學習這些語法之前,你還可以做更多事情。
這堂課將帶給你的第一個寶藏,就是「程式思維」。你今天碰到一題解不出來的問題,可能不是你程式寫的不好,而是不知道「如何用程式把想法實作出來」。第一堂課將會針對「寫程式」這門學問,讓你能培養程式思維,更了解寫程式到底是怎樣的一件事情。
寬闊的視野,從廣泛接觸開始
無論你寫不寫程式,認識自己生活中最常使用的工具:電腦,我認為都是一件值得的事。因為在你的生活中可能常碰到一些與電腦有關的問題,但你不知道為什麼會發生,也不知道怎麼解決,例如說:
1. 為什麼我的帳號被盜了?我明明有裝防毒軟體。
2. 為什麼這個網站連不上,其他網站可以啊!
3. 電影裡的駭客好帥喔,他們到底怎麼做到的?
4. 這網頁怎麼是亂碼!
5. 為什麼忘記密碼的功能,不能直接告訴我我的密碼呢?
這堂課將會用許多生活化的例子,帶你了解每個領域背後的原理及知識。舉例來說,我們會接觸到電腦儲存資料的方式、網路相關的知識等等。
如果你是程式的初學者,那你就更適合上這堂課了!因為當你把基礎都修完,正準備大顯身手的時候,可能會碰到以下問題:
1. 我是寫網頁前端的,我現在想寫一個留言板,我做的到嗎?
2. 到底前端跟後端是什麼?搞的我好亂阿!
3. 我要怎麼儲存我的資料呢?存成檔案嗎?
4. 到底為什麼 << 運算子可以乘以2,這是什麼巫術?
5. 我的網站怎麼會被駭,我的程式碼看起來沒什麼問題阿!
會出現這些問題很正常。因為通常初學者所專注的都是某一個領域,例如說你是寫 Android/iOS 的,可能就不知道 Web 的前端/後端該如何區分。這都是因為你的知識廣度不夠,所以在碰到一個新領域的時候,往往充滿問號。
這堂課能帶給你的第二個寶藏:知識的廣度。從前端到後端,從資料儲存到網路傳輸,只要是與電腦相關的實用知識,我都能夠幫你一把,帶你認識基本的觀念,至少下次碰到的時候,不會毫無頭緒。
到這為止,你已經拿到兩個寶藏了。
最後,來寫程式吧!
經歷過上面兩段旅程之後,你將會了解自己為什麼要寫程式,並且知道寫程式是什麼。同時,你也已經走過各個領域,認識了電腦中的資料儲存方式、網路運作的概念、資訊安全的基礎等等,別小看這些東西!這些東西之所以重要,就是因為背後隱藏了許多重要的思維邏輯,能夠幫助你在寫程式的時候多加思考。
因此,在課程的尾聲,將會帶給你最後一個大祕寶:寫程式。
在我摸索了許多年之後,才發現 Scratch 這套至今我認為最適合教程式的軟體。利用 Scratch,可以讓你專注在邏輯思考,而不是頭昏眼花的語法(if, else, for, var, int...)。我會用 Scratch 教大家程式基礎,一旦融會貫通之後,學其他語言一定能事半功倍。
一共有三種人適合修這門課
第一種
假你一直想學程式,但一直在觀望,這麼多資源不知道選哪一個,那這堂課很適合你,因為我能讓你理解寫程式是什麼,就算我講解完之後你對程式沒興趣,你依舊可以在其他單元裡面學到實用的電腦知識。
第二種
你已經在學程式,卻覺得程式怎麼這麼難,放心,那不是你的問題。來修這堂課吧,我會從頭開始,讓你了解到底應該怎麼學程式,也讓你了解背後的原理,讓你在面對問題時能夠更有自信,
第三種
你對程式沒興趣,但一直對電腦相關知識很有興趣,那你來對地方了!這邊的許多課程就是在介紹你想知道的一切。讓我們一起拆開黑盒子,仔細研究裡面的東西吧!
要是你是不屬於以上三種的第四種人
你對程式沒興趣,對電腦相關知識也沒興趣,那你可以幫我推薦這堂課給有興趣的朋友嗎,拜託~
完整課程大綱
1. 到底「寫程式」是什麼?
用最簡單的說法,讓你了解到底寫程式是怎樣的一件事情。也會講述程式思維基礎,培養正確的觀念。
2. 透過 Command line 操作學習下指令
你有用過終端機嗎?這堂會介紹常用基本指令,讓你不用滑鼠也能操控電腦!
(包含基本指令與進階指令)
3 .我的錢怎麼變成負的?--電腦中的資料儲存與表示方法
由玩家在遊戲內金錢從兩億多變成負的現象,探討在電腦裡面數字是怎麼儲存的
包含三部分:各種進制相關教學、資料單位與儲存、編碼
4. 為什麼我連不上這個網頁--網路基礎概論
從連網頁這件最重要的小事開始,講解從你電腦連上網到看到畫面的流程。讓你了解什麼是伺服器,什麼是 IP 位置。
包含伺服器相關講解與瀏覽器開發者工具教學
5.駭客是怎麼做到的?--資料庫基礎與系統安全
示範一些常見的駭客攻擊手法,讓你對資訊安全有更深的認識。也會教到基本資料庫基礎以及很基本的密碼學
包含常見攻擊手段、資料庫基礎
6.怎麼會有這麼多程式語言?--程式語言基礎與簡介
這麼多程式語言,大家一定都聽過其中一些,但卻不知道差別在哪,這個主題會直接切入程式語言的運作方式,帶到組合語言、編譯器,最後簡單介紹各種程式語言
包含程式概念複習、逆向工程、程式語言介紹
7.不過就是排序,有什麼難的?--演算法概論
排序可以說是小小事情大大學問,藉由不一樣的排序方法,講到空間複雜度、時間複雜度等等的演算法概念
包含演算法簡介與各種排序法介紹
8.邁向程式之路--Scratch 入門教學
Scratch 基礎教學,帶你認識在各種語言都通用的觀念,只要把基礎打好,想學其他語言都不是難事
你的老師
寫過一點後端也寫過前端,還寫了一堆你應該看過卻不知道作者是我的技術文章,致力於推廣淺顯易懂的程式教學。在新加坡工作過兩年半,是專職的前端工程師。一直都對教學有很大的熱忱,相信把話講得清楚又明白是一種專業,相信分享與交流可以讓世界更美好。
我不喜歡把自己講的很厲害,也不喜歡用學經歷說明什麼——我都用作品說話。
底下是我寫過的幾篇文章:
1. 零基礎的小明要如何成為前端工程師?
2. 成為前端工程師的四週年回顧
3. 從拉麵店的販賣機理解什麼是 API
4. 紮實的網頁前端學習路線與資源推薦
5. 當我們在學程式時,要學的到底是什麼?
我在自己的 blog以及 Medium 上面,常常發表許多心得,也曾經免費提供程式教學,希望能幫助那些剛踏入程式界的初心者們。 如果你想更了解我,可以參考:自學、哲學、講學:我的程式之路以及一個工程師的履歷進化史。
在嘗試過許多教學方法之後,終於決定自己跳下來開一個為初學者而生的線上程式課程平台。
課程
-
Start課前須知
-
預覽1-1:到底「寫程式」是什麼? (10:00)
-
預覽1-2:程式碼不是重點,解決問題才是 (11:28)
-
預覽2-1:什麼是 command line? (5:56)
-
預覽2-2:基本指令練習,用文字來操作檔案吧! (10:15)
-
預覽2-3:更多常用 command line 指令 (4:27)
-
預覽2-4:發揮更大的力量--指令的組合技 (3:38)
-
預覽3-1:二進位是什麼--電腦中的資料儲存與表示方法 (13:18)
-
預覽3-2:1TB 有多大--儲存空間單位 (4:02)
-
預覽3-3:我的錢怎麼變成負的--數字的儲存 (8:42)
-
預覽4-1:為什麼我連不上這個網頁--網路基礎概論 (6:20)
-
預覽4-2:我的 IP 怎麼跟別人的一樣--內網與外網 (2:45)
-
預覽4-3:你要怎麼記住我--session 與 cookie (4:54)
-
預覽4-4:網頁為什麼會跑版--了解瀏覽器 (9:30)
-
預覽5-1:搶票系統怎麼又掛了--DDoS 攻擊 (3:58)
-
預覽5-2:怎麼會!帳號又被盜了--木馬與暴力破解 (4:15)
-
Start5-3:網站怎麼儲存資料的--資料庫簡介 (10:27)
-
Start5-4:Facebook 知道我的密碼嗎--儲存密碼的正確方式 (9:46)
-
Start5-5:我的資料外洩了--初級攻擊手段 (10:11)
-
Start6-1:程式是什麼--程式基礎概念複習 (5:06)
-
Start6-2:破解版軟體怎麼來的--逆向工程簡介 (7:10)
-
Start6-3:怎麼那麼多程式語言--程式語言介紹 (6:45)
-
Start7-1:演算法是什麼? (4:04)
-
Start7-2:怎麼衡量演算法的好壞 (16:19)
-
Start7-3:排序方式簡介(上) (10:41)
-
Start7-4:排序方式簡介(下) (9:20)
-
Start8:邁向程式之路--Scratch (26:30)
-
Start9-1:我想學網頁開發,需要會什麼 (20:09)
-
Start9-2:我想學App開發,需要會什麼 (11:18)
-
Start10-1:實戰篇:抓取網頁標題 (10:49)
-
Start10-2:實戰篇:判斷水仙花數 (12:24)
-
Start11:不會寫程式也能懂的程式基礎 (18:00)