[COSCUP 2019] 如何在两年内从初学者成长为流行开源项目维护者和技术书作者? - 李辉
- 本次讨论邀请独立Web开发者李辉分享经验
- 李辉的作品包括Flask相关书籍与维护
- 学习编程应避免工作与恋爱,集中精力做项目
- 强调作品的重要性和追求80%-90%完美
- 勇于接受挑战与冲动的决策将带来机遇
我们这个议题是邀请到李辉。李辉是一个独立的Web开发者,也是Flask开发团队的成员。他有一个叫helloflask.com的管理员,他写了书,反正总之今天大家来听看怎么从初学者变成一个popular的项目维持者,还有技术书的作者,大家欢迎!
好了,谢谢大家。首先我想说一下,因为台湾和大陆有很多编程术语是不一样的。虽然我这几天背了很久,但是我还是有可能说错,所以希望大家见谅。
我先来解释一下我的这个标题。首先是技术书,然后叫做Flask Web开发实战,这是在天龙网络书店上找的页面。不过我在一楼看了他们的摊位,然而没有找到我的书,所以很没有默契。首先我起了这样一个这么长的标题,主要的考虑就是怕没有人来听我的演讲,所以搞得有吸引力一点,果然现在是很有用。
不过我这个标题有一点功利,但是我的本意并不是想介绍程序员成功学,或者说你怎么样从速成然后突然变得很成功。因为成功是一个偶然事件吧,它需要除了你自己的努力,还需要一些运气、时机和大环境。
所以我主要想介绍的内容是!编程初学者如何在一定时间内获得阶段性的成果。下面来简单介绍一下我自己,我叫李辉,我是一个来自南京的独立web开发者,或者说是一个还没有找到工作的野生工程师。
然后跳过前面介绍过的两点,如果你想了解我更多的信息,可以访问我的个人网站kerali.com。接下来,不管你好不好奇,我都要把时间倒回到2016年的8月份,那时候我刚开始学习Flask。
好差不多到了8月31号,我在一篇博客里写了我在暑假阅读了一本关于Flask的书,叫做Flask Web开发实战。接着在9月3号,这年还剩下三个月的时候,我做了一个下半年计划,其中一个主要目标就是用Flask做一个网站。
接着10月24号是我在GitHub上创建了第一个PR,很简单,就是修改了几个拼写错误。然后在10月28号,我创建了一个知乎专栏叫做Hello Flask,我在第一篇文章里列下了一个非常宏伟的写作计划,告诉大家我要写很多很多关于Flask的东西,虽然当时我还只是一个菜鸟。
接着在12月10号的时候,我的一个朋友想要做一个网站,但是当时我是刚开始学FLASK,不过我很冲动,我就接下了这个专案,结果花了大概两个月的时间,因为对方客户也是一个非常难缠的客户,什么都不懂,需求改来改去。当然,这个经历是很痛苦的,但是它给了我很大的信心。
然后接着我就开始做很多关于FLASK的东西,比如说写很多文章,做一些小demo,回答关于Flask的问题。接着一直到2017年的2月1号我收到了出版社的一个写作邀请,那个时候我又一次非常冲动地接受了这个邀请,因为当时我只是把Flask所有基础内容学了一下。
然后我就开始写,3月1号开始写作。在这一年的12月7号完成初稿,经过几次很痛苦的修改,最终在18年的5月2号交了最终的稿子。在整个这写作的一年的跨度里,我还做了一些其他的工作,比如说写了5个使用Flask实现的web城市,做了5个Flask扩展,也就是Python库。
还有写其他工作,比如说写了一些demo,写了很多文章,还有一些PR,就是很多不同的项目,还有在Stack Overflow上写了一百多个回答。最终在18年的6月20号我加入了Palace Projects,做了Flask的维护者,但不是我一个人。
接下来,在8月30号,我的书出版了。现在我们把时间倒回来,在这段时间里,这就是这两年大部分发生的一些主要事件。如果以我现在来看,这些事情可以说是一环扣着一环的。
我从一开始学编程,然后很冲动地接了一个外包项目,做了外包项目以后有很多经验,然后我就写文章分享,分享的多了以后,出版社的编辑就会发现我,开始写书,接着写书的过程中做了很多开源贡献,这就促成了我加入Flask开发团队,最终输出版。
所以说我有什么秘诀吗?或者说基于我这两年的经历,我可以给想要获得一些成果的初学者有哪些建议呢?
第一个建议就是不要工作。就我的观察来看,大部分程序员的工作都是非常无聊的,你既没法发挥你的想象力,也没法发挥创造力,大部分时间都在做一些CRUD。所以说,如果你工资不够高的话,不如先不工作一年或者两年。当然如果你刚毕业的话,那更好了。我把这个时间叫做一个技术间隔年。
你最好假如你觉得自己天赋一般的话,最好有一年或者两年的时间是既不上学也不工作的。你可以把时间全部花在专注于你想要发展的编程领域里。因为如果你想在一个编程领域获得成果,那就必须要付出大量的时间和精力。
另外一方面,在这个一年或两年的技术建设年里,你也可以有一个很好的机会去发掘和认识自己。因为你不必把自己捆绑在某一个固定的社会角色里,也没有人要求你必须做哪些事情,所以在这个世界里,你可以尝试很多不同的可能性。
当然,没有工作就没有收入,你可能要过一段很拮据的生活。插播一个问题:像柏拉图、哥巴尼、牛顿、特斯拉、达文西这些人,唯一的共同点是什么?有人知道吗?
他们都很伟大,这一点无可置疑,他们也都做出了很多优秀的作品。他们有没有工作我不知道,但是他们唯一的共同点就是他们全都是单身。你知道这意味着什么吗?意味着只有你单身了,你才有足够的时间创造出伟大的作品。
所以说我的另一个建议就是不要谈恋爱。一旦你谈了恋爱,你就要和你的男朋友或者女朋友,比如说吃饭、睡觉,然后逛街、吵架、冷战,做各种奇怪的事情,这需要花费很多很多的时间。
所以如果你想在你的编程领域收获一些成果的话,绝对不要谈恋爱,这对你来说是一个非常大的阻碍。但是宠物最好也不要养。不过你可以养一个盆栽,比如说种一盆花或者种一盆草。因为就我的观察,所有的专业人士都是这么做的。
所以,我建议大家立刻开始行动。因为我已经帮你们找到了最近的鲜花店,就在水源市场那边的正门,有一个水源鲜花店,大家结束了以后可以直接过去。好,那么我的第二个建议就是一定要做出作品,当然最好是有趣的作品。
我的第二个建议是做出有趣的作品,其中我指的作品是广义的,比如说一篇文章、一本书、一个演讲或者说一个城市,都是可以的。最重要的是你要把你的作品当做你的目标。当你想一开始学习一个编程语言或者说web框架的时候,大部分人都会想我要先学什么后学什么、我要把它们学得多好、学得多么深入。但其实你真正应该考虑的是,我应该用它来做出什么作品。
以学习Python为例,一个坏的例子大概就是:“我要在这个月学会Python”,这就是一个坏的例子。而好的例子大概就是“我要在这个月用Python开发一个计算器”。但是另一个建议就是你的作品要有系统性,比如说一本书、一系列文章、或者说翻译一个文档,做一个完整的web项目,这些都是有系统性的东西。
有系统性可以让你掌握的知识变得更加系统。另一方面,为了避免做出来烂东西,你还需要追求80%到90%的完美。因为追求80%的完美大概可能需要花一天,而追求10%的完美也许需要一年或者更久。
所以说,大部分情况下80%到90%就足够了。另一方面,在你编程作品的时候,也是最容易出现开源贡献的情况。比如说我在写书的时候,就是创建PR和issue最多的时候。这也是我在17年的时候提交的一些PR。
我的最后一个建议就是要冲动一点。人类历史上大部分很多事件都是由冲动来推动的,就包括我们在座的各位,也有可能是我们的上一代冲动的后果。所以说冲动会带来进步,也可能带来退步,但假如你不冲动的话,什么也不会发生。
如果我不够冲动的话,我就不会接下第一个外包专案,也不会有那么多的信心去做FLASK相关的东西。如果我不够冲动,我也不会接受出版社的写书邀请。今天我可能就不会站在这里。
我来COSCUP也是一个冲动的结果。当时我就是偶尔看到了一篇文章,这是我第一次知道COSCUP。在今年,我不知道COSCUP到底在干什么,我只知道它单词里面有一个开源,所以我就想我好像也做过开源。
于是我想我应该可以来吧,然后我就随便写了一个标题,弄了一些内容。我当时还不知道我要讲什么,现在我已经知道我要讲什么了。
所以如果你问我如何快速入门一门新的语言和框架,我的建议就是冲动一点,做个外包专案。你可以去告诉你所有的朋友、同事,如果你正在学习开发网站的话,告诉他们你可以提供开发网站的服务,非常专业,然后做一个非常专业的网站。
告诉大家,如果你坚持得久一点,总有一天就会有人上当。一旦有一个人上当,这就是一个非常好的学习机会。你的编程能力在最后会获得非常大的提升,相信我绝对没有错。
这个时候我会推荐你看这本书,叫做Copying and Pasting from Stack Overflow,这本书对我帮助很多。如果你问我怎么快速深入了解一个编程领域的话,我会说冲动一点,回答你不会的问题。
你可以从今天,或者从明天开始,在Stack Overflow上每天找三个问题。你可以不会,但你必须要回答。你可以研究所有你不会的东西,用谷歌搜索或者用任何方式,反正你要最后和他保持沟通,告诉他们你能解决,并不停地更新你的答案,直到你解决了这个问题为止。
这个时候我推荐的参考书是Googling the error message,这本书当时对我的帮助也非常大。所以这一小节我总结一下,就是要做超出你能力30%的事情。
当然我不是推荐你去冒险,超出能力30%不会带来太多失败。即使失败了,后果也不会非常严重,最多就是像我这样,演讲的时候感觉比较紧张而已。最重要的是你至少要有70%的把握,这样才能确保你不会产生一些非常糟糕的东西,也不会翻车。
所以我建议大家今晚就可以开始行动。你的第一件事是做一个大胆而详细的计划,这个计划是关于你在未来一年、未来五年要完成的所有作品,把它们从小到大排列,让他们越具体越好。比如说你想写一本书,你就把所有你想写的章节列出来,然后再去学习这些内容;你想开发一个网站的话,就列出你所有想要开发的功能。
我会推荐一些新手任务给你,比如说在部落格上写10篇文章,在Stack Overflow上写50个回答,在GitHub上创建50个PR,必须不能是你自己创建的项目的PR。如果你还没有个人网站的话,我建议你现在就去建立一个。
你要有一个统一的头像、统一的ID和姓名,然后你的ID最好和你所有的社交网站保持一致。而且你的域名和ID最好保持一致的。最重要的一点就是把你的目标、所有的计划都写在你的个人主页上,同时也公开在你所有的社交网站上,让所有人都知道你的计划,这样会给你带来很多压力,当然也会有助于你完成你的目标。
另外一个重要的点就是要追逐作品,而不是效率。追逐作品的意思就是你要把你的每一个作品当作你每个阶段的目标,而不用太考虑你的自制力或者效率之类的。因为我玩了很多游戏,在过去两年,所以最近几年开源运动发展得很多,像微软这样的老顽固都开始拥抱开源了。
不知道你们有没有发现,开源运动逐渐也在影响到我们的现实世界。比如说在台北就有一家电机行加入开元运动,另外在我的家乡,因为开元运动已经遍布世界了,在我的家乡小镇上有一个洗浴中心,它最近也加入开元运动。
所以不管有没有开元,我想说的是,我们可以把这个世界当作是一个超级代码仓库。我们每一次创作出优秀的作品,每一次分享你的知识,都是一次有益的贡献,都可以促进这个世界上善意和知识的流动。我想我会一直这样做下去,希望你们也能加入我。
来自于大陆的讲者当中,最有趣的,我想回应陈忠诚老师,我们还是找到了这样的一位讲者。那在座因为很多人,我们还有一点时间,请大家有问题可以提问,然后他来回答。有没有人?
好,请那桌上有,我有说你可以骗你的亲戚朋友告诉他们你可以开发网站,然后就有人来找你了,我就是这样做的。还有什么问题?
没有吗?请问请问大声一点,因为那个时候我还不知道张狗是什么,所以我就先学了Flask,但我接下来可能会写一本张狗的书,说不定。
哦,我问一个问题,你问的可能会很难吧?不是,我其实内心很觉得,假如是我的亲戚朋友的儿子这样搞,我一定觉得说他在干嘛,你知道吗?因为像在台湾还好,比如说台湾人就当完兵,可能去找工作或干嘛,gap year在台湾比较容易被接受,但在大陆,gap year其实就会被某一些人认为这个人不知道在干嘛,他一定做了一些不知道在干嘛的事。
所以不要让你知道所以是变gap year,至少某些公司我知道会这样子看这个事情,那你怎么克服呢?我是这样解决的,就是你告诉所有人你是自由职业就可以了。是自由职业是一个非常好的头衔,只要没有工作都可以装上。
那你社保不就没有了?我说社保不就没有?或者就断掉之类的?对啊。OK,还有没有问题?各种问题都可以问,真的没有吗?他讲得那么好,这样对吗?没有?大家后续问题的话可以在我的个人网站上找到我的所有联系方式,或者你也可以直接来找我。
好,那既然大家没问题,我们就再次掌声,谢谢李辉!谢谢大家!水哥。


