Day 27 - Clean Coder 时间管理与专业人士

前言

昨天讲 Clean Code,虽然昨天只聚焦在命名与注解,仅占 Clean Code 这本书的冰山一角,不过也算是可以一窥什麽叫做「更好的程序码」,有兴趣的人非常建议买来整本书看完。

今天要从另外一个角度切入,「更好的程序码」会由谁写出来呢?

工程师

不不不,不是工程师,而是

更好的工程师

((拖走

今天来讲 Clean Code 的番外篇 - The Clean Coder

这本书在讲的,不是优质的程序码,而是聚焦在 developer 本人,要做些什麽,或者抱持什麽样的心态,才能产出优质的程序码。

今天我会根据其中几个章节,抛出几个主题跟大家聊聊,并且会结合我个人职场上的实际经验,也欢迎大家分享罗!

时间管理

从古早味游戏学习「分配」

玩过一款很有年代的游戏叫做「魔塔」,玩法非常单纯,就是地图上会有一些怪物,同时也会有一些增加角色的 buff 及过关用的钥匙,目的很简单,就是打败怪物、拿到钥匙,不断往魔塔的更高层前进!

魔塔

这款游戏有个特色是「特别需要计算」:因为主角不是龙傲天,不可能一路横扫千军,但有趣的是怪物的攻击力、防守力、血量等资讯都会明确告诉你,完全可以自行衡量,要先从哪一个怪物开始交战!

所以这款游戏并不是:

打怪、打怪、打怪、捡宝、通关!

而是

打怪、捡宝、打怪、捡宝、打怪、捡宝、通关!

必须要不断计算:

  • 现在的我挑战这只怪物划算吗?
  • 打败这只怪物我可以拿到多少宝藏
  • 按照这个顺序,我有办法顺利抵达下一层吗?

同时也代表了需要不断去「分配」角色的血量,要是没分配好就只能看着宝藏流口水。

时间、专注力分配

我们一天的工作也是如此,在不加班的前提下,一个人的工作时间、专注力都是有限的,处处在分配,你有发现吗?

  • 这两张 ticket 要先完成哪一张?
  • 写完这个需求离我的目标前进了多少?
  • 按照这个顺序,我有办法在 deadline 前完成吗?

然而,在游戏中算得很精准,在工作上却不一定有办法保持清楚。一天工作 8 小时,多少时间分配给开会?多少时间给写 code?A 任务跟 B 任务的顺序谁先谁後?

工作上曾经看过的状况们,要嘛分配顺序不对,要嘛分配了但没有认真看待,甚至还有带着品质很差的 8 小时过来的:

  • 没有跟 PM 确认就自行决定 ticket 顺序
  • 说好的交付 deadline 到了,被 PM 一问想到
  • 前一天没睡饱就来上班,行屍走肉 8 小时

自我麻醉

其中特别强调一点是,同时间手上有很多 ticket 待完成,很容易就会基於一种「想要赶快减少 ticket 数量」的心理,挑那种比较简单的 ticket 优先。

但事实上,无论是在开发或维护,比较难的 ticket 反而才有优先的价值,因为通常「难」,就代表要考虑的东西「多」,所以漏掉一些细节的可能性也「大」,原本估 3 天,可能最後变 5 天。

甚至即便 PM 已经安排好 ticket 顺序了,如果没有照着顺序完成,其实就是一种自我麻醉罢了,整体进度彷佛有前进,但事实上是,重要的事情还是容易踩到 deadline

把专注力放在对的地方

假如真的都按照 PM 安排的 ticket 顺序了,还可以做点什麽呢?

好好安排自己的专注力!你有以下经验吗:

  • 参与自己觉得没什麽意义的会议,心不在焉地滑手机
  • 偶然听到有兴趣的歌,开始 google 这首歌相关的介绍
  • 下午很容易昏沉想睡,但中午又不想午休在做其它事

会议

面对自己觉得没有意义的会议,除非真的就是有那种大你好几阶的老大要出来讲话,不然其实,你应该自己找到会议的意义

务必弄清楚会议的主题是什麽,每个主题最多花多长时间,要取得什麽成果。如果上述这些都做了,还是觉得没意义,那应该在合适的时机,礼貌地离席(没想过这个答案吧XD)。

音乐

而像听歌这种,每个人工作习惯不同,像我就很常一首歌从早上听到下班,或者就是很有目标性地搜寻我要的歌,找到之後就回去工作,不会在挑歌、找歌花太多时间。

专注力是稀缺资源,即便有些人认为:「我就花个 10 分钟看一下 MV 就回来了啊!」,但更多时候,原本一连串高效率的工作心流状态(flow zone),就被这 10 分钟打断了。

休息

唉小学国中的时候都不喜欢午睡,现在巴不得每天睡爆!

这一点见仁见智,有人喜欢滑手机休息,有人喜欢看 Youtube 休息,没有一定要午睡。

只是如果明知道自己下午就是会昏沉想睡,却仍没有利用各种方式让自己补充体力,其实就是变相降低自己的工作产出

对你的薪水负责

专业人士

「专业」两个字听起来很硬,好像就是要学很多开发技巧啦,或者资结演算的效率啦,环境布署建置之类的,应该就是要累积很多实战经验!

但很容易就会产生一个疑惑,要实战也得先练兵吧!?难道写程序写一写,会突然学会环境布署吗?

充实自己的时间

因此书中提出一个很重要的点,作者认为,一个专业人士每周除了投入 40 小时的正常工时,还会多投入 20 小时在充实自己。

40 小时的正常工时,是把时间卖给公司,用来解决公司的问题。

20 小时的额外时间,则是把时间留给自己,用来投资技术实力,或者任何能够提升专业价值的事情。

算了一下会发现,等於每天要再抽出大约 3 小时来充实自己,其实听起来是满不平衡的,对於有家庭、有生活要顾的人来说,其实是有点天方夜谭。

因此书中也有说,不是一定要认真坐在电脑面前才叫充实自己,通勤时间 podcast,回家之後读书,假日参加研讨会等,都是在提升自己的专业价值

软实力

这我自己加的XD

如果真的就是一个很会 coding 的人,真的这样就能够称为专业人士吗?

起码我目前的工作经验,还没有遇过那种「技术非常硬,硬到软不下来(?)」的类型,毕竟这种类型的人可能也不太能够在公司内不被黑掉。

软实力不是身为一个 developer 的必备条件,却是身为一个 team player 的必要条件

沟通

只要在公司内,就免不了跟人沟通:

  • 入门班要跟其它工程师沟通
  • 中级班要跟工程主管沟通
  • 高级班要跟 PM 沟通
  • 极限班要跟客户沟通

尤其技术实力愈强的人,通常愈会接触到高级班、极限班的人,因此会有很多额外的技能衍生出来:估时、承诺、验收等,我们留着之後讨论。

帮忙

不是帮忙订便当那种忙

在同事卡关的时候,是不是愿意主动跳出来协助,即便自己可能也不知道怎麽解决,但起码,可以 call help 啊XD

技术实力不强的人,反而很需要跟其它同事打好关系,知道每个同事擅长哪个领域、模组,一方面可以知道卡关要找谁救,另一方面别人卡关可以推荐找谁救。

辅导

俗称「带新人」,如果已经靠自己的专业硬实力闯出一片天,那应该很有机会主导一个专案,也会需要带领其它 developer 一起前进。

这时,如何与「实力跟自己有落差」的人合作,其实是另外一个困难的课题。

因为通常用硬实力爬到一个位置的人,很容易将事情揽在自己身上,导致新人成长不了,自己又累垮的惨况。

如何切割专案任务,将部分任务交给新人,甚至让出部分舞台,其实是一件需要学习的事情。

结语

今天主要把焦点放在我们 developer 身上,其实看起来很多都像是在听道理,知道归知道,却只有实际做了才知道,自己究竟是如何在公司「工作」。

对於 ticket、deadline 如何执行,对於沟通、团队又抱持什麽态度,往往需要实际的职场经验才看得出来,因此我想,现在看这篇文章的读者,除了会有共鸣以外,应该也思考了很多之前没考虑过的细节。

写着写着
在黑幕里的异国文字
学着学着
在黑幕外的真实人生

参考资料

The Clean Coder


<<:  Day 30:未完待续,不停地学习!

>>:  卡夫卡的藏书阁【Book28】- Kafka - MirroMaker

Day 01: 【序】– 架构与设计、代码、工程师

「你因为两个原因来读这本书:首先,你是位程序设计师。再者,你想成为一位更好的程序设计师」 取自: ...

Day30 管线命令I

大家都知道在bash执行命令的时候有输出的资料会出现,那如果我们碰到的资料是需要经过几道手续才能得到...

[火锅吃到饱-7] 大喜锅 - 南屯店 - 平日午餐250元吃到饱 | 学生&小资族首选

又是忙到下午4点才吃第一餐的一天~ 赶在下午4点半之前进场都算午餐价,费用是250元(不收服务费),...

DAY27 - 来加速你的网站!利用Web Worker创造多执行绪的Javascript

什麽是Web Worker? 它可以做什麽?在了解Web Worker前,可能需要先知道:网页中 J...

Day22 AR隐形眼镜 让你闭着眼睛都能追剧!玩游戏!

本期我们来介绍前几期有提到的AR隐形眼镜。 在前几期我们有提到,我们在AR世界中,能看到的视野其实和...