分类目录归档:计划与总结

2022 年总结

今年地球转得也太快了。听同事说,开始工作以后,地球转速加快是正常现象,结了婚和有孩子后还会有额外加成。考虑到地球转速问题,我想这份总结不宜再拖下去。

一月开始了第一份工作。找工作时还希望可以去办公室呆一呆,后来就变得越来越懒,一周只去一两天。三月初侥幸离开上海,更是在家呆了半年才回来。工作上倒也得心应手,只是工作之外有太多的事情想做——但没有足够的时间和精力。这渐渐变成我最大的困扰。

我不是精力旺盛的人。无论去不去公司,工作之外挤出的时间常常都是疲惫不堪的浑水。在这少得可怜又困倦的时间里,经常纠结该做些什么。要看这本书吗?还是那个电影?写书?做开源项目?最后多半躺在床上听歌玩手机,至多做些明天的规划。

听到一首歌唱:

如果继续这样 / 我还是我吗 / 我还喜欢我吗
或者我应该死去吧 / 总好过变得更差

又听到另一首歌唱:

I don’t want to live like this
But I don’t want to die

音乐也许是解药(不,早起才是)。从张玮玮的演出回来后,有了继续学吉他的念头。十年过去了,是时候开始文艺复兴了吧!买来吉他练习一阵后,想起高中随吉他一起卖掉的那本李志野孩子吉他谱。因为李志被封杀,导致那本吉他谱已经买不到。厚着脸皮翻出十年前的豆邮,问买家能不能把那本吉他谱卖回给我。目前还没有收到回信。

去年开始不再完整记录时间花销,但也有 1815 小时,今年只有 512 个小时(6%)。

在开源项目上投入的时间比写书多了一倍。除了发布 APIFlask 1.0 和 Bootstrap-Flask 2.0,也给 Flask 实现了几个小功能:

  • 给 flask run 命令添加 –debug 选项(#4779
  • 允许视图函数返回列表作为 JSON 响应(#4672

虽然书没写完,倒是更新了《Flask 入门教程》第三版

做了两个演讲,一个是在 COSCon 2022 做的闪电演讲(实际是开源集市的路演,不过摆摊比演讲有意思,还能认识新朋友);另一个是在 Python Meetup 做的关于 Python 和 OpenAPI 的分享(实际是炒冷饭,不过有额外加料)。没记录时间的还有一个在公司做的关于 Python 编程规范的分享,以此还在年底拿到了「2022 年度新秀奖」。

明年会更少记录时间,比如娱乐活动分类就已经存档——开心很重要,不再追究时间了。

这一年因为开始上班而过得平淡乏味,没有太多东西可以总结。仔细回想也有一些有意思的事情,比如工作上发生的各种事情,比如代码厨房俱乐部。打算在另外的文章来写,这里就不展开了。

今年的疫情对我没有什么大的影响。上海为了科学防疫而封城时我躲在老家,农村因为科学放开而瘟疫蔓延时我躲在上海。唯一的影响只有愤怒。因为各种所谓防疫导致的伤害、不公和死亡,还有各种愚蠢言论而愤怒。当然,最后除了骂傻屄,已经没有什么想说。

明年只设一个目标:

希望明年可以多过一些离线生活。希望写完书可以好好放松,好好浪费时间。

P.S. 本文中的「今年」指 2022 年,「明年」指 2023 年。

待业五年后的找工作经历

这篇文章记录了我去年年末找工作的经历。最大的感想是,程序员找工作不一定需要刷题,很多公司是不考算法题的(除非目标就是那些字母组合公司);其次是要有一些公开作品,比如开源项目,这样可以避免被使用某些单一维度评价;最后是不要提前对职位建立太多期待和想象。

2017 年我从扬州大学对面的大专毕业,在家待业五年后,终于没有钱再支撑下去。于是去年十一月开始正式找工作,十二月底拿到第一个 offer。今年年初来到上海,开始了第一份全职工作。

我一直把去某个公司上班看作是一个备选项。这几年经常幻想能写出一本畅销书,或是做出某个创业项目,然后就可以发财一直自由下去。但是基于钱出发的事情都不太有趣,基于兴趣出发做的事情又做得太多,所以钱越来越少,关于收入的焦虑感越来越强,最终只好投降。

个人背景

对于 IT 相关职位来说,我的优劣势大致如下:

劣势

  • 专科学历
  • 土木相关专业
  • 待业五年
  • 零工作经验
  • 技术栈单一(Python/Flask)

优势

  • 技术栈专一(Python/Flask)
  • 参与开源项目的经验(从 2019 年开始做 Flask 的维护者)
  • 一本书(《Flask Web 开发实战》)
  • 一些技术演讲
  • 创建和维护技术社区的经验(HelloFlask
  • 组织技术会议的经验(PyCon China 2019,FlaskCon 2020)
  • 连续三年的微软 MVP 奖项(Python 方向)

从 2016 年实习即回家开始算起的话,我的简历上大概有五年零三个月那么大的空白。不过虽然没工作,这五年也尝试了各种有意思的事情,同时为了获得收入打了一些零工——做了七八个外包项目。

这些外包项目不算优势也不算劣势,但是可以用来填充简历——简历上放了两个开源项目(FlaskAPIFlask)和两个外包项目。而有些劣势也不完全算劣势,比如非科班自学编程,有些 HR/经理会认为不专业,有些则认为这佐证了学习能力和执行力。

求职方向

我对目标职位的三个需求是:

  1. 不加班
  2. 面试不考算法题
  3. 现场(on-site)工作

「不加班」是基本要求,我需要一份正常工时的工作,一来是为身心健康着想,二来是因为我需要有业余时间来写书和做开源项目。

「面试不考算法题」是因为不想浪费时间去刷无聊的算法题。算法题对我来说没有任何乐趣,相比之下,我更喜欢开发 Web 程序和设计 API。

想要一个「现场(on-site)工作」是因为很想去体验办公室生活,顺便体验在不同的城市生活。在家呆了五年后,我也有些厌倦在家工作。太容易过度娱乐和过度工作,模糊生活工作的边界。我想要有一个办公空间来把工作和生活在时间和空间上分隔起来。

国内公司普遍加班,互联网公司普遍考算法题,因此能够满足这三点的只有「非互联网 + 外企」职位。结合我擅长且感兴趣的技术栈(Python Web)和想要去的城市(上海),最终的求职方向是「上海 | 外企 | Python 后端工程师」。

职位搜寻

我在下面这两个地方搜集了 14 个和 Python Web(尤其是 Flask)相关且位于上海的外企职位:

Python 和 Flask 相关的工作还是挺多的,我只收集了上海 on-site 的外企职位,如果扩大范围还可以找到更多。后来我把一些没有来得及投递或已经收到拒信的 Flask 相关职位放到了 GitHub 上。

这两个网站的职位都提供公司网站的招聘链接。我倾向于在公司网站投递简历。虽然没有证据,但我认为这会比在招聘网站上投递更容易被看到。如果招聘网站上直接展示你的资料,比如学历和工作经验,这会降低 HR 打开简历的概率。不过招聘网站可以用来参考薪资范围。

职位投递和面试

我的职位投递策略是只投递自己想去的职位,按照优先级投递,能够拿到一个 offer 就可以。为了把最多的时间投入在优先级更高的职位,我按照意向程度和技术栈匹配程度把这 14 个职位分成了三批。

第一批两个职位在 11 月 20 号左右投递:

  • 育碧:二面挂
  • 博世:口头 offer

第二批四个职位在 12 月 7 号投递:

  • 戴尔 EMC:offer
  • Autodesk:二面挂
  • 万事达:电面通过,后续没有继续面
  • 特斯拉:简历无回复

我统计了每一个职位的时间花销,包括准备面试和面试本身花费的时间。因为不用花时间刷算法题,所以这里的准备主要是:

  • 看出现在职位描述上或是简历技能列表里的相关技术知识,也就是俗称的八股文
  • 练习英语口语,主要是在口语网站上和一些外国人模拟面试对话
  • 了解对应职位和公司,收集相关面经
  • 准备常见非技术问题的回答
  • 准备项目经历介绍
  • 针对每个职位更新简历

育碧

时间花销:22h 21m

  • 11/19 上午官网投递简历
  • 11/19 下午收到约电面时间的邮件
  • 11/25 电面二十分钟,主要聊经历、技术栈和面试安排
  • 11/25 下午收到跳过笔试的邮件
  • 11/26 收到技术面安排邮件
  • 11/30 技术面,一个半小时
  • 12/6 拒信

育碧是一家游戏公司,这可能不应该作为申请职位的主要考量因素,但这的确是最吸引我的一点。哪个喜欢玩游戏的程序员不想去一个游戏公司上班呢?而且入职后还可以免费玩所有的育碧游戏。我把它放到了职位申请列表的最上面。

电面时 HR 告诉我职位对应团队的同事看了我的 GitHub 资料,觉得很惊艳。后续还帮我跳过了笔试环节。不过技术面发挥得一般,有一些算法和 Python 元编程相关的问题没有回答上来。两位面试官在会议室里,声音不是很清晰。

这是我自大学毕业以来的第一次技术面试。在之前的几年里,我有过五六次找工作的经历,大多是朋友推荐,最后因为各种原因不了了之。唯一进入面试的是一个德国的远程工作,因为我的英语水平一般,加上对方有一些口音,所以还没来得及探讨技术话题就匆匆结束了。

博世

时间花销:24h 13m

  • 11/22 中午官网投递简历
  • 11/22 下午接到经理电话,算是电面,聊了经历、技术栈、目标职位的职责,最后约了技术面时间
  • 11/24 技术面
  • 11/25 技术面反馈,布置小作业
  • 12/1 基于小作业的跟进面试
  • 12/2 谈薪资
  • 12/3 口头 offer,协商薪资
  • 中间来回几轮薪资谈判
  • 12/25 HR 回复职位因为疫情推迟招聘到明年二月

博世的职位描述和我的技术栈非常匹配,而且要求看起来很简单。简历处理效率很高,上午投递申请,下午就接到电话。

整个面试过程很顺利。技术面和育碧类似,主要是问 Python/数据库/HTTP/Linux 相关的一些东西。技术面后布置了一个小作业,是实现一个包含特定功能的 Teams bot,给了一周时间。提交作业后的第二天 HR 来谈薪资,再隔一天给了口头 offer。不过 offer 薪资和意向差得很远,我就请 HR 再帮忙协商协商,后来 HR 不知道为什么理解成我拒了 offer。经过几次艰难的谈判后我开始妥协,然而一个月后 HR 回复因为疫情暂停招聘了……

Autodesk

时间花销:13h 25m

  • 12/7 官网投递简历
  • 12/9 下午接到 HR 电话,聊了经历、期望薪资、简单英语对话考察,电话刚挂没多久就收到拒信
  • 12/10 接到另一位 HR 电话,直接约了一面时间
  • 12/13 一面
  • 12/14 HR 约二面
  • 12/15 二面
  • 12/23 拒信

这个职位一开始发生了一些乌龙,后来才明白是因为简历被投递的部门拒了,然后又被另一个部门的经理打捞回来。一面就是经理面,主要聊了我的经历、公司业务和技术栈等等。这位经理很赏识我,整场面试一半时间都在挥动橄榄枝,这给我屡屡失败的面试重新建立了很大的信心。

可惜最终止步于二面,因为有一位面试官对我的稳定性表示担心。二面是技术面,除了一个关于排序算法的问题卡顿了好久才勉强回答,大体表现还不错。

戴尔 EMC

时间花销:10h 2m

  • 12/7 官网投递简历
  • 12/16 接到 HR 电话,介绍面试安排
  • 12/17 连续两场技术面,各一小时
  • 12/22 早上 HR 电话安排终面
  • 12/22 中午终面
  • 12/22 下午 HR 电话谈薪资
  • 12/29 确认薪资和 offer

接到 HR 电话就直接介绍了面试安排,没有聊其他东西。技术面第一场问了很多涉及各个方面的技术问题,还有一段英文对话考察;第二场出了一道简单的算法题,二分查找,不过基于矩阵的变式没做出来。职位描述里除了 Python 和 Flask 还列出了很多我不太熟悉的东西,后来发现这些都没有问。终面是经理面,主要聊一些技术方向、职业规划之类的话题。终面结束后下午就接到 HR 电话谈薪资,29 号确认了 offer。

收到 offer 后非常开心,毕竟是人生第一个 offer,第一时间就开了薯片庆祝:

blank最终拿到 offer 的职位反而是这几个面试里花费时间最少的一个(大部分技术问题相关的准备都已经在前面的面试做得差不多了),也是唯一考了算法题的一个。

万事达

  • 12/7 官网投递简历
  • 12/28 HR 电面,聊经历、期望薪资、简单英语对话考察
  • 1/4 因为已经确认了戴尔 offer,所以取消了后续面试

因为安排太晚,所以没有继续面。后续 HR 说经理对我的简历很感兴趣,问我要不要再聊聊,但我实在不想再折腾面试了。

除了上面这六个主动申请的职位,这段时间还有三个被推荐和邀请的职位,完整参与面试的是下面两个。

Dropbase

时间花销:6h 6m

  • 11/20 收到面试邀请邮件
  • 11/27 一面
  • 12/1 拒信

一个湾区创业公司,技术栈主要是 Python 和 Flask,远程工作。通过 APIFlask 项目找到我。这个职位看起来很不错,不过我当时更偏向找一个 on-site 工作,所以没有花太多时间准备。面试是和两个公司创始人聊天,没有考算法题,一周后收到了拒信。这个职位现在仍在开放,感兴趣的朋友可以试试看。

AWS

时间花销:29h 40m

  • 11/16 内推提交简历
  • 11/17 HR 电面,聊经历、期望薪资
  • 11/23 一面
  • 11/25 拒信

在 AWS 工作的朋友推荐,职位是解决方案架构师,这是我第一次了解到这个职位。30 个小时时间花销大部分是用来准备 Amazon Leadership 和 BQ 问题。一面挂,38 分钟。

备选职位方向:开发者布道师

在十一月底搜集和投递 Python 后端方向的职位之前,我先在开发者布道师(Developer Advocate)方向做了一些零星尝试。这个方向可以申请的职位并不多,而且大多和 Python 没有关系。最终只面了两个职位,均止步于一面。

这个职位的日常工作基本都是我擅长和喜欢做的事情:写作、演讲、分享、教学。如果目标职位的产品和我的技术背景接近的话,我就可以继续在喜欢的主题(Python)产出内容。

一开始是朋友推荐的职位:

  • Nebula Graph:一面挂

面试后我继续申请了几个职位。下面这几个职位除了最后一个都是通过 Google 搜索关键词「Developer Advocate China」找到:

  • TigerGraph:简历无回复
  • JetBrains:一面挂
  • AWS:简历无回复
  • Jina AI:一面后转到后端工程师方向,所以没有继续面

微软

时间花销:22h 30m

第一次了解到开发者布道师这个职位是在四月份,当时微软第一次在国内招聘开发者布道师,朋友推荐我去试试。

我一开始认为自己是非常合适的人选,后来发现这个职位更希望候选人有 Azure、AI 相关的背景(职位名称是 Cloud Advocate 而不是 Developer Advocate)。折腾了很久,最后并没有拿到面试机会。后来微软有一个面向 GitHub & VS Code & Open Source 的开发者布道师职位,看起来更适合我,不过没有在国内开放。

因为我在捕蛇者说一期播客聊到了这件事,所以有朋友推荐了 Nebula Graph 的职位。

Nebula Graph

时间花销:35h 29m

  • 10/12 一面

这是一个面向开源数据库项目 Nebula Graph 的「社区布道师」职位,对我来说是完全陌生的领域,所以有很多准备工作可以做。初次接触后我就迅速下单了两本图数据库相关的书(不过一本看了开头,一本还没拆封)。花了一些时间快速熟悉 Nebula Graph,在这个过程里发现了很多网站、文档、项目上的问题,所以就把这些问题整理了下来(见这篇《Nebula 网站和项目捉虫》)。然后陆续给他们的几个项目提交了一些 PR(代码贡献)。

一面后,我继续提交了一些 PR,作为「如果入职的话会帮忙做哪些改进」的提前展示。不过后面就再也没有收到关于下一轮面试的回复。直到一个月后的某天,HR 提起我上个月的 PR,按照社区规则要给我寄纪念品。微信对话的最后,我问 HR 对上个月的面试有没有什么反馈和建议,但是对方似乎没有看到这条消息。为了打捞学习图数据库沉没的成本,之后我继续投递了 TigerGraph 的布道师职位,结果一沉再沉。

不过没关系,我很快发现了更喜欢的开发者布道师职位——PyCharm Developer Advocate。

JetBrains

时间花销:23h 49m

  • 10/14 官网投递简历
  • 12/3 收到 HR 邮件
  • 12/6 一面
  • 12/22 收到拒信

JetBrains 的 PyCharm Developer Advocate 是这一批开发者布道师方向里最喜欢的职位,因为这和我目前擅长的技术领域一致,我可以继续做和 Flask/Python 相关的事情,不用盖新房子。

十月用 Google 搜索到这个职位,顺手就投递了。中间几次找在 JetBrains 工作的朋友打听,但是一直都没消息。十二月初终于收到 HR 的邮件,约了三天后面试。

收到邮件后,我开始幻想入职这份工作要做些什么,兴奋到很晚才睡着。其实早在申请职位的时候我就已经做了一番规划并注册了 hellopycharm.com。收到回复的第二天,我写了一封表白信放在 hellopycharm.com 上(然后在回复邮件时不经意地提起这个网址):

blank

当时 JetBrains 刚刚在上海成立了分公司,取名捷并思,但我更喜欢「喷气脑」这个名字,所以之后还注册了 penqinao.com,放了一个 logo 在上面:

blank

面试的前几天刚结束另一场英语面试,所以语言问题不大。而且我还在某个英语口语网站上找到同样来自捷克的另一位 Monika 来模拟面试(JetBrains 的 HR 也叫 Monika)。

月底收到拒信说她们希望找到一位有数据科学背景的候选人,不过我在面试时就问过这个问题,她们回答说没关系……

不过还是没关系,对我安慰作用最好的一种说法是,开发者布道师的工作对现在的我来说不是最佳选择。

我在过去几年做演讲和写文章都是跟随自己的兴趣和关注点,如果变成为某个公司的产品/项目——尤其是一个新的领域——做大量的输出,一定没法再像之前那样轻松愉快。另一方面,这类职位的公司也许更想找一位有很多年工作经验、技术栈丰富的人,而我正在找第一份工作,我还只会 Python。

PyCharm 这个职位收到拒信后,我就决定放弃这个职位方向。先做一个后端开发职位会是更好的选择,这样我就可以继续按照自己的喜好演讲和写作,没有任何拘束,而且也有时间踏实学东西,多做积累。

总结

在网络上经常看到有人每天都刷算法题(LeetCode),在无形中制造了一种不刷题找不到工作的紧张气氛。这次找工作才发现不一定需要刷题。有一些公司是不考算法题的,比如大部分非互联网行业的外企和某些创业公司。还有一个 GitHub 仓库记录了所有不需要白板测试(算法题)的公司名单,对应的网站可以用来检索所有不考算法题的开放职位。如果实际工作只是 CRUD,那么实现一个小项目,或是抽象一个公司产品的小功能出来远比考算法题有意义得多。

即使不用刷题,找工作也是一件很累的事情。要承受别人的否定,会认识到自己的局限和不足,然后还有无穷无尽的等待,等待充满随机性的结果。

更糟糕的是,我对每一个投递了申请的公司和职位都建立了太多的期待。除了面经,我还会收集每一个公司的各种信息:公司位置、公司评价、工作环境、周边环境,甚至附近有哪些合适的房子可以租。对于拿到面试机会的两个布道师职位,我都规划了入职后会做什么,具体到可以做的演讲主题、示例程序和教程,并且还提前注册了一些域名。当这些职位收到拒信后,这些期待和规划就全部落空。

经常会觉得自己是某个职位的最佳人选,然后就煞有其事地在晚饭时告诉家人接下来我即将会去哪个城市哪个公司上班……

12 月 22 号到 12 月 28 号是最黑暗的一周。22 号收到 JetBrains 拒信——最喜欢的布道师职位;23 号收到 Autodesk 拒信——最受赏识的职位;25 号博世回复暂停招聘——离 offer 最近的职位。如果没有拿到戴尔的 offer,那就要继续投递第三批职位,经历更多的面试和拒信,想想就后怕。

最后要感谢很多在这段时间提供帮助的朋友们。感谢辛庆老师、思为、清蒸、Aleck、伊洪、Tzu-ping Chung、Joshua Bronson、大妈、琚致远还有其他在 Twitter 和微信上给我推荐工作机会的朋友们;感谢开发者布道师前辈们——Anthony Shaw、思为、朱兴亮和范圣佑提供了很多面试建议;感谢职场前辈张晋涛老师在入职前给我科普了很多职场经验。

同时感谢每一个给我面试机会的 HR 和经理(尤其是戴尔 EMC 的 Fiona 和 Kui),不管我是千里马还是百里马,你们都是我的伯乐。

2021 年总结

今年一整年都呆在家里。书断断续续地写,但一本也没写完。最后两个月,因为钱花光了,终于下定决心开始找工作,最终在 2021 年最后几天拿到第一份工作的 offer,结束了近五年的自由职业状态。这个 offer 给这一年画上了一个圆满的句号,我也从此跳进这个圈,开始一种稳定循环的新生活。

先从好坏两方面总结今年。

Good

Bad

  • 三个年目标全部落空:两本书都没有写完,APIFlask 也没有发布 1.0 版本
  • PyCon US 2021 演讲议题申请没通过(备选的闪电演讲通过了)
  • 找工作收到拒信若干封

今年尝试了很多新鲜的东西,比如第一次录播客、第一次参加圆桌、第一个英文演讲、第一场足球赛、第一份工作。今年也开始更活跃的使用 Twitter,并且重新捡起来被荒废的 PyCon China 账号。

从下半年开始,经常感觉很焦虑。一方面是因为写书进度缓慢,不知不觉一年又已经过半。另一方面是因为收入——今年拿到的稿费很少,加上不想浪费时间做外包,因此收入锐减。既没有挣到钱,也没有做成事,在这些压力下常常心情也不好,所以自觉失败。

时间记录

今年没有再完整的记录时间花销,去年一年的实验已经让我了解自己的时间花销情况。再继续意义不大,一来记录本身就会浪费很多时间,二来过于追求效率和生产力会让人感到疲惫。因此这一年只记录了一些重要的活动分类。

总记录时间一共 1815 小时(约占全年时间的 20%),其中前三项分别是:

  • 开源项目:535h 50m
  • 找工作:204h 37m
  • 游戏:200h 55m

完整的数据如下:

blank

开源项目时间基本都集中在年初,当时花了几个月时间开发 APIFlask。年中 Flask 2.0 发布后帮忙修了几个 bug,年底给 Bootstrap-Flask 发布了支持 Bootstrap 5 2.0 版本。

找工作集中在最后两个月,不过投入时间最多的几个职位都没有拿到 offer。晚点会在另外一篇文章详细记录找工作的经历和感想。

游戏时间大部分花在了最后一个月开始玩的《塞尔达传说:荒野之息》。这个游戏在年初就和 Switch 一起买了,因为怕花掉太多时间一直没有玩。在找工作等待面试答复的漫长煎熬过程中,什么事情都不想做,所以躲到游戏里。

时间花销排在第六位的写书,本来应该是我的主业。之前完成两本书的阻力很多,比如要解决收入问题,要整理第一版的旧文件排版,还要完善 APIFlask 并发布 1.0 版本。而目前来说,完成它们的最大阻力则是时间太少。工作之后,除了周末两天,每天只有下班后六点到十一点这个时间段才能做自己的事情。再去掉吃饭时间以及偶尔的散步、看电影、玩游戏、做开源项目……不过好在我可以在这个时间段专心做事,没有收入焦虑。

时间花销排在最后的是阅读。今年又没读什么书,记录在案的阅读时间只有 55 分钟……想想大概是在读《非暴力沟通》,不过读了个开头就用来垫枕头了。枕了那么久,也许会吸收到一点点灵气吧。

新年目标

因为 2021 年的三个年目标一个也没完成,所以 2022 年仍然是这三个:

2021 年 Flask 用户调查报告

七月份创建了一个 Flask 用户调查问卷,到目前为止一共收集到 104 份提交,感谢各位的参与!这篇文章会对问卷收集结果做一个总结,作为一份(非官方的)2021 年(104 位中国)Flask 用户调查报告。

如果你想自己看原始数据,下面是剔除了隐私信息的问卷提交数据文件(CSV 格式):

https://helloflask.com/downloads/flask_report_2021.csv

blank

如果你现在还想参与的话,完全来得及,下面是问卷的地址:

https://jinshuju.net/f/UY6Rd8

你在工作中使用 Flask 吗?

在提交的 104 份问卷里,接近一半的人在工作中使用 Flask,详情如下:

你在工作中使用 Flask 吗?

算上我,还没找到工作的人竟然只有 5 个(《震惊!某份民间调查显示 Flask 用户无业率仅有 4.8 %!》:P)。

Flask 中文文档标语翻译

前段时间发起了 Flask 中文文档翻译,目前正在龟速进行中,欢迎英语比较好的同学参与(翻译或审核已经提交的 PR)。文档首页的 logo 图片里有一句标语——「web development, one drop at a time」,我临时翻译为「Web 开发,一次一滴」。在 GitHub 仓库的讨论里,大家给出了更多更好的备选项。根据这次问卷投票的结果,「Web 开发,起于点滴」排在第一位(由 HelloFlask QQ 群里一位翻译专业的同学翻译),详情如下:

Flask 标语翻译

更保险的选择是「不作翻译」,在投票中排在第二位,最终我会考虑从这两者之间选择。另外,如果翻译的话,如果翻译的话,「Web」会考虑按照英文近年的惯用趋势而使用全小写(你觉得呢?​)。

P.S. 在 GitHub 上的投票结果里,@abersheeran 翻译的「Web 开发,起自微毫」和「任取随用的 Web 框架」票数最高

对 Flask 的新功能请求 & 改进建议

剩下几个问题不方便详细统计和展示,我粗略看了一遍,整理出了关注度最高的几件事。我一一在下面评注了我的想法以及相应的动态。

添加更多 Web API 开发支持

开发接口时自动生成swagger

对 Web API 很友好的支持

加入pydantic用于类型检查

Flask 作为一个通用型框架,不会添加太多关于 Web API 这种细分方向的支持。除了手动集成这些功能/工具,你可以考虑选择基于 Flask 而且集成了这些功能的二次框架,比如 APIFlaskflask-smorestSpectree 等。

添加基于 ASGI 的异步实现

加强对异步的支持

异步支持的不是很成熟

可能是速度吧,据说现在很多新框架都比Flask快,要淘汰Flask云云

Flask 目前的异步支持已经能够满足大部分使用场景。据我所知,基于 ASGI 的异步支持短期内不会实现。

而对于鼓吹性能的文章可以不用太在意:异步和高性能不直接划等号。技术选型不会只考量性能。benchmark 未必客观和能够反映真实情况。如果对异步有强需求,可以考虑用和 Flask 相同 API 的 Quart(一个 Flask 的 ASGI 异步实现),或是换用其他异步框架。

官方维护的扩展列表

一个针对新手的 flask extension 的指南

由Pallets Projects开发团队的成员或者flask官方统一所有第三方插件的开发与发布,目前太乱了,有些都快停更十年了,还占用名字。

各种插件扩展选择太多,但是又质量层次不齐,此外很多个人维护的扩展可能由于开发者精力有限在后期会出现项目生命周期的问题,如:flask_restful,需要官方对常用扩展维护一套比较简洁的扩展。当然这样的话可能又走上了Django的老路,可能作者正在计划的“Flask扩展收容计划”是一个不错的选择,起码可以管理起来。但是脱离原作者维护的项目后期发展如何又成为另一个话题。比如需要对插件进行遴选,另外需要对该计划由官方进行宣传等

这件事我之前有计划在做,前段时间注册了 flaskextensions.org,想用来做一个这样的扩展推荐列表。在 Pallets 会议上沟通之后,决定交给 Pallets 官方来做,所以把域名转给了 Pallets 团队,后续会做一个这样的列表出来:列出来推荐的 Flask 扩展,并给出失去维护扩展的替代品。

另外 Pallets 在 GitHub 创建了一个 pallets-eco 组织,用来收纳失去维护(维护者不想再继续维护)的流行 Flask 扩展,让它们保持健康的维护状态(由社区维护)。目前有两个扩展进入这个组织,分别是 Flask-CachingFlask-OpenID

脚手架工具和大型项目组织

统一并明确开发的工程化流程,包括项目应该新建那些文件夹等。

缺少小白懒人快速一键生成集成框架(webadmin, mysql)

引入蓝图想搞玩大型项目,可大型项目又需要自己组织好项目结构,需要一个对flask很熟悉的人做这事 还不如用django。官方推一个脚手架生成项目模板吧像vue-cli一样 包括是否使用orm等插件,不然还不如django搭建起来快。。

作为一个微框架,Flask 的初衷是不限定项目文件组织形式,所以官方不太可能会出一个脚手架工具或是项目组织指南。在工厂函数和蓝本这两个概念的基础上,你可以自由组织你的项目。另一方面,市面上已经有很多项目模板或是脚手架工具(比如 cookiecutter-flask),也有很多介绍 Flask 项目组织的文章,你可以根据这些工具和文章制定自己的规则,然后为你的组织或团队确定一个项目组织规范或是写一个脚手架工具,或许这才是 Flask 的「正确食用方式」。如果你更需要一个固定的项目组织模式,那么 Django 或许是更好的选择。

我也有计划写一个更简单的脚手架工具(对我来说市面上那些都太复杂,引入了太多扩展和工具),同时给出一份 Flask 项目组织建议,这件事也许会在写《Flask Web 开发实战》第二版的过程里完成。

Bootstrap-Flask 的 Bootstrap 5 支持

Bootstrap-Flask 希望可以早点同步 Bootstrap5 的相关内容。因为Bootswatch的最新版本有我想要使用的组件,但是Bootstrap-Flask只支持到Bootstrap4,所以有些宏无法正常显示,比如render_form等。还有希望Bootstrap-Flask的wiki能够更加的完善和细节,我会持续关注,大佬辛苦

提交的问卷里有一条说到这件事,此前在 TwitterGitHub 上也有人提到,所以也放到一起说一下。我已经在做这件事了,基本的 Bootstrap 5 支持已在 #161 完成,完整的实现会在下个月完成(详见 #162),届时会随 2.0 版本发布。

除了这些,提交的问卷里还有很多其他的建议和问题,我没法一一回应。有时间我会看看问题里提出的问题有哪些我可以试着解决和改善。同时也欢迎你一起尝试解决这些提出的问题,感兴趣的话,去翻翻上面给出的问卷数据吧。

总结

总体来看,Flask 社区在朝着好的方向发展,希望明年这里提到的大多数计划都会有着落。一起加油!

P.S. FlaskCon 2021 会在今年 12 月举办,如果你有 Flask 相关的内容想分享,欢迎报名(英文,预录制演讲)。


相关链接:

2020 年总结

2021 年已经过去四个月了,每次到某个重要的时间节点都想完成这篇 2020 年总结,结果总是有各种事情挤占时间,所以错过了元旦、错过了大年初一、错过了 26 岁生日、错过了植树节和愚人节,最后来到这一天。

照例,先从好坏两方面总结一下。

Good:

Bad:

  • 尝试翻译一本英文书,但是试译稿没有通过编辑的质量要求
  • 没能按计划完成新书(延期两年了)
  • 组织「编程一小时」活动失败
  • 一次失败的外包合作
  • 玩太多游戏

很高兴我的书和项目在这一年帮到了更多的人:

感谢留言

而且我的读者群已经扩展到小学五年级了(继上一次某位正在上初中的读者邀请我评审他用 Flask 做的博客程序后)。如果还有三年级或是一年级的读者小朋友,记得吱一声 :P

2020 年只写了 23 篇文章,花了比较多时间写的是下面这几篇:

相比之下,文章数量要比 2019 年少 40 篇,也许是因为这一年花了更多时间来挣钱(虽然最后没剩下多少)。年初做了一个糟糕的外包项目,烂摊子接手,慢慢明白转手的原因,最后以没有拿到尾款结束。这之后就更谨慎了,半年时间里只做了一个微信小程序的后端 API。

除此之外,第一次通过写文章挣到了钱——给 Twilio 博客写文章的稿费。第一篇文章是做一个协作白板,因为 SocketIO 有一个类似的示例程序,所以做程序加上写文章只花了 17 小时 34 分钟。但是第二篇文章就没那么幸运了,这一篇做一个演讲程序,因为 Twilio 文档写的不是很详细,所以卡在程序实现上很久,断断续续花了两个月,最终耗时 50 小时 24 分钟,时薪骤降。

今年的收入大部分都用作房租和生活开支了。买了一个很大的显示器(43 寸),不过并没有让写书进度加快……买了 Switch,玩了一段时间《喷射战士 2》(Splatoon 2,拒绝官方译名),偶尔还会换回一代玩,喜欢第一代 Carbon Roller Deco 和 Rainmaker 鱼头的无敌效果。

去年在年总结里说要重新开始记录时间花销,说到做到,2020 年记录在案的时间一共 8769 小时 48 分钟(99.8% 覆盖率):

时间花销饼图

P.S. 上面的分类是时间大类,其中娱乐包括游戏(491 小时 4 分钟)、电影电视剧(283 小时 39 分钟)和上网(269 小时 22 分钟);休息时间大多是不同事项之间的切换和走神时间;工作包括外包开发(332 小时 49 分钟)和开源项目(136 小时 47 分钟);写作包括写书(158 小时 50 分钟)和写文章(129 小时 58 分钟);​学习包括学编程(101 小时 16 分钟)和学英语(81 小时 52 分钟)。

下面是包含所有时间分类的年度柱状图(紫色系是睡觉和吃饭,黄色系是外包和演讲,绿色系是开源项目和写作,蓝色系是清洁活动,红色系是娱乐):

时间花销柱状图

这也很好的解释了为什么这一年没有太多成果:玩了太多游戏,在各种网站上转来转去,写书的时间甚至没超过写文章多少。

2021 年开始没有再记录详细的时间开支——完整记录时间太花费精力了。比起每天的详细时间花销数据,我更关心的其实是有没有达到设定的时间目标,所以现在改为只记录两类时间:一类是想要达到的时间目标,比如写作、编程和学习;另一类是需要限制的时间花销,比如娱乐(计划 2021 年娱乐花销控制在 500 小时以内,目前是 123 小时 44 分钟)。

年底和女友一起离开了南京,接下来整个 2021 年都会呆在家里,目标是完成下面三件事:

  1. 完成《Python Web API 设计与开发
  2. 完成《Flask Web 开发实战》第二版
  3. 完成 APIFlask 的 1.0 版本

2020 暑假总结

最后一次写暑假总结是在 2016 年,之后因为不再上学,也就没有了暑假这个概念。今年夏天回家呆了一个月,算是自己给自己放的暑假。

农村像是冰箱下面的冷藏室,时间在这里不会产生多大作用。也正是这样,你一下子就能看出有哪些新变化。首先是家里的狗生了七只小狗,因为胎盘没及时去掉,死了三只。然后家里的蚂蚁似乎变多了,在院子里扔一小块饼干或西瓜,过一会就会看到密密麻麻的蚂蚁趴在上面(拔菜园里的花生时发现三个蚂蚁窝!)。除此之外,一切几乎都是老样子:狗总是热得吐舌头。西瓜甜不甜要看运气,但价格大都不到城里的一半。附近的工厂有时会在早晨制造噪音,半夜偶尔还会听到邻居用「古法洗衣」时棍子敲打衣服的声音*。

夏天全家人一起吹空调吃西瓜看电视是很幸福的事情,我试图想把我和瑶瑶都很喜欢的《请回答 1988》推荐给大家,但也许是每一集太长,或者是语言和文化差异的缘故,大家并没有表现出很大的兴趣。不过我们还策划了一次去水上乐园的短途旅行,这一次大家都玩得很开心。

暑假像是一年的短暂中断,一个可以喘口气的中场休息。上学的时候暑假让我从无聊痛苦的学校生活里抽离,而现在则可以临时放下各种喜欢和不喜欢的工作。我用这段时间清理掉了上半年积攒下来的一堆便签和纸片,整理了电脑上的各种笔记、杂乱文件和标签页。修正了年目标,因为一年过去大半,所以有些不切实际的目标自然就变得非常明显,现在只好先放弃掉。剩下的几乎就都是娱乐时间了。

《皇室战争》玩到了大师联赛,然后就有点厌倦,估计下半年都不会想再玩(不过无限圣水模式实在太容易沉迷了)。因为想找一个联机游戏和李家玩,又安装回了 Steam,找到大学时买的《兽人必须死 2》。结果他沉迷在 Epic 免费领的 《GTA 5》,我就只好自己玩。接着大学时的进度通了关,然后玩了很久的无尽模式(Endless)。像我这种喜欢整理和规划的人大概都会喜欢这种塔防游戏——可以把所有空间完美的利用好,天花板、墙和地面上每一个防具都摆放的整齐对称。但是无尽模式实在太消耗精力,每一局都会让眼睛和右手累的不行,最后止步于 44 波的最高成绩(放弃的另一个原因是解锁所有武器和技能太耗费时间)。玩的时候有时会想自己面对的敌人不过是每一波都增加了几个数字的难度变量,有一种被代码控制和愚弄的意味……

也不是完全没有成果。花了一些时间来更新 Bootstrap-Flask,发布了 1.5 版本,接下来一段时间可以把它放一边了。给 Flask 书的示例程序 SayHello 加了一个验证码功能。从去年开始就有人在这里灌垃圾留言,直到现在才下决心清理和阻止(一共删掉了 9083 条)。说是验证码,其实只是加了一个验证输入值是否是「宝塔镇河妖」的文本输入框……不过在垃圾留言程序弄明白规则之前应该都没问题。最后还把大部分 Python 的 Web API 相关工具库的文档都看了一遍。

暑假里大部分时间都被随心所欲的花掉了,但我并不把这看作浪费,如果暑假时间也要全用来学习和工作,那生活就太无聊了。这样想的话,在小时候的暑假,写作业是浪费,玩游戏、在门前发呆和出去玩就不是。现在的暑假呢,为别人工作是浪费,做自己喜欢的事情就不是。


*比起在南京时楼上孩子练习长跑和玩积木的声音、楼下孩子半夜的哭闹和夫妻吵架的声音,家里的这两种倒更容易忍受,至少你知道什么时间能结束。

2019 年总结

从 2019 年的日程本来看的话,越往后面字越潦草,涂鸦和乱画也越来越多。总的来说,2019 年偏离计划太多,虽然有一些计划外的收获,但年初定下的目标大都没有完成。从好坏两方面总结下:

Good

Bad

  • 玩游戏太多
  • 学东西太少
  • 看书太少
  • 产出太少
  • 收入太少

写作

一月份完成了电子书《Flask 入门教程》,虽然是免费电子书,但也在书里放了一个付款二维码(定价¥10),目前收入快接近 400,大概能证明自愿付费不太可行(也可能是因为我一开始错误的把付款二维码放在了后记里 )。2019 年快结束的时候,收到两笔记忆深刻的付款——一份是来自知友 CycleUser 的 66 元巨款,另一份是来自*昱的 2 块钱定金(现在还没收到剩下的 8 块……):

blank

上半年剩下的时间写了新书的第一部分,然后就开始投身到准备演讲和 PyCon China 里了。年底从疯狂的忙碌里安静下来,又回过头来更新了年初写的《Flask 入门教程》,然后花了两个月把上半年写的书稿重写了一遍。

游戏、书和电影

2019 年没怎么看书,Kindle 被闲置到电池故障。电影和电视剧看的也不多,两者分别最喜欢《守望者》和《废柴联盟》。游戏倒玩了不少,和瑶瑶一起通关了《超级马里奥 3D 世界》,《超级马里奥银河》进度玩到 30%,其他大部分时间都在玩《喷射战士》。

2018 年沉迷《皇室战争》,浪费了很多时间,所以在新年计划里加了一条「2019 年不玩皇室战争」。一年过去了,说到做到,但是又沉迷上了《喷射战士》……单场最高战绩是 16 杀,不过最喜欢 0 死 12 杀这一场:

blank

为了避免重蹈覆辙,元旦开始放任自己玩了两天游戏后,打算执行「2020 年不玩皇室战争和喷射战士」计划。但是想到那样生活会少了很多乐趣,所以现在又改成春节后再开始执行这个计划 :P

今年计划把书架上大部分的书都读完,通关手里的游戏,在这之前不买新的书和游戏。

演讲

2019 下半年大部分时间都花在了五个演讲上。输出太多输入太少,本该学的很多东西只好又推到新的一年了。因为经验太少,也没法像其他前辈那样可以在很多话题上游刃有余的自由发挥。收获是了解了怎么演讲,变得不那么容易紧张。

这几次演讲里,在台湾 COSCUP成都 PyCon China 的演讲反响最好,和别人交流的也最多,有很多人因为 COSCUP 那场演讲认识我。参加这几个技术大会也认识了很多的前辈和朋友。

除了准备演讲,19 年还完整参与了 PyCon China 2019 的筹备工作,有很多想法,有时间单独写篇文章。想起来这几次参会的总结文章还都在草稿状态,虽然已经是 2020 年了,我还是要写完它们的 :/

其他

五月份来了南京。这一年仍然没工作,靠《Flask Web 开发实战》的稿费和几个外包项目的收入维持生活开支。每次钱花得差不多,已经在翻招聘网站、了解面试技巧的时候,总会有一笔不多不少的稿费让我可以再拖一段时间。就这样一年又过来了。

很感谢女朋友没有反对我不工作,而且还乐观的和我过这种有点拮据的生活。19 年在自己的事情上投入太多的时间,对她的陪伴和关心不够多,今年要多和她出去玩。

2020 计划

今年的重点是这三件事:

大部分时间还是会用来写书。除了写书,还会尝试录一个视频教程。编程有太多的东西要学,只能先专注流行和基础的东西。保持时间投入,不强求成效。英语的话,虽然 19 年是真正开口说英语最多的一年,不过并没有什么实质性的提高,还需要大量输入和练习。

2018 年因为写书的生活非常单调,所以停掉了时间记录(要不然我就能清楚知道自己在游戏上浪费了多长时间了),今年重新开始记录每天的时间花销,年底来分享数据。


年总结还是要在当年完成,这样就不用纠结「今年」和「明年」两个词的用法。

博客改版

可以自由控制博客的样式,大概是独立博客最显著的优点之一。个人博客像是自己的房子,你拆墙打洞,想怎么弄都行,而其他社交网站和博客平台则像是精装修的出租屋,一切都是房东说了算。昨天花了很长时间给博客动了一次大手术。一直觉得传统博客的两栏布局很多余,边栏在所有页面都会显示,干扰正常的阅读。而主边栏包含文章摘要,每页只能显示很少的文章,阅读起来也不够方便。单从阅读的角度看,单栏布局+全部文章列表才是最合理的设计。

这次的调整对博客各个方面都进行了简化,尽可能多的去掉页面上的噪音(干扰信息):

  • 去掉所有页面的边栏。
  • 随着边栏一起去掉的还有边栏上的“Unfortunately not Flask powered”徽章、站点统计信息、日历挂件、文章分类、月度归档、标签和近期文章。
  • 因为没有了边栏,除了文章正文页面,外部不再有分类、标签和月度归档的入口,搜索框放到了博客页面底部。
  • 去掉了背景图片。
  • 博客主页使用年度归档文章列表,跟摘要说再见了。
  • 所有插件的语言改为中文。
  • 去掉导航栏的想法分类,以后短想法也采用标准文章格式。
  • 页面宽度缩减到 860px。 优化了评论框的宽度,修复了响应式问题。
  • 简化了相关文章扩展的样式,文章标题去掉粗体显示;提示文字使用 `<p>`,而不是 `<h3>`,上方添加一个分割线。

这次调整后,未来大概很长一段时间里都不会再有大变化了,除非是更换博客引擎(以前考虑过换用静态博客引擎,但是因为旧文章不方便迁移,所以迟迟没有动手)。未来考虑会在细节上再进行一些优化:

  • 去掉“相关文章”插件。
  • 去掉“图片弹窗”插件。
  • 去掉 Google 统计的代码,似乎对我没什么用。
  • 个人主页使用和博客页面统一的样式。

2018 年总结

和去年一样,又为写书花掉了一整年,这一年最大的感受就是累。上半年因为拖稿很焦虑,写完后又因为内容写太多了(700 页),审稿审到想吐,这也导致成书有不少笔误……出版后轻松不少,但生活开始充满了各种各样的杂事:推广新书,整理源码,打击盗版,回复读者提问,整理勘误,更新网站。几个月里,我的角色不停的在销售专员、客服、售后、技术顾问之间换来换去,以至于都快忘了我只能拿到 9% 的版税。而到手的一万多稿费,买了新的电脑和手机后就花的差不多了。反正我是再也不会写那么厚的书了,我发誓。

话虽这么说,我倒挺喜欢这种生活方式,有种做手工艺人的感觉,而且书写完了会有很大的满足感和成就感。

成果

这一年大概有下面这些值得记录的成果:

时间花销

这一年仍然没有进行时间统计,大概的时间花销如下:

  • 1~5 月:写作,最终在五月底定稿
  • 6 月:完善书相关的项目源码、追加多次书稿修改
  • 7 月:部署 5 个项目的在线 Demo、上线网站 helloflask.com
  • 8月:为书发售做准备、写多篇文章
  • 9 月:书发售、写文章、推广书、送书
  • 10 月:写文章、处理盗版、整理勘误、回复读者提问
  • 11 月:准备并参加 PyCon、处理盗版、整理勘误、回复读者提问
  • 12 月:做外包项目、写《Flask 入门教程》、处理盗版、整理勘误、回复读者提问

其他

和去年一样,除了翻过几本技术书外,今年几乎没有看什么书。电影的话,留下印象的只有最近去看的龙猫和无双,而音乐一直在重复旧的播放列表。这一年运动也严重不足,长时间使用电脑导致手腕和手指不太舒服(翻了下统计数据,上半年每天鼠标点击的次数在 2000~4000 左右,击键次数在 15000~30000 左右),期待意念键盘和鼠标早日发明出来。因为写作占用了大量时间,技术进步并不大,学习的内容也都局限在 Flask 和 Web 两个领域,明年需要扩展学习的范围。

2019 年做什么?大概是恢复正常的生活节奏,清理掉过度收集的信息,再学一点新东西(或许再写本书 :p)。

2017 年总结

因为写书的事情忙的晕头转向,以至于这篇2017年总结到现在才写。2017年是个特别的一年,基本上全年都待在家里,全职写作《Flask Web开发实战》这本书。

编程

开源贡献

为多个开源项目贡献了代码,不过大部分都是在对文档进行修补和更新,有时间会写一篇文章来总结一下。

2017 Contributions 情况

2017 Contributions 情况

Web程序

花费较多时间编写了书里的几个示例程序,除了一堆简单的示例程序,相对完善的程序包括留言板、个人博客、图片社交网站、待办事项程序、聊天室(这几个程序的介绍可以在这篇文章看到)。

Flask扩展

随书衍生了几个扩展,除了作为扩展编写示例的Flask-Share,其他的扩展分别是:集成Dropzone.js(文件上传处理)的Flask-Dropzone、集成CKEditor(富文本编辑器)的Flask-CKEditor、集成Bootstrap并旨在替代缺乏维护的Flask-Bootstrap的Bootstrap-Flask以及提供各种头像处理功能的Flask-Avatars

写作

在Stack Overflow上答题

写了大约50个答案,Reputation由535上升到1300左右。

2017 Reputation情况

2017 Reputation情况

知乎专栏Hello, Flask!

知乎专栏Hello, Flask!只在年初写了几篇文章,2月后就没有更新,不过专栏关注人数由2016年的2500上升到6000。

写作《Flask Web开发实战》

从3月开始写作,原计划10月份结束的《Flask Web开发实战》,一直到2017年末都没有结束(仅仅完成了初稿)。

阅读和其他

这一年没有真正意义上的读书,只翻阅了几本写作过程中用到的技术书。

这一年的生活方式因为这本书的写作而完全改变,有时间会写一篇文章来总结这本书的写作过程。虽然没有进行时间统计,但这一年大部分时间都在进行Flask书的写作和相关编程工作。同样因为这本书的写作,大部分的2017年计划都直接移动到2018年计划中了。

2016 年总结

编程

今年只做了几个小Demo。从GitHub的提交可以看出来,一到寒暑假,工作就断断续续了。

github

 

在Stack Overflow回答问题

从九月开始在Stack Overflow上答题,一共写了35个回答,获得535reputation。

stack overflow

 

写知乎专栏

从十一月开始,在知乎开了一个关于Flask编程的专栏,写了30篇文章,获得2000+关注。

column

 

阅读与写作

今年看了60多部电影 (下半年太多),却只看了8本书。最喜欢的书是《故事新编》和《黑客与画家》。

movie_count

2016观影量

写作上,博客80篇加上专栏的30篇,算是完成了之前订下的写作计划(100篇)。

 

时间统计

从元旦开始,停止了时间统计。离开学校后,生活上的变数太多,没法像以前那样控制时间,改用设定每天的任务来管理日常了。这是下半年(9~12月)的时间数据主要项目:

  • 编程:470小时
  • 阅读:77小时
  • 写作:98小时
  • 英语:28小时
  • 运动:34小时
  • 娱乐:184小时

从时间统计来看,编程时间增加了很多(是原计划的两倍),写作超量完成(多了40小时),其他计划都没有达标,娱乐更是超出了84小时(原计划不超过100小时)。其他还有一些很明显的趋势:睡眠和娱乐越来越多,编程和阅读越来越少。

同时,下半年计划里的大部分内容都没完成,完成量大概只有50%左右。