我的十年编程路 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 题:卡片 题…...
机器学习入门——线性回归
线性回归什么是线性回归?回归分析:线性回归:回归问题求解单因子线性回归简单实例评估模型表现可视化模型展示多因子线性回归什么是线性回归? 回归分析: 根据数据,确定两种或两种以上变量间相互依赖的定量…...
Microsoft Word 远程代码执行漏洞(CVE-2023-21716)
本文转载于: https://mp.weixin.qq.com/s?__bizMzI5NTUzNzY3Ng&mid2247485476&idx1&sneee5c7fd1c4855be6441b8933b10051e&chksmec535547db24dc516d013d3d76097e985aaad7f10f82f15b4e355a97af75fd333acdab6232af&mpshare1&scene23&srci…...
Android kotlin 系列讲解(数据篇)SharedPreferences存储及测试
文章目录 一、什么是SharedPreferences1、将数据存储到SharedPreferences中2、从SharedPreferences中读取数据二、登录使用SharedPreferences一、什么是SharedPreferences SharedPreferences是使用键值对的方式来存储数据的。也就是说,当保存一条数据的时候,需要给这条数据提…...
一文了解Web Worker
一、概述 众所周知,JavaScript最初设计是运行在浏览器中的,为了防止多个线程同时操作DOM带来的渲染冲突问题,所以JavaScript执行器被设计成单线程。但是随着前端技术的发展,JavaScript要处理的工作也越来越复杂,当我们…...
接口文档包含哪些内容?怎么才能写好接口文档?十年测试老司机来告诉你
目录 接口文档结构 参数说明 示例 错误码说明 语言基调通俗易懂 及时更新与维护 总结 那么我们该如何写好一份优秀的接口文档呢? 接口文档结构 首先我们要知道文档结构是什么样子的。接口文档应该有清晰明确的结构,以便开发人员能快速定位自己需…...
java面试八股文之------Java并发夺命23问
java面试八股文之------Java并发夺命23问👨🎓1.java中线程的真正实现方式👨🎓2.java中线程的真正状态👨🎓3.如何正确停止线程👨🎓4.java中sleep和wait的区别👨…...
CANoe中使用CAPL刷写流程详解(Trace图解)(CAN总线)
🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…...
【MySQL】002 -- 日志系统:一条SQL更新语句是如何执行的
此文章为《MySQL 实战 45 讲》的学习笔记,其课程链接可参见:MySQL实战45讲_MySQL_数据库-极客时间 目录 一、日志系统 1、重做日志:redo log(引擎层) 2、归档日记:binlog(Server层) …...
C++---背包模型---数字组合(每日一道算法2023.3.14)
注意事项: 本题是"动态规划—01背包"的扩展题,优化思路不多赘述,dp思路会稍有不同,下面详细讲解。 题目: 给定 N个正整数 A1,A2,…,AN,从中选出若干个数,使它们的和为 M,…...
并查集(不相交集)详解
目录 一.并查集 1.什么是并查集 2.并查集的基本操作 3.并查集的应用 4.力扣上的题目 二.三大操作 1.初始化 2.查找 3.合并 三.省份数量 1.题目描述 2.问题分析 3.代码实现 四.冗余连接 1.题目描述 2.问题分析 3.代码实现 一.并查集 1.什么是并查集 并查集&…...
10个最频繁用于解释机器学习模型的 Python 库
文章目录什么是XAI?可解释性实践的步骤技术交流1、SHAP2、LIME3、Eli54、Shapash5、Anchors6、BreakDown7、Interpret-Text8、aix360 (AI Explainability 360)9、OmniXAI10、XAI (eXplainable AI)XAI的目标是为模型的行为和决定提供有意义的解释,本文整理…...
代办网站/宁波网站推广优化哪家正规
应用发布简单的流程:1.集群节点应用下线(下面会介绍为什么将这个放在第一位.)2.获取最新代码3.编译打包4.推送到应用机器5.差异复制6.重启7.测试8.加入集群 我公司都是使用nginx完成负载均衡的...当我们后端应用python,java,nodejs需要升级上…...
有阿里云服务器 怎么做网站/百度官方网站网址
目录1. FFmpeg解码瓶颈2. 使用libyuv提升解码效率3. 完整代码1. FFmpeg解码瓶颈 经测试发现,FFmpeg解码瓶颈在YUV转RGB上,在12MP视频的环境下,单帧转换时间超过40ms,效率无法满足要求 FFmpeg的YUV转RGB代码: sws_sca…...
win7搭建wordpress/百度信息流平台
设计模式是重复发生的问题的解决方案。 一个模式一般包含如下几部分: 名称:隐含了模式要解决的问题、方案、效果等 问题:描述了模式的应用场景。准确的理解模式对应的问题,是理解模式的关键,也是实践中应用模式的关键 …...
广西高端网站建设公司/百度收录提交工具
1、使用printf应当说是类型不安全的。所以才引入了C的流输入输出。 比如: #include "stdint.h" #include "iostream" using namespace std; int main() { int64_t a 1; int b 2; uint32_t uin 1; printf("%p %p\n", &a, &…...
网站被收录后又被提出了/东莞网站建设市场
工欲善其事,必先利其器。职场上亦是如此。Excel报表想要做得完美,首先肯定Excel要精通。做一份Excel报表,如果涉及到金额,当金额比较大,单位到底是用元还是万元,经常是大家纠结的一个问题。我们今天就来介绍…...
网站404错误来源/淄博seo培训
参数为-1,就是自动按其前一个参数进行转换。 数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。 举几个例子或许就清楚了,有一个数组z,它的shape属性…...