[轉]180天做180個「網站」來學編程,今天是第115天
9 i# W2 \6 N% D1 H0 T: H( H/ c4 N "喜歡編程嗎?想學習編程嗎?是否還在為不是科班出身而猶豫?是否還在為找不到手把手的教程而彷徨?最近國外一位妹紙自學編程的故事,在程序員圈流傳開來。Jennifer Dewalt 之前是學藝術的,在學校時也沒上過任何「技術」課程。雖然如此,但決定通過在180天做180個「網站」來學編程。已經堅持 122 天了,寫了 122 篇博文記錄這些小項目,並且放在Github了。大家可以在第 115 天分享的博文中(中文版如下)看到是怎麼學習編程。"
- U6 j" d$ w8 t1 x8 @————————————————————
. \! `3 I% R# T我要在180天裡通過建立180個「網站」來學習寫程序。今天是第115天。
6 R' U. u5 y$ V1 e5 _3 f4個多月前,我決定要學學編程。/ s9 F8 L: Z4 ^5 p
請無視我以前沒有編程經驗,在學校也從來沒有上過任何「技術」課程。我決定要在180天裡建立180個「網站」,一天不落。; f9 _6 R+ F" T1 f/ i% L5 [: u) `
今天是第115天。! z, d3 s/ Z7 L) n1 m, t2 C
9 E$ N) ~4 z' s& k7 ~背景
/ b' J. F5 R( Z- t* R1 q4 y我是學藝術的。吸引我學習藝術的緣由是它可以探索人們如何向外界表達他們自己。我們穿什麼衣服,我們的興趣愛好,還有溝通方式。過去的日子裡我嘗試著用繪畫和雕刻來捕捉這種自我投影。
+ L1 I3 o. \ p. b0 i; _8 A然而如今是2013年,我們不再受制於物理媒介。我們有網絡!網絡很棒,因為它把過去阻礙我們溝通的屏障打破了。溝通的門檻如此低,以至於我們為了溝通和相互交流而被迫建立虛擬身份。/ {" E9 I" }, B
我覺得這種虛擬的交互太不可思議了,但我並不滿足於做旁觀者打打醬油。我想要建立起溝通的通道,使得這些交互成為可能。
* O r0 Y0 n6 p9 [8 _' E學習編程最好的途徑是什麼?冥思苦想了很長時間,我決定就他*的開始做吧。但是不能只是漫無目的地開始,我下決心堅持一種簡單而又嚴格的結構:
1 m5 p3 H6 o; w+ x9 \1. 每天建立一個網站,連續180天。
8 f$ [! n }' @2 H( {2. 每個網站必須要發一貼。+ U/ n, h5 R5 T6 \
3. 我寫的每句代碼必須在GitHub(開源)上公開,這樣大家都能看到。
0 |7 K. K }4 P6 k把自己學習中的錯誤和誤區都公開是很讓人沒面子的。但事實上,如果你想學習編程,你就要準備犯很多錯誤。不要認為僅僅因為你的代碼可能看起來有點二,就意味著應該停止編程。還有你不必成為某類人,你不必成為數學奇才,不必要任何預備知識,因為編譯器並不介意你蠢。你需要的只是敲下鍵盤。4 E0 o2 R, H$ i0 a& H' _8 F
不上速成營(bootcamp),不用參考書。當我決定了要編程,第一步就是解決如何著手的問題。有很多選項可供考慮。有無數課程可以學習,有無數速成營可以註冊,但是它們都不是我要的。我認為學習編程很像學習輪滑。你可能需要人幫你扶上溜冰鞋,但是獲得真正的技巧你得自己走兩步。
0 F$ v H0 K/ Q4 Q4 t; b- I我認為最好的學習方法就是解決實際碰到的問題。這就是我決定不去遵照課程和參考書的主要原因。通過遵循自己的路徑,我能夠以最符合邏輯的順序,也就是我恰好遇到問題的時候,處理新鮮概念和問題。當我遇到難題時,我就去Stack Overflow上搜索。如果我要邁出一大步,像開始一門新的語言或者平台,我只會找參考書做一下引導,到我能邁過去就可以了。
% u- C6 S+ a* [日復一日。在家工作的主意可不怎麼高明,因此我絕大多數編程是在SoMa的一個相當不錯的合夥辦公室。這裡提供我一個辦公桌,能夠給家裡打電話,除此之外,我還有免費的可樂喝,還有果凍豆吃。硬件方面,我用13吋的Macbook Pro,連接兩個顯示器,因為如果要說有什麼是我鍾愛的,那一定是大顯示屏。我桌上還有一個小Jambox揚聲器,晚間舞會上會用。
3 Z; P y/ K3 F- E我每星期的開始會寫一篇博客,總結一下上個星期的自我感覺。我每天把代碼推送到GitHub,部署當天的網站,然後發一個每日帖。做完之後,我通常會在讓網站上線前修正無數先前留下的bug和錯別字。目前這樣已經做了114次了。
8 u6 o$ g4 g, K! P從CSS到Javascript再到Rails。起初我的網站十分簡陋,一點html,一點css還有數行javascript。隨著時間的推移,它們變得越來越複雜。我做過遊戲,計算器,時鐘,還有傻喵星人。現在我十分愜意地使用CSS,流利地用javascript做開發。最近,我開始用Rails來建立動態網站,這樣可以讓人相互溝通,還可以創建個人檔案。用Rails編程超有意思,因為它允許我從做遊戲和玩具過渡到構建實際工具上。我不確定下一步接著嘗試什麼技術,或者項目最後我要用什麼平台,反正非常酷就是了。- L/ Y u/ n9 e2 h
這個項目還沒有一個清晰的路徑,讓我探尋那些能發揮我想像力的某種觀念。我要在下一步從事的工作似乎很大程度上受我當前正在從事的工作的影響。比我當初猜想的程度還要更甚。項目早期,我想製作一個很簡單的天氣app,我需要找到怎樣查詢天氣數據的辦法。出乎意料的是我對API開始產生興趣了。但是ajax不能工作在跨網域上,所以這讓我轉向jsonp。老實說,我從來沒有想到我會對JSONP產生興趣。到後來,因為支持JSONP的API極度缺乏,我突發靈感,事不宜遲開始工作在Rails上。
$ E0 f- f( T. @0 x6 r5 g6 P; L然而如果你只是。。。如何?當我告訴人們我正在做的,他們經常是立刻開始挑漏洞。我被問到過很多類似這樣的問題,「為什麼你不休息一天,然後明天做兩個?」我知道大家是好意,但是沒有任何漏洞,因為我定下的規則,要保證一天不漏。
. z5 q: i8 @4 `# B這個很難。每天做出新的東西很難。新概念的挖掘會枯竭,頭腦風暴模式到執行模式的切換不是無縫連接的。但是這個項目裡最難的部分,在某種意義上來說,是我每天都感到一敗塗地。走出去的每一個網站都是半成品。因為我是個完美主義者,重做或者擴展網站的誘惑力對我來說相當強。前進的路不是一直縫縫補補和東敲西打來完美它。前進的路應該是移步到下一個概念並做出來。
2 z: r% N$ k0 s o2 C3 n
Y% z3 d1 E5 y9 w0 k4 K- A& g+ M1 ?9 H( }, j2 A( |& c
網站
- y U& f* q9 PDay 114 Image Palette
# \) R/ l, Q8 J$ |0 x1 [- YDay 113 Window Master
$ T$ G A2 J: f4 B2 GDay 112 Check Sketch L: _# N8 V$ p7 v; T6 b$ R1 d
Day 111 Down the Weight
6 `) u7 I3 D" g5 b7 RDay 110 Effects
6 i- l$ `% T) u. tDay 109 ColorWorks
0 B3 J4 P: y: `Day 108 Algae Tank: p) ~" ?6 I) d* D
Day 107 Serious Question8 i( o5 Q. @7 U$ w, ?, D9 n
Day 106 Wish
' |" C7 C) x& T* R' F, { sDay 105 Infinite Descent
3 p. V: r! `) P ^( Y: zDay 104 Emergency Off
8 {2 @# m( T% A6 ^ ~+ @Day 103 Word Clock2 B5 [% n/ P. K- l- }- s
Day 102 Drying Paint
4 g( Q$ i- s5 FDay 101 Globulator
8 y7 \: E) f0 ]5 j( |) P9 q2 cDay 100 Song Machine3 A( d2 g# k6 e1 x$ c
Day 99 TOS
7 U: A+ m5 g0 i1 U* JDay 98 No One Is Watching! O6 i: a( a/ _+ u. f8 G0 Z) X
Day 97 Text to Braille/ }* M* B$ w {. I/ l* |1 K& _ O
Day 96 PostBored% f/ I- x) S5 \0 |* f, c: a# t
Day 95 Sparklers5 k0 v$ t1 A2 f0 K) v U
Day 94 Mastermind' `1 h* O" q, F# `" t$ U& W
Day 93 Swivel
/ j. [9 z7 S; j& J" l; ZDay 92 Typing Test, ~ ^0 R; J Y/ O0 P% G
Day 91 Pinwheel
) |: ~9 c/ w" \* q4 qDay 90 Skinny Drinks6 T! Q3 E8 k3 j {% |' B- ^
Day 89 Hourglass
. k5 [ g1 A3 G3 [- z- j& iDay 88 Quick Words
0 h4 d, s' N- K5 w* r# N/ u4 vDay 87 Countdown Clock- m3 g6 l2 F- a3 O; r
Day 86 Snare8 P- ~* {8 l: b P \8 @9 J
Day 85 Fishy Friend- U: \- P1 t, l8 K
Day 84 Liquor Likes
5 I @$ z3 o [& G6 A; B+ Q# y2 yDay 83 Hollywood" k# Z1 Y% R9 U" Q" Q3 y% J+ a& W( T1 k
Day 82 Text Scroller
; a0 u' F2 z4 k- Y% N) \, s. yDay 81 Capture: N7 g2 R9 Z) y+ S }
Day 80 Tiny Notes
0 F0 S ? ~. x6 Y2 i8 F3 g" D3 ZDay 79 Present Value Calculator% n5 ~$ `2 \0 t0 V4 P" X
Day 78 Hangman
9 \7 `, J1 V+ d% P3 dDay 77 YourSpace
" R; |8 W5 r0 qDay 76 PixShow
W) v; Z% t9 X- j( v. }Day 75 King of the Comments!
2 i7 `: e. U4 N# K( H' BDay 74 Page View Graph V, V ]: A7 O! w7 H. W8 _
Day 73 Keep It Up9 [' t! {- ]8 ^
Day 72 Make A Dude4 X7 b8 O$ ]) I- t6 c
Day 71 One Page
9 e7 T6 G8 u! M2 h; L) JDay 70 Click Counter
+ v4 b) ]* b) R! i- {- ^Day 69 Leave A Note1 L# u; T, y+ e! t7 g0 H
Day 68 Metronome! G$ i+ S$ K$ ]) p P
Day 67 World Time( ?9 `" D, o3 l( h: t6 D
Day 66 Alien Attack
( _& U* H/ _/ tDay 65 Fade
. i" O& q ]' D1 p& yDay 64 Screen Flood
" @8 @3 w0 ?' @; e$ d; iDay 63 Memory Orbs3 p0 P2 w& m' }
Day 62 Confused Robot
3 `0 ~9 A# _% r" y& jDay 61 Fix It
* ^) T! x; f2 @/ {* A$ F HDay 60 Fizz Buzz* t; U& u8 Q( m! q0 I/ g) \
Day 59 Bubble Wrap
& ~. i. y: ]+ L. H9 KDay 58 Fireworks
; p0 Y' g! j4 j$ b0 kDay 57 Bug Blaster3 G$ W O! {. R, X; O7 n1 U
Day 56 Hooray
# l! t/ J$ H* V( U- { b- fDay 55 Paratroopers/ V% `: X, p" t5 ~! i4 R; L+ M' Y
Day 54 Calculator
! Y, e p" v: pDay 53 Circle Invaders
4 ~) X' W+ b' z lDay 52 Etch A Sketch# }! v' L. a; d9 s* s6 G- k
Day 51 Memory, Y" B; f9 ^5 u6 b
Day 50 Color War Z7 K( c# p4 L$ N' i6 i
Day 49 Weather Now
! M2 a; _5 H& T3 {# H6 D7 zDay 48 Static
4 I- d9 D9 [% h. u6 aDay 47 PONG
# i/ T$ c' _ u: `8 r+ O& BDay 46 Snake! {) c# n3 w! t) N+ Z
Day 45 Color Perception Test
2 c- M4 E" o$ m* P% @Day 44 Analog Clock
" j6 X7 c0 k' w6 LDay 43 Seeing Spots
& F+ U f1 y+ m" P- n! LDay 42 Magnetic Poetry/ w$ f! D! j$ Y2 }3 U, n
Day 41 Light Bulb$ q1 z8 D0 m& e7 |; [
Day 40 Popping Bubbles
; M0 I1 ^4 L) x V/ M; ~% Y: fDay 39 Pixel Painter1 I! K2 j- E, j4 P& X
Day 38 Type Attack$ N. X2 }1 ]/ r
Day 37 Bouncy Balls
, ?5 |/ R; l$ Y" r' tDay 36 Little Dude+ i- O1 u) S) h# A2 N
Day 35 Buttons!
, o( v" [ B% _; D2 g0 SDay 34 Maneki-neko
% z7 @: t+ |$ `2 h" `/ C% bDay 33 Random Word Generator6 w; a! u' \9 v3 }; m
Day 32 Particle Waves
2 K$ D, ^% t6 a( J+ t: X6 c' N1 VDay 31 Endless Throbbers
0 O$ c( I; n# D C* |* S8 eDay 30 Silly Kitty
, M+ R9 `7 V/ }* c0 V( ]% C$ {( ?! v* LDay 29 Magic 8 Ball
3 E0 k5 H7 I2 Y8 C6 H- ]Day 28 The Click Challenge
# [. l+ ?" C2 B( vDay 27 Rain Maker* e# M l2 } B- X4 H7 \
Day 26 Simon
4 ]# Z$ g7 D! CDay 25 SCRAMBLED!( e2 ?) c2 e$ R* T7 h8 X
Day 24 What is Your Email』s Impact?
- s6 a/ y( e7 I7 |4 q# T7 \Day 23 Stopwatch3 n3 H. O U1 q
Day 22 Keep It Straight% Z/ N) ^1 _2 b: w, `& I" g0 e
Day 21 Teleprompter
- v$ C# S0 s! P/ n% \) SDay 20 Smushing Fireflies
# W# I+ G0 @* w ~) C. l- R4 S7 jDay 19 How Much of an SF Hipster are You?
; t& g3 S: ?9 T ~Day 18 Building Blocks
+ j- |# N! ~2 J/ }Day 17 Party Time?
1 p j) ~6 N# ~0 c- J- EDay 16 Caterpillar$ l+ }- Z) U- F B1 w" W
Day 15 Dropping Boxes; k9 s4 m9 X; t
Day 14 Tough Love
Y: M( Z& U" O# t" S" ^: U7 p5 SDay 13 Rock Paper Scissors
1 Y: n" R% h2 X; F! {! MDay 12 Dice Roller9 A$ D' k4 K6 j4 P+ W
Day 11 Color Clock
# v- P+ j) d9 t6 c" ADay 10 Sushi Jiggler
! p+ c. \, K7 j A2 h" eDay 9 Bouncing Ball
; D' @+ z9 @' h- YDay 8 More Drop Shadow!8 E3 j4 z) A& E, }& l( b% l: J0 {/ b
Day 7 Technicolor Boxes
' u; g% P8 F6 O2 j; k3 K# bDay 6 Day Tracker
0 Y E/ _* l. P- nDay 5 Secret Message
6 v0 d. t2 ^2 G$ s1 jDay 4 Paint a Mondrian2 z. t/ t7 X5 G5 V' H/ @: }" I
Day 3 Get a Random Color Background+ r" H% o; D, u" D3 g' M \
Day 2 Make a Deal!
% N, ~7 n% `$ ^. b0 JDay 1 Homepage
5 `7 o/ y: }% d* g
( x$ i+ r6 c7 J- D0 j7 {7 W6 F; s& k' ~: z" B* _
4 N' l U, ^9 D" k0 K! B2 i# C
|