当前位置: 首页 > news >正文

我的十年编程路 2019年篇

随着2018年,三星天津研究院的裁撤,我选择了到广州的三星研究院工作,与最心爱的她开始一起生活。

这一年的开始,我注册了博客园。和2014年类似,在刚注册不久,我写了一篇题为《全新开始,全心出发》的文章。在这篇文章里,我又一次刨析自己,深入内心。

从网站的风格样式上看,博客园并无优势,甚至在某些地方还是21世纪初的样子。但也正因为如此,它更加纯粹和朴素,广告更少,更加专注内容,专注在技术本身。

当时的我,已经工作有5年多,心慢慢地变得踏实下来。5年这个时间长度,并不算太久,我还能走得更远。在这篇文章里,我写了这样一段话,这段话一直是我坚守的人生信条,也是支持我努力奋斗的动力源泉:

在三星通信研究院工作,对我而言是一件幸福的事情。在这里工作强度不是一直都很大,有时间自我学习。我始终认为,在人生的现阶段,投资自己是最重要的,而不是每个月到底能挣几个钱,因为发财没办法靠打工。即使年薪30万,50万又能如何呢?不吃不喝,一年下来,也不能在一线城市买下一套房,也不能买下自己心爱的座驾。更何况,即使买的下来这些,也不能保证自己不去要更多的东西,那样的人生不是我想要的。或许那样真的可以让自己这一生过得很舒服,但是舒服过后依旧会归于尘土。但如果我们真的可以在人间留下来点什么,留在了某些人的记忆中,这意味着这些人将带着我们的精神,带着我们的经验活下去,甚至传承下去。在某种意义上讲,这将是一种永生。

写博客对我而言就是实现理想的一种方式,我希望通过文字和图片记录下我在编程路上踩过的各种“坑”和探过的各种路。这对于尚未遇到“坑”和打算走新路的朋友来说,多少都会有一些帮助。虽然到今天,我仍然没有当上老师,没能站上讲台,但只要能够起到帮助和引导的作用,做事情的形式还显得那么重要吗?

没错,“坚持初心”这四个在我眼里,并不是说一定要实现某件事。它更像是一种“核心原则”。儿时的我特别向往老师这个职业,觉得教书育人很高尚。虽然最终没有走上老师这条路,但是能把知识分享给需要的人,能真正地帮助到那些需要帮助的人,也是我的价值的体现。换句话说,我的理想,就是学习,然后输出。这样看来,当老师是实现方法,写博客是实现方法,写书也是实现方法。

坦率地讲,这里面也不乏一些“私心”,如果你看过我写的这篇文章,会发现我在其中还摘录了这样一段话:

说到“世俗”的一面,我的理想就是提高自己的知名度,让自己在这个世界上留下些许存在过的印记。它或许是一篇文章,或许是一段代码片,或许是一张照片,甚至只存在于某个人或某几个人的记忆中。这和我少年时期想要当一名老师的理想并不冲突。经过成长的洗礼,最初的梦想经过升华变作了某种执念和精神,又化作了条条通往理想之门的大路。我逐渐意识到,自己少年时期的梦想只是一种具象化的结果。在每一次静静的思索之后,在每一次深深的解剖自己之后,慢慢地,知道了自己真正想要的东西;逐渐地,找到了实现它们的途径。能够意识到这些并将其转化为行动,对我而言,已经是莫大的欣喜。

是的,我想我已经很清楚地表明了自己的坚持与态度,其实很简单。

在这条路上,难免会有对于名和利的追逐。但是,我觉得这里要把握好一个尺度。要在行业里、人群中有发言权,需要有标签和成就,需要有让人们信服的东西。但如果痴迷于这些,无异于修炼武林秘籍时走火入魔。所以我会左右权衡,然后做取舍。当然,我也会犯错,甚至双眼也会被诱惑。但这是我选择的路,这些挑战,我就都会接受。

说回工作,其实相对来说,我在广州研究院的工作更加轻松。虽然也在做性能优化,但是一部分业务变成了三方App分析。这部分工作相对容易一些,所以总体来说更加轻松了。

于是乎,不只是博客园。在闲暇时,我开设了知乎专栏和微信订阅号。那个时候的订阅号还叫做“App开发经验谈”。刚开始是把之前写过的文章搬运过来,后来就是新创作的内容多平台同步发,像现在这样。后来还在GitChat上面举行收费Chat,主要是写Flutter技术方面,评价一直是五颗星满星。

再到后来,就有编辑邀请我写一本Flutter相关的书。那个时候Flutter刚刚发布没多久,版本号还没过1.5。在技术圈属于“新兴”的玩意,再加上其描绘的跨平台开发蓝图,吸引了不少开发者。

一开始,我觉得自己一直是读者,技术水平远远达不到写书的高度,就婉拒了那位编辑。后来没过多久,大概也就一周或者两周的时间,就又有一位编辑来找到我,问我有没有写书的意向。

能收到这样的邀请,固然是件开心事。但如果真的要写,就是一份责任。

我回到当时租的房子,和老婆商量这件事。我把我的担心跟她讲了,她劝我试一下,人生总要有第一次。看到老婆这么支持和鼓励我,我最终鼓起勇气开始写作。

由于是我一个人写,再加上不是全职,速度固然比较慢。从3月12日开始规划目录结构,到8月9日完成全部初稿,总共用了5个月。说来也巧,写作这本书的开端是在3月12日,恰好是植树节。写作这本书,就像是种下了树苗。从此之后,我的写作不再是单纯的免费分享,而是终于开始走向盈利了。虽然到今天为止,这棵小树还没长成参天大树,甚至长出了一些不该有的树杈,但它终归是会成长,是会长大的,也终将变成一棵参天大树。

在写作这本书时,我还在书中藏了一些彩蛋。比如相声里的“报菜名”、同事的昵称、老婆的昵称等等。后来这些彩蛋被完整地保留了下载,如果感兴趣的话,可以搜索《Flutter从0基础到App上线》。但是,我不建议大家买来读了,毕竟是几年前的书,技术的更迭已经使这本书变得没什么时效性了。

毕竟是第一次写书,这次合作虽然最后以成功达成告终,但稿酬是按量计算的,而非销量。也就是说,交付、校对、修改、终版稿件后,只有一笔稿酬。无论这本书日后销售情况如何,收益也和我没什么关系了。万一我写出来一本爆款,岂不亏大了?

后来也是一次巧合,清华社的编辑联系到我,看我一直做Android性能优化,问我有没有这方面的意向。那个时候的我有了第一本书的成功,对后续的写作可以说是信心满满,甚至很期待再有一次。不过这次我变聪明了,先确定稿酬支付的方式,再继续往下谈。

第二本书,题目是《打造流畅的Android App》。这本书是面向有一定基础的Android开发者的,讲的内容其实就是我的工作总结,结果销量一般。不过这本书还带来了一个神奇的效应,就是到后来我面试的时候,面试官是拿着这本书进来的,结果自然是技术也没面什么内容,这个收益倒是我之前完全没有预料到的。

如此经历,让我明白:“正确的事,要重复做”。对,又是一个简单到不能再简单的道理。

随着工作年限的增长,我发觉很多类似这样简单的道理,反倒被很多人遗忘了。这就像极了我们买了很多书,或者收藏夹里装满了“干货”,却从没有看过一样。其实,正确的做法根本不是贪多,而是做好,哪怕只是很简单,很容易的小事情。正所谓:“勿以善小而不为”。而且作为程序员,应该很了解问题拆解是咋回事。道理都是一样的:一点一滴地做,汇总起来,就是个宏伟的目标。

除了这类盈利的写作,我的博文很荣幸地被谷歌开发者官方微信公众号转载了。我也收到了平生第一件来自技术社区的纪念品:好像是一件Google的T恤,还有Flutter的贴纸啥的。后来收到的越来越多,我就数不过来,也记不清了。

随着这些成就逐渐达成,博客便慢慢地被我疏远了,公众号也停更了,实在是忙不过来,顾不得它们了。毕竟我有了家庭,总不能回到家还像上班那样吧。

不知不觉,2019年就来到末尾了。

哦,对了,还有件大事。就是广州三星研究院,我所在的部门解体了。于是,我们便决定回天津生活。这是2019年年底发生的事,当然,真正离开是在2020年的春节期间。对,就是那个疫情刚开始大爆发的时候。也正是这样,我的司龄加了0.5,拿到了更多的赔偿金。

说起来,对三星这家公司还是挺感恩。首先是出差的机会,让我不再是单身;然后就是去广州工作生活,不用担心异地的问题;最后就是两次补偿金。这种体验,相信不是大部分都体验过的。当然,会有人觉得很动荡。但我觉得每一步都踩在了正确的节奏上,对于我来说,挺好的。

从前两年开始,每年年末,我都会看罗振宇的跨年演讲。2019年年末,终于有人陪我一起看了。

回顾那一年的跨年演讲内容,给我感触最深的就是灵魂五连问:“你是谁?你干啥?你为谁干?别人需要你吗?社会更好了么”?没错,这是值得每一个忙碌的人、每一个迷茫的人思考的问题。如果一个人,不再被需要,不再对这个社会、这个世界有所贡献,那这个人就已经死了。

抱着这样的态度,我们一起跨入了2020,那个去哪儿都要戴着口罩的一年。

相关文章:

我的十年编程路 2019年篇

随着2018年,三星天津研究院的裁撤,我选择了到广州的三星研究院工作,与最心爱的她开始一起生活。 这一年的开始,我注册了博客园。和2014年类似,在刚注册不久,我写了一篇题为《全新开始,全心出发…...

(蓝桥真题)剪格子(搜索+剪枝)

样例1输入: 3 3 10 1 52 20 30 1 1 2 3 样例1输出: 3 样例2输入: 4 3 1 1 1 1 1 30 80 2 1 1 1 100 样例2输出: 10 分析:这道题目我们直接从(1,1)点开始进行dfs搜索即可,但是需要注意一点的是我们搜…...

Kalman Filter in SLAM (3) ——Extended Kalman Filter (EKF, 扩展卡尔曼滤波)

文章目录1. 线性系统的 Kalman Filter 回顾2. Extended Kalman Filter 之 DR_CAN讲解笔记2.1. 非线性系统2.2. 非线性系统线性化2.2.1. 状态方程f(xk)f(x_k)f(xk​)在上一次的最优估计状态x^k−1\hat{x}_{k-1}x^k−1​处线性化2.2.2. 观测方程h(xk)h(x_k)h(xk​)在这一次的预测…...

关于vertical-align的几问

vertical-align属性可以给我讲解一下吗? 当使用table-cell布局或inline元素时,可以使用CSS的vertical-align属性控制元素的垂直对齐方式。该属性可应用于元素本身以及其父元素(例如,td、th、tr和table)。 以下是vertic…...

【拜占庭将军问题】这一计谋,可以让诸葛丞相兴复汉室

我们都知道,诸葛亮第一次北伐是最可能成功的,魏国没有防备,还策反了陇西,陇西有大量的马匹可以装备蜀国骑兵,可惜街亭一丢,那边就守不住了 当时我不在,只能作诗一首~ 如果穿越过去,…...

【Linux】 -- make/Makefile

目录 Linux项目自动化构建工具 – make/Makefile 背景 依赖关系和依赖方法 多文件编译 项目清理 make原理 Linux项目自动化构建工具 – make/Makefile 背景 一个工程的源文件不计其数 按照其类型、功能、模块分别放在若干个目录当中 Makefile定义了一系列的规则来指定&…...

Forter 对支付服务商应对欺诈的四个建议和Gartner的两个关键结论

Gartner新版2023年度《线上欺诈检测市场指南》发布恰逢其时-企业正面临来自专业黑产和欺诈者与日俱增的压力。而在2023年,许多商户将调整反欺诈策略,对拒付率和转化率进行更严格的监测,以最大限度减少损失并增加营收。以下是Gartn…...

ANR系列(二)——ANR监听方案之IdleHandler

前言 关于IdleHandler,比较多同学错误地认为,这个Handler的作用是主线程空闲状态时才执行它,那么用它做一些耗时操作也没所谓。可是IdleHandler在主线程的MessageQueue中,执行queueIdle()默认当然也是执行在主线程中的&#xff0…...

数学小课堂:数学和自然科学的关系(数学方法,让自然科学变成科学体系。)

文章目录 引言I 数学方法,让自然科学变成科学体系。1.1 天文学1.2 博物学1.3 化学1.4 医药学1.5 物理学II 自然科学的升华过程III 数学方法的意义引言 19世纪初,英国人把采用实验的方法,系统地构造和组织知识,解释和预测自然的学问称为科学。 科学研究的是自然现象和自然…...

[蓝桥杯 2020 省 A1] 分配口罩

思路比较容易想到&#xff0c;因为口罩全部只有15批&#xff0c;因此直接暴力dfs搜索即可 //dfs #include<bits/stdc.h> using namespace std; int ans 9999; int num[] {9090400, 8499400, 5926800, 8547000, 4958200, 4422600, 5751200, 4175600, 6309600, 5865200, …...

第五章:C语言数据结构与算法之双向带头循环链表

系列文章目录 文章目录系列文章目录前言一、哨兵位的头节点二、双向链表的结点三、接口函数的实现1、创建结点2、初始化3、尾插与尾删4、头插与头删5、打印6、查找7、随机插入与随机删除8、判空、长度与销毁四、顺序表和链表的对比1. 不同点2. 优缺点五、缓存命中1、缓存2、缓存…...

一文带你了解,前端模块化那些事儿

文章目录前端模块化省流&#xff1a;chatGPT 总结一、参考资料二、发展历史1.无模块化引出的问题:横向拓展2.IIFE3.Commonjs(cjs)4.AMD引出的问题&#xff1a;5.CMD6.UMD7.ESM往期精彩文章前端模块化 省流&#xff1a;chatGPT 总结 该文章主要讲述了前端模块化的发展历史和各个…...

(六十五)大白话设计索引的时候,我们一般要考虑哪些因素呢?(中)

今天我们继续来说一下&#xff0c;在设计索引的时候要考虑哪些因素。之前已经说了&#xff0c;你设计的索引最好是让你的各个where、order by和group by后面跟的字段都是联合索引的最左侧开始的部分字段&#xff0c;这样他们都能用上索引。 但是在设计索引的时候还得考虑其他的…...

Spring事务管理

文章目录1 事务1.1 需求1.2 原因分析1.3 错误解决1.4 yml配置文件中开启事务管理日志1 事务 1.1 需求 当部门解散了不仅需要把部门信息删除了&#xff0c;还需要把该部门下的员工数据也删除了。可当在删除员工数据出现异常时&#xff0c;就不会执行删除员工操作&#xff0c;出…...

数字化工厂装配线生产管理看板系统

电力企业业务复杂&#xff0c;组织结构复杂&#xff0c;不同的业务数据&#xff0c;管理要求也不尽相同。生产管理看板系统针对制造企业的生产应用而开发&#xff0c;能够帮助企业建立一个规范准确即时的生产数据库。企业现状&#xff1a;1、计划不清晰&#xff1a;生产计划不能…...

vxe-grid 全局自定义filter过滤器,支持字典过滤

一、vxe-table的全局筛选器filters的实现 官网例子&#xff1a;https://vxetable.cn/#/table/renderer/filter 进入之后&#xff1a;我们可以参照例子自行实现&#xff0c;也可以下载它的源码&#xff0c;进行调整 下载好后并解压&#xff0c;用vscode将解压后的文件打开。全局…...

ECharts 环形图组件封装

一、ECharts引入1.安装echarts包npm install echarts --save2.引入echarts这里就演示全局引入了&#xff0c;挂载到vue全局&#xff0c;后面使用时&#xff0c;直接使用 $echartsimport * as echarts from echarts Vue.prototype.$echarts echarts二、写echarts组件这里演示环…...

c++ 怎么调用python 提供的函数接口

在 C 中调用 Python 函数有多种方法&#xff0c;以下是其中的两种常见方法&#xff1a;使用 Python/C APIPython 提供了 C/C API&#xff0c;可以通过该 API 在 C 中调用 Python 函数。使用这种方法&#xff0c;需要先将 Python 解释器嵌入到 C 代码中&#xff0c;然后可以通过…...

【动态规划】背包问题(01背包,完全背包)

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

记录 UE5 完全重新构建 UE C++项目

不知道搞了什么&#xff0c;C项目的实时代码编译罢工了&#xff0c;搞了半天都修不好&#xff0c;只能又重建了 UE5 版本为 v5.1.1 删除以下文件夹 /Binaries /Intermediate /SavedBinaries 文件夹是编译后的模块 Intermediate 文件夹里是中间层的C代码&#xff0c;完全由ue…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...