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

我的十年编程路 2017年篇

2016和2017,这两年是我飞速发展的两年。一方面是技术、工作能力,另一方面是对人生的思考。

随着技术能力的不断提升,博客也随之更新。在2017年伊始,我收到了CSDN学院的讲师邀请函。没错,那个时候我就有机会做视频课了,只是一直在产出图文内容,也就没想着做视频教程。

现在回想起来,当时应该是觉得既然人家都抛出橄榄枝了,我就接着呗。如果能认证通过的话,还能给自己多一个认证讲师的标签。再加上如果万一日后想要做视频内容,也多一个平台。怎么想都不亏,于是就跑去认证,结果不出所料,还真的通过了。不过直到今天,我也没在CSDN平台上面做过视频内容,而且现在除了CSDN之外,其它的平台似乎更适合输出视频教程。这一点我还没有验证,等到真的做的时候再来分享经验。

说起来,虽然我一直用iPhone,但其实还算是个资深花粉。那个时候公司提供的测试机大部分是华为,而且还有一些经典机型。比如现在大家都熟知的Mate和P系列,我其实是从Mate2开始接触的,后来就是Mate7、8、9。对,Mate系列是没有3、4、5、6这几代的,直接从2到了7。P系列则最早接触P7。现在回想起来,华为手机大概就是从Mate7开始走红的,当时市场上很难买到,要靠抢才行。后来还了解到光那个手机的包装盒,就花了不小的成本,包装的手感和开箱体验都不错。

另外就是华为海思处理器,从拉跨的K3V2,到后来的960、980、990(5G)……这一路走来,无论从性能还是功耗,都有极大的提升。这不只是坚持不懈、努力拼搏那么简单,还有当面对市场的质疑,特别是产品初期的时候,就更需要一颗强大的内心来支撑。这段路,想必华为走得一定很辛苦。

而这样的一段路,像极了那些并没有含着金钥匙出生的孩子。或许等他们长大,拼尽一生,也许才能刚刚追上某些人的起点。我听说过一部纪录片,叫做《人生七年》,大概就是跟拍了几个不同家庭背景的孩子,直到他们老去。结果发现那些出身普通的人,最后还是很普通;而出身寒门的人,终其一生,结局也没有变得多么好。

当人们年轻的时候,总会憧憬未来,觉得自己一定是能够改变世界的人。但随着成长,会慢慢发现,原来那些憧憬或许只是憧憬,终究被现实打败。随着年龄的增长,这些憧憬慢慢地被时光所冲淡,只剩下现实的一地鸡毛。

但是,我不想就此躺平,而且直到今天,我仍然很拼,支撑我的就是想要改变家族现状的使命感。而且我已经成功地扭转了一些状况,迈入了中产阶级的圈子,提高了下一代的起点。而且不只是金钱方面,我博览群书,吸收知识,掌握本领。希望把正确的价值观、人生观和生存技能传承下去。

或许我的下一代会选择躺平,重新让家庭回归贫穷。但作为我这一代,我努力过了。就像《飞越疯人院》里主人公那样:“至少我努力过了”。从某种意义上讲,有时候我感觉自己还挺英雄的。

话说回来,其实2017年的工作,一上来就是维护版本,常规修Bug。后来觉得App太臃肿,很多顽固的Bug已经很不好解决了,于是便决定重构软件。那个时候,同事亲切地称呼我为:“重构奠基人”,你应该直到我在整个重构工作中的位置了。

但随着重构工作的进行,我越来越觉得不对劲。当时的工作又只是单纯地调用API,像搭积木一样的机械编程了。虽然我仍然保持探索精神,尝试没用过的MockPlus等等。可那个时候,我已经懂得了“天花板”的概念,我觉得我已经不能在公司里面以令我满意的速度提升自己了。另一方面,在当时,一些公司的面试邀请很频繁地出现在我的收件箱里。这里不乏像科大讯飞这样前沿技术的公司,这对我来说,吸引力真的很巨大。于是从7月份开始,我就开始寻找新的工作机会了。结果最终确定下来,在国庆节后的10月11日,入职三星通信研究院。

选择三星的原因就是想去500强的外企看看,无论从技术本身还是管理流程,都会比我原先的公司要正规一些。我的部门领导也建议我选择三星,理由大概也差不多。再有就是公司离家近,且薪水增加不少。

也许是被老天眷顾,我入职后不久,公司就邀请包建强进行Android培训。我当时虽然在职能部门上归属测试,但是实际的工作是代码优化,具体来说就是性能优化。所以这场Android培训我所在的小组也都参加了,通过这场培训,拉近了包老师和我的距离。

记得那个时候,包老师建了一个微信群,说自己有一本书,需要将其翻译成英文,让海外的读者感受一下来自中国的插件化开发技术。这个翻译的工作我也参加了,还帮忙复查其他朋友翻译后的章节。

翻译完成后,收到了包老师的赠书,里面有签名和简短的祝福语。巧的是,收到书的那天,正好是我的生日。所以当时我在朋友圈里晒了书的照片,并配上文案:“这是最好的生日礼物”。

后来,这本英文书还上架了海外的Amazon电商,里面有了我的名字。

在三星的工作充满着自由、挑战和舒适。自由是指弹性工作制,没有加班文化;挑战是指性能优化确实有难度,要先看懂现有的代码,然后稍加修改,还不能产生副作用;舒适是指一日三餐公司全包,按照法定支付加班费。

所以,我在入职后,一方面处理工作本身的挑战,另一方面,家里终于装了宽带网络,也终于买了电视。

入职三星后,我很快对工作内容就上手了,很快适应了新的工作。年底的时候,还获得了2017年的“及时奖”。没错,这是我职场生涯中第二个奖。

哦,对了。我当时还萌生了买一台PS游戏机的想法,还注册了PlayStation账号。但是,看纪录片、听音乐、读书已经耗光了我的时间,怕是买来PS也是吃灰。或者它不吃灰,而是我放弃一项爱好。反正不管怎么选,我都要损失,索性就没买,一直到现在。

那段时间由于闲暇时间变长了,我还特意买了盗火纪录片论坛的VIP,下载各种纪录片来看。另外就是CD机隔三岔五地出问题,我就要拆开它修一修。我依稀记得那个时候我特别迷巴赫,特别喜欢他的哥德堡变奏曲,被我个人誉为巴洛克时期的代表作。推荐大家去听一下,我保准很多人都听过,只是不知道它叫什么名字。

或许是从那一年开始,我注册了得到,从那一年起的每年年末都要看罗振宇的跨年演讲。我还成为微信读书的死忠粉,开始看电子书。

也许是读了某些书的缘故,我总会引用一些句子,时常提示自己保持头脑清醒,做个明白人。比如下面这句:

当我们认为自己对这个世界已经相当重要的时候,其实这个世界才刚刚准备原谅我们的幼稚。

这句话让我意识到在这浩瀚的天地间,一个人,或者说是人类的渺小。

还有这段话:

有人说:“我生活在社会土,当然会有需要。”

你有没有认真思考过这个问题:你真的有需要吗?这个需要是真实的吗?你除了需要空气,需要睡觉,需要吃饭,其他的需要都不是真实的。你需要的名誉、金钱、虚荣、认可、尊重,这些外在的事物都不是必需的。刚出生的婴儿,他不需要;人老去的时候,也不需要。你觉得自己需要,只是你被教育成这样,然后你就以为真的需要,而且需要更多,永远没有止境。当你“看见”了,你会知道自己原来不需要。

这段话让我看见自己的欲望多么可笑,自此之后,我就只关注和购买像优衣库(而且是红色价签)之类的价格合理且耐穿的衣服、鞋等等。就在去年,我还买了iPad资源机,而不是买零售版新机。反正都是一年保修,都是没拆封的,所以在我眼里也没有太大区别。

钱要花在值得花的地方,而不是满足欲望。欲望永无止境,真正的需求绝非如此。

家徒四壁的情况也开始改善了。我根据房间的尺寸,不定期地购入一些柜子,用来放书。还换了床上用品,毕竟舒适的睡眠很重要。各种家电也置办上了,比如小冰箱,到了夏天,我就有冰镇的凉茶可以喝了。再比如咖啡机,到了该打鸡血的时候,来上一两杯,人又生龙活虎了……

终于……我的小屋能有点生活的味道了。

与此同时,我的写作也没有停止,简书上时不时地就有新的粉丝和点赞。不过坦率地讲,这一年写的东西变少了,看的东西更多了。

有了这些收获,我的内心非常满足。

闲下来的时候,我回去家后面的天大/南大散步。或者开车去稍微远一点的地方走走,总会拍一些好看的照片。说来也是无心插柳的事,正是因为有了这些照片,我还成为了图库中国的签约摄影师。不过现在这个网站好像已经关停了。

说到底,有了车之后,生活半径确实扩大了。为了感受艺术,我还跑去看了国家地理照片展。幸亏我翻了一下朋友圈,不然我就落下了唯一一次观看照片展的经历。

看似事情很多,我是怎么把它们安排妥当的呢?答案是——滴答清单。我是从2017年开始使用清单类App,刚开始是我同事推荐给我的一款,我现在实在想不起叫什么名字了,后来好像是被微软收购了,反正最终我用的是滴答清单。

虽然我没看过《搞定》,也没看过《清单革命》,但是我确实在践行这两本书中所提倡的做法,多少有点“冥冥之中天注定”的感觉。

哦,对了,我还花重金买了一台电钢琴。琴本体、琴架、座椅、三踏板,加一起4300大洋。虽然我没有什么天赋,但是偶尔乱弹,发挥点创造力还是挺好玩的。如果你看了2022-2023年的罗胖跨年演讲,就会发现他这么大的年纪,竟然还能学着弹钢琴。我还年轻,咋就不行呢?

就这样,丰富的2017年很快就到年底了。这一年的关键词,是“自由”,是“领悟”,是“改变”,更是“进化”。让我不止收获了工作上的成就感,还让我渐渐地领悟生命的真谛,永远感恩这一年。

相关文章:

我的十年编程路 2017年篇

2016和2017,这两年是我飞速发展的两年。一方面是技术、工作能力,另一方面是对人生的思考。 随着技术能力的不断提升,博客也随之更新。在2017年伊始,我收到了CSDN学院的讲师邀请函。没错,那个时候我就有机会做视频课了…...

hadoop有多个输入路径怎么处理

在Hadoop中,可以使用FileInputFormat的addInputPath方法来添加多个输入路径。以下是实现步骤:创建一个Job对象,并设置相关的参数和配置信息。调用FileInputFormat的addInputPath方法添加输入路径。例如:FileInputFormat.addInputP…...

day6 ServletContext

ServletContext 一个Servlet对象对应一个ServletConfig。100个Servlet对象则对应100个ServletConfig对象。 只要在同一个webapp当中,只要在同一个应用当中,所有的Servlet对象都是共享同一个ServletContext对象的。 ServletContext对象在服务器启动阶段…...

Dockerfile部署SpringBoot项目

Dockerfile部署SpringBoot项目 文章目录 利用Dockerfile部署SpringBoot项目 1、创建一个SpringBooot项目并且打成jar包2、在Linux中创建一个文件夹,来做docker测试3、将jar包上传到Linux中4、编写Dockerfile文件5、制作镜像6、启动容器7、查看容器启动日志8、访问接…...

Java面向对象特征之三:多态

一:面向对象三大特征之三:多态 1.多态是什么? 同类型的对象,执行同一个行为,会表现出不同的行为特征。 比如:猫和狗都是动物类型,执行同一个行为,但是会表现出不同的行为特征&…...

基于ATX自动化测试解决方案

在整车开发中,诊断功能实现后需要进行测试验证。测试验证主要分为两个方面:诊断协议层测试和诊断功能测试。诊断协议层测试:需要对服务层服务定义、传输层相关时间参数进行测试验证;诊断功能测试:需要对各诊断功能项&a…...

Qt学习5-Qt Creator文件操作(哔站视频学习记录)

实现文件编辑器代码 目录 一、代码要点 二、重点函数 1、conncet 2、getOpenFileName 3、getSaveFileName 4、读取文件到textEdit 5、textEdit保存到文件 三、全部代码 mainwindow.h mainwindow.cpp 一、代码要点 MainWindow的菜单栏实现;connect函数连接…...

LeetCode15三数之和 容易理解版本

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三…...

Spring Boot 3.0系列【11】核心特性篇之国际化

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言基础知识国际化简介浏览器语言LocaleMessageSourceMessageSourcePropertiesLocaleResolver案例演示案例一:后台消息国…...

每日学术速递3.7

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Dropout Reduces Underfitting 标题:Dropout 减少欠拟合 作者:Zhuang Liu, Zhiqiu Xu, Joseph Jin, Zhiqiang Shen, Trevor Darrel 文章链接:h…...

灯具照明行业MES系统,助力企业实现数字化转型

灯具照明行业在制造领域,是典型的高科技离散生产制造模式,大部分企业都设置:电源组件、光源组件、或光电一体组件 ,工艺以SMT、DIP等。 灯罩主要采用吸塑工艺及模具加工;其它金属的面盖、灯体、灯盒基本都是采用压铸、…...

超实用!JavaScript修改CSS变量,达到动态修改样式的目的

在网页开发中,我们通常使用CSS来设置网页的样式。但是,在开发过程中,有时候我们需要根据不同的条件来动态修改样式,这时候就需要使用JavaScript来实现。 在CSS中,有一种变量的概念,可以使用变量来定义颜色…...

解决Vue3 默认槽的非函数值 - Non-function value encountered for default slot 的警告

解决警告⚠️:[Vue warn]: Non-function value encountered for default slot. Prefer function slots for better performance. h函数的第三个参数加上箭头函数 原因分析: 一般 第三个参数如果不是默认插槽的话 就是当作children传下去,…...

【Git】P2 分支(创建分支,合并分支,分支冲突,分支分类)

分支分支的概念2077 与 分支git - 分支分支语句查看与创建分支切换与删除分支合并分支分支冲突分支分类分支的概念 什么是分支? 2077 与 分支 我最喜欢的游戏就是 赛博朋克2077,美国末日 和 GTA,下图是2077的存档。 存档非常多的原因是因为…...

2023年全国最新交安安全员精选真题及答案14

百分百题库提供交安安全员考试试题、交安安全员考试预测题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 41.事故隐患泛指生产系统中可导致事故发生的() A.人的不…...

Air101|Air103|Air105|Air780E|ESP32C3|ESP32S3|Air32F103开发板:概述及PinOut

内容均引自合宙官方wiki,详细内容请参考: :LuatOS 文档 。 1、合宙Air101(芯片及开发板) 合宙Air101是一款QFN32 封装,4mm x 4mm 大小的mcu。通用串口波特率,设置波特率为921600。 固件编译可…...

【代码随想录训练营】【Day35】第八章|贪心算法|860.柠檬水找零|406.根据身高重建队列|452. 用最少数量的箭引爆气球

柠檬水找零 题目详细:LeetCode.860 一道非常简单的模拟题,根据题目要求编写程序即可: Java解法(模拟): class Solution {public boolean lemonadeChange(int[] bills) {int money_5 0, money_10 0;fo…...

嵌入式C基础知识(23)

常用C/C代码规范头文件的保护所有的头文件都应该使用#define来避免多次引用&#xff0c;符号格式为&#xff1a;<PROJECT>_<PATH>_<FILE>_H_例如头文件&#xff1a;foo/src/bar/baz.h#ifndef FOO_BAR_BAZ_H_#define FOO_BAR_BAZ_H_...#endif // FOO_BAR_BAZ_…...

一文掌握组织项目等级划分维度,标准和实例

当你遇到多项目怎么管&#xff1f;遇到项目之间的冲突怎么解决&#xff1f;很多公司没有项目优先级的划分&#xff0c;会对企业造成很多严重的问题。首先&#xff0c;会造成不合理的资源分配&#xff1a;缺少项目优先级的情况下&#xff0c;很难确定哪些项目是最重要的&#xf…...

【C++】list的使用和基本迭代器框架的实现 vs和g++下string结构的说明

真正的成熟应该并不是追求完美&#xff0c;而是直面自己的缺憾&#xff0c;这才是生活的本质。 文章目录一、初见list1.list的迭代器失效和基本使用2.list的operations操作接口&#xff08;看起来挺不错的接口&#xff0c;但可惜不怎么实用&#xff09;3.vector和list的排序性能…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...