每名学习编程的人,在掌握了一定的知识和技巧之后,或多或少都会想要自己做一些东西出来。而最常见的形式,就是个人的业余项目(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,知名平面设计师
刚开始的时候,你可以从别人的教程、相关数据和讲座中学到很多,它们可以给你提供一个初期的框架。之后,业余项目就会进行地越来越顺畅。