[轉]180天做180個「網站」來學編程,今天是第115天% o ?+ W! `" M5 c
"喜歡編程嗎?想學習編程嗎?是否還在為不是科班出身而猶豫?是否還在為找不到手把手的教程而彷徨?最近國外一位妹紙自學編程的故事,在程序員圈流傳開來。Jennifer Dewalt 之前是學藝術的,在學校時也沒上過任何「技術」課程。雖然如此,但決定通過在180天做180個「網站」來學編程。已經堅持 122 天了,寫了 122 篇博文記錄這些小項目,並且放在Github了。大家可以在第 115 天分享的博文中(中文版如下)看到是怎麼學習編程。"
0 V& [5 D3 D% D# x————————————————————" g: Q2 B: l0 b5 y/ U
我要在180天裡通過建立180個「網站」來學習寫程序。今天是第115天。* G* f9 r! Y9 M: ]
4個多月前,我決定要學學編程。7 U. t8 d# J! k/ L/ y7 p
請無視我以前沒有編程經驗,在學校也從來沒有上過任何「技術」課程。我決定要在180天裡建立180個「網站」,一天不落。, }$ ^* d4 z8 f1 Y t
今天是第115天。
9 G7 t5 r4 n( v" a; S* [+ d% N' A6 r9 L1 s* Q& z# W
背景
; b u( y5 v( G: ^* Q/ |我是學藝術的。吸引我學習藝術的緣由是它可以探索人們如何向外界表達他們自己。我們穿什麼衣服,我們的興趣愛好,還有溝通方式。過去的日子裡我嘗試著用繪畫和雕刻來捕捉這種自我投影。4 C) j$ M" f m; r5 f
然而如今是2013年,我們不再受制於物理媒介。我們有網絡!網絡很棒,因為它把過去阻礙我們溝通的屏障打破了。溝通的門檻如此低,以至於我們為了溝通和相互交流而被迫建立虛擬身份。0 x$ g& t6 u2 U* l" M5 ]' M. K* n( e
我覺得這種虛擬的交互太不可思議了,但我並不滿足於做旁觀者打打醬油。我想要建立起溝通的通道,使得這些交互成為可能。* W' g7 G" `+ a
學習編程最好的途徑是什麼?冥思苦想了很長時間,我決定就他*的開始做吧。但是不能只是漫無目的地開始,我下決心堅持一種簡單而又嚴格的結構:
/ @3 B5 C. l7 L; U# L. ^9 V1. 每天建立一個網站,連續180天。
) ?4 g6 V; N9 `% G8 \2. 每個網站必須要發一貼。5 s' h9 R% u& w% }' I
3. 我寫的每句代碼必須在GitHub(開源)上公開,這樣大家都能看到。* A' G+ | w, a$ g& A) P
把自己學習中的錯誤和誤區都公開是很讓人沒面子的。但事實上,如果你想學習編程,你就要準備犯很多錯誤。不要認為僅僅因為你的代碼可能看起來有點二,就意味著應該停止編程。還有你不必成為某類人,你不必成為數學奇才,不必要任何預備知識,因為編譯器並不介意你蠢。你需要的只是敲下鍵盤。" m7 \" y$ a$ N& R/ W' ], ~# E
不上速成營(bootcamp),不用參考書。當我決定了要編程,第一步就是解決如何著手的問題。有很多選項可供考慮。有無數課程可以學習,有無數速成營可以註冊,但是它們都不是我要的。我認為學習編程很像學習輪滑。你可能需要人幫你扶上溜冰鞋,但是獲得真正的技巧你得自己走兩步。
* \/ Q6 \0 W q" h我認為最好的學習方法就是解決實際碰到的問題。這就是我決定不去遵照課程和參考書的主要原因。通過遵循自己的路徑,我能夠以最符合邏輯的順序,也就是我恰好遇到問題的時候,處理新鮮概念和問題。當我遇到難題時,我就去Stack Overflow上搜索。如果我要邁出一大步,像開始一門新的語言或者平台,我只會找參考書做一下引導,到我能邁過去就可以了。
; J$ z/ s( r2 j, w$ J: h" ?& h$ c5 M日復一日。在家工作的主意可不怎麼高明,因此我絕大多數編程是在SoMa的一個相當不錯的合夥辦公室。這裡提供我一個辦公桌,能夠給家裡打電話,除此之外,我還有免費的可樂喝,還有果凍豆吃。硬件方面,我用13吋的Macbook Pro,連接兩個顯示器,因為如果要說有什麼是我鍾愛的,那一定是大顯示屏。我桌上還有一個小Jambox揚聲器,晚間舞會上會用。. D5 z% D* P9 h7 C% h& O
我每星期的開始會寫一篇博客,總結一下上個星期的自我感覺。我每天把代碼推送到GitHub,部署當天的網站,然後發一個每日帖。做完之後,我通常會在讓網站上線前修正無數先前留下的bug和錯別字。目前這樣已經做了114次了。+ Q0 J: h. U6 @# x/ h, [
從CSS到Javascript再到Rails。起初我的網站十分簡陋,一點html,一點css還有數行javascript。隨著時間的推移,它們變得越來越複雜。我做過遊戲,計算器,時鐘,還有傻喵星人。現在我十分愜意地使用CSS,流利地用javascript做開發。最近,我開始用Rails來建立動態網站,這樣可以讓人相互溝通,還可以創建個人檔案。用Rails編程超有意思,因為它允許我從做遊戲和玩具過渡到構建實際工具上。我不確定下一步接著嘗試什麼技術,或者項目最後我要用什麼平台,反正非常酷就是了。
+ z$ l0 D1 C/ H1 @, U, r6 r這個項目還沒有一個清晰的路徑,讓我探尋那些能發揮我想像力的某種觀念。我要在下一步從事的工作似乎很大程度上受我當前正在從事的工作的影響。比我當初猜想的程度還要更甚。項目早期,我想製作一個很簡單的天氣app,我需要找到怎樣查詢天氣數據的辦法。出乎意料的是我對API開始產生興趣了。但是ajax不能工作在跨網域上,所以這讓我轉向jsonp。老實說,我從來沒有想到我會對JSONP產生興趣。到後來,因為支持JSONP的API極度缺乏,我突發靈感,事不宜遲開始工作在Rails上。
$ E* c5 H- u# A5 J然而如果你只是。。。如何?當我告訴人們我正在做的,他們經常是立刻開始挑漏洞。我被問到過很多類似這樣的問題,「為什麼你不休息一天,然後明天做兩個?」我知道大家是好意,但是沒有任何漏洞,因為我定下的規則,要保證一天不漏。7 a, v d8 k z8 K
這個很難。每天做出新的東西很難。新概念的挖掘會枯竭,頭腦風暴模式到執行模式的切換不是無縫連接的。但是這個項目裡最難的部分,在某種意義上來說,是我每天都感到一敗塗地。走出去的每一個網站都是半成品。因為我是個完美主義者,重做或者擴展網站的誘惑力對我來說相當強。前進的路不是一直縫縫補補和東敲西打來完美它。前進的路應該是移步到下一個概念並做出來。3 W2 ^1 ^3 m% @! n" J
- J" m' A# `( ~* L/ H; d
* I2 X! R# p& P網站
* d: k9 P3 C& w/ X. {1 F0 l# YDay 114 Image Palette2 I6 w! K' m$ X& ^4 E a* [# C; G
Day 113 Window Master' M/ G) X. p+ i
Day 112 Check Sketch
, E7 Q: }; y; N! F5 ADay 111 Down the Weight) X$ Y, }: U& q, {) p' Y
Day 110 Effects
- [, m0 |. G- j9 aDay 109 ColorWorks
4 l2 }+ O6 O }4 }+ m" CDay 108 Algae Tank/ R/ j' [, _8 k7 A
Day 107 Serious Question
6 x- H; e4 p4 W% D1 \Day 106 Wish
& S4 \, _$ W! z0 EDay 105 Infinite Descent/ b! }( u* M" W0 R/ R8 e Q
Day 104 Emergency Off3 G- I! b1 D1 F8 Y. b. o. M4 {
Day 103 Word Clock
: u+ }" c w1 [Day 102 Drying Paint
$ o8 v5 V0 t* e: LDay 101 Globulator+ a. N K* L- u- @* o
Day 100 Song Machine
6 u% U7 X- M# }8 qDay 99 TOS- i( \ Y: f6 Q7 P$ U
Day 98 No One Is Watching
; p! n) e. v" f1 `8 bDay 97 Text to Braille F$ [. ~3 ?' ]0 b2 k
Day 96 PostBored6 V% s8 U: @. S$ t4 p
Day 95 Sparklers3 g5 q% s, n, D
Day 94 Mastermind; X5 T, Z- m! V
Day 93 Swivel9 b7 U( p- X6 R9 O+ O$ V
Day 92 Typing Test9 J: e; m, c: ` t& s. u g5 E
Day 91 Pinwheel
0 }6 J' J/ i9 g0 TDay 90 Skinny Drinks, \) Q- D4 X5 k. ^2 U
Day 89 Hourglass
, u; _3 z7 N+ ?; sDay 88 Quick Words
" H6 i) X4 G4 l" X$ G2 F' pDay 87 Countdown Clock" x/ S3 p7 r! y- G
Day 86 Snare v! j" U8 T2 f- k
Day 85 Fishy Friend
. W' D& Q' i! O) W; @" r+ n& UDay 84 Liquor Likes) h* \/ B# |+ N0 C; }+ P# v
Day 83 Hollywood
# X/ r1 I3 f. `2 xDay 82 Text Scroller/ ?7 i) |0 l" N5 o& s$ Y
Day 81 Capture& F5 i, h1 K# B" W9 W8 m
Day 80 Tiny Notes2 C6 c7 v) I* w! ?; o' M2 E, ]) ~7 w
Day 79 Present Value Calculator
- @, k8 u6 d7 J" {. }1 nDay 78 Hangman. V* U% \( M# k9 S0 M
Day 77 YourSpace; H/ U2 Y( e0 l; w8 }" T" F: n, \
Day 76 PixShow
: |- b3 x* R: xDay 75 King of the Comments!# t" e& a; H0 {) j3 A8 Z# q
Day 74 Page View Graph: i& d: H- E" c( \. y3 u/ K
Day 73 Keep It Up
5 K+ b- G: b4 ], vDay 72 Make A Dude, W8 q. S. N; d3 F/ N! @: w, D
Day 71 One Page) p1 W& x! @2 |2 G0 e* G
Day 70 Click Counter
3 Q6 S. e/ O9 z: t, QDay 69 Leave A Note/ o5 G3 O" g" P1 r% [; [
Day 68 Metronome( G+ S p) X1 J
Day 67 World Time2 S* m0 T. \# |2 d- Y9 N
Day 66 Alien Attack1 k0 S: A! ?8 [6 p5 p
Day 65 Fade
: ]( }0 p9 T/ L5 z2 O& \Day 64 Screen Flood- b" D: H- [$ d' s( I. H3 R3 O% x
Day 63 Memory Orbs
- K. ]0 K/ a: U1 n: b2 L2 [Day 62 Confused Robot
! | U& G$ ^, A: J5 {8 b" yDay 61 Fix It) Y+ A% y, Q( u/ i4 |
Day 60 Fizz Buzz
( E% h! X s, a* h( \; `$ l ]Day 59 Bubble Wrap
# w; y5 H- f0 N1 r) ODay 58 Fireworks
) U! Z5 F% e$ \ PDay 57 Bug Blaster7 M. N" }$ z# c9 {
Day 56 Hooray1 |% I3 R8 ]+ ^2 v
Day 55 Paratroopers: \4 x! @; l4 S4 R
Day 54 Calculator" c6 u) |- U3 m2 m0 y
Day 53 Circle Invaders
! [ Q& M; c) K. W4 ADay 52 Etch A Sketch1 V, A, Q( L x! b- A5 M' U. a
Day 51 Memory7 s" h& k$ p: T& X8 A
Day 50 Color War
) {1 v7 U) g' xDay 49 Weather Now
. ~/ ~7 x% s$ g4 WDay 48 Static
. |$ q, g D0 n" q$ `/ sDay 47 PONG
7 P# R. O( F7 ]7 r0 W6 {: T; J' f! f- ^Day 46 Snake
2 D% s8 x c# Q* A: p: m$ r& y" D8 PDay 45 Color Perception Test
0 P d1 D3 k/ Q$ VDay 44 Analog Clock
1 r p/ O" ~1 B! Y, {- ~' TDay 43 Seeing Spots
6 n# v, Z# }, V7 W+ p; }Day 42 Magnetic Poetry
1 K9 j$ Q, O* i) b; eDay 41 Light Bulb
; S( d8 k4 a4 ?3 Z- `, _Day 40 Popping Bubbles" g9 e7 p6 {8 U% @
Day 39 Pixel Painter
; W+ N* {0 S( b+ V% HDay 38 Type Attack5 e* W% g8 b: P4 N% t$ p
Day 37 Bouncy Balls, s) F! g& \0 ~+ x2 {% v
Day 36 Little Dude8 }- A. d1 `6 b& p/ f/ ?) H+ e
Day 35 Buttons!
* ?" X) A8 |" F5 w9 r1 BDay 34 Maneki-neko. M3 H) T/ B* l$ {/ W
Day 33 Random Word Generator
- p& Y/ {1 z! Y7 R; s& {Day 32 Particle Waves8 T. h' }) a9 a2 H
Day 31 Endless Throbbers2 b& M" A& O# K+ V8 I
Day 30 Silly Kitty* q4 \3 E' ^& C: A0 `& j( Z
Day 29 Magic 8 Ball& Y0 Y! R( n* F4 ?
Day 28 The Click Challenge$ J$ j$ I! v' ]( Z, N' |, |
Day 27 Rain Maker
* d- k% s# T/ U' X9 Z; j0 [Day 26 Simon2 \* d' E4 u! r/ \7 w+ t! o6 k2 @
Day 25 SCRAMBLED!* Z# `% a% g+ \( k
Day 24 What is Your Email』s Impact?
( L( |% @1 H( ] D0 N3 mDay 23 Stopwatch q* l0 U" R; c( E1 {
Day 22 Keep It Straight$ s7 u* `9 ~/ z9 D: p7 a( x
Day 21 Teleprompter
# `8 |( Z$ s8 g. o' H' M; ^* C! Y' cDay 20 Smushing Fireflies
. r1 l6 L8 [: Y yDay 19 How Much of an SF Hipster are You?9 O M1 `5 e( Q* c- A$ N% H; h
Day 18 Building Blocks
( {* Y/ H f' g6 eDay 17 Party Time?
5 Q/ x& {; U% _ @6 k! M3 }Day 16 Caterpillar1 W8 v" @7 l7 [. m5 w3 r6 j
Day 15 Dropping Boxes
0 O. d |. R. o$ F; S3 BDay 14 Tough Love2 q- R6 \: H- n! N+ y- f- j
Day 13 Rock Paper Scissors* T9 a; t) A% X. l
Day 12 Dice Roller
# E, J: c3 R% U2 y' rDay 11 Color Clock
1 _; \8 s: E" l$ vDay 10 Sushi Jiggler
# k3 |8 ~2 |6 i* B6 mDay 9 Bouncing Ball( U: j. q% N0 n" \; B& c6 P
Day 8 More Drop Shadow!' Z, r3 k+ _( ?# @6 ~
Day 7 Technicolor Boxes1 D& ]; ~& o& b
Day 6 Day Tracker+ A# X2 s' h5 q$ ?0 p# m. T
Day 5 Secret Message
# i7 U4 l0 ~8 BDay 4 Paint a Mondrian
% e8 e- J7 K0 B. A: N" wDay 3 Get a Random Color Background
9 o, S4 K) V6 J9 C% c- G% O1 KDay 2 Make a Deal!! _. p6 g6 b5 c; G& z
Day 1 Homepage0 Q" p: `9 x9 r
. h% ? X! j) O) i' j2 `! U0 N; e
9 B- I( D' z* E# S# R- y0 k2 ^, I0 R0 M
|