对简单的敬畏

软件工程是复杂的工程,由于它几乎可以零成本试错,软件可以堆积到任意的复杂程度。一个简单的播放器软件,其复杂性也堪比建造幢别墅,更别说制作一双皮鞋。

这使得创造软件的 程序员失去了对简单的敬畏!

我没有针对某个程序员或者某个公司的程序员,我指的是包括我自己在内的所有程序员,并且,这并没有携带贬义的意思。这只是一种职业特质。

程序员认为伟大的东西一定是复杂的,简单的东西只能是玩具,或者工具。

最近,我接触了eBPF,让我惊叹于它的小巧和精简,我称它为瑞士军刀。但是,当我琢磨着eBPF到底能做些什么的时候,我努力说服自己心存敬畏,但直到我接触了Open-NFP前,我做不到。

我感觉我大约做到了时,我试着做点小东西,它们在:
https://github.com/marywangran/simple_xdpdump
https://github.com/marywangran/bpfilter_demo
https://github.com/marywangran/bpfilter_demo
https://github.com/marywangran/simple_xdp_router
https://github.com/marywangran/ebpf_sockmap
https://github.com/marywangran/simple_xdp_bridge
这些小东西也只能是小玩具,它们终于还是不能上线的。无论怎样,我忍不住要展示给别人看,我就去展示了。

很多人只是把eBPF看成一种工具,就像trace,probe之类的辅助性监控调试工具,把eBPF看作是内核的一种扩充而并非用eBPF实现一些功能,这就是为什么只要你关于eBPF的topic,十有八九都是bcc里的那些和trace,probe相关的例子,这也许是Linux原教旨主义者的情怀使然吧, “内核的事情内核管,其它的事情都在用户态”

说实话,目前eBPF作为内核功能的扩充,其作用真的还十分有限,正是基于此,当我跟别人介绍用eBPF实现的一些小玩意儿的时候,大多数时候获得的只是嘲讽: “我觉得这不靠谱,不如写个内核模块呢…”

不过,我一直试图去努力改变这种局面。我始终相信简单的东西并不总是无用,并非总是搬不上台面。

对未知的敬畏

世界是确定的吗?不知道。

但软件的行为是确定的。

不,软件底层是电子,那是量子力学的范畴,而量子世界是不确定的…

我就知道有人会用类似上面这句回怼,不过我说的不是这回事。我指的是抽象层面的软件,也就是 “程序员用代码写成的程序,其逻辑是确定的。”

debug有故障的程序是一个繁琐的过程,但是不论多么复杂,最终的结论一定是确定的,一个Linux内核的尸体vmcore就是它死时的映像,无论多么诡异的bug,分析这个vmcore都可以得到确定性的结论(可能又有人用踩内存来反驳了)。

由于软件是确定的,长期跟确定打交道后,就会形成 世界是确定的 之定势。

我老婆总是觉得跟我聊个事非常费劲,我自省过,但没有成功。我老婆是日语专业文科生,持有教师资格证,又做过HR,又做过小小学校家委会的头子,与人聊天是肯定没有问题的,那问题肯定出在我身上。

自省是有难度的,那就用反射的方法。

我试着找典型的程序员聊天,聊一些跟技术无关的话题。我说的典型的程序员指的是他们把时间都交给编程的。

我发现,在他们的眼里,世界是确定的,非黑即白,他们容不得世界的灰色地带存在。

如果你跟他们聊天气预报时,他们似乎不允许随机性的存在,他们希望有什么机制可以跟踪每一个水分子的行踪,当聊起最近的城市封锁时,他们认为仅仅铁路,航空,高速公路,国道的封锁是不够的,即便是连乡村的小路也围起来了,还会有蝙蝠侠飞出来的。

至于公司如何知道员工的考勤情况,那一定是通过技术手段监控的,程序员的惯性思维通常是公司一定会在其OA app中安装监控,GPS之类的,另外还会记录员工从哪里接入了WIFI,监控员工的微信,钉钉聊天信息…

其实哪里有这么复杂,这一点我倒是不那么较真儿,我相信两点,一是公司没必要这么麻烦,监控员工不是公司的要务,其次,公司没那技术。一般非程序员都没有这样的担心,此外,退一步说,即便是监控了,又如何呢?

我想,这就是程序员心中的确定性的技术世界吧。万事都采用技术手段解决并不是最高效的,有时社会工程学更有效率,但是程序员根本不care和技术无关的社会工程学,不是吗?

程序员的世界是确定的,世界是由技术组成的,于是任何问题都必须要有个闭环的答案。

然而,世界没有想象的那么简单,但却也没有想象的那般复杂,干嘛非要确定性的闭环呢?

人生会遇到很多很多不确定的问题,解决它们就是了,见招拆招,就这么简单的事,干嘛每件事非要较真儿去寻找确定性的技术方案呢。

世界不是代码写成的,至少在我们的哲学认知里它不是,所以调试它是无效的,享受它才行。


浙江温州皮鞋湿,下雨进水不会胖。

程序员的两种职业特质相关推荐

  1. 30岁程序员的几种职业状态

    为什么想探讨下这个话题 自己也到了这个阶段,见到各类程序员多了,对这个话题也多了些敏感性 昨天和几个好朋友吃饭聊了下近况,发现30岁后,大家的职场状态开始有了很大不同,以前一起聚餐聊天感觉不明显 然后 ...

  2. go语言和java比_Go VS Java:一位资深程序员对两种语言的解读

    导读:对于软件开发的编程语言,其实没有万能灵药. 本文作者详细介绍了他使用Java和Go这两种编程语言,一个是传统语言,一个是新兴语言的工作方式. Go VS Java 实话说,我很喜欢Java这门语 ...

  3. 程序员如何发展第二职业?这几种副业方式超赚钱

    很多程序员曾表示,虽然月薪一两万,但有时候还是会焦虑. 尤其是遇上了年初裁员年底裁员这样的就业环境,焦虑就会逐步放大,这时候副业赚钱的重要性就体现出来了. 发展第二职业,可以让程序员们增加抗风险能力, ...

  4. python程序员如何发展第二职业?这几种副业方式超赚钱

    很多程序员曾表示,虽然月薪一两万,但有时候还是会焦虑. 尤其是遇上了年初裁员年底裁员这样的就业环境,焦虑就会逐步放大,这时候副业赚钱的重要性就体现出来了. 发展第二职业,可以让程序员们增加抗风险能力, ...

  5. 程序员的4种心态与4种将来

    有一个小故事流传甚广,名字就叫做"三个建筑工人的故事",烂大街了,不过还是可以看看. 三个建筑工人的故事 一天,一位记者到建筑工地采访,分别问了三个建筑工人一个相同的问题. 他问第 ...

  6. [置顶] 完美程序员的10种品质

    完美程序员的10种品质 转载自:http://zhousir.net/ 谁是完美程序员?著名博客作家Alex Iskold在<明星软件工程师的10种特质>一文中给出这个问题的答案: 1. ...

  7. 完美程序员的10种品质

    导读:谁是完美程序员?著名博客作家Alex Iskold在<明星软件工程师的10种特质>一文中给出这个问题的答案: 1. 热爱编程 2. 完成事情 3. 持续重构代码 4. 使用设计模式 ...

  8. 程序员是一种优秀的男朋友

    导语: 程序员是一类优质的人群,这毋庸置疑.他们效力的部门叫做研发部,放眼中外,但凡和研发相关的都是国之根本.当然如果是一个公司,他们的地位相当于御林军.江湖中对于这个神秘的圈子流传着一个传说,解决个 ...

  9. 比程序员更好的职业_立即成为更好的程序员的20条技巧

    比程序员更好的职业 目录: (Table of contents:) Think Before You Code 编码前先思考 Understand the Business Behind Every ...

最新文章

  1. python如何更新包_python如何更新包 python更新包代码示例
  2. lombok pom.xml依赖
  3. POJ 2411 Mondriaan's Dream
  4. 剖析大数据平台的数据采集
  5. powercmd注册码
  6. TensorFlow实现简单的卷积网络
  7. Protobuf介绍及简单使用(上)
  8. 【jupyter】notebook屏蔽warning信息输出
  9. 能让中年人放下面子赚到钱的副业
  10. refs格式linux支持么,小科普 | 你听过ReFS硬盘格式吗?
  11. 数值积分NIntegrate中的具体算法
  12. LoRa无线技术介绍
  13. 波特率和比特率的定义及计算
  14. python给ppt表格加边框_向ppt里插入图片和表格
  15. linux查看服务器品牌和型号,linux 查看服务器型号
  16. Matlab/simulink采样仿真数据(时序)和时间序列的保存
  17. 关于SAP SBO 9.1 服务器重装的注意事项
  18. 学徒浅析Android——Android7.0(N)对于自定义证书和非CA机构证书的适配校验
  19. weblogic8.1 下载地址
  20. 微服务项目之电商--15.后台分页查询及新增品牌业务添加

热门文章

  1. PS基础---收缩与羽化
  2. 蓝牙键盘控制iphone
  3. 微信可以设置雪花昵称了,真漂亮!!!
  4. 树莓派Pico入门教程,开发环境的配置和程序的编写
  5. JS 生成随机数/随机数组
  6. ftp服务器批量上传文件,bat批量上传ftp文件到服务器
  7. 博越服务器下发信息超时,大家好,给大家介绍一下,这是我男朋友@吉利博越...
  8. 基于图卷积神经网络的微博疫情情感分析
  9. Java使用Graphics2D画波浪线的艰辛之路
  10. 计算机win7内容已满,win7电脑系统C盘空闲容量已满怎样扩展