[轉]180天做180個「網站」來學編程,今天是第115天
% e) ^* e! J0 ~8 Q3 v "喜歡編程嗎?想學習編程嗎?是否還在為不是科班出身而猶豫?是否還在為找不到手把手的教程而彷徨?最近國外一位妹紙自學編程的故事,在程序員圈流傳開來。Jennifer Dewalt 之前是學藝術的,在學校時也沒上過任何「技術」課程。雖然如此,但決定通過在180天做180個「網站」來學編程。已經堅持 122 天了,寫了 122 篇博文記錄這些小項目,並且放在Github了。大家可以在第 115 天分享的博文中(中文版如下)看到是怎麼學習編程。"
/ S: F, @ q# }' W% ^& x; R————————————————————
) i% z- A z9 e5 e1 L+ }我要在180天裡通過建立180個「網站」來學習寫程序。今天是第115天。
; h' E W+ o1 F% B4個多月前,我決定要學學編程。
( o! o1 K/ Z5 W5 n& }. ]請無視我以前沒有編程經驗,在學校也從來沒有上過任何「技術」課程。我決定要在180天裡建立180個「網站」,一天不落。# f8 M& V0 ^" g) p# V
今天是第115天。# f8 ?9 j5 H* I7 q5 x$ U! `( t
% U4 J; C" ~3 D
背景9 ]; ^. X4 l' F# z
我是學藝術的。吸引我學習藝術的緣由是它可以探索人們如何向外界表達他們自己。我們穿什麼衣服,我們的興趣愛好,還有溝通方式。過去的日子裡我嘗試著用繪畫和雕刻來捕捉這種自我投影。5 G; `; z8 @% @' P( Y
然而如今是2013年,我們不再受制於物理媒介。我們有網絡!網絡很棒,因為它把過去阻礙我們溝通的屏障打破了。溝通的門檻如此低,以至於我們為了溝通和相互交流而被迫建立虛擬身份。: W6 m' m) H3 ^' L6 E) E
我覺得這種虛擬的交互太不可思議了,但我並不滿足於做旁觀者打打醬油。我想要建立起溝通的通道,使得這些交互成為可能。
: |% k/ A% @1 C+ U, y6 {3 M學習編程最好的途徑是什麼?冥思苦想了很長時間,我決定就他*的開始做吧。但是不能只是漫無目的地開始,我下決心堅持一種簡單而又嚴格的結構:3 X9 M9 h) Y- x/ s9 o/ l" w
1. 每天建立一個網站,連續180天。3 w0 s% U+ q2 z, S# G# \
2. 每個網站必須要發一貼。; ]5 A( u7 H) R! x( I$ x5 {: G
3. 我寫的每句代碼必須在GitHub(開源)上公開,這樣大家都能看到。) \) m+ `0 c* Q0 O6 z; G+ o
把自己學習中的錯誤和誤區都公開是很讓人沒面子的。但事實上,如果你想學習編程,你就要準備犯很多錯誤。不要認為僅僅因為你的代碼可能看起來有點二,就意味著應該停止編程。還有你不必成為某類人,你不必成為數學奇才,不必要任何預備知識,因為編譯器並不介意你蠢。你需要的只是敲下鍵盤。
* f' p6 s2 G- Y1 d/ x1 a' m不上速成營(bootcamp),不用參考書。當我決定了要編程,第一步就是解決如何著手的問題。有很多選項可供考慮。有無數課程可以學習,有無數速成營可以註冊,但是它們都不是我要的。我認為學習編程很像學習輪滑。你可能需要人幫你扶上溜冰鞋,但是獲得真正的技巧你得自己走兩步。
6 R H+ f2 a/ ~8 J8 v我認為最好的學習方法就是解決實際碰到的問題。這就是我決定不去遵照課程和參考書的主要原因。通過遵循自己的路徑,我能夠以最符合邏輯的順序,也就是我恰好遇到問題的時候,處理新鮮概念和問題。當我遇到難題時,我就去Stack Overflow上搜索。如果我要邁出一大步,像開始一門新的語言或者平台,我只會找參考書做一下引導,到我能邁過去就可以了。) c5 A" P/ @+ g1 O- r
日復一日。在家工作的主意可不怎麼高明,因此我絕大多數編程是在SoMa的一個相當不錯的合夥辦公室。這裡提供我一個辦公桌,能夠給家裡打電話,除此之外,我還有免費的可樂喝,還有果凍豆吃。硬件方面,我用13吋的Macbook Pro,連接兩個顯示器,因為如果要說有什麼是我鍾愛的,那一定是大顯示屏。我桌上還有一個小Jambox揚聲器,晚間舞會上會用。
0 ]* @, T! f. t# C5 z$ @ t我每星期的開始會寫一篇博客,總結一下上個星期的自我感覺。我每天把代碼推送到GitHub,部署當天的網站,然後發一個每日帖。做完之後,我通常會在讓網站上線前修正無數先前留下的bug和錯別字。目前這樣已經做了114次了。; Z1 X3 p0 |; L3 z9 \' q# _! ?
從CSS到Javascript再到Rails。起初我的網站十分簡陋,一點html,一點css還有數行javascript。隨著時間的推移,它們變得越來越複雜。我做過遊戲,計算器,時鐘,還有傻喵星人。現在我十分愜意地使用CSS,流利地用javascript做開發。最近,我開始用Rails來建立動態網站,這樣可以讓人相互溝通,還可以創建個人檔案。用Rails編程超有意思,因為它允許我從做遊戲和玩具過渡到構建實際工具上。我不確定下一步接著嘗試什麼技術,或者項目最後我要用什麼平台,反正非常酷就是了。
1 e& p/ {/ R3 C" p這個項目還沒有一個清晰的路徑,讓我探尋那些能發揮我想像力的某種觀念。我要在下一步從事的工作似乎很大程度上受我當前正在從事的工作的影響。比我當初猜想的程度還要更甚。項目早期,我想製作一個很簡單的天氣app,我需要找到怎樣查詢天氣數據的辦法。出乎意料的是我對API開始產生興趣了。但是ajax不能工作在跨網域上,所以這讓我轉向jsonp。老實說,我從來沒有想到我會對JSONP產生興趣。到後來,因為支持JSONP的API極度缺乏,我突發靈感,事不宜遲開始工作在Rails上。- v8 Q8 o: d* f4 Z* X, e1 }
然而如果你只是。。。如何?當我告訴人們我正在做的,他們經常是立刻開始挑漏洞。我被問到過很多類似這樣的問題,「為什麼你不休息一天,然後明天做兩個?」我知道大家是好意,但是沒有任何漏洞,因為我定下的規則,要保證一天不漏。
/ j5 B9 m: c, U/ G2 R這個很難。每天做出新的東西很難。新概念的挖掘會枯竭,頭腦風暴模式到執行模式的切換不是無縫連接的。但是這個項目裡最難的部分,在某種意義上來說,是我每天都感到一敗塗地。走出去的每一個網站都是半成品。因為我是個完美主義者,重做或者擴展網站的誘惑力對我來說相當強。前進的路不是一直縫縫補補和東敲西打來完美它。前進的路應該是移步到下一個概念並做出來。3 B; i8 e! u* ]5 R" N& |4 h- \
- P9 j5 P& v6 v! a _) O' Y1 W0 L
- _2 m/ e, v6 N! g網站
9 L5 E4 l) n9 X5 Y3 y: HDay 114 Image Palette$ \8 t, T* n( T
Day 113 Window Master
3 q4 @9 X" |$ _* Z! C9 bDay 112 Check Sketch! ? c ]. }% s6 s6 }- k
Day 111 Down the Weight
+ N7 Y, O% x8 i" b" gDay 110 Effects' G" _- H+ [" F0 H1 F; V, p
Day 109 ColorWorks
0 o; q' ?, M v* V7 IDay 108 Algae Tank- A' u9 t* Y* @: u6 I! n
Day 107 Serious Question, K5 `" d. k I! I+ X; Q
Day 106 Wish
& v( _/ r, L) h* y$ o( b O) q# {Day 105 Infinite Descent7 `& m; Y! n! x8 V; R1 l
Day 104 Emergency Off- j& ~% \$ l. _- ]( I8 C- W
Day 103 Word Clock
2 v/ Z! _3 Z' c, \" t; }* tDay 102 Drying Paint$ Z5 g( ^ d- D& H/ {; x
Day 101 Globulator
# T, I+ D9 I r6 S+ E$ }Day 100 Song Machine
0 t2 f; ^, J4 R8 Y) }Day 99 TOS
5 I# k4 N% f9 y# g- N3 MDay 98 No One Is Watching
/ ?9 S; [5 d' z( D E' o6 WDay 97 Text to Braille; [- K, z* @; m% b
Day 96 PostBored$ C( T2 i* f! c' X) c8 K& }* R; E/ C
Day 95 Sparklers5 E) T! X7 l# c- {5 m" s9 m
Day 94 Mastermind% j# H) y; a2 a( V1 J
Day 93 Swivel- {9 ]6 m0 u- s0 |& B
Day 92 Typing Test
: O" C) ]! M, y9 S% oDay 91 Pinwheel& @ r; l* {4 B9 Q, A6 }( n% A9 J
Day 90 Skinny Drinks
- |/ K- Z/ h8 P. KDay 89 Hourglass' H% T0 Q# d$ n; ]/ i) @* F
Day 88 Quick Words0 E6 G& k, r9 G0 f
Day 87 Countdown Clock
: @9 i& D5 R1 m1 m) Y* oDay 86 Snare
4 y. X% |. g. N; J& |! GDay 85 Fishy Friend5 t# [' b$ Y/ l6 B: P& `
Day 84 Liquor Likes" I& O. y6 l8 A9 _: p
Day 83 Hollywood: W9 M7 r' l; h1 t2 P4 v7 T+ L
Day 82 Text Scroller
u' O6 @9 Y. m$ oDay 81 Capture
* @) p$ h; j2 FDay 80 Tiny Notes; x! b( }6 y z9 p( Y2 K, ~
Day 79 Present Value Calculator
0 N8 S, \* w1 \1 Z) ^4 m8 aDay 78 Hangman
) b0 k/ X% G8 W% J( @: ODay 77 YourSpace
3 o# g* ~3 Q8 L* _0 A. LDay 76 PixShow4 w0 T- R5 L. {1 |
Day 75 King of the Comments!& w. U) I5 y8 F# x3 G9 \& _
Day 74 Page View Graph
) {9 ~9 v3 o- g, \- f, s- r* {Day 73 Keep It Up$ a/ C' f5 ~1 q7 d! f. y7 e
Day 72 Make A Dude+ r" X q3 A2 G/ m5 i2 H( N1 {4 H
Day 71 One Page
: _, n8 |! a. T# uDay 70 Click Counter
8 s7 \' |: Y. t1 ]% `- u! bDay 69 Leave A Note
6 B9 ?# p) p3 n# v1 ^Day 68 Metronome4 x* x/ ^( Z7 ^: U- N9 x; u
Day 67 World Time9 s5 s0 S+ b5 C, {4 U* @% n6 T
Day 66 Alien Attack
, g7 r B a* K; z0 E& JDay 65 Fade
# a/ s3 u: I8 R5 gDay 64 Screen Flood
- L# i% i0 |( w5 k& xDay 63 Memory Orbs
( i- s, W3 M6 Z5 sDay 62 Confused Robot4 N/ r# S" l$ |+ G: {
Day 61 Fix It
9 O& T- L4 O$ ~6 _. s; D0 W5 BDay 60 Fizz Buzz+ j& k. v% r$ t3 k6 }
Day 59 Bubble Wrap
; G( Q$ R% f( T; IDay 58 Fireworks
8 J2 Q4 X# a# u/ ] g8 PDay 57 Bug Blaster
7 ?" M; w/ c2 ~" b. tDay 56 Hooray
/ ?5 E+ [- Z+ m4 zDay 55 Paratroopers- R0 Y. f% N# G% N* E, B2 u* _/ G7 Y
Day 54 Calculator# m4 g& q$ y2 j& A2 T
Day 53 Circle Invaders+ D5 r, a1 z( s+ t& W
Day 52 Etch A Sketch
( B$ b: n9 w N1 C* G* T- Q2 UDay 51 Memory3 R; J$ ~) O* M& k+ b g9 k
Day 50 Color War
Z- _6 I. M9 m. w8 |7 XDay 49 Weather Now
) h9 ~0 f& [9 \1 K3 q& TDay 48 Static+ E7 d [0 T) W4 T$ c. i
Day 47 PONG: S( e# r2 D6 M% y, S
Day 46 Snake7 F [# |& _: N0 F
Day 45 Color Perception Test
0 Q3 p* M' B% O+ n! o$ x' C, B" wDay 44 Analog Clock
7 K! u' Q% l3 v' T+ c9 r( {Day 43 Seeing Spots3 C! C6 }5 L& S
Day 42 Magnetic Poetry
: p C8 m' ]' \ l7 R5 @Day 41 Light Bulb
7 T$ T4 |3 ]+ K3 t0 |& L. M" WDay 40 Popping Bubbles. b* G! D4 |& a. j* H
Day 39 Pixel Painter4 p5 @, O0 C' P/ t: `+ t0 X4 \" [! \
Day 38 Type Attack
& ]8 n( v) b% @0 w4 X, D) D) c' JDay 37 Bouncy Balls
: O& h, C1 `5 L3 ]) s* f. CDay 36 Little Dude
) H% u" |9 y$ u$ ~: lDay 35 Buttons!, j+ o- j0 [$ o' F
Day 34 Maneki-neko
% ? y2 E: g3 J4 w1 t# QDay 33 Random Word Generator
9 T5 K; `- N3 N: t% |% NDay 32 Particle Waves
' `! _) K1 c$ wDay 31 Endless Throbbers. _; f8 g$ I& O; q9 \
Day 30 Silly Kitty
1 ?. M H/ {3 `! U" p1 @5 iDay 29 Magic 8 Ball
2 t9 K. O( ?2 A8 V' R5 O) g" O1 n, XDay 28 The Click Challenge
; w& A1 ~; v" ^: Q7 |Day 27 Rain Maker
/ q6 |" U; m# x- s* tDay 26 Simon9 o/ f) y- l {
Day 25 SCRAMBLED!/ i( d2 E% j( V1 X! o, f
Day 24 What is Your Email』s Impact?
1 R% Y+ l4 B: `( b; b7 O3 ODay 23 Stopwatch
. _( a+ B/ J$ c- L \9 S4 ^Day 22 Keep It Straight
+ |' E! z4 C% lDay 21 Teleprompter% J9 ]3 T4 p2 D+ K
Day 20 Smushing Fireflies7 k5 z1 [0 `# {7 C! u; x1 l
Day 19 How Much of an SF Hipster are You?
" m# `6 _0 y) kDay 18 Building Blocks# R! _' i. E6 N; a v
Day 17 Party Time?
2 `% t2 ?/ h8 R! t. hDay 16 Caterpillar
m8 r4 N2 o3 T" dDay 15 Dropping Boxes
4 O* ~' D* L! ~% b9 z B& b7 ~& {Day 14 Tough Love9 f' g& g& `7 i7 N
Day 13 Rock Paper Scissors
0 o0 A+ |- J0 g2 w5 t8 ~+ wDay 12 Dice Roller
t( E3 V0 S7 W6 z5 a& h8 {Day 11 Color Clock
. h/ e- D$ x: N4 e# C1 FDay 10 Sushi Jiggler
. O* D4 i: Y) Y4 o8 r% F2 sDay 9 Bouncing Ball% l8 ]( j& z& u) V/ G% c: N. I
Day 8 More Drop Shadow!
, @$ T: m5 X- m8 RDay 7 Technicolor Boxes+ J6 ?, d6 P. P3 t7 V3 `+ g
Day 6 Day Tracker+ O) M. ?) P1 n2 P
Day 5 Secret Message9 B e; N' n0 m8 l3 i0 Q
Day 4 Paint a Mondrian
5 z- N$ R# J) GDay 3 Get a Random Color Background
) [ l9 d9 B5 E% ]9 J7 `4 J: N) ODay 2 Make a Deal!4 i7 k C! \, \
Day 1 Homepage$ M( j8 s0 J5 E1 Y) R- A
. h0 m8 b& V* p! |* ]. d( q
. v0 C% u, r* Y& z2 h) P
3 n0 k8 n. E6 s# O( m! h
|