<audio id="audio" title="05丨责任的边界：程序员的职责范围仅仅只是被安排的任务吗？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/20/91/209c3e6afde31fd2951cfee332ee5291.mp3"></audio>

我们要知道，在现代社会，责任一般是和钱挂钩的。

我举一个例子。现在很多ERP软件都提供SaaS的服务。一个公司如果要使用这个SaaS服务，即便免费的额度已经够用，大多也会选择付费。为什么呢？其实花钱就是为了买个对方的责任。不付钱，看似节省，但如果真的出了问题，比如数据丢失、数据泄露等，那么对方是没有责任或者义务帮你修复的，但花钱就不一样了，一旦出现数据安全、数据稳定相关的问题，服务提供商都是要担责的。

那么同理，我们参加工作，和公司签了合同，有了工资。工资的背后，就是“责任”二字。

任何拿了钱的事情，都要负责——这是一个最基本的社会规则。

## 程序员需要对哪些事情负责

看到这里，你可能会有疑问，这还用说吗，我对自己的工作负责不就好了？可是我们的工作边界在哪里？“工作”仅仅指的是在公司内的工作职责吗？

首先，我认为，身为程序员，我们的工作边界及其范围包括3个部分，分别是个人的基本能力、工作内容以及工作时间。

### 对自己的基本能力负责

首先，程序员要对自己的基本能力负责，基本能力主要是技术能力和熟悉公司系统的能力。

**持续精进技术能力**

技术能力就是工作中用到的技术，是我们看家的本事。公司毕竟不是学校，没有教学的义务。既然拿了工资，就要学会相应的技术，完成安排的工作。

我在工作中也遇到过一些人，很多基本技能都不会，自己还没有任何补短板的意识和动作。安排工作的时候，直接甩出一句：我不会。理直气壮，令人惊叹。久而久之，大家对这个人的印象就是——没有工作能力。

当然，很多时候，并不是所有的技术需求都来得那么强烈，也不是所有的技术每个人都熟。我们在实际工作中，也难免会遇到自己不会的问题。这个时候可以向别人请教，但是千万不要觉得请教完就算完了，我们还要意识到自己为什么不会，想办法补齐这块的知识和技能。

如果一个事情不会做，那么基本上就相当于“违约”了。

但如果公司安排确实不合理，工作岗位不能发挥自己的能力优势，这种情况下又该怎么办呢？我的建议是，首先还是考虑发挥自己的优势，再抽时间补短板。态度要积极，不能摆出一副“我不会我有理”的态度。但如果新的工作全是短板，技术不熟悉，业务不熟悉等等，那么不妨和经理和HR聊聊转岗的可能性。

除了补短板之外，我们更可能遇到跟随公司做技术转型，学习新技术。如果是一些重要的公司层面的技术转型，有些公司可能会安排培训，或者给出一定的激励措施。当然，如果公司没有相应的政策，那么自己也是有责任把技术学起来，胜任新的工作的。

其实公司技术升级，也是给自己的技能升级的好机会。我一直强调的一点是，学的东西一定要在实际工作中使用，因为这样最能够激发学习的积极性，也最能验证自己学的成果。公司决定转型采用的技术，也大都会比现在使用的技术更优秀。很多工作久了的同学会抱怨说工作中用不到新技术，如果遇到公司技术转型升级，赶紧抓住机会努力一把，给自己的技术也升级一下。

就我个人的例子来说，我学会Hadoop、HBase、Hive、Spark、Scala和JS等等很多技术，都是抓住公司新的项目要用到新技术的机会，“强迫”自己学下来的。有些项目公司会留一部分学习的时间，大部分情况下全靠自己挤时间学。一边学，一边通过公司项目的实际操作来考验学习成果，过程非常的充实，学得也牢固。

所以公司技术升级，对我们个人来说，其实是一个非常难得的机会，如果你有遇到过，那么请一定要抓牢它。

**熟悉公司的内部系统**

很多公司都有自己的内部系统，熟练掌握和使用这些系统，也是我们程序员的责任。

在有些程序员看来，公司内部的系统不能算技术，因为这些东西不是通用的，就算学了对以后找工作也没什么用处，所以一般对内部系统的学习积极性并不高，甚至有些排斥。

但能够熟练使用内部系统，也是拿工资后要承担的一部分责任。公司内部系统的价值在于，它们一般都是和公司的整个框架集成好的，比如公司内部的SOA框架或者微服务框架，都是和公司内部的监控系统等等集成好的，即使这个框架再“不好”，公司内部的项目还是要使用，这样我们才能够在宏观上建立对公司内部所有服务进行的理解，从而更好地利用自己的技术，不至于“盲人摸象”。

撇开硬性工作要求不谈，事实上，有些公司的内部系统，做得还是很优秀的，甚至于让人离职之后还很怀念。积极学习公司内部相关的系统，也是自己在这个公司的收获之一。以后如果有机会在别的公司从事相关系统的开发设计工作，也可以借鉴学习。

你看，这同样也可以提高我们工作的基本能力。

### 对安排的工作负责

说完我们个人的基本能力之后，接下来，就是我们非常熟悉的内容了，工作责任。无论什么职业，都要对安排的工作负责。

程序员这门职业的特殊性在于，工作本身的具体内容和难度，会随着被安排的工作内容的改变而改变。从对工作负责的角度来说，我们大部分人会付出比当时预想的更多的时间，才让自己能够按时完成工作。

当然，这里并不是鼓励加班，只不过是一个小建议，如果你有额外的付出，那么到时候可以将自己做的计划外的事情说出来，这样一方面让大家认可你做的工作，另一方面，也是能够让大家对这类事情的工作量估计更合理。

当然还有另一种情况是，事情超出了自己的能力范围，比如一件事情的复杂度远超过之前的估计，在规定的时间内，自己确实无法完成。那么这个时候，正确的态度不是硬着头皮上，而是将情况理清楚，早点找经理或者负责人，让他们知道事情的进度和之前没有预想到的难度，把事情重新安排一下。毕竟，谁也不能承担“到了deadline事情还没有做完”的风险。

从管理者的角度来看，一个事情安排得不合理，就应该早发现，早计划，重新安排资源。毕竟大家的目的是把事情做完，而不是冒着事情可能做不完的风险去压榨一个人。

当然，还有一种情况就是，给自己安排的事情实在太多了，自己没有时间完成。这时候，一方面要自己思考事情的优先级，这点我们之前也讲过，另一方面要及时和经理沟通，建议将优先级低的向后推，或者找别人来帮忙。总而言之，不要在最后给经理“惊喜”。

很多新人可能很难把握这样一个度，什么叫“偷懒耍滑”，什么叫努力负责呢？在工作经验不丰富，技术能力也相对薄弱的情况下，怎么才能知道事情有没有“失控”呢？

我的建议是，当遇到自己吃不准的事情，可以多问问组内资格老的同事，如果老同事说问题不大，那么自己也更有底气。如果老同事说这个问题自己也没有遇到过，那就得找经理聊聊下一步的安排了。

### 对工作时间负责

很多软件公司，其实都是弹性工作制。毕竟程序员这个工种要求一直在线，有时候出了问题，随时随地掏出笔记本就得开干。既然没有一个明确的“下班”时间，那么很多公司也就不规定硬性的上下班时间了。

这里说的“对时间负责”，也是因公司而异的。我的建议是，一定要在“实际上班”时间之前到，避免有人找你却找不到的情况。比如说，大部分人都是在九点半之前到公司，那么你也尽量在这个时间左右到公司，不要延迟太久。

还有就是如果有会议，一定要准时参加。如果临时有事无法参加，要及时和大家同步。

对时间负责的背后，其实不止是为了保证工作时间。毕竟我们程序员都知道，坐在座位上并不代表就在工作，没在座位上也不代表没有在工作。这里想强调的一点是，程序员的工作不只是写代码，还有很大一部分是交流沟通，保证基本的工作时间，才能更多的和大家交流。

## 总结

随着级别的升高，程序员的工作也更丰富，从不同的角度来看，也会有不同的责任。比如我现在担任组里的技术主管，除了要做好安排的工作之外，还要协助组里的同事完成工作，同时要思考如何推进系统的技术升级，以更好地满足用户的需求。对于级别更高的同事来说，还有更具有挑战性的责任。付得起责任，才对得起自己那份工资。

俗话说：受人之禄，忠人之事。责任是一点点增加的，负责任的态度和习惯，也是从平时工作中的一件件事情中养成的。当你养成这样一种习惯之后，你会收获一个别人对你的金字评价：这个人，负责，靠谱。

如果你承担的责任更重了，那么距离你加薪升职还会远吗？

<img src="https://static001.geekbang.org/resource/image/63/6e/63d3bcf51ac687a1853a5eb73f01d56e.jpg" alt="">

## 思考题

这里给你留一个思考题吧。你觉得程序员还有那些基本的责任？就文中的内容而言，你觉得你是一个负责任的程序员吗？

欢迎你在评论区与我分享你的思考，也欢迎把这篇文章分享给你的朋友或者同事，一起交流一下。
