2019 年度总结 | 掘金年度征文

3,045 阅读17分钟

今年的总结比去年更丰富一些,在各方面都有了长足的进步。

工作

明年就是在公司的第五年了。在过去的一年中,除了按部就班的完成各项需求外,还主动做了些有价值的事情:

  • 继续推进项目 Swift 化。在我一整年的代码中,没有产生任何新的 OC 文件,并且用 Swift 重构了大量旧的 OC 代码。如果遇到需要 OC 调用新代码的地方,全部使用 Swift 编写桥接文件。虽然这样会累一点,但是项目未来的收益会很大。
  • 搭建打包环境。分离了开发到测试的打包环节,也支持测试包的简单管理,属于流程上的优化。现在需要打包给测试时,只需要将代码推到指定的 git 分支即可,测试那边一键打包正式 / 测试环境的安装包,并自动分类保存安装包、生成二维码,解放双手、节约时间。

我们团队的技术环境非常自由,允许使用新技术来提高开发效率,这点我非常喜欢。每过一年回头看,代码都有新的蜕变,这样不断迭代,在面对未来的需求时就能够灵活应对。

学习

在工作之余,我主要把精力放在了现有技术栈之外的学习上,把“T”型的一横拉的更长。

相比去年,代码量翻了2倍多,共1385次提交。从 contributions 中就可以看出,今年是疯狂 coding 的一年。按时间排序,一共产出了以下几个项目。

Weibo

Weibo 是一个简单的 Laravel Web 项目。主要用来学习 Laravel 框架及其相关开发环境:

  • PHP - PHP: Hypertext Preprocessor
  • Laravel - The PHP Framework For Web Artisans
  • Homestead - GitHub - laravel/homestead
  • VirtualBox - Oracle VM VirtualBox
  • Vagrant - Vagrant by HashiCorp
  • Composer - Composer
  • Heroku - Cloud Application Platform | Heroku
  • Bootstrap - Bootstrap · The most popular HTML, CSS, and JS library in the world
  • npm - npm | build amazing things
  • Yarn - Yarn
  • Sass - Sass: Syntactically Awesome Style Sheets
  • MySQL - MySQL
  • PostgreSQL - PostgreSQL: The world's most advanced open source database
  • Gravatar - Gravatar - Globally Recognized Avatars
  • Carbon - GitHub - briannesbitt/Carbon: A simple PHP API extension for DateTime.

BBS

BBS 是一个相对复杂的 Laravel 项目。有完整的用户系统、注册模块、帖子系统等常用的功能,以及一个后台管理系统。

相比 Weibo,这个项目有更复杂的 UI 界面、逻辑交互与数据管理,采用了前后端分离的开发架构。通过这个项目,我进一步学习了 Web 开发中角色权限、数据监控、计划队列任务、自定义 Artisan / Trait / 中间件、安全防御、线上部署以及后台管理等技术。

当然,也学习了很多强大的框架:

  • Yarn - Yarn
  • MySQL - MySQL
  • Simditor - Simditor
  • Composer - Composer
  • Vagrant - Vagrant by HashiCorp
  • Font Awesome - Font Awesome
  • JWT - JSON Web Tokens - jwt.io
  • npm - npm | build amazing things
  • VirtualBox - Oracle VM VirtualBox
  • PHP - PHP: Hypertext Preprocessor
  • Socialite Providers - Socialite Providers
  • Homestead - GitHub - laravel/homestead
  • whoops! - whoops! - php errors for cool kids
  • Heroku - Cloud Application Platform | Heroku
  • Laravel - The PHP Framework For Web Artisans
  • Sass - Sass: Syntactically Awesome Style Sheets
  • Gravatar - Gravatar - Globally Recognized Avatars
  • Intervention Image - Intervention Image - Introduction
  • Captcha - GitHub - Gregwar/Captcha: PHP Captcha library
  • Laravel Active Archives - Laravel Active Archives - Hieu Le
  • Guzzle - Guzzle, PHP HTTP client — Guzzle Documentation
  • Carbon - Carbon - A simple PHP API extension for DateTime
  • Purifier - GitHub - mewebstudio/Purifier: HTMLPurifier for Laravel 5
  • pinyin - GitHub - overtrue/pinyin: 基于词库的中文转拼音优质解决方案
  • AWS - AWS 云服务-专业的大数据和云计算服务以及云解决方案提供商
  • Fractal - Fractal - Output complex, flexible, AJAX/RESTful data structures
  • laravel-ide-helper - GitHub - barryvdh/laravel-ide-helper: Laravel IDE Helper
  • Doctrine - Database Abstraction Layer - Doctrine: PHP Open Source Project
  • PostgreSQL - PostgreSQL: The world's most advanced open source database
  • Symfony - Symfony, High Performance PHP Framework for Web Development
  • Bootstrap - Bootstrap · The most popular HTML, CSS, and JS library in the world
  • easy-sms - GitHub - overtrue/easy-sms: 一款满足你的多种发送需求的短信发送组件
  • api - GitHub - dingo/api: A RESTful API package for the Laravel and Lumen frameworks
  • administrator - GitHub - summerblue/administrator: a fork from Frozennode/Administrator
  • Predis - GitHub - nrk/predis: Flexible and feature-complete Redis client for PHP and HHVM
  • jwt-auth - GitHub - tymondesigns/jwt-auth: 🔐 JSON Web Token Authentication for Laravel & Lumen
  • sudo-su - GitHub - viacreative/sudo-su: Laravel package to easily login as other users during development
  • laravel-query-logger - GitHub - overtrue/laravel-query-logger: A dev tool to log all queries for laravel application
  • dingo-serializer-switch - GitHub - liyu001989/dingo-serializer-switch: A middleware to switch fractal serializers in dingo
  • laravel-permission - A package to add roles and permissions to Laravel - Freek Van der Herten's blog on PHP, Laravel and JavaScript
  • jpush-api-php-client - GitHub - jpush/jpush-api-php-client: JPush's officially supported PHP client library for accessing JPush APIs. 极光推送官方支持的 PHP 版本服务器端 SDK

一个 Flutter App

今年是 Flutter 技术井喷的一年。Google 将 Flutter 和 Dart 语言推进了一大步,开发者们积极相应,产生了许多优秀的 App、框架、技术文章。

我也紧跟技术潮流,在去年入门了 Flutter 之后,今年直接用 Flutter 写了一个完整的 App。这个 App 是商业化的,就不过多描述了。在开发的过程中免不了面对各式各样的坑,还好都一一解决了。为了实现 App 的功能,还开发了一个 Flutter 的 SNS 插件,算是一个额外小收获。

总的来说,目前为止 Flutter 并没有 Google “吹”得那么神,从性能、交互、原生的还原程度、社区等各方面都是如此,开发效率和配套工具也还可以做得更好。但是从跨平台开发的角度来说,横向比较之下,Flutter 还是最好的工具,没有之一。

一个 PHP 服务端

为了支持 Flutter App,我用 PHP 和之前学习的 Laravel 技术做了 App 的服务端。同时也选购了云服务器、部署服务、注册域名、完成备案、申请了 App 上架相关的资质等等,这些工作虽然也有很多的学问,但不涉及太多编程技术,就不细说了。

SwiftUI-Tutorials

在 WWDC 2019 上,Apple 推出了一个全新的现代化的 UI 界面编码框架 SwiftUI 以及响应式编程框架 Combine 。我非常赞叹于它们结合后给开发效率带来的提升,我认为这就是未来构建 Apple 系 App 的方向。所以在官方发布了相关英文教程后,我第一时间进行翻译,产生了这个项目 SwiftUI-Tutorials

与此同时,我也创建了一个“SwiftUI 技术”微信群,如果你也在使用 Swift,或者在学习 SwiftUI,也可能遇到了棘手的开发问题,欢迎加我好友,我会拉你进群,扩充学习队伍,一起解决实际问题。

某个神秘 App

一个年轻女性都会非常喜爱的神秘 App,已上架,嘿嘿。

WLM3U

在开发神秘 App 的过程中诞生了 WLM3U 。它是一个用 Swift 实现的 M3U 工具。主要是用来下载 M3U 格式的视频文件,同时提供了计算切片文件大小、视频切片合成、本地播放等辅助功能。

《Swift 少儿编程》

今年我开设了一个少儿编程线上培训,主要面向小学、初中阶段的孩子,作为他们的编程启蒙课程。开课之初并没有找到合适的教材,于是我决定从零开始自己编写。经过总结概念、编写样例、埋设问题、画配图、设计作业等等,逐渐产生了这本《Swift 少儿编程》。随着后续课程的推进,这本书也会不断追加内容,期待完成的那一天。

在这个过程中,我学会了如何使用 gitbook 等电子书编写工具,以及一些专业的写作方式。

SwiftUI-Calculator

SwiftUI-Calculator 是一个用 SwiftUI 编写的计算器 Demo。

SwiftUI-PokeMaster

SwiftUI-Calculator 是一个用 SwiftUI 编写的完整 App。它包含了 App 中常见的样式、交互、数据操作、网络请求等功能。

今年读的书籍和文档

  • 《The Swift Programming Language (Swift 5.1)》 - Apple

    Swift 编程语言的官方文档。从 Swift 2.2 开始,每次有新版本发布,我都会从头看一遍,每次阅读都会有新的收获。

  • 《Dart documentation》 - Google

    为了学习 Flutter 而阅读了 Dart 语言的官方文档。主要目的是为了熟悉基本用法和语言特性,但是如果不经常写的话,也许不久就会忘光了。

  • 《Laravel documentation》 - Taylor Otwell

    Laravel 的官方文档。不熟悉 PHP 的话阅读起来还是有点麻烦的,好在示例比较多,而且都是针对实际开发遇到的问题所设计的解决方案,所以有很多最佳实践,跟着做就对了,总体还是不错的。

  • 《Flutter Documentation》 - Google

    为了开发 App 而学习了 Flutter 的官方文档。这份文档的质量不是很好,读完后还需要自行去找一些示例才能更好的理解框架的用法,但是只是入门的话还是可以的。

  • 《SwiftUI 和 Combine 编程》 - 王巍

    喵神的付费书籍。在 SwiftUI 刚公布之后没多久就编写完成的一本相对系统的教程,论速度应该是国内第一。相比官方文档,这本书从实际开发角度出发,包含了一些更“接地气”的开发技巧,整体难度偏低,属于入门书籍。

  • 《SwiftUI Views Quick Start》 - Mark Moeykens

    Big Mountain Studio 的 SwiftUI 系列中的第一本,全书黑金配色十分炫酷。书里列举了很多常见需求的最佳写法,代码十分优雅,以后遇到类似的场景直接粘贴就好了。


总的来说,今年印象最深的是独立完成了一个跨平台 App 的前后端开发,体验了一把全栈工程师的感觉。这次经历不仅给我的编码能力带来了全面的提升,更是让我站在一个更高的角度去审视整个 App 的诞生过程。从产生一个 idea,进行市场调研、竞品分析;到产品设计、视觉交互;然后技术选型、接口设计、编写文档;最后进行前端开发、后台开发,全程负责。在这个过程中,我对创造一个 App 这件事有了更深刻的认识和总结,可以算是职业生涯中的一次小质变。

吐槽一下,当时开发的工作是交叉进行的,所以我经常会写一会 Dart,再去写一会 PHP,然后写一会 Swift,再写一点 Java,最后又回去写 Dart ... 频繁切换思路让我十分痛苦,经常写着写着就不知道在干嘛了,要么就是串到另外一个语言去了,整个过程就是这种感觉——

娱乐

旅行

今年太忙了,只在春天的时候去了趟日本看樱花。

满开的樱花

公园里的旗帜

日常

路边井盖的设计

像某部电影的画面

人们的祈福

电影

挑几个值得纪念的:

流浪地球 - 郭帆

国产硬科幻电影,世界观、特效、音乐是加分项,演员、剪辑、故事逻辑略减分。电影片尾音乐《开启新征程》特别好评,已被我收藏,配合地球从书页文字间穿梭的动画,画龙点睛。

《流浪地球》片尾动画完整版

我的打分:8.0

“道路千万条,安全第一条。行车不规范,亲人两行泪。”

好莱坞往事 - 昆汀·塔伦蒂诺

导演昆汀的圆梦之作。小李子是落魄的演员,布拉德·皮特是潇洒的牛仔,我觉得布拉德·皮特在剧中帅过了小李子两个档位。两个影帝共同饰演导演理想中的自己,昆汀:“牛逼!”。

我的打分:8.5

“刚才是我看到过最好的演技。”

波西米亚狂想曲 - 布莱恩·辛厄

讲述传奇摇滚乐队皇后以及主唱弗雷迪·莫库里的光辉经历,结尾的 Live 非常赞。

我的打分:8.0

“We are the champions - my friends

And we'll keep on fighting

Till the end

We are the champions

We are the champions

No time for losers

'Cause we are the champions of the World“

复仇者联盟4:终局之战 - 安东尼·罗素, 乔·罗素

因为第三部把期待值抬的太高了,这一部没有突破,剧情又落回俗套,所以我觉得不好看。梗倒是出了不少。

我的打分:7.0

“我要向你复仇!”

“我真不认识你啊”

千与千寻 - 宫崎骏

这部作品我从小到大不知看了多少遍了,今年终于在国内上映,我给了满分,这才是电影该有的样子。

宫崎骏今年79岁了,还在坚持创作新的作品。铃木敏夫曾透漏他会支持宫崎骏到最后,但不知道这部作品还能不能完成,这话外之音...不敢想,太心疼了。

我的打分:10.0

“名字一旦被夺走,就再也找不到回家的路了。”

双子杀手 - 李安

李安导演尝试电影新技术的作品,该片以每秒120高帧率、4K、3D的罕见高规格拍摄,影院画面十分细腻流畅,非其他任何动作片能比。虽然有威尔·史密斯贡献演技,但全片也仅有这些看点了。

我的打分:7.5

“我是最厉害的”

...

“然而你并不是最厉害的”

天气之子 - 新海诚

新海诚继《你的名字》之后时隔3年的新作,依然是唯美到极致的画面和音乐,主题曲《愛にできることはまだあるかい》与插曲《グランドエスケープ》被我收藏,但故事没有太多新意。我觉得新海诚最好看的电影是《言叶之庭》。

我的打分:8.5

“现在开始天晴了!”

利刃出鞘

精致的本格推理电影。现在这种类型的电影真的不多了,也没有出现过非常优秀的剧本,且看且珍惜。

我的打分:8.0

“你吃屎,你吃,你吃,你也吃。”

游戏

也挑几个值得纪念的:

尖塔奇兵 - Mega Crit Games

Roguelike + 卡牌。有鲜明的职业特色和丰富的构筑选择,属于玩起来就停不下的好游戏,目前是我 steam 游玩时间最长的。

我的打分:8.5

隐形守护者 - New One Studio

一款真人影像(图片)游戏,玩家扮演的主角要机智地扮演好“谍中谍”,面对一个个艰难的选择则是玩家要考虑的问题。

这款游戏让我真切的领悟到新中国的建立是多么的艰难,它诠释了什么是好的爱国主义教育,比单薄的文字记载更让人感同身受。

我的打分:8.0

只狼 影逝二度 - FromSoftware

制作人宫崎英高“魂”系列的最新作品,拿到了“2019年度最佳游戏”的殊荣。

它完美的继承了“魂”类游戏的优点,同时又做到了变革(跳)。游戏本身的美术和音乐水准也非常高,网上有海量的文章去考究游戏中的场景、道具、剧情、世界观等等,随着对游戏了解的深入,你会越发觉得这是一款不可多得的艺术品。

当然,这游戏的难度也流着宫崎老贼的血,它是我游戏生涯中玩过最难的动作游戏,但同时也非常爽快。唯一不足的是流程略短,如果后续能开发出高质量的 DLC,便可挑战《血源》的地位,有望成为 PS4 时代最好的游戏。

我的打分:9.5

八方旅人 - Square Enix x Acquire

Square Enix 推出的传统 JRPG。游戏的美术风格被命名为“HD-2D”,可以看到 3D 建模的城市与像素风格的人物、怪物结合在一起,加上动态光影、景深等现代画面表现技术,使得风格非常新奇讨好。

游戏叙事也相当出色,八个主角刻画的十分生动。每个角色之间看似没有太多交集,但随着游戏进度的不断推进,你将逐渐揭开故事的真相,发现每个人命运之间背后的联系。

我的打分:8.5

赤痕:夜之仪式 - ArtPlay

恶魔城之父-五十岚孝司的重启之作,游戏中包含恶魔城系列中经典的倒城、古堡、特殊技能、真空刃等设计元素,同时又为 Metroidvania Game 树立了新标杆。

老玩家在刚进城听到 BGM 响起来的一瞬间一定会赞叹:“这味儿对了”。

我的打分:8.5

火焰纹章 风花雪月 - Intelligent Systems

《火焰纹章》系列在 Switch 上的首款正统续作,简化的战斗系统加上了养成要素,相当于前作《火焰纹章 if》的升级版。各方面中规中矩,缺点是后期重复度略高,玩法单一。

我的打分:8.0

死亡搁浅 - Kojima Productions

小岛秀夫在离开 Konami 之后的首部作品,是近几年最吊人胃口的游戏。有索尼在背后撑腰,游戏阵容堪称华丽。技术监制请到了业界知名技术大拿、PS4 的首席架构师 Mark Cerny。演员则是请到了诺曼·瑞杜斯(《行尸走肉》弩哥)、麦德斯·米科尔森(《汉尼拔》)、吉尔莫·德尔·托罗(《环太平洋》导演)、玛格丽特·库里(《死亡笔记》、《好莱坞往事》)等好莱坞大咖。

小岛秀夫在游戏中依然采用大量他拿手的电影化叙事手法,营造出了克苏鲁风格的科幻氛围。音乐也是顶尖水平,空灵的旋律配合冰岛空旷的大地和石峰,给人极致放空的享受。游戏原声《BB's Theme》、《Bones》、《Don't Be So Serious》、《I'll Keep Coming》被我收藏。其中《I'll Keep Coming》是我今年收听次数最多的歌曲。

我的打分:9.0

宝可梦 剑 - Game Freak

Switch 平台首部宝可梦正统续作,从系列第一代《口袋妖怪:黄》玩到现在,以后也会继续玩下去。

我的打分:8.0

生活

今年又搬家了。这是来北京以后第六次搬家,原因是房东嫌房租太低,不想租了。这个房子40多平,房东跟中介要每月12000的纯收益,中介自然也很难办,事情就黄了。新租的房子和现在的一样,14平的卧室,租金从每月4000涨到了每月5000,我心里苦啊。在北京,有房和没房的生活难度差太多了。

5月份参加了机核的北京核聚变,得到了《只狼》总监的合影和签名海报!感谢机核。

宫崎英高“背后的男人” - 北尾泰大

在核聚变上的收获

10月参加了《天气之子》的首映典礼,近距离接触到了新海诚导演。

就是这个有点猥琐的大叔

我在茫茫人海中,猜猜在哪

今年,养的两只猫又大了一岁,都很健康,只是越来越胖了,放几张猫咪们今年的照片:

买了新窝,高兴!

扭...

构图不错

帅气的特写,被我拿去做头像了

总结

今年在技术学习上投入了非常多的时间和精力,每天下班学习到第二天,周末除了做事也在学习,时间排满,感觉身体都被掏空,太累了。

从来没在12点前睡过

留给娱乐的时间大幅减少,今年好多想看的电影都没看,想玩的游戏也没玩,遗憾。有时实在太忙了,脑子就会冒出“只要我不睡觉,明天就不会到来”、“一天能有240小时就好了...可能也不够”之类奇怪的想法。

明年我有更多要学习的东西和要做的事,所以一定会更忙。但如果有机会,还是希望可以抽时间去一次冰岛,《权力的游戏》和《死亡搁浅》都是在冰岛取景,孙燕姿有支 MV 也是在冰岛拍摄,太美了,我很喜欢。

2019 的感受 “慌慌张张,匆匆忙忙”

2020 希望能 “不卑不亢,不慌不忙”

掘金年度征文 | 2019 与我的技术之路 征文活动正在进行中......