前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >给程序员的“错误”找个台阶

给程序员的“错误”找个台阶

作者头像
曲水流觞
发布2020-05-20 23:13:12
6440
发布2020-05-20 23:13:12
举报
文章被收录于专栏:曲水流觞TechRill

2020这个人生最漫长的寒假,翻了一些书,记下不少名人趣事。百无聊赖间把这些小故事做了个分类,再把平日所见种种对照落入其中,遂成此短文。

本爷工作中常常以错误零容忍自居,对团队的错误"颐指气使",想来也是让人极为厌恶的。人非圣贤,高人亦如此,何况吾凡辈。有些错误换个角度反而是一种美,那我们就从递台阶开始吧。

01

管杀不管埋

台阶:大名鼎鼎的J.U.C并发包

程序员皆知J.U.C包的造物主是并发大师Doug Lea。在jdk5之前对于线程同步使用的技术基本就是synchronized、wait、notify这些(用过jdk1.4或更早版本的老古董可以文末举个手,大爷我从jdk1.3入坑)。这时的并发控制不够优雅,性能也差的很,直到Doug Lea把JSR-166号提案提交到JCP组织(https://jcp.org),而这个JSR-166就是J.U.C的技术规范。

更戏剧化的是,在提案之前Doug Lea早就写完了基本类似现在J.U.C的整套原型代码,并已经使用它长达3年之久了,我们真该庆幸老李没有藏起来自斟自饮。

参考 The birth of J.U.C

https://programmer.help/blogs/the-birth-of-j.u.c.html

我们开始鸡蛋里挑骨头,当使用 synchronized 关键字使对象阻塞时,通过线程dump能够看到被该阻塞的对象信息,方便问题定位。而jdk5里面的Lock等并发工具却遗漏了这一点,致使dump线程时看不到阻塞对象的信息,因而不得不在jdk6中的LockSupport新增了含有阻塞对象的park方法。

老李这种神人可能压根不需要dump文件,就可以盲分析出线程问题所在。但是这可苦了我辈Javaer了呀,因为代码不仅是给人用的,还是方便给人修的,不然很多数码家电都有厚厚一本操作手册可不是当摆设的。

不过这个锅到底是不是老李的,历史过于悠久,搜遍Google亦无从考证,遂作罢。老李背不动总得有jdk的某个人背。

管杀不管埋,个人觉得,是程序员群体特别容易掉进去的一个错误陷阱。它像不像写代码不写注释的你,像不像通篇大段逻辑代码却没有打印日志或者打印无脑日志(无助于排障)的你,像不像应用上线没有接入日志系统或者监控系统的你...现在,台阶已奉上,供君拾级而下

02

绣花枕头

台阶:Homebrew的作者谷歌面试被拒

平时用macOS做开发的同学一定对Homebrew这个软件包管理工具不陌生,这个广有知名度的软件的作者Max Howell某一天去谷歌面试,面试官让其在白板上徒手写个反转二叉树的代码实现,这位大神说不会,然后就没有然后了,再然后就有了上面的twitter怒怼,再再然后LeetCode上架了这个算法题并标注为Easy级别...

此热门事件当时在程序员圈迅速发酵,引起正反两派的激烈辩论。但双方不管怎么互怼,大部分人应该私下都偷偷的去把反转代码撸了几遍,然后像模像样的再把非递归的比如队列算法再撸几遍,顿时,感觉自己要超越世界级大牛了...至少在反转二叉树这块...

说绣花枕头略有些过,毕竟任谁都会有一些知识死角。反过来说,还是看我们怎么定义这个问题,到底是不可避免的知识死角还是过于薄弱的基础能力。扬长避短是一种人生,那查漏补缺未尝不是一种更积极的人生态度。

03

玩物丧志

台阶:Unix本是用来玩游戏的

现在我们开发环境所属的操作系统无非Windows, Mac(Unix BSD分支)或Linux(类Unix),除了Windows其他两个的内核鼻祖都是Unix。那么当然地,作为Unix的发明人Ken ThompsonDennis Ritchie,必然是鼻祖级的传奇人物,更不用提他俩一个是B语言之父,一个是C语言之父了。

何曾想,Unix的诞生只是因为一个叫Space Travel的游戏在当时的MULTICS系统上运行太慢,要迁移到一个更精简的操作系统上。然后有了Unix,和它收割世界的故事了。

Space Travel游戏真身

https://en.wikipedia.org/wiki/Space_Travel_(video_game)

https://www.uvlist.net/game-164857-Space+Travel

有人因为游戏开发了外挂,有人因为游戏开发了Unix...看来玩游戏并没有那么不堪,换个角度,游戏确实也是用来放松和激发想象力的有效手段,只会机械的编程与咸鱼有何分别?那么,工作中有些小伙伴玩心重,建议也不要急切的下定论。

依然记得当年公司的编程规范考试,我找了个开源的PHP考试系统简单修修改改后,部署发布在了公司内网。考完后的阅卷原以为平淡无奇,直到发现有人在编程题里注入了XSS代码,具体的弹窗内容已经不记得了,我只记得他当时错了蛮多题,理应过不了考试,但是我依然给了他过,不只是因为有趣还因为作为小鲜肉程序员有如此的知识厚度很难得。此时的我并不想拿规范考试束缚他。

恩,足够牛逼的人走到哪里都会有特权,就是这么回事。

附一个很有趣,Star高达38K的Github项目

https://github.com/kelseyhightower/nocode

04

砍材不误磨刀功

台阶:写算法我最优,但写书我得慢

我们要再提一个神级大佬Donald Ervin Knuth, 中文名叫高德纳

不少人以为是Donald的音译,叫人家高纳德,以人家自己的首页为准

https://www-cs-faculty.stanford.edu/~knuth/

称他为算法之父毫不为过,因为我们现在用的数据结构、算法复杂度、算法分析符号啥的都是他发明的。当然更为世人所熟知的是他的巨著《The Art of Computer Programming》,简称 TAOCP,中文名 计算机程序设计艺术。原本出版社只想跟老高约一本关于编译器和程序设计方面的书,结果老高四年没写完,手稿倒是写了一堆,憋着劲要写一本传世之作,算来算去得整七卷。意料之外情理之中,刚刚写完第三卷,就被计算机界奉为神作,ACM的评委们也坐不住了,迫不及待要给老高颁发图灵奖。所以至今,老高(当时36岁)仍旧是最年轻的图灵奖获得者。

历史继续滚动,故事却刚刚开始。拿到图灵奖后不久老高就宣布搁笔,理由是排版工具太差,不能忍了。紧接着,说江郎才尽、见好就收的非议如期而至,人老高神人怎会在乎尔等凡人的屁话,说搁笔就搁笔,一搁就是十年之久。期间老高可没闲着,陆续创造了文字排版系统TEX(大名鼎鼎LaTeX的雏形)、字体设计系统METAFONT和文学化编程Literate Programming。再拿起笔写完第四卷已是2008年,距离第三卷过去了30多年。

你说30年,用再烂的排版系统怎么也可以捣鼓出来一本书了吧?话是没错,但这和写代码不复用不抽象,就是CopyPaste有何区别呢?

笑话一则:

当年Linux之父Linus说:上帝在梦中告诉我,我做出了最优秀的操作系统。

高德纳回答说:我可没这么说过。

程序员的工作目标从来不是最快而是最优,工作内容从来不是重复性劳动而是创造性工作。若因为蹩脚的工具、繁冗的流程、糟糕的设计不能忍而影响了自己的交付进度,不用怕,程序员就该有程序员的样子!

以上,共勉。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 曲水流觞TechRill 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档