如何完成自己的业余项目?

每名学习编程的人,在掌握了一定的知识和技巧之后,或多或少都会想要自己做一些东西出来。而最常见的形式,就是个人的业余项目(side
projects),或许是自己的博客,又或是一个小APP,甚至是一个大型网站。编程派也可以算是译者自己的业余项目。本文中,一名资深Python程
序员将与大家分享他在实施个人项目中的一些心得体会。

我曾经问过《笨办法学Python》的作者Zed Shaw:读完哪5本书可以让自己精通编程?他是这么回答我的。

“读五本书就想精通编程了?根本没有这样的书单。不管你想精通什么技能,你都必须要常年累月地不断练习("do a hell lot of it")。——Zed Shaw

刚听到这个回答的时候,我有点不高兴。但是我后来发现,Zed并不是在跟我开玩笑,那是他的大实话。

对我而言,能够让自己“常年累月地不断练习”的唯一方法,就是这件事要有趣。我们的大脑并不适合常年从事一些没意思的工作。我们都渴望新奇和有趣的东西。要想常年坚持做一件事,我们就必须学会顺从我们的天性。

Gmail的发明者Paul Buchheit在《The Two Paths to Success》一文中这样说道:

我主要的策略可以总结为两条:1. 想办法让一件事变得有趣;2. 如果事情没成功,想办法应对。

为了让“常年累月地不断练习”这件事变得更有层次,我会做一些业余项目(side projects)。在包括编程在内的任何创意领域中,业余项目都占据着独特的位置。它们的地位之所以重要,就是在于给你提供了试验自己的创意和从错误中学习的机会。

在实施业余项目时,我总是会时不时提醒自己要遵守一些准则。如果我忘记了遵守它们,那这个项目就不再有趣了,这意味着我会暂时停止这个项目。建议你在做业余项目的时候,也牢记这些准则。

从错误中学习

孩提时代的我们学习速度最快。出生时,你一个单词都不会;到了6岁的时候,你就已经学会了1万个单词。这就是说,你平均每天就学会了5个新单词!孩

子和成人之间的一个关键区别,就是成人如果没有立即取得完美的成绩,就会责怪自己。如果一个孩子失败了,通常也只会是孩子的家长担心。所有的孩子都知道,
失败只会带来暂时的疼痛。他们不会纠结于这件事。

“每一个错误都是一个绝佳的启示,因为每个错误都会指出你需要特别注意思考的地方。这可以将你的思维方式,从找到正确地解决方案(困难)转变为纠正
一个特定的问题(容易)。” —— Starbird & Burger,5 Elements of Effective
Thinking。

要允许自己犯错。业余项目有一个好处,就是你又可以成为一名初学者。你不会有预期。你可以犯错误,全心全意地去学习。只有当你犯了错误之后,你才会深刻地知道下次不应该做什么。

根据布鲁姆(Bloom)学习分类法,通过阅读和倾听所学到的内容中,你只会记住20%,而你真正实践过的事情则会记住90%。更高的参与程度以及

错误-反馈循环可以让你真正地发现一个问题的要害。再详细的描述,都无法完整地向你说明业余项目中哪怕是最简单的那一部分。只有安静地坐下来,仔细地思考
每一个小决定,你才能真正地学会问题的真实解决方案。

译者注:布鲁姆学习分类法是对学习层次的分类,它反映了我们的思考和处理信息的路径。学习的层次分为记忆(Remembering)、理解
(Understanding)、应用(Applying)、分析(Analyzing)、评价(Evaluating)和创造(Creating)。层
次越低越基本、越关键,层次越高越复杂。

不要让业余项目变得无聊

业余项目应该尽量做到有趣。做业余项目工作的时候,什么事情会让你恼怒?构建环境(build environment)太差?编辑器高亮伤眼睛?部署起来麻烦痛苦?那就尽量让这些过程自动化吧!

举一些我自己碰到的例子:

上班路上或排队的时候,我时不时会突然冒出一些想法。通常我会马上记在贴纸上,想着尽快去实施。但是由于我没有好好整理,这些贴纸总是不断地消失,

或是莫名其妙地出现在洗衣机里。后来实在是受不了这种情况,我才开发了一个监测自己电子邮件收件箱的程序。每当我有了一个想法之后,我会记下来发邮件给自
己,这个程序就会每天晚上自动把邮件归类到计划事项当中。这样,不仅解决了让我头疼的问题,我还学了很多关于Emacs的知识。

如果碰到最坏的情况,那就放弃。除非绝对必要,否则别这么做。任何事情如果做起来让自己咬牙切齿地不爽,那就说明你已经没有了动力。长期持续做一件事,你以后再也不会再想做业余项目了。所以你必须要让业余项目有趣。

要么做大,要么就别保持小而美

Gmail是业余项目做大的典型代表。这也是Gmail项目团队成员的决定。我在电脑里记录了大量的想法,创建了很多空文件夹,这些都是我突发灵感

的时候创建的。要不要做某个项目,决定权在于你。如果你想把项目做大,那就去做。如果你想保持小而美,只提供给家人和朋友使用,那也没问题。在这件事上,
你就是无所不能的神。

如果哪一天你开始感到骄躁,或是不想继续做业余项目了,那就把它归档,写一篇博文记录下来,把相关文件放到Github上,或是挥拳宣告项目胜利,因为你已经完成了学习的目标。

你就是你自己命运的主宰。

当你实施业余项目时,你有充足的时间选择是否要学习新东西...你也可以对是否接受别人的反馈更加谨慎。不过,如果你真的接受了人家的意见,那肯定是因为你真的希望把这件事情做得更好。—— Tobias van Schneider,知名平面设计师

刚开始的时候,你可以从别人的教程、相关数据和讲座中学到很多,它们可以给你提供一个初期的框架。之后,业余项目就会进行地越来越顺畅。

来源:51CTO

时间: 2024-12-01 07:51:35

如何完成自己的业余项目?的相关文章

程序员如何既不耽误工作又有时间干业余项目?

我经常听到或看到很多当了爹的程序员抱怨到,本就不多的时间又被孩子占有了,现在完全没有时间做业余项目了.对于这个问题我也是深有体会.真的是很不容易,一方面要认真工作担起养家的责任,另一方面还要为了家人保证自己的身体健康,还有就是也要挤出时间做自己的编程项目. 有个问题很想问各位,"如果你还没结婚有孩子,那么在这之前你会不会做业余项目?".倘若你是不做的,那么今天我们说的这个话题就对你毫无意义,当你还是单身一人有这么多空闲时间的时候,你都不曾想过用这些时间来做点你自己的项目,那么等你有了老

为什么程序员的业余项目大多都死了?

我们都有这样的业余项目:项目创建一半就弃之于坟墓,未完成的梦想遗体就这样扔之于文件夹中.游戏.应用程序.可视化数据等等.现在所谓伟大的点子最后只能沦落为空气中卑贱的尘埃. 这是一个可悲的事实,因为业余项目原本应该成为一个传奇.在它们最辉煌的时刻,能够让你朝思暮想,夜不成寐,眼中只有一个它.很少很少的一部分人会够保持下去,沉溺于此.它们让你觉得自己还活着,它们比sex更好. 但大多数的业余项目往往没有那么幸运.被抛弃,然后静静地,死去. 我们会说自己没有时间.生活是如此忙碌,总是有各种事情不得不去

html5-各位前辈们,这个项目可以做些什么?

问题描述 各位前辈们,这个项目可以做些什么? 我是一个大学新生,学的是移动互联,第一个学期有个课程叫做HTML5,这个课程没有考试,考试也就是要交这个项目,到现在我也没有什么好的想法,不知道怎么做,现在就想问问各位前辈们有没有什么建议?谢谢! 解决方案 程序员做些业余项目的重要性 解决方案二: 语音的那个,应该可以做一个智能机器人吧,可以看下科大讯飞的语音引擎,HTML5的话,要是学过JSP或者ASP,PHP,数据库的话可以搭建个网站.要是没学过,就只能做静态的h5应用了吧 解决方案三: 用ph

想成为一名顶级程序员,17岁开始学编程晚么?

年龄太大了,真的不能当工程师么? 我22岁开始学习编程,以下是我的学习"大事记": 22岁 – 我学了什么是if条件判断语句. 24岁 – 我在Fackbook找到了一份分析师职位的工作 25岁 – 我在Facebook的职位变成了工程师 26岁 – 我业余时间做了个小项目,赚到一大笔钱,我在Facebook拿死工资是永远赚不了这么多钱,于是我离开了Fackbook,用这笔钱开了一家创业公司.通过Y-combinator(译者注[1]),我从一家顶级风投公司获得一大笔投资. 我今年正是

BEHANCE上超火的大众官网重设计

  在这个业余项目上埋头苦干了将近一个月,结果还算令人满意,现在我可以简短的向大家介绍一下此款设计练习. 在开始阅读之前,推荐看一下Behance(妹子们注意了,作者超帅的)上的相关图集,这样就能对我的作品有较为整体的了解. 回顾设计生涯,几乎和重设计紧密相关,4年前我完成了捷克沃达丰官网的重设计.那个项目算是一次设计定位.这几年我一直在想,要再积累点设计经验,有机会再进行一次重设计. 如果你有充足的时间,放松的状态,那么非常适合在业余时间做一些项目练习.我一般做一些概念设计,或者重设计一些流行

《Google软件测试之道》—第2章2.1节SET的工作

第2章 软件测试开发工程师 Google软件测试之道 C:\Documents and Settings\Administrator\桌面\页面提取自- 9780321803023_book.jpg 在理想情况下,一个完美的开发过程是怎样进行的呢?测试先行,在一行代码都没有真正编写之前,一个开发人员就会去思考如何测试他即将编写的代码.他会设计一些边界场景的测试用例,数据取值范围从极大到极小.导致循环语句超出限制范围的情况,另外还会考虑很多其他的极端情况.这些测试代码会作为产品代码的一部分,以自检

初识Docker,概念-架构-相关术语

介绍Docker概念与平台架构,相关术语 Docker的历史 诞生 Docker 是Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎,基于Google 公司推出的 Go语言实现的云开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护.而且居然只有 1W 行就完成了这些功能.如果想尝试一下的话可以看 官方介绍了.   D

常见前端开发面试题

摘要:面试题是招聘公司和开发者都非常关心的话题,公司希望通过它了解开发者的真实水平和细节处理能力,而开发者希望能够最大程度地展示自己的水平(甚至超常发挥).本文提供了众多前端开发面试题,无论是招聘方还是应聘方都值得一看! reference:http://www.csdn.net/article/2012-10-18/2810902-Front-end-Developer-Interview-Questions 一般问题 你用Twitter吗? (在天朝最好问你用微博吗?) 如果用,你都关注那些

一位三年程序员的经验总结

  不知不觉已经走入这行三年,虽没多大成就,但三年的努力和磨练也算是个成手了.在将要从三年迈向五年经验之际,不禁开始思考,怎样才能向软件开发高手迈进.三年的工作时间,说来不长,但回头想想却也像过了小半辈子一样,充满了数不清的点滴回忆.曾经那些一起实习睡上下铺的同窗.共事过的同事,那些呆过公司的所谓企业文化,那些改不完的Bug和Enhancement,那些看不完的技术书籍...此刻回首往事,憧憬未来,我想最重要的莫过于积累,注重积累!   一.技术博客 - 总结过的,才是真正掌握的! 看技术书籍的