外链论坛

 找回密码
 立即注册
搜索
查看: 77|回复: 3

技术成长 | 浅谈程序员的职业操守

[复制链接]

2557

主题

218

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99100815
发表于 2024-8-20 20:01:48 | 显示全部楼层 |阅读模式

作者:吴欣蔚(蓄昂) 阿里大淘宝平台技术团队

《匠艺整洁之道》是鲍勃大叔的整洁系列新书。这本书重点从纪律、标准、操守三个方面阐述了软件从业者应该怎样需求自己,提高开发质量、效率、道德水准,本文重点围绕《匠艺整洁之道》的第三部分 —— 操守,聊一聊咱们程序员该怎样自我约束、自我提高

1、为何程序员必须职业操守

1.1 行业的壮大

这个问题还得从软件行业的发展说起。 软件行业从诞生(1935)迄今(2022),已然有八十数年历史了。

在这时期全部软件行业有了巨大的发展:

从业人员已然过亿计算机/电子设备的数量超过人类数量软件监控、协调着全社会的运转

公众对计算机及软件的认知,从早年的以设备为主,到此刻以机器背面程序员为主。初期《星际迷航》、《太空奥德赛》等以设备/计算机做为重要角色。 而随着个人计算机的显现,《黑客帝国》、《战争游戏》等电影逐步以程序员做为救世主,程序员正脱去奥秘的面纱,被社会所认识和接纳。

1.2 影响面扩大

做为程序员,咱们虽然不是各样规则的制定者,但咱们编写了运行这些规则的代码,并在全面监控和协调咱们生活的设备中执行。换句话说:程序员们统治着这个世界

咱们编写的软件,记录着日程表、货物的运输、商品的交易,掌控着汽车的方向盘、火箭卫星,乃至还能影响法律的颁布或执行。

由于软件出错而引起的惨剧,在各行各业都有案例:

研究地面软件出错,运用错误的单位引起火星气候探测者号在火星大气层中下降太深,被撕成为了碎片。医疗:Therac-25 放射治疗机事故。因为进程冲突,Therac-25 的高能电子束引起3人丧生,还烧伤了另一3人。商场由于用错标识符,遗留在系统中的死代码被激活引起骑士资本集团在45分钟内损失了 4.6 亿美元。交通:丰田汽车的堆栈溢出漏洞,可能引起汽车加速失控,最后可能引起多达89人遇难。

总有一天,程序员们做的有些自认为无伤大雅的(蠢)事,可能就会引起成千上万的人死去。而这一天,许就在明天。

出现这些惨剧时,会有人必须为此负责,人们会需求程序员们说清楚怎样防止这种错误再次出现

因此呢做为程序员的咱们,亟需有知道的职业操守以进行自我约束,为的是让软件行业能有更大的发展,咱们自己能有更好的职业发展。

思考:是不是显现过故障,导致的最坏影响是什么?是不是对社会造成为了影响?

2、什么是职业操守?

2.1 职业操守的定义

WIKI 里对职业操守的定义指的是人们在从事职业活动中必要遵从的最低道德底线和行业规范。

在职业活动中,有有些公认的职业操守,如:

诚信的价值观诚实地制作工作报告不要泄密给竞争对手

同期,各个行业有各自细分的职业操守,如:

大夫:救死扶伤,爱岗敬业魔术师:不公开魔术的奥密公安干警:注重调查科研,处理案件不捕风捉影,主观臆断法律工作者:忠于宪法和法律,保持以事实为按照教师:为人师表,关爱学生...

在 《匠艺整洁之道》 里,鲍勃大叔提出了10条软件研发人员的职业操守。

2.2 软件研发人员的职业操守

以下摘自 《匠艺整洁之道》 :

1. 为保卫守护计算机程序员职业的荣誉,我承诺,尽我的能力和判断力:

2. 我不写有害的代码。

3. 我生产的代码将永远是我最好的作品。 我不会故意让哪些行径或结构上有缺陷的代码累积起来。

4. 我将在每次发布时供给快速、确定和可重复的证据,证明代码的每一个元素都能正常工作。

5. 我将经常进行小规模的发布,不妨碍其他人的发展

6. 我将无畏地、毫不留情地利用一切机会改进我的创作。我绝不让它变更差。

7. 我将尽我所能尽可能地加强自己和他人的生产力。我不会做任何降低生产力的事。

8. 我将始终保证其他人能够补上我的位置,我能够为其他人补位。

9. 我将给出在数量级和精确度上都可靠的预估。我不会做出把握的承诺。

10. 倘若我的程序员同事持有足够的操守、标准、纪律和技能,就能赢得我的尊重。任何其他的属性或特征都不会作为我尊重程序员同事的原因

11. 我永远不会停止学习和改进我的技艺。

3、程序员的职业操守

鲍勃大叔提出的这10条誓言能够分为三个类型: 损伤、集成、团队合作,咱们针对这三个类型分别展开聊聊。

3.1 关于损伤

1. 我不写有害的代码。

2. 我生产的代码将永远是我最好的作品。 我不会故意让哪些行径或结构上有缺陷的代码累积起来。

3. 我将在每次发布时供给快速、确定和可重复的证据,证明代码的每一个元素都能正常工作。

3.1.1 何谓损伤

咱们编写的软件每时每刻都在对这个社会产生影响。咱们任何无意中的行径,都可能会给这个社会带来意想不到的损伤

例如人们发掘公众汽车机构的程序员写了有些代码,故意阻挠EPA排放测试,影响相关分部对环境害处评定,损害了这些汽车驾驶地所有人的健康。

倘若咱们放任自己,就会对自己,身边的人,乃至全部社会导致害处包含

对社会导致损伤对你的同行导致损伤将来的程序员导致损伤对功能/结构导致损伤

3.1.2 直面损伤

以上公众汽车机构的程序员导致害处 ,谁该为此负责?

做为程序员的咱们,可能会这么说:"我只是在做我的工作,这不是我能掌控得了的事情。"

然则倘若你明晓得这么做会带来欠好的后果但还继续这么做了,那你就必须为此后果承担一部分责任。请不要忘记,机构雇佣你做为软件研发工程师的重要理由之一,是你应该有能力识别出软件可能在什么状况下出问题,你必须在它产生麻烦之前找到它,并且有责任大声说出来。

避免损伤,尽力而为

思考:以下两种系统,哪个系统的价值更高?

工作完美,但不可修改不能正确地做任何事情,但却容易修改

以上的两个系统,分别表现了软件的两个价值:

行径价值:让程序能够正确工作结构价值:让程序易于调节

一个软件系统倘若没法被改变,即使它能够正确工作,最后摆脱不了被淘汰的命运:

一个软件系统想要能够供给长时间价值,它就必要能够响应需求的变化。因此呢,除了最紧急的状况之外(对人、对机构、对社会导致劫难状况),咱们应该优先选择第二种系统。 即使咱们必须一点时间和金钱的投入,但在那之后,它就将能够永远继续工作。

保持好结构,它与咱们利益关联

为了能使软件能够供给长时间价值,不对当下的同事、将来的同事导致损伤,就需求咱们写出来的软件要有一个好的结构,一个好结构带来的价值有:

容易测试容易修改容易重用

要写出一个好的结构,常常要花咱们更加多的时间。咱们经常会遇到这般的场景:

一个紧急的需求过来,需求咱们在指按时间内完成并上线,但这些时间常常只够咱们完成需求,同期你的老板需求你尽快完成这个紧急需求。倘若是你,会怎样应对这种状况呢?

首要要记住的一点是:一个项目/软件的成功,对咱们的事业、声誉有着直接的影响,它与咱们的利益息息关联因此呢做为利益相关者,咱们对系统的研发和结构有发言权;同期咱们是工程师,机构雇佣咱们,是由于咱们晓得怎样构建软件系统,怎样搭建这些系统的结构,并使其能够供给长时间价值,咱们必须保证系统不会由于行径和坏结构而遭到破坏。

回过头再来看这个问题,咱们的老板认识结构吗?老板的理解仅限于行径吗?倘若老板知道告诉你不要理会结构,应完全关注行径咱们该怎么办?

咱们得拒绝,由于咱们是工程师,是利益关联者。许会有争斗、对抗,但咱们的专业不准许咱们退缩。许你认为拒绝就会被解雇,但大都数状况下不会。由于都数经理期望为她们必须和相信的东西而奋斗,况且她们尊重哪些愿意做一样事情的人(否则还会有那样多的技术沙龙、技术分享交流会吗?)。

3.2 关于集成

1. 我将经常进行小规模的发布,不妨碍其他人的发展

2. 我将无畏地、毫不留情地利用一切机会改进我的创作。我绝不让它变更差。

3. 我将尽我所能尽可能地加强自己和他人的生产力。我不会做任何降低生产力的事。

3.2.1 为什么必须关注集成

软件上的并发指的是:同一时间可能有多个用户对同一数据进行读写操作。

软件的集成,同样存在并发。咱们的项目持续变得繁杂、庞大, 参与这个项目的研发人员变多的时候,每一个同期都在改动着各自的功能模块,软件集成冲突的问题会越来越明显最后作为瓶颈。

漫长的(集成)周期阻碍了团队的进步。因此呢咱们必须关注集成,关注它的周期。它与迭代相关,它与编辑/编译/测试周期相关仅有提高这些过程的效率,咱们才不会阻碍别人的进度、团队的进步。

3.2.2 连续集成

软件行业经过这么数年的发展,已然有了不少处理方法。其中,连续集成便是一个很好的手段。

连续集成能够带来以下好处:

快速发掘错误防止分支大幅度偏离主干

连续集成并不可咱们消除Bug,然则能让它们非常容易被发掘和改正;它能够咱们的软件在快速迭代的同期,仍能保持高质量,不阻碍别人的进度

3.2.3 随机善意行径

鲍勃大叔在《代码整洁之道》里说到过的童子军军规: 代码签入时要比签出时更整洁

倘若每次代码签入时,代码都比签出时干净,那样代码就不会腐坏。咱们能够经过在每次检测代码时,对其进行随机善意行径来做到。任何善意的行径,无论多么微小,都不会被浪费。

咱们能够经过增多测试的覆盖率(但不该该变为管理指标),来帮助咱们改进代码,帮助咱们写出更加健壮的代码。

另一个有效的随机善意行径是简单的清理--以改进为目的的重构。咱们能够有些简单的手段入手,如:

优化字段的命名,让代码可读性更强清理无用代码,减少理解成本调节代码结构,保持代码的灵活性

3.3 关于团队合作

1. 我将始终保证其他人能够补上我的位置,我能够为其他人补位。

2. 我将给出在数量级和精确度上都可靠的预估。我不会做出把握的承诺。

3. 倘若我的程序员同事持有足够的操守、标准、纪律和技能,就能赢得我的尊重。任何其他的属性或特征都不会作为我尊重程序员同事的原因

4. 我永远不会停止学习和改进我的技艺。

以上几点重点是关于团队合作关联的誓言,总结起来重点为以下几点:

有团队精神,能够被补位,避免团队因知识断层而陷入瘫痪;诚实恰当地预估,不轻易承诺;只尊重职业技能、纪律、标准和操守,不因其他原因彼此卑视;永一直止学习,跟上行业的变化是对职业的尊重,是对自己的事业负责。

3.3.1 诚实恰当地预估,不轻易承诺

系一次鞋带必须多久? 许你能够火速地说出:20秒上下由于系鞋带这件事几乎天天都在做,你能够相当快速、准确地给出恰当的预估。

倘若要你写一个系鞋带的教程,必须多久?你是不是办法快速准确地做出一个预估?你必须思虑这个教程的受众、是不是必须图文并茂、篇幅限制 ……

这正是咱们做为程序员经常会遇到的问题:预估工时。 咱们面临的用户可能都是计算机新手,她们对软件可能一窍不通,咱们必要要写出运用要足够简单软件,并持有足够仔细运用说明……

当一位经理来找你说:“我在星期二之前必须这个。” 你被这个问题困住了,由于你不晓得是不是能在星期二之前完成这件事。许你做过类似的事情,花个两三天就搞定了;这儿面藏着一个跟你之前做过的都不同样的技术难点,你不晓得能否按时完成。

因此当你被需求估计某件事时,你不可给出一个详细的时间由于那是谎言,你不晓得是不是能够在特定的时间完成它,你必须思虑到最好和最坏的状况倘若你确实给了一个精确的时间,那最好能咬牙完成它。由于你在做出承诺,因此你最好准时完成它,不要有任何借口。

要给出一个恰当的预估,能够这么做:

不要轻易给出一个详细时间,诚实地保持诚实对项目的预估不可只是一个交付日期,而是一个时间范围进行工作项拆解,找出隐匿在里面的模糊因子(不确定原因)与经理交流,花更加多时间细化模糊因子,如此来回递归式操作针对最好状况、最坏状况、普通状况,分别估计其可能出现的概率,再针对这3种状况预估日期范围

3.3.2 永一直止学习

咱们所处的行业在过去几十年,经历了快速变化,况且这个变化还在连续咱们必要跟上。这就寓意咱们必要连续学习,连续阅读图书、博客、参加技术交流会等等。咱们的雇主责任培训咱们咱们必须对自己的事业负责。学习是自己的事,咱们要弄清楚该学什么,花多少时间学。因此呢,除了工作时间之外,每周投入10~20小时的时间来培养和守护咱们的事业吧,这是保持咱们专业性的恰当做法。

4、写在最后

“The simplest way to describe craftsmanship is pride of workmanship. It is the mindset that you are working on something important and you are going to do it well."

程序员是一个技术含量很高的职业,但必要受非技术概念的约束(标准和道德规范)。仅有经过这些标准和道德规范的约束,才会让咱们这个行业越走越好。它约束咱们行径,对咱们提出更高的需求,在提高咱们竞争力的同期会给咱们带来更加多的成就感。

咱们一块尽力的奋斗做到最好,做一个有『良知』的程序员!

回复

使用道具 举报

0

主题

2万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-8-20 23:24:34 | 显示全部楼层
你字句如珍珠,我珍藏这份情。
回复

使用道具 举报

2642

主题

183

回帖

9916万

积分

论坛元老

Rank: 8Rank: 8

积分
99160594
发表于 2024-9-2 06:42:28 | 显示全部楼层
楼主的文章深得我心,表示由衷的感谢!
回复

使用道具 举报

0

主题

2万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 7 天前 | 显示全部楼层
外贸论坛是我们的,责任是我们的,荣誉是我们的,成就是我们的,辉煌是我们的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-9-17 06:35 , Processed in 0.091143 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.