我以前从来没有想过我现在的生活会是这个样子。几小时几小时地盯着电脑屏幕,想要解决 app 中的 bug。如果一直找不出错误的源头,我就会开始变得焦躁、郁闷甚至于想砸键盘,
最后原因居然只是因为我拼错了一个文件名。
有时候,我会觉得自己很厉害。比如我写下自己的第一个脚本并且成功运行的时候。又比如说在我部署我的第一个 app 给服务器的时候。以及写下我的第一个爬虫来填充数据库的那一瞬间。我感觉自己就像阿拉丁一样,得到了一个无所不能的神灯。
编程就像毒品一样,尽管一开始的针管有点疼,但是慢慢的我已经离不开它了。下面我将总结一下我这两年学习编码的经验。
作为工程师的乐趣
就像很多技术人员一样,我既着迷于硅谷又崇拜那些那些技术大腕。
这里有一个非常有意思的变化——在不久以前,我还在一所大学念书时,由于工程师给人的印象是缺乏时尚感和社交技巧,所以别人要是说我看上去像一个工程师——我会觉得非常尴尬。
当然现在听上去很蠢,但是当我还在大学的时候,“硅谷”对我而言也只是一个地理名称而已。
还有一件你可能不知道的事情——我曾经是一所中学的 IT 俱乐部的会长。我会使用 HTML 和 Flash,在我的空余时间喜欢玩 Sim City 3000,并且创建了一个关于这个游戏的网站。
在我大学的最后一年,社交网络开始展现头角。我刚一毕业就作为高科技记者参加了新加坡的新兴行业创业场景赛。
我所接触的每一个人都表示了对代码的酷爱。不想成为高手的程序员,就不是好程序员。
学习代码的门槛也变得非常低。各种资源和文档,只要一个谷歌搜索就全有了。
现在的代码学习俨然已经成为了一个产业,这也说明了一个事实,即好的工程师一直存在着缺口。
现在已经是 2015 年了。如果你也想为自己做一个新一年的编程技术提高计划,那么欢迎阅读这篇文章。我从我个人的学习历史总结出了以下这些真理:
你的过去决定了你如何学习编码的方法。
我是在 2012 年底才学的编程——在我开始了我的第一份工作的一年多以后。这让我处于严重的劣势,如果我的目标是成为一个职业开发人员的话。
因为我可能需要和那些 12 岁就开始编程,刚刚新鲜出炉的毕业生同台竞技。他们的期望薪水会比较低,他们的关系承诺会比较少。我将不得不改变我的人生轨迹,并作出一定的牺牲来追逐这种职业生涯。
但是现在的情况是这样的:我已经在媒体行业淫浸了很多年。甚至,我还蛮喜欢我当时的工作,工作中并没有碰到什么过不去的难关。总之我还没有足够的财力和动力能让我转而去投资一个全新的方向。
因此,我只能在我空闲的时间里学习编码,同时还要保证不能干扰到我的日常工作。牺牲掉我的空闲时间是很艰难的一个决定,但是我别无选择。
在承诺之前,先理解你的最终目标。
学习代码可能对你的目标完全无用,也可能是不可缺少的。
如果你是一个学生,编码可能会为你开辟更多的未来规划,比如说,在你 25 岁的时候或许就能赚到一百万美元。
如果你是一个对当前工作感到厌倦想要有所改变的年轻“专家”,在你已经累计了初期财富之后想要来点冒险的话,或许可以考虑一下编程,这将是一种更富有成效的职业生涯。
当然,编程可能并不适合那些已经在大公司就职需要养家糊口的 CEO。不过如果你是一名年轻的高管并且希望能在一年内开办自己的高科技企业,那么学习编程就很有价值了,因为它能有助于你与开发人员亲密协作或者自己创建产品。
你或许会说,学习编码很难或者完全没有必要。这当然是可以的,没有人能强迫你。不过也有可能你学习的原因就只是想让别人以为你也是很厉害的(很多新入行的喜剧演员往往是因为这种原因而去演喜剧),又或者你直截了当地表示你就是想编程。当然如果你的目标是想提高薪资收入,也成。
对我来说,上面这些原因或多或少都有:
目标 | 结果 |
---|---|
我想让人觉得我很厉害。(别喷我。) | 通过使用 Ruby on Rails 创建 app,并通过利用各种 API 可以让我的日常工作像作家和编辑一样,这让我觉得我很厉害很酷。很多人纷纷了离开这一行,但我坚持下来了,付出了不小的代价。不过,我也承认我现在的水平还不算高。 |
挑战自我。 | 哇哦,我只想说,这真心是个大大的挑战。 |
我想知道 web 开发工作能否成为备选的职业发展新道路。 | 可能不会。像其他职业一样,编程涉及到很多类似于服务器迁移、处理入侵者等等不愉快的任务。 |
结合我对技术和媒体的爱好。 | 圆满完成。 |
我想使用编程技术使得自己的效率更高。 | 可能会实现吧。 |
如果你认为我干得好,请继续阅读:
一个接一个地开始项目。
说实话,编码一点都不好玩。当然,编写优雅的代码和修复 bug 是有收获的,但是如果没有最终产品,那这一切的努力就只能是付诸东流。
将你的编程之旅当作需要攀登的一系列高峰。登上一峰之后就攀爬下一峰。每一个项目都能让我们学习到新的东西、修整旧的知识,一步一步地朝着我们的目标前进。下面是我解决的项目,按时间先后顺序排列:
文本游戏。
一个用于计数科技博客标签的 Ruby 脚本,看看当前什么话题比较流行。
一个能抓取网站信息并拷贝到另一个数据库的 Ruby 脚本。
排序表格和柱状图。我将 Ruby on Rails 应用程序与 D3.js——基于 JavaScript 的可视化库连接起来。
一个 Rails 应用程序,将 WordPress 挂钩到谷歌分析 API 上以编程的方式生成内容。
一个 Rails 应用程序,构建在缓冲 API 基础上可以让我重新在社交媒体上发布内容。
一个 Rails 应用程序,可在数据库中填充链接。
Statsy,一个 Rails 应用程序,兼作检索数据库和以谷歌图表为基础的图片制造商。
连续的项目会变得复杂。我一开始学习的是创建脚本,然后是 Rails。接着踏上了自己找项目的愉快旅程。正如一位程序员所写的那样:
“编程应该被当作是一种实实在在解决问题或者是更快解决问题的方法。在理解的基础上进行深度的破解。这样就有了学习的目的和动机了。编程是非常有意义的。但是很遗憾的是,很多人第一次接触编程就是一堂干巴巴的语法课(我就是如此)。我们只需要坐在那就可以了,不用回答,傻乎乎地听着类似于天书一样的言语。”
持之以恒,庆祝每一个小小的胜利。
如果你的目标是建立一个可正常使用的 Web 应用,一开始的时候难度并不大——就像 Codecademy 网站上面教授基础内容一样特别简单。关于 Ruby 也有大量的资源可供你起步。
根据我的经验,如果你想要建立一个完全成熟的 web 应用,你才会发现编程很难。为什么呢?因为这时候你才知道你还有那么多的东西需要学习。如果你正在学习的是 Node.js,那么你需要掌握的不是一种而是两种编程语言:一种是服务器端语言,另一种是面向客户端的 JavaScript。
此外,你还需要使用如 HTML 和 CSS 的标记语言,来制作网站的外观,还要确保服务器能够运行起来(我建议初学者可以试试 Heroku)。这还不是全部。每一种编程语言都有一堆的数据库需要掌握,每个 API 都有它自己的文档。你还需要掌握数据库的工作原理。这还不包括没有学过的 Git 和测试驱动开发(TDD)。
我能理解那种不堪重负的感觉。但是种种困难都不能阻挡我前进的脚步。关键是要从小处着手,建立信心,以便能应对更大的项目。慢慢的,你的学习进度会加快,你会为你自己消化吸收的速度所震惊。
不过编程最让人沮丧的是,app 出现了问题却一直找不到根源,我真是烦躁得都想扯自己的头发。由于我们的 app 是构建在其他人已经写好的源代码的基础上,所以任何一个地方都有可能产生 bug。学会高效调试往往是很多人都低估了的技能。
懂得庆祝每一个小小的胜利也很重要。想想你最终的 app 版本——这是一种精神的鼓励。为了达到这个目标,你需要一步一个脚印扛过每一个低潮——有时候甚至都想放弃编码了。好好记住我的话,你以后也会有很多次想要放弃的时候。
如果出现了这种想法,那么你的精神需要休息了。过会儿再来看看问题,想想异常所有可能的来源。也可以向周围寻求帮助。并且当你修复了这个 bug 的时候,小小地庆祝一番。然后再来个深呼吸,继续干。
获得社交关系上的帮助。
学习代码不应该是一种闭门造车的行为。可以咨询懂行的朋友。他们会教你一些在谷歌中搜不到的知识。加入相关内容的同城群,有需要的时候可以寻求帮助。Stack Overflow 是个提问的好地方,并且你会发现你碰到的问题,你的前辈们早八百年前就给出答案了。像 Airpair 这类在线咨询平台,通过支付一定的费用你就可以接触那些顶尖的程序员(虽然我还没有试过)。
结对编程也能让人受益。如果你的目标是加入一个开发团队,那可以假设自己是一个专业的编码人员。每个团队都有自己的方案、工作流程和工具套组,这些通常是由那些稳坐最高级程序员宝座的人决定的。一开始可以先从和朋友们一起搞业余项目着手。如果你所在的是一家初创企业,里面的开发团队正在耐心地带新人,那你也可以参与到这个志愿活动中,协助写一些代码。
Ruby on Rails 必胜。
学习代码之前,我们先需要决定学习哪种编程语言。
对于我而言,我的决定并不是按照什么科学依据来的。最初我选择 Python,是因为我看到大家将其视为“一种理想的初学语言”。后来我转而投向 Ruby 的怀抱是因为我的一个同事熟悉它。这是由我的社交关系所决定的(见前一点)。现在回想起来,总体来看还真是这样。
除了能获得很多帮助,Ruby 也是最干净的语言之一,因此很容易阅读和学习。同时,Rails 有大量的插件,可以赋予 app 各种能力——如用户认证、内容管理系统或管理仪表板——“开箱”即可使用,非常方便。功能齐全得让人感觉构建一个 Rails 程序就像是将几个小的 app 拟合在一起一样简单。
所以,如果你的目标是尽可能快速地设计出一个工作原型,那么 Ruby on Rails 就是通往目的地的门票。
管理期望。
想要通过写代码而晋升职位是需要时间的。如果你所在的是初创企业,你想要通过提交一些前端代码为自己增加筹码,那么学习 HTML、CSS 和 Git 可能只需要几周时间就够了。如果你是一位有志向的企业家,正试图建立一个 web 应用程序,那么学习必要的技能则取决于你有多少时间可用于学习,而这有可能需要数个月。所以要合理安排自己的期望,记住,一直努力总有看到黎明的那一刻。
下面是一些我想要分享的想法:
编程只是一个工具。
我总是需要考虑在学习编程的过程中我应不应该去学习其他东西,例如学习管理技能、设计原则,如何制作实物模型以及如何成为一个更好的记者。
这个问题很重要,在你开始编程之前就应该想好,虽然我自己本身也没有就此给出一个满意的答案。哪怕我已经学习了两年,我有时候也会发现我现在的努力方向可能并不适合我的目标。
假设你是一家初创企业的 CEO,各种资源有限。学习编程对你而言可能并不如了解用户体验设计、用户测试、数据分析和其他开发人员可能并不具备的技能等来得有用。你只要记住这一点,编程只是一个工具,是另一种打造成功产品的工具。
永远不认输。
我会很自然地规避风险,所以我习惯于一上手就想好另一个备用计划。我会问自己:如果我放弃这个 web 应用的话,会发生什么事情?我的回答是:
“至少我体验到了它的样子。”
“至少我知道这不适合我。”
“至少我更加理解开发人员,可以与他们更好地协作。”
“至少我学会了注重细节,并获得了更好地解决问题的能力。”
“至少我的简历上又多了一条新的经验。”
最后我往往能做到鱼与熊掌兼得的结果