编程十年

岁月不居,时节如流,转眼间到了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++,但文档制度、生产流程,跨部门协作,测试自测,各类报告,等等,都要接触。
也接触了几个平台,如 TI 的 6678、385等,还有 Intel 的E3800。

总的来说,这时期虽然不能说登堂入室,但可以说是渐入佳境。在之后的工作中,不管是职场上还是技术上,或多或少都建立在此基础上。

工作虽然稳定,福利好,但看不到未来,遂换工作。

四处飘荡

自换了工作后至今,基本上都不算稳定,不管是工作所在的区域抑或工作内容。
先是加入一家初创公司,负责一部分管理工作,如机房管理,邮箱系统建立,开发平台,虚拟化,CICD,等。也做服务端开发,用 C++ 和 Golang 语言。
后来换一家外包公司,用 NodeJS 开发后台。
再后来换一家小公司,用 C# 和 Golang 开发后台。
再后来的公司,转用 Delphi 和 C 开发。

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

我的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 控件上打印。

现状

目前技能分析:

  • 软实力
    结构性思维,解问题方法。面对困难不怕,面对低谷心态好,面对不公坦然。
    欠缺:还是不习惯从客户角度考虑问题,有待提高。即考虑问题,第一步还是从技术角度出发,虽然有意识改,但没平台和机遇练。
  • C/C++
  • Python
  • NodeJS
  • web
  • C#
  • Golang
  • 运维

心路

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

李迟 2020.1.4 周六