半年前,只有艺术背景的她,决定开始学coding。怎么学?180天做180个网站(网站和网页这里就不区分了XD)。
几个月前,她做到一百多天的时候,这件事情开始在网上火起来。有人泼冷水,更多的人点赞。他(她)们说,真是女汉子,我也要学coding!还记得吗?
几天前,她完成了第180天的任务。她写了一篇总结blog。她说:
做完了180个网站,我准备下半辈子都当码农
by Jennifer Dewalt
我在180天里做了180个网站,借此学会了编程,现在我好期待放个假啊!
过去的六个月,我无数次熬夜,在失败边缘焦虑。但是为了实现目标,一切都是值得的。
关于这些,详细情况可以看看这篇博客(长文慎入)。脱水版:我之前没编过程,然后决定学编程。我没有跟着课程或者培训班学,而是选择了直接硬着头皮上,给自己定下三条规矩:
- 每天建一个新网站, 连续坚持180天!
- 每建一个网站,都必须写一篇相应的博客。
- 我写的所有代码,都必须放在GitHub上(开源),大家都能看到。
(这是作者在此期间做的某网站的截图。下面的截图都如此,不再一一标注。)
###背景
我是学美术的。美术之所以吸引我,是因为通过它,我能探索人们是如何相互沟通、相互影响的。过去,我探索人际交流的方式是雕塑和绘画。不久,我便开始考虑技术。
技术,尤其是互联网,打开了各种各样神奇的交流渠道,让我们有机会传播、吸收海量信息。互联网真的很神奇,通过计算机与人交流真的很cool,我都有些沉迷了。不过,并非每个人都像我一样对互联网充满激情。那么,我怎样才能让他们看到互联网有多么cool呢?我意识到,我怎么画画,都画不出互联网的力量。我要真正参与其中,亲手搭建网上的交流渠道。
###学习之旅:CSS->Javascript->Rails->Node
最开始,我只用一点点CSS和JavaScript,做非常简单的网站。很快,我开始折腾复杂的CSS动画。到了第37天,为了学<canvas>
元素,我开始钻研js。第69天,我做了第一个Rails网站,从此我踏入了全新的网站世界——人们可以在站上相互交流。第119天,我做了第一个backbone app,不过我得承认,我其实没怎么搞明白。在这个自学编程项目结束的时候,我已经做过游戏、玩具类应用还有工具。借助Instagram和Twitter之类公司提供的API,我用到了外部数据。利用Node.js,我也做出了实时动态交流的app。
###我是怎么做到的?
我有一条很重要的个人原则:从小做起,坚持到底(Start Small. Keep Building)。我开始实行这一项目的时候,心里很清楚,自己想学的是编写动态交互的网站,但是自己对编程基本上一无所知。所以,我没有试图一上来就搭建完整可用的复杂的社交网站,攻克一个又一个艰辛的任务,相反,我迈出了小小的第一步。我把一点儿html和CSS拼凑在一起,做出了第一天的网站,也就是这个项目的主页。
那时候,为了一点点标记,我就要Google一整天。当然,我本可以跟着书本或者课程学习,但是我没有。在完成整个项目的过程中,我在Stack Overflow、MDN、CSS Tricks、各种blog和demo网站上,找到了所需的一切。为了实现更复杂的想法,我还用到了一些非常棒的在线新手入门指南,比如Rails Tutorial就很赞。
目标很小,随之而来的问题就很小,我都能想办法解决,因此,我得以一步步走向新的小目标,应对更多可解决的小问题。等到我解决了足够多的小问题之后,我眼里“小问题”的概念就变了。举个例子,第100天的“小问题”,比第1天的“小问题”,要复杂得多。我就是这样一点一点地前进,最终学会搭建动态网站。
###还有什么经验?
我严格要求每天都是deadline,这对于保持进步速度也很有效。每天都要做出东西来,这就不允许我在一个问题的原理细节上纠结太久。新手很容易困惑,长时间死磕一个概念。在我看来,学编程有点像玩巨幅拼图,你当然可以拿起一小块,非常仔细地观察它,但是这并不怎么能帮你了解它的位置以及整幅图的样子。你必须收集一堆拼图块,把它们拼在一起,这样才能开始摸清全局。
有什么教训?
项目刚开始的时候,我给自己很大的压力,强迫自己追求完美。我太看重每个细节,如果没达到预期效果,我就觉得非常失败。我简直要疯掉了。把自己的所有作品都摆出来给大家看,这简直太吓人了。但是我必须学着允许自己不完美。世上本来没有完美可言,何况我还处在学习阶段。不完美并不代表失败。在项目进行过程中,我时常一心想着把所有功能全塞进去,为了十全十美而熬到凌晨三点。我甚至会因为担心无关紧要的小功能而失眠。
下一步呢?
继续coding!180天做180个网站的项目结束了,这标志着我下半辈子的码农生涯正式开始了。当然,这个项目并没有让我全面充分地理解软件开发,不过也算打下了大致的基础。我打算做几个更复杂的网站,一天之内做不完的那种,以便查漏补缺。等我觉得差不多了,我希望加入一个小团队,找到和我一样充满激情、喜欢实现神奇想法的人一起工作。与此同时,我会继续写blog记录我的学习历程,继续把代码都发在GitHub上。