├── case.md
├── case
├── README.md
├── case1.md
├── case2.md
├── case3.md
├── case6.md
├── case4.md
├── case5.md
└── case7.md
├── prepare.md
├── SUMMARY.md
├── beginning.md
├── README.md
└── LICENSE
/case.md:
--------------------------------------------------------------------------------
1 | # 實際案例
2 |
3 |
--------------------------------------------------------------------------------
/case/README.md:
--------------------------------------------------------------------------------
1 | # 實際案例分享
2 |
--------------------------------------------------------------------------------
/prepare.md:
--------------------------------------------------------------------------------
1 | # 事前準備
2 |
3 | 事前先寄信給丁丁大,詢問一些注意事項之類的
4 | 接著就開始打要po在ptt上的文章以及一些規則
5 | 有許多內容都直接 fork 丁丁大的,真是前人種樹後人乘涼
6 | 之後就po文等收信了
7 |
8 | 若是也有心想要做這件事情的,可以提供你幾個可以參考的資訊
9 | 1. 有工作經驗,不然別人問你與職場相關的你會無法回答
10 | 2. 對各個領域(前端、後端、移動端)都不會太陌生,至少要知道基本
11 | 3. 知道本科系在幹嘛,因為許多人也會問說本科跟非本科差在哪
12 | 4. 有耐心,一次收到十幾封信每封都要回信敲時間可不是開玩笑的
13 |
14 | 大概就是這幾點
--------------------------------------------------------------------------------
/SUMMARY.md:
--------------------------------------------------------------------------------
1 | # Summary
2 |
3 | * [Introduction](README.md)
4 | * [緣起](beginning.md)
5 | * [事前準備](prepare.md)
6 | * [實際案例](case.md)
7 | * [資策會出身前端工程師](case/case1.md)
8 | * [政大商科自由譯者](case/case2.md)
9 | * [四大工科大二學生](case/case3.md)
10 | * [財務會計](case/case4.md)
11 | * [資管碩畢](case/case5.md)
12 | * [政大俄文畢業](case/case6.md)
13 | * [新鮮人工程師](case/case7.md)
14 |
15 |
--------------------------------------------------------------------------------
/beginning.md:
--------------------------------------------------------------------------------
1 | # 緣起
2 |
3 | 有天在ptt `Soft_Job`版我看到了一篇文章
4 | [[情報] 免費程式入門教學(高雄)](https://www.ptt.cc/bbs/Soft_Job/M.1445658439.A.7DE.html)
5 | 內容大意是他希望能帶領一些外行人能夠更快速的入門寫程式
6 | 於是願意在高雄提供免費的程式入門教學,任何人都可以報名
7 |
8 | 我第一次看到的時候就覺得能這樣做很厲害,畢竟這要付出許多時間與精力
9 | 當初就有想說自己要不要也在台北開一場,但只是想想便作罷
10 | 一個半月後,再次看到丁丁大的發文,發現原來已經過一個半月了
11 | 經過這些日子的磨練,我覺得我對一些事情的掌握度已經提昇了
12 | 再加上自己這陣子其實下班之後沒什麼事情,於是多出許多空閒時間
13 | 最後終於下定決心做這件事
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 台北免費程式教學心得分享
2 |
3 | [gitbook - 台北免費程式教學心得分享](https://aszx87410.gitbooks.io/programming-tutorial-review/content/)
4 |
5 | 可以先看我po在ptt的 [[情報] 免費程式入門教學(台北)](https://www.ptt.cc/bbs/Soft_Job/M.1445780425.A.9C6.html)
6 | 大意就是,我願意在台北提供幾乎免費(請一頓晚餐就好)的程式入門教學
7 | 不限身分及資格,只要你覺得你對寫程式有興趣都可以報名
8 | 無論是前端、後端還是Mobile,我都略懂略懂,所以可以大概教一些基礎
9 |
10 | 其實我也是因為受到其他人的啟發,才決定做這件事情(可參考原文或是緣起),在決定要做這件事之前有先寫信詢問一下相關注意事項,丁丁大給了我一些實用的建議。
11 |
12 | 文章po出以後迴響不錯,陸陸續續收到十幾封信,各個的背景都不一樣。
13 | 在開始之前,我就想說如果真的做了,我一定要寫下一些記錄
14 | 第一是可以幫自己做個記錄
15 | 第二是假設以後也有人想要做同樣的事情,這邊就有許多寶貴的資源可以參考,畢竟這些都是我的真實經歷
16 | 第三是我會把每個來諮詢的人都問題與我的回答都放在這裡,若是我有哪些地方有講錯的話,大家可以直接糾正我
17 |
18 |
19 | 這本書分成四個章節
20 |
21 | 1. 緣起
22 | 2. 事前準備
23 | 3. 實際案例
24 | 4. 心得分享
25 |
26 | 希望這篇能夠幫助到也想一起發起免費入門程式教學,但懷疑自己能力不足、或是想知道更多細節的人。
27 |
28 |
29 | ## Contributing
30 | 如果你對於我所講解的內容有所疑惑,或是有更好的解答,又或是覺得我講錯了,歡迎直接開issue針對裡面的內容討論。
31 | 感謝幫忙~
32 |
33 |
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 aszx87410
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/case/case1.md:
--------------------------------------------------------------------------------
1 | # 1. 資策會出身前端工程師
2 |
3 | ## 背景介紹
4 | 資策會出身,上了半年的課,課程時間是週一到週五,朝九晚五,感覺可以學到滿多東西的。上課內容前後端都包,後端是C#,前後端比重大概一比一。
5 |
6 | 結業之後到台北找工作,目前算是專做前端,一開始是負責換一些圖,現在則是debug、新增一些小功能,用的是jQuery比較多。
7 |
8 | ## 疑問與回答
9 | ### RWD
10 | 我心目中的RWD就是用css去動態調整一些寬高比例之類的,但因為他們公司的RWD有極大部分仰賴javascript,難怪他會覺得奇怪,我也覺得奇怪...
11 | 不知道是真的這樣,還是這家公司比較奇特?
12 |
13 | ### jQuery事件概念
14 | 令人困擾的 function(e)的e到底是什麼?window.event又是什麼?後來我就解釋說那個e是因為除了事件本身,要帶一些額外資訊,像是click的事件,如果你要抓他是點擊哪個位置怎麼辦?又沒有一個單獨一個事件可以做這件事情,所以一起算在點擊裡面,而這個e就會包含其他一堆有的沒有的數字,可以自己log出來看看,就會比較了解。
15 |
16 | window可以想成是你的整個畫面、整個瀏覽器,所以一些範圍比較大的東西都跟window有關,順便有提到全域變數就是會依附在window上面
17 |
18 | ### 基本程式概念複習
19 | 變數、判斷式、迴圈、函式
20 |
21 | ### 新技術討論
22 | sass/scss/less的差異以及起源
23 | 我解釋說css在以前不被注重,一直到現在越來越被當成是一回事,現在寫scss其實就跟寫程式沒什麼兩樣,能夠幫助我們更快的寫出好的css。sass跟scss的差異在於大括號,還有scss跟css相容。less我就不熟了。
24 |
25 | Single Page Application
26 | 我有稍微講了一下backbone, angular, ember這三套都是在做差不多的事情,就是把前端的網頁變成跟一個桌面軟體、一個app差不多,所以前端也會有mvc,前端也會有router要去管理
27 |
28 |
29 | ## 相關資源
30 | 1. [Learn to Code HTML & CSS](http://learn.shayhowe.com/html-css/)
31 | 2. [高雄前端社群 -前端資源懶人包](https://docs.google.com/document/d/13nK_XY9u5uIleTpSCw88lMupzgCSwXd6j6je44eLhMQ/edit?pli=1)
32 | 3. [學習html與css](http://marksheet.io/)
33 | 4. [前端工程——基础篇](https://github.com/fouber/blog/issues/10)
34 | 5. [CSS 最核心的几个概念](http://www.jianshu.com/p/3a18fcd9fcda)
35 | 6. [为JavaScript程序员准备的10本免费书籍](http://info.9iphp.com/10-free-javascript-books-for-beginners/)
36 |
37 |
--------------------------------------------------------------------------------
/case/case2.md:
--------------------------------------------------------------------------------
1 | # 2. 政大商科自由譯者
2 |
3 | ## 背景介紹
4 | 四大商科畢業,英文能力極佳,目前當自由譯者,以接案、翻譯為主要收入來源。想要幫自己開拓新的技能或是創業,覺得程式這一塊會是未來趨勢,因此想知道一些程式相關的背景
5 |
6 | ## 疑問
7 | ### 各式各樣名詞解釋
8 | 這邊直接先丟講解全盤的觀念,包括各個程式語言之間的差異與應用的領域。
9 |
10 | 像是手機應用程式就分兩塊(自動忽略Windows phone XD),iOS就是Objective C跟Swift,Android就是Java,近期也會有用javascript之類的寫出手機程式,這是native跟hybrid的區別。
11 |
12 | Ruby是一個程式語言,Rails是一個框架,搭配在一起之後就可以寫網頁,因為提倡的概念:「慣例優於配置」,所以減少許多開發流程,因為很多東西都在背後被做掉了。而現在又講究快速開發,因此Rails就爆紅了,到現在還是很紅。總之rails就是快速開發很厲害。
13 |
14 | Python跟ruby很像,兩個只需要會一個就好,而python+django其實就跟ruby+rails是差不多的東西,但是rails的資源應該會比較多。
15 |
16 | php也是後端語言,搭配一個叫做laravel的框架是目前最夯的寫法,而laravel許多概念都與rails相同,所以php+laravel就跟ruby+rails差異不大,許多共通的概念。
17 |
18 | node.js則是近期興起的一個東西,主要是因為可以讓javascript脫離瀏覽器,脫離之後就可以做許多事情,現在甚至可以做到跨平台,可以寫桌面應用、app、後端、前端,甚至連硬體有些也可以用javascript做出一些功能。javascript跟java沒什麼關係。
19 |
20 | Java跟C++就算是比較「中規中矩」的語言,所以才會被本科系拿來當做初學語言,因為可以了解一些計算機的基礎概念。
21 |
22 | 網頁分成前端跟後端,前端是html, css, javascript,後端則是看你選擇什麼語言而定。前端就是你看的到的,後端就是背後處理商業邏輯之類的。
23 |
24 | ### 工作機會
25 | 在我看來,後端最多機會的就是php跟rails,這兩個職缺隨便找都有
26 |
27 | ### 工作需要會的技能
28 | 我直接開alphacamp跟inside上面的職缺跟課程內容會學到的東西給他們看,然後講解各個名詞大概是什麼,要找工作大概需要會什麼。
29 |
30 | ### 非本科與本科系的差異
31 | 大致講解資工系必修在學些什麼,像是計算機概論、程式語言、計算機組織、演算法與資料結構、線性代數、作業系統等等
32 |
33 | ### 學習方向與資源
34 | 以工作為導向的學習,最直接的方法就是:上網找職缺需要的工作內容。
35 | 然後再依據這一份內容自己訂定學習計畫,把上面提到的都弄懂了,也差不多可以開始找工作了。
36 |
37 | 像是這個case英文能力極佳,很推薦國外的開放式課程,像是cs50據說就很棒(我自己是沒上過),英文能力好的話資源多超多,國外教學文章一定比中文的多,所以想學什麼就學什麼。
38 |
39 |
40 | ### 資源整理
41 | 1. https://zh-tw.coursera.org/
42 | 2. https://cs50.harvard.edu/
--------------------------------------------------------------------------------
/case/case3.md:
--------------------------------------------------------------------------------
1 | # 3. 四大工科大二學生
2 |
3 | ## 背景介紹
4 | 大二學生,之前修 python 的課以後就對寫程式很有興趣,那堂課高分過關。
5 | 之後打算修一些資工、電機系的課。
6 |
7 | ## 疑問
8 | ### 資工系的課在修什麼
9 | 我依據我自己的經驗以及修過的課,給了他一些方向
10 |
11 | 1. 計算機組織與組合語言(台大資工)
12 | 計算機組織就是更深一點的計算機概論,把之前講到的那些東西都講得更深更難,例如說 cache 就是跟你講有什麼L1, L2 然後是怎樣做到的,採取的方法是怎樣,或是跟作業系統、編譯器也有講到一點,因為課程名稱有組合語言,所以作業很多都是寫組語,用 online judge 的方式,就是把程式碼在網站上submit,系統就會跟你說對或是錯、用了多少時間,還可以看排名,十分有趣。
13 |
14 | 2. 計算機組織與結構(台大資管)
15 | 其實課程內容跟資工的那門課很像,但這門課比較多是在講一些理論的東西,實作部分比較少,也是有組合語言的作業,但只有一兩次而已,其他都是在講計算機組織的東西。
16 |
17 | 3. 演算法與資料結構
18 | 這部分我自己沒修過,但因為高中的時候比過程式競賽所以略懂略懂,我只跟他說修這門課你人生應該會很精彩。
19 |
20 | ### 機器學習
21 | 這部分其實我也不是很懂,我只大概講了一個「推薦系統」的 case,例如說在資料庫裡面你發現大部份人買A的時候也會買B,你就可以推測說買A的人應該也會喜歡B,因此推薦B給買A的人。
22 |
23 | 不過這背後有更多更多的數學模型跟統計相關知識需要學習,我完全不懂所以也無法多講。
24 |
25 | ### 組合語言
26 | 與起講解什麼是組合語言,不如直接拿組合語言的程式碼給他看,於是我就讓他看一段我以前寫的組合語言的code,稍微解釋一下`mov`, `cmp`, `jeq`這些指令所代表的意義,還是很簡單地講述暫存器的概念,就把它當成是記憶體的一塊位置就好。
27 |
28 | 這邊也有稍微提到逆向工程,把原本的執行檔反組譯成組合語言,再去trace code最後分析出一些資訊。例如說常見的破解版軟體、序號產生器之類的原理。
29 |
30 | 像是序號產生器就是反組譯驗證序號的那一塊程式碼,理解以後根據規則寫出可以符合規則的序號產生器。(這邊其實我也不是很熟,如果有講錯的話麻煩大家糾正)
31 |
32 | ### 指標 pointer
33 | 我提到在C裡面有一種東西叫做「指標」,通常初學者在這邊會死一半以上。
34 |
35 | 我們一般的變數所存的資訊是「值」,指標這種特別的變數,所存的資訊是「記憶體位置」。要理解這個概念就必須知道說你宣告一個變數,背後的行為是什麼。
36 |
37 | `int a = 50;`
38 | 背後就是系統分配給`a`這個變數一個記憶體位置`0x66`(舉例用),並且在裡面放入`50`這個值。
39 |
40 | 在C裡面,用`&`取出一個變數的記憶體位置,所以你`printf("%d", &a)`會是`0x66`。
41 |
42 | 接著指標登場了,我們用`int *ptr`,前面加個`*`表示說`ptr`是一個指標,接著`ptr = &a`,讓`ptr`「指向」`a`的記憶體位置,也就是`0x66`。
43 |
44 | 然後我們讓`*ptr = 30`,指標前面加個`*`代表取值的意思,所以`0x66`這塊記憶體的值會等於`30`,最後`printf("%d", a)`,就會出現30。
45 |
46 | 我還講了指標跟陣列的關係以及`function pointer`,這邊有興趣的可以自己去查詢。而且我也不是很會,所以無法講太多XD
47 |
48 | ### 推銷mac時間
49 | 他問我說:你覺得mac怎麼樣?
50 | 然後我就講一堆mac的好處,順便跟他說如果你不用mac,也要會基本的 linux,反正你遲早要碰到的。
51 |
52 | 稍微跟他介紹ubuntu作業系統。
53 |
54 | ### 遊戲 unity
55 | 他問我說想做遊戲的話呢?
56 | 我說現在幾乎都是用一套叫做unity的遊戲引擎在做,第一是因為跨平台,第二是因為他把許多「輪子」都做好了,你不必自己重複造輪子。
57 |
58 | ### 職涯規劃
59 | 他說他第一志願是鼎鼎大名的群暉,我跟他說那你把資工系必修的那些資料結構、演算法、計算機組織與結構、作業系統跟C都練熟,就差不多了。
60 |
61 |
62 | ## 相關資源
63 | 1. [C - Function Pointer](http://godleon.blogspot.tw/2008/01/c-function-pointer-function-pointer.html)
64 | 2. [Function Pointer:(指向函數的指標)](http://computer-learning-note.blogspot.tw/2013/08/pointer-to-functionaka-function-pointer.html)
65 | 3. [演算法筆記](http://www.csie.ntnu.edu.tw/~u91029/)
66 | 4. [語言技術:C 語言](http://openhome.cc/Gossip/CGossip/)
--------------------------------------------------------------------------------
/case/case6.md:
--------------------------------------------------------------------------------
1 | # 政大俄文畢業
2 |
3 | ## 背景
4 | 政大俄文畢業,之後發現自己對數理與邏輯類的東西不排斥,想踏入前端工程師的領域。
5 |
6 | ## 疑問
7 |
8 | ### 該用什麼寫網頁?寫完怎麼跑?
9 | 其實網頁(html檔)就跟一般的文字檔差不多,只是有著固定的格式而已,所以你把這個檔案拿去放到記事本裡面也可以開,這邊推薦一個文字編輯軟體:[sublime](http://www.sublimetext.com/)
10 |
11 | 開啟的話,把檔案丟到瀏覽器上面就可以開了
12 |
13 | ### html, css基本教學
14 | html就是一個網頁的結構、內容,css就是外觀、裝飾
15 |
16 | ``` html
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | ```
25 |
26 | 上面這是一個很基本的html架構,最外面用`html`標籤包起來,`head`裡面放一些資訊,`body`裡面才是你真的網頁的東西(使用者看到的東西)。
27 |
28 | 其實html就是用許多標籤來表示出有結構的內容,若是覺得html不太直覺,可以先參考以下例子:
29 |
30 | ``` xml
31 |
32 |
33 | peter
34 | peter@gmail.com
35 | 1234
36 |
37 |
38 |
39 | nick
40 | nick@qq.com
41 | 2222
42 |
43 |
44 | ```
45 | 儘管我沒有解釋上面這段是什麼,但是從那些`標籤`跟`內容`就可以猜測出這份文件大概是在做什麼,就是會員的一些資料等等。
46 |
47 | html也是一樣,差別在於`標籤`的種類不太一樣而已。
48 |
49 | 這邊簡單介紹了一些html的元素,像是`div`, `span`, `a`, `ul`
50 |
51 | css的話就是對元素裝扮,弄成自己想要的樣子
52 | 那要怎麼知道對哪一個元素?就是靠我們的`選擇器`
53 |
54 | ``` css
55 | #intro{
56 | color: red;
57 | }
58 |
59 | .block{
60 | color: yellow;
61 | }
62 | ```
63 |
64 | 前面加上`#`表示你要選擇的是id,`.`代表class
65 |
66 | 這邊就講一些html跟css的基礎跟需要注意的事項,這邊我就不再贅述
67 | 有興趣的可以自己去找教學來看
68 |
69 | ### 很多「框架」是在做什麼?例如說現在很紅的React是什麼?
70 |
71 |
72 | 我們在寫程式的時候,不太可能每次都「自己造輪子」,我們會傾向拿一些現有的資源、別人已經幫你開發好的功能,再以「這個東西」為基礎,開發出我們想要的功能。「這個功能」就是所謂的框架,它已經幫你完成部分功能,並且跟你說:「html應該放這邊喔!」、「js程式碼應該這樣寫喔!」,定義好一些規則,你就照著那些規則下去開發。
73 |
74 | 那其實很多框架的目標跟可以做的事情都是一樣的,只是看你選擇哪一套框架而已。每一套框架都有各自的「規範」還有定義需要遵守。
75 |
76 | ### 新創公司的好與壞
77 | 好處就是組織結構扁平、溝通流暢、風氣可能會比較開放
78 | 壞處就是薪資待遇可能不會很好,公司有倒掉的風險
79 |
80 | 至於選公司可以從面試的時候問一些問題更了解
81 | 1. 若是錄取以後會負責的項目
82 | 2. 公司目前在用的技術有哪些
83 | 3. 公司的流動率高不高
84 | 4. 目前專案進行的模式為何
85 |
86 | 公司環境也是滿重要的一點,選一個自己覺得舒適的辦公室也是很重要的事
87 |
88 |
89 | ## 資源整理
90 |
91 | 1. [Learn to Code HTML & CSS](http://learn.shayhowe.com/html-css/)
92 | 2. [高雄前端社群 -前端資源懶人包](https://docs.google.com/document/d/13nK_XY9u5uIleTpSCw88lMupzgCSwXd6j6je44eLhMQ/edit?pli=1)
93 | 3. [學習html與css](http://marksheet.io/)
94 | 4. [javascript教學簡報](https://drive.google.com/folderview?id=0B-a_eyF__oG6b2owS2ltQ21pX2M&usp=drive_web)
95 | 5. [Sublime Text 全程指南](http://zh.lucida.me/blog/sublime-text-complete-guide/)
96 | 6. [我的 Coding 學習計畫:一天一個,用 180 天架 180 個網站!](http://buzzorange.com/techorange/2013/08/01/i-am-making-one-website-a-day-for-180-days/)
97 |
--------------------------------------------------------------------------------
/case/case4.md:
--------------------------------------------------------------------------------
1 | # 4. 財務會計
2 |
3 | ## 背景介紹
4 | 剛畢業一兩年,在某間公司當財務會計,平日很忙,只有假日才有空學一些新東西,覺得寫程式好像不錯所以突然想學,但是不知道從何開始。
5 |
6 | ## 疑問
7 | ### 前端工程師與後端工程師差別
8 | 前端就是你看得到的那些畫面,後端就是你看不到的、背後的商業邏輯。
9 | 舉例來說,你去Google看到的搜尋畫面,就是前端工程師的範疇,當你點下「搜尋」以後,要怎麼做到「搜尋」這件事情,就是後端工程師要去思考的了。
10 |
11 | ### 自學coding如何開始?該如何找資源?
12 | 他說他有用過[codecademy](https://www.codecademy.com/),我也推薦這個網站與其他的教學網站,接著帶他看了一遍這上面的課程,稍微解釋每一個類別是什麼:
13 |
14 | 1. html, css, javascript
15 | 這些都是拿來寫網頁的(我們先忽略javascript與node.js,避免一次吸收太多會混亂),html就是網站的「內容、骨架」,css就是網頁的「外觀、衣服」,所以一個網站的美觀與否通常都是由css決定的,只要換css就可以幫網頁換一件衣服,會有不同的風格。
16 | javascript是在網頁上面寫程式碼,例如說你要跳一個視窗、做一個跑馬燈效果,就是他來負責。
17 |
18 | 2. jQuery
19 | 一個js的`library`,函式庫,就是假如你原本用js寫要十行的程式碼,jQuery幫你包裝好以後,現在只樣兩行就能達成同樣功能。
20 |
21 | 3. php
22 | 後端的程式語言,處理一些商業邏輯之類的行為。
23 | 假設妳現在有一個「商品介紹」的頁面,那就是html可以搞定的,但是你今天若是要加上「購物車」的功能,就必須有後端伺服器。
24 |
25 | 4. python, ruby
26 | 這邊我不太知道怎麼介紹腳本語言,所以我簡單帶過,然後講一下ruby搭配rails可以快速開發網站。
27 |
28 | 5. rails
29 | 就是ruby的一套framework,這邊我也不太知道怎麼描述「框架」這個概念,所以我說:「框架跟程式庫有點像,一樣是事先幫你包裝好許多東西,你只要照著規則走,就可以事半功倍,因為很多事情框架都幫你做好了」
30 |
31 | 6. API
32 | 簡單來說就是提供給別人的程式接口,像是現在許多網站可以用臉書登入,你可以想成是臉書提供了一個「API」,一個可以讓其他工程師使用的接口,工程師把自己的網站接上這個接口之後,就可以跟臉書所提供的登入功能互通,於是就可以用臉書登入了。
33 |
34 | 7. angular
35 | js的framework,跟前端有關的。這邊我簡單帶過而已。
36 |
37 | 8. command line
38 | 在 windows 底下叫做「命令提示字元」,mac 底下叫做「終端機」,可以用指令完成許多操作,例如說簡單的讀寫檔案、新建資料夾都可以,工程師必備的技能之一。
39 |
40 | 9. sql
41 | 這跟資料庫有關,有後端的網站一定需要資料庫來儲存資料,那要怎麼查詢裡面的資料呢?這個時候就有一套已經規定好的語法格式,會有一些指令可以使用,例如說「我要帳號是aaa的會員的姓名、信箱」,翻成指令可能就是`select name, email from members where username='aaa'`
42 |
43 | 10. java
44 | 這邊我也簡單帶過,就說Java可以寫桌面應用、Android跟web後端
45 |
46 | 11. git
47 | 版本控制的軟體,程式開發的時候版本控制很重要,或是可以先簡單想成「備份檔案」。
48 | 假設今天一個網站要改版,但是要怕改版之後會爛掉,那當然要先備份起來,以往的作法可能是複製一份放在其他地方然後改檔名,但是自從`git`出現以後,它提供了更方便的指令來做版本控管這件事情。
49 |
50 | ### 如果想要有自己的作品,該使用哪個平臺?
51 | github,大家都把自己的作品放在上面給大家看
52 |
53 | ### 如何想轉職,怎麼選擇好的軟體公司?
54 | 1. 看工作內容
55 | 2. 看公司福利
56 | 3. 看面試時候的公司環境
57 | 4. 上網查詢公司相關資訊
58 |
59 | ### 程式跟數學的關係?
60 | 有些程式不需要數學,例如說今天你要寫一個很簡單的購物車,你需要會數學嗎?不用!
61 | 但是今天如果你想加一個「推薦系統」,就像是「你可能也會喜歡、其他人也瀏覽過...」的這種功能,你就需要數學了。因為背後都是一些數學模式在做這些事情。
62 |
63 | 或是講聲音辨識跟影像辨識好了,背後就是一堆數學模型跟公式,你要怎麼把聲音轉化成數字?要怎麼把背景雜訊去掉(降噪)?要怎麼從一段音檔裡面提取出一段特徵值?要怎麼跟其他的音檔做比較?這背後都是一堆數學。
64 |
65 | ## 相關資源
66 | 1. [codecademy](https://www.codecademy.com/)
67 | 2. [codes school](https://www.codeschool.com/)
68 | 3. [tut+](http://tutsplus.com/)
69 | 1. [Learn to Code HTML & CSS](http://learn.shayhowe.com/html-css/)
70 | 2. [高雄前端社群 -前端資源懶人包](https://docs.google.com/document/d/13nK_XY9u5uIleTpSCw88lMupzgCSwXd6j6je44eLhMQ/edit?pli=1)
71 | 3. [學習html與css](http://marksheet.io/)
--------------------------------------------------------------------------------
/case/case5.md:
--------------------------------------------------------------------------------
1 | # 5. 資管碩畢
2 | ## 背景介紹
3 | 資管所畢業,但因為是管理組所以對程式沒那麼熟悉,最近工作上會用到php,所以想要了解php相關的東西。有寫過asp。
4 |
5 | ## 疑問
6 |
7 | ### php簡單介紹
8 | 因為有學過asp,所以php這邊的簡單介紹還滿順利的,基本上php跟asp都是在做同一件事情。會需要asp跟php是因為,我們需要一些「動態」的東西,例如說使用者登入以後都會有個歡迎頁面,「XXX,你好!」,如果我們純粹只用html,是沒有辦法達成這樣的功能的,因為html是靜態的,輸出的內容永遠都一樣。這個時候我們就會需要php,動態針對不同的使用者輸出不同的內容。
9 |
10 | ``` php
11 |
12 | $username = "peter";
13 | echo "你好,".$username
14 | ?>
15 | ```
16 |
17 | ### php流程控制、迴圈
18 | 其實與c#大同小異,最大差別在於「型態」
19 |
20 | c#屬於`靜態型別`的語言,你在宣告變數的時候需要指定型態;而php屬於`動態型別`,不需要指定型態就可以使用。
21 |
22 | 要特別小心的是在做整數跟字串相加的時候有可能會出現問題。php屬於`弱型別`,所以會自動做型別轉換。
23 |
24 | ps. 這邊發現我當時有點小講錯,把靜態動態與強弱弄混了,可參考[Static Typing, Dynamic Typing, Strong Typing, Weak Typing](http://swaywang.blogspot.tw/2013/04/static-typing-static-typetype.html)
25 |
26 | 至於流程控制、迴圈的程式碼都跟其他的差不多
27 | ``` php
28 | if($score>=60){
29 | //pass
30 | }else{
31 | //fail
32 | }
33 |
34 | for($i=0;$i<10;$i++){
35 | //...
36 | }
37 | ```
38 |
39 | ### php函式、陣列
40 | 其實也都大同小異,但php的陣列比起c#較為自由
41 | index可以用字串來當,也不用事先指定大笑
42 | ``` php
43 | $arr = array();
44 | $arr[0] = 10;
45 | $arr["hello"] = "world";
46 | ```
47 |
48 | 函式的話因為滿像的所以就沒講了
49 |
50 | ### 如何與資料庫連結?
51 | 一般在使用資料庫你會到一個後台去下指令,然後就會有結果跑出來。
52 | 在php裡面,有提供內建的函式去做這件事情。
53 | 1. 你把要查詢的query給php
54 | 2. php幫你拿去資料庫執行
55 | 3. php幫你把結果拿回來
56 | 4. 你在php裡面對這些結果做事情
57 |
58 | ```php
59 | //資料庫位置
60 | $db_server = "localhost";
61 |
62 | //資料庫名稱
63 | $db_name = "course";
64 |
65 | //資料庫管理者帳號
66 | $db_user = "username";
67 |
68 | //資料庫管理者密碼
69 | $db_passwd = "password";
70 | $mysqli = new mysqli($db_server, $db_user, $db_passwd,$db_name);
71 |
72 | //對資料庫連線
73 | if(!$mysqli){
74 | die("Connection error: " . mysqli_connect_errno());
75 | }else{
76 | $mysqli->select_db($db_name);
77 | $mysqli->set_charset("utf8");
78 | }
79 |
80 | //下指令
81 | $sql="select id from users where username=? and password=?";
82 | $stmt = $mysqli->prepare($sql);
83 | $stmt->bind_param("ss",$username,$password);
84 | $stmt->execute();
85 | $stmt->bind_result($id);
86 | if($stmt->fetch()){
87 | // 有資料
88 |
89 | }else{
90 | //沒資料
91 | }
92 | $stmt->close();
93 | ```
94 | ### session的觀念
95 | 由於`http`的連線是沒有狀態的,所以server要怎麼知道現在的request跟上一個request是同一個人?或是說,在你登入之後,server要怎麼知道你已經登入了?這個時候就要靠session這個東西。
96 |
97 | session可以儲存一些資訊,每次在發送request的時候就會帶著這段資訊一起到伺服器去,例如說今天你登入以後,server給你一張通行證,可能是一段看起來很像亂碼的英文加數字,你每次都帶著這通行證,server就知道說你是同一個人了。
98 |
99 | ### 簡單資訊安全觀念講解
100 | 第一個講到的是SQL injection,因為它的書上的教學所用的sql語法是用字串串接的方式,所以有可能會有一些資安上的疑慮,比方說你的程式碼原本是這樣:
101 | ```php
102 | //輸入帳號:peter
103 | //密碼:a123
104 |
105 | $sql =
106 | "select id from users where username = '" + $user + "' and password = '" + $pwd + "'";
107 |
108 | //會變成
109 | select id from users where username = 'peter' and password = 'a123'
110 | ```
111 |
112 | 那如果有人輸入一段很奇怪的帳號:`' or 1=1--`
113 | ```sql
114 | select id from users where username = ''or 1=1--' and password = 'a123'
115 | ```
116 |
117 | 由於`--`是註解的意思,所以後面的語法會被忽略
118 | `or 1=1`永遠成立,所以這個敘述永遠都會查到東西,也就是永遠都可以登入成功!
119 |
120 | 所以在php請愛用`mysqli`系列指令或是其他安全的作法。
121 |
122 | ### git是什麼?
123 | git是一個版本控制的程式,假如說我今天有個專案要加一個新功能,可是我怕程式碼改壞,這個時候通常都會先備份,以往作法可能是新開一個資料夾,複製一份,改壞的時候弄回去就好。
124 |
125 | 但是git出現以後就成為了工程師愛用的程式,可以很方便的完成多人協做開發跟版本控制這幾件事情。
126 |
127 | github是一個放git repo的平台。但不只程式碼,其實你想放什麼都可以。
128 |
129 |
130 |
131 | ## 相關資源
132 | 1. [codeschool](https://www.codeschool.com/)
133 | 2. [codecademy](https://www.codecademy.com/)
134 | 3. [台大新創企業媒合](http://ntuea.ntu.edu.tw/wearesomatch/)
135 | 4. [連猴子都能懂的git入門指南](https://backlogtool.com/git-guide/tw/)
136 |
137 |
138 |
--------------------------------------------------------------------------------
/case/case7.md:
--------------------------------------------------------------------------------
1 | # 新鮮人工程師
2 |
3 | ## 背景
4 | 剛畢業,之前寫過php,找工作則是找到寫asp.net的,所以現在在公司是寫vb.net,對node.js有興趣
5 |
6 | ## 疑問
7 |
8 | ### exports與module.exports的區別
9 | 可以參考這篇:[exports 和 module.exports 的区别](https://cnodejs.org/topic/5231a630101e574521e45ef8)
10 |
11 | 我這邊快速講一下,先看下面這個例子
12 | ``` javascript
13 | var a = {name: "peter"};
14 | var b = a;
15 |
16 | console.log(a); // peter
17 | console.log(b); // peter
18 |
19 | b.name = 'nick';
20 | console.log(a); // nick
21 | console.log(b); // nick
22 | /*
23 | b = a 這行是說「b存的內容是a所指向的記憶體位置」
24 | 所以當b的值變了以後,a也會跟著變
25 | 因為他們是同一塊記憶體位置
26 | */
27 |
28 | b = {name: "good"};
29 | console.log(a); //nick
30 | console.log(b); //good
31 |
32 | /*
33 | 現在把b指到一塊新的記憶體去,所以b改變了
34 | a依然維持原樣
35 | */
36 | ```
37 |
38 | 那其實上面提到的那些,你可以看成這樣
39 | ``` javascript
40 | module.exports = {};
41 | exports = module.exports;
42 | ```
43 |
44 | 其實這就跟上面的`a`跟`b`的例子是一樣的,也就是說,`exports`是指向`module.exports`,但要注意的是,實際上導出的是`module.exports`
45 |
46 | 所以你可以
47 | ``` javascript
48 |
49 | //方法1
50 | exports.name = "nick";
51 |
52 | //方法2
53 | module.exports.name = "nick";
54 |
55 | //這兩個方法其實是一樣的
56 |
57 | //或是你可以
58 | module.exports = {
59 | name: "nick"
60 | }
61 | ```
62 |
63 | 但是你不可以
64 | ``` javascript
65 | exports = {
66 | name: "nick"
67 | }
68 | ```
69 | 上面這例子就像一開始那個`b = {name: "good"}`一樣,你會把`exports`重新分配一塊記憶體並且指向,而原本的`module.exports`依然是`{}`,所以不會導出任何東西。
70 |
71 | ### express基本操作
72 | 我覺得沒什麼比看code更能快速了解一個架構,所以直接帶著看[ntucourse.info](https://github.com/ntu-infoplat/ntucourse.info)這個project,基本上就是分成:`views`, `models`, `service`, `routes`這幾塊。
73 |
74 | ### Promise
75 | 以往在javascript裡面進行非同步操作的時候可能會碰到幾個問題,例如說`callback hell`
76 |
77 | ``` javascript
78 | getUser(function(users){
79 | getFriend(users[0].id, function(friend){
80 | getPost(friend.id, function(post){
81 | console.log(post);
82 | })
83 | })
84 | })
85 | ```
86 |
87 | 那自從我們有了`Promise`以後,可以變這樣
88 | ``` javascript
89 | getUser().then(function(users){
90 | return getFriend(users[0].id);
91 | }).then(function(friend){
92 | return getPost(friend.id);
93 | }).then(function(post){
94 | console.log(post)
95 | });
96 | ```
97 |
98 | 就把原本的層層結構壓平了,你只要一直`.then`就好
99 | 但事實上這樣子的寫法依舊有些問題,而且也不是很好看
100 | 於是到了`es7`,目前有一項功能叫做`async/await`
101 |
102 | ```javascript
103 | async function getData(){
104 | var users = await getUser();
105 | var friend = await getFriend(users[0].id);
106 | var post = await getPost(friend.id);
107 | console.log(post);
108 | }
109 | ```
110 |
111 | 是不是很棒!
112 | 根本就是當做同步的程式碼來寫,只是前面多了一個`await`而已
113 | 可以這樣寫其實是因為ES6多一個東西叫做`generator`
114 | 想知道更多可以參考我之前寫過的:[[Javascript] Promise, generator, async與ES6](http://huli.logdown.com/posts/292655-javascript-promise-generator-async-es6)
115 |
116 | ### 其他framework
117 | 介紹了一下nodejs除了`express`以外還有`sails.js`,那這套其實就跟`rails`很像,就像是php有`laravel`一樣,這三套其實我覺得概念都滿相同的。
118 |
119 | ### React and React Native
120 | 就大概提一下React的基本概念,很多小元件組成一個大元件
121 | React Native可以用React的概念來寫native的mobile app
122 | 有興趣可以自己參考一些資料
123 |
124 | ## 資源整理
125 | 1. [nodejs包教不包會](https://github.com/alsotang/node-lessons)
126 | 2. [node入門](http://www.nodebeginner.org/index-zh-tw.html)
127 | 3. [七天學會nodejs](https://nqdeng.github.io/7-days-nodejs/)
128 | 4. [给 JavaScript 初心者的 ES2015 实战](http://gank.io/post/564151c1f1df1210001c9161)
129 | 5. [React Native 帶來的跨平台 mobile app 開發典範轉移](https://speakerdeck.com/coodoo/react-native-dai-lai-de-kua-ping-tai-mobile-app-kai-fa-dian-fan-zhuan-yi)
130 | 6. [ECMAScript 6入门](http://es6.ruanyifeng.com/)
131 | 7. [深入浅出ES6](http://www.infoq.com/cn/articles/es6-in-depth-an-introduction)
--------------------------------------------------------------------------------