我的十年编程路 2020年篇
我出生在1990年,2020年到来的时候,我完成了一项成就:奔三。同时,也开启了新的征程:奔四。
2020年的春节是在广州的丈母娘家度过的,春节后大概是初五,或者是初六,我和媳妇就返回天津的家了。
二月份的时候下了大雪,我和老婆还出去玩雪。无论怎样也想不到这次疫情会持续三年之久,那个时候的我们,还很天真地以为再过几个月,就能恢复如常。
从那个时候开始,就业市场便开始变得很不景气。我特意翻看了当时的邮件,标题从一开始的“抗击疫情”,到“远程办公”,再到“跳槽困难模式”,越来越妥协。
这段时间过得其实蛮轻松的,一方面在家和老婆一起过一日三餐的生活,偶尔还会一起对弈下棋,很幸福;另一方面,就是我的书稿《打造流畅的Android App》,在3月底的时候交付了。计划是4月底交付,由于举家搬迁,处于离职状态,所以加快了速度,真是世事难料。
在居家的时候,我们整理了家里的各种事物。无意间,我发现了早在2010年写的,寄给未来10年的信。这封信需要在2020年打开,也就是现在。不过,我早就忘了写了什么,甚至都忘了还写过这个东西,于是二话没说,就打开了。信里写的愿望,简单地说就是成家,不是大富大贵也没关系,但求温馨。这样的愿望现在看上去其实蛮幼稚的,有句话叫做:“贫贱夫妻百事哀”,没有经济基础的家庭其实应该会很艰难,所以温馨的前提是经济上还过得去。好在当时的状态,还真就是不用太为经济担忧,家里挺和谐,挺温馨。所以,这个愿望也算是实现了吧。
其实现在想想,我的愿望一个接一个地都实现了,会不会是愿望本身就定的太过轻松了?
话说回来,一直没有收入总归不是很好。没过多久,我就联系了之前一起搞阿里同城会的老板,见面聊了两次,当时觉得很投机,于是便决定加入公司,一起共事。那个时候大概是4月份的事情了。这段工作经历教会了我很多事,先说说技术上的。
虽然之前我写过Flutter的书,但毕竟是入门级别,况且我也没有什么实战经验。在这家公司开发的第一个软件就是使用Flutter技术构建的。不得不说,做客户端习惯了,到了Flutter,确实需要一些前端开发的思想,必要时需要转换一下。更值得一提的是,在开发过程中,我还发现用到的一些开源库存在缺陷。于是在Github上贡献了两次,解决的都是空指针的问题。
其实,从着手写Flutter App到熟练,再到贡献开源事业,整个过程不过1-2个月。除了Flutter技术本身好上手,开发效率高之外,还有一个原因,就是写代码多了之后,上手类似的新技术其实是很快的事情,正所谓熟能生巧。
随着开发过程的推进,我继续将心得总结下来,发表到CSDN上。这些博客文章不仅限Flutter,还有阿里云移动研发平台的探索。另外还做了一次视频录播分享,直播答疑。但毕竟是第一次,做得乱七八糟,很狼狈。不过这也为下一次直播的成功打下了基础,就是2022年的Go语言图书发布直播,再后面我再详细说这段体验。
此外,在做工作总结的时候,我的前辈不留情面地指出了我在表达上的欠缺,我至今非常感谢他。像SMART原则,其实我之前或多或少听说过,甚至了解过,但在实战中却没有用上。究其原因,我觉得一直以来,我的工作就是上级安排什么,我就做什么。缺乏明确的自主性和目标感。再有就是陈述事情的时候,要充分考虑到受众群体,不要自说自话,做“自嗨”式发言。
就在今年(2023),我两次作为导师参加了公司的新人入职答辩。过程中,我也发现其实很多人在做试用期的工作总结时,都忽略了上述这些原则,导致与会人听得云里雾里。于是在结束后我也给出了类似的建议。
作为软件工程师,和计算机打交道的时间可能比和人打交道的时间多,再加上技术本身的特性。使我们慢慢变得不善与人沟通。但生活在这个世界,与人打交道终究是无法避开的。若要获得陌生人认可,就必须要掌握表达、沟通的技巧。所以,我劝大家,学习技术本身重要,但不要忽视与人沟通的能力。
这段工作没有持续太长时间,我就离职了。快到年底的时候,我加入了一家依托于成熟上市公司的创业公司,做互联网医疗业务。虽然客户端我也在做,但其实用到的技术大部分是Flutter。另外就是前端页面,包括微信公众号,也由我来维护。这段工作经历,我在技术方面有了横向发展的机会。
哦,对了。前面提到的,我发表过的Flutter相关内容,先后被谷歌开发者公众号转载两次,2020年是第二次,好像是转载了B站的视频,主题是自定义组件。我也再一次获得了纪念品。嗯,还是Google的贴纸,似乎是多了一个Flutter吉祥物毛绒玩具。好像是这样的,获得纪念品的次数太多了,我实在是分不清哪一个是哪一次得到的了。
忘了是在2019年年底还是2020年年初,我还晋级了CSDN的2019年度博客之星年度总评选前200名。后来我发现同行的拉票手段实在是五花八门,我没有那个本事,于是最后的结果就定格在157名,总投票数是980。当然,这个票数是每人最多可以5票。所以最极限的情况下,有176个人给我投票,且每个人都投了5次。考虑到我并没有拉很多人给我投票,也没搞什么别的方式。所以我认为这176人是我忠实的读者和支持者,在这里再一次感谢你们的支持!
另外就是2020年,忘记了是上半年还是下半年,我参加了一次腾讯课堂的讲师大赛,最后获得了入围奖。
其实在2020年,我已经开始初步尝试做视频,而不是单纯产出图文内容。不过后来,在视频方面我没放太多精力,还是停留在图文内容的生产上,看来以后要多做做视频内容,哪怕是直播也可以。
说到图文,新书《深入浅出Android Jetpack》开始动工了,这一写,就到了年底。
回顾2020年初,我们一起和广州的好友攀登了白云山。虽然只有不到400米高,但登顶的感觉总归还是有的。
到了2020年末,我们再次一起观看了罗振宇的跨年演讲。这一年给我留下最深刻的印象是:“打造学习型家庭”。
没错,年过三十的我再次意识到学习的重要性。甚至开始羡慕那些大学生甚至中学生,如果再给我那么多时间,能再活一次,我愿意和过去的我说一声:“珍惜时间”。
相关文章:
我的十年编程路 2020年篇
我出生在1990年,2020年到来的时候,我完成了一项成就:奔三。同时,也开启了新的征程:奔四。 2020年的春节是在广州的丈母娘家度过的,春节后大概是初五,或者是初六,我和媳妇就返回天津…...

力扣-SQL【入门】
https://leetcode.cn/study-plan/sql/?progressxhqm4sjh 目录选择595. 大的国家1757. 可回收且低脂的产品584. 寻找用户推荐人183. 从不订购的客户排序 & 修改1873. 计算特殊奖金627. 变更性别196. 删除重复的电子邮箱选择 595. 大的国家 # Write your MySQL query state…...

Vue中组件到底是什么
1.先说结论: Vue中组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的。 2.我们使用组件时发生了什么? 比如定义了一个school,然后在页面上使用它 我们只需要写 < school/ > 或< school &…...

不同时间间隔数据对统计结果的影响
目录摘要1. 实测数据来源2. 数据分析方法3 结果分析3.1 波况分析摘要 采用不同的波浪观测方法所获得的波浪数据的时间间隔不一致,其数据的准确性须进行分析。基于大埕湾逐时周年波浪观测数据,截取不同时间间隔的波浪数据,采用统计和相关分析…...
hudi系列-数据写入方式及使用场景
hudi支持多种数据写入方式:insert、bulk_insert、upsert、boostrap,我们可以根据数据本身属性(append-only或upsert)来选择insert和upsert方式,同时也支持对历史数据的高效同步并嫁接到实时流程。 这里的使用技术组合为flink + hudi-0.11 upsert 这是hudi默认的写入方式,…...
C # FileStream文件流
本章讲述:FileStream类的基本功能,以及简单示例; 1、引用命名空间:using System.IO; 2、注意:使用IO操作文件时,要注意流关闭和释放问题! 强力推荐:将创建文件流对象的过程写在usi…...

Go语言中的保留字和运算符详解
前言 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云博客专家 😉😉 💕 座右铭: 先努力成长自己ÿ…...
Linux编译之(1)C语言基础
Linux编译之C语言基础 Author:Once Day Date:2023年3月11日 漫漫长路,才刚刚开始… 1.概述 在Linux下开发多源文件的C代码文件,是一定要了解Makefile的,虽然现在构建工具很多,但学习的一开始࿰…...

CPU平均负载高问题定位分析
一、Linux操作系统CPU平均负载 1.1什么是CPU平均负载 1.2 怎么查看平均负载数值 二、Linux操作系统CPU使用率和平均负载区别 CPU使用率和平均负载区别 三、阿里云Linux操作系统CPU压测环境准备 3.1 核心命令应用场景 3.2 模拟生产环境出现的多种问题环境准备 分析工具安…...

Python蓝桥杯训练:基本数据结构 [二叉树] 中
Python蓝桥杯训练:基本数据结构 [二叉树] 中 文章目录Python蓝桥杯训练:基本数据结构 [二叉树] 中一、[翻转二叉树](https://leetcode.cn/problems/invert-binary-tree/)二、[对称二叉树](https://leetcode.cn/problems/symmetric-tree/)三、[二叉树的最…...
读取 DTC 信息服务 (0x19) – UDS 协议
总目录链接>> AutoSAR入门和实战系列总目录 0x19读取 DTC 信息服务概述 读取 DTC 信息服务在 UDS 协议中用于从车辆或特定 ECU 或节点读取 DTC。UDS 协议的主要任务之一是故障诊断。每当车辆发生任何故障时,与该故障相对应的诊断故障代码(DTC&a…...
Hive 分区表新增字段 cascade
背景 在以前上线的分区表中新加一个字段,并且要求添加到指定的位置列。 模拟测试 加 cascade 操作 创建测试表 create table if not exists sqltest.table_add_column_test(org_col1 string comment 原始数据1,org_col2 string comment 原始数据2 ) comment 增…...

【Java版oj】day08两种排序方法、最小公倍数
目录 一、两种排序方法 (1)原题再现 (2)问题分析 (3)完整代码 二、最小公倍数 (1)原题再现 (2)问题分析 (3)完整代码 一、两种…...

FinOps,从概念到落地 | UGeek大咖说第一期直播回顾(上)
2023年2月28日,由优维科技联合FinOps产业推进方阵举办了第1期「UGeek大咖说-极致用云共济FinOps」线上直播活动,来自中国信通院及美图公司技术专家共同带来了一场精彩的技术视听盛宴。 直 播 背 景 目前,许多以“上云”为数字化转型路径的企…...

k8s java程序实现kubernetes Controller Operator 使用CRD 学习总结
k8s java程序实现kubernetes Controller & Operator 使用CRD 学习总结 大纲 原理Controller 与 Operator自定义资源定义 CRD ( CustomResourceDefinition)kubernetes-client使用java fabric8io/kubernetes-client操作k8s 原生资源使用java abric8io/kubernetes-clientt操…...

Unity笔记:修改代码执行的默认打开方式
使用 External Tools 偏好设置可设置用于编写脚本、处理图像和进行源代码控制的外部应用程序。 External Script Editor:选择 Unity 应使用哪个应用程序来打开脚本文件。Unity 会自动将正确的参数传递给内置支持的脚本编辑器。Unity 内置支持 Visual Studio Commun…...

Linux IPC:匿名管道 与 命名管道
目录一、管道的理解二、匿名管道三、命名管道四、管道的通信流程五、管道的特性进程间通信方式有多种,本文介绍的是管道,管道分为匿名管道和命名管道。 一、管道的理解 生活中的管道用来传输资源,例如水、石油之类的资源。而进程间通信的管道…...

阿里研发工程师JAVA暑期实习一面
文章目录先说一下我自己的情况面试过程总结先说一下我自己的情况 我就读于湖南大学,软件工程专业,现在大三下 很巧的是,我在大二的时候就在相同的时间面过相同的部门和相同的岗位,所以我没有做笔试就直接让我去面试了。我当时还纳…...

第十四届蓝桥杯三月真题刷题训练——第 11 天
目录 第 1 题:卡片 题目描述 运行限制 第 2 题:路径_dpgcd 运行限制 第 3 题:字符统计 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 4 题:费用报销 第 1 题:卡片 题…...

机器学习入门——线性回归
线性回归什么是线性回归?回归分析:线性回归:回归问题求解单因子线性回归简单实例评估模型表现可视化模型展示多因子线性回归什么是线性回归? 回归分析: 根据数据,确定两种或两种以上变量间相互依赖的定量…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...