编程十年

岁月不居,时节如流,转眼间到了2020年。自2010年至今已然十年,编程亦十年了。

其实从接触C语言编程算起,已经有十三年了,有某次面试中,HR 跟我讲,校园编程不能作为经验,此后,对外只称从毕业开始编程。
不过,看着许多昔日同窗已不再从事编码,有的走上管理岗位,有的进入银行系统,有的博士毕业。回首过去,在夜深人静时,也会畅想自己不再是 coder 的情景。

概述

校园编程

笔者为计算机科学与技术专业,就编程类课程而言,有汇编、C、C++、Java 等,但其它各种知识也要学习,包括但不限于数电、模电、工程画图、操作系统、编译原理、计算组成原理、数据库,等。
十年后回顾,语言只是其中一方面,其它围绕计算机的知识对日后的工作有莫大的帮助。同时更坚定了世界存在普遍联系的概念。编程,不能简单认为是编码。
回到编程方面,校园中也接触了 HTML 语言,尝试用网页三剑客做网站,还看了黑防等书籍。那时很迷茫,对未来没有明确的目标(其实现在也一样),只是让自己去看,去学。
后来机缘巧合,在老乡的带领下接触单片机 C 编程,也学画板、焊板。曾一度想将 PC 的 C 语言与单片机的 C 语言统一来理解,后因故放弃。
学了单片机,自然走上了嵌入的道路。这时期,还自学了 Linux 系统。我的自学之路,应该从此开始。
在学校最重要的一点,就是养成良好的编码习惯。有次留英的覃博来邕访问,跟我说现在老师还提到我的 geekos 作业编码风格好。即使是现在,我也看不习惯凌乱的代码。代码和文章一样,有其逻辑和章法。

毕业一年

这一年,主要是从事机顶盒开发测试,但实际上基本没有什么开发的工作量。由于单身又无其他爱好,利用空闲时间继续研究嵌入式 Linux (这时可写“研究”二字)。从 U-Boot、Kernel、Rootfs,到应用层,甚至 boa、触摸屏,都重新整了一遍。还抽空过了软件设计师考试。
除了 C 语言,html、php也接触了,甚至 js 也看了几个文件,但决心专注于 C 语言,其它的暂不继续研究。

毕业七年

这六年,均在一家公司供职。相对以前的自己,各方面可以用突飞猛进来形容——无论是岗位技能、职场接人待物,还是人生阅历。对嵌入式 Linux 底层理解更多,也参与了很多产品的开发,当然,真正负责的只是一部分,但对整个产品的开发及涉及的大部分都有了解。语言上还是C、C++,但文档制度、生产流程,跨部门协作,测试自测,来料 BOM 表,各类报告,等等,都要接触。逻辑表达和扯皮能力也日渐增长。
嵌入式平台方面,基本是 TI 的 SOC,如6678、385等,另外还有 Intel 的 E3800。
此期间,也发扬着能帮就帮的南宁精神,认识了很多网友,相互间讨论和请教。后来写了 2 个 MFC 工具,原想用于工作以求得学识,可惜无用,所以就作为业余作品开源出来,让大家随意使用,也不是坏事。
在之后的工作中,不管是职场上还是技术上,或多或少都建立在此基础上。

四处飘荡

自换了工作后至今,基本上都不算稳定,不管是工作所在的区域抑或工作内容。
先是加入一家初创公司,负责一部分管理工作,如机房管理,邮箱系统建立,开发平台,虚拟化,CICD,等。也做服务端开发,用 C++ 和 Golang 语言。
后来换一家外包公司,用 NodeJS 开发后台,主要负责充电桩厂商的协议的解析和后台对接以及测试。了解了一些行业知识和术语,如总召,遥信,等等。
再后来换了一家小公司,用 C# 和 Golang 开发后台,也涉及硬件的操作,如网络音箱和百度语音知识,这些均有现成 API,没有深入研究。
再后来的公司,又转用 Delphi 和 C++、Qt 开发。主要面向高速公路方面,需要了解大量文档和标准,目前还没有渗透得很好。

这时期,心态与之前大不同,可能受太多生活的洗礼。总之,工作是赚钱的方法,如有其它方式也会尝试。不敢妄想什么事业,未来。

我的helloworld之路

学习C语言,在课堂上打印。

学习汇编语言,在课堂上打印。

学习Java语言,在课堂上打印。

学习操作系统,使用汇编实现,制作镜像在台式机上打印输出。

在 AVR 板子的 LCD 12864 中打印。

在u-boot中打印,在kernel中打印,在busybox中打印。

在触摸屏上打印。

在 MFC 控件上打印。

boa + html 页面中打印。

在 Python 中打印。

在 nodejs 打印。

在 cicd 的打印:golang编码,通过gitlab的ci,构建Docker并上传dockerhub,再用k8s调度到指定节点输出。

在 Qt 中打印。

在 C# 中打印。

在 Delphi 控件上打印。

现状

目前技能分析:

  • 软实力
    结构性思维,解问题方法。面对困难不怕,面对低谷心态好,面对不公坦然。
    欠缺:还是不习惯从客户角度考虑问题,有待提高。即考虑问题,第一步还是从技术角度出发,虽然有意识改,但没平台和机遇练。
  • 数据结构与算法
    还是比较薄弱,可能在工作中用得不多,说来惭愧,十年来,除了在学校应试学了链表,栈,堆,二叉树,排序等等外,在工作中,真正意义上只用过双向链表(用于图片合并为视频的信息处理),排序和二分查找(用于排列并显示分辨率),还有现在的最短路径(用于处理路网信息)。那些动态规划,线性规划,随机森林什么的,除了名称外没任何概念。但是,对于数组、向量、队列、map,结构体,等,还是能信手拈来的,这样看,也不是一无是处。
  • C/C++
  • Python
  • NodeJS
  • web
  • C#
  • Golang
  • 运维

心路

语言只是语言,十年后,我终于可以把这句话说出来了,并且可以跟反驳者(非抬杠者)展开讨论。就目前的状态而言,只要是工作需要的语言(但不限于语言),都可以学,都愿意学。
我会有意识地考虑生活和工作的高效率方法,并尝试应用起来。
我擅长做类推和总结。像不同语言,有部分在语法(或说设计理念)上是相通的。如Golang和Delphi建议把相同类型参数放到一起,Linux内核、Java和Golang的括号位置都一致(Golang甚至从语言上做了规定)。Java、Python 和 NodeJS 用 import 引入包。而在图形界面开发中有更多的相似之处。所以练好内功,语言只是一种工具。

展望

犹记得,十年前接触 v4l2 时用的一个库,看到帖子说是法国一位老医生写。也明白,在中国过了 35 岁就要下岗。更明白,我要赚钱。
但,我还是想试试,自己到底可以不可以写代码,可以写到什么时候。

李迟 2020.7.27 周一

©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页