公司要你做不喜欢的事,你该怎么做?比如,你很不喜欢 Java,但是你的公司要你用 Java 工作,该怎么办?

题目里的状况正是我面临的窘境。我很讨厌 Java,连带着讨厌到 JVM、Oracle 甚至 Android,但我日常工作有将近一半时间是在做 Java EE,而且还是 Java 6。面对「那你为什么要把自己整到这个境地」这样的诘问我无言以对,只能用「毕竟技术偏好并不是选择公司的唯一理由」来搪塞。

不过公司没有人——好吧除了有点私交的已离职同事——知道我讨厌 Java。我的 Java 写的不好,但是也不坏,虽然比别人慢,因为我经常要在「StringBuilder 和 StringBuffer 哪个性能好来着」之类的细节上卡壳不止一遍,没办法,不感兴趣的东西很难记住,但重点是没有人意识到我讨厌 Java。

我觉得可能这是一种比较可取的态度:做一个职业的程序员,而不只是一个写代码的技师。这个观点并不是我的原创,The Clean Coder 整本书就是在宣扬这个。作者是 Robert Martin,七十年代做软件到现在,是 software craftsmanship 运动的领军人物之一。他书里面写说当初他跟同事领导一个程序员小组做项目,组里程序员发脾气耍别扭说「不行」的时候,他就跟同事去了解问题所在,寻求妥协,并使出各种解数哄他们继续干活,每次都成功,最后也做出了产品,但是到了发布那一天,他同事说「律师说不行,我们不发布了」,作者说「我们去摆平律师吧」,同事摇头说「不行,他们是专业人士(they are professionals)」,言下之意用在程序员身上那一套对他们行不通。作者顿感心灵受创悲愤不已,由此立志让人看得起程序员,就写了 The Clean Coder [1],教程序员怎么成为专业人士。如果你没空看这本书,那么我总结来说,就是要你「敬业爱岗」,负起责任来。推演来说,就是不要让你的个人好恶去影响公司的利益,不要任着自己的性子做事,因为说到底你不是 Ken Thompson 或者 Alan Kay,你也不在贝尔实验室或者施乐研究中心工作,你只是在一个以追求利润为目的的商业公司里面一个可替代的岗位上面工作的螺丝钉而已,公司付你薪水,你确保公司领导层的意志得以通过代码而实现,以此为基点出发,就要确保准确高效地完成自己的工作,主动思考,善于沟通,讲道理而不是抱怨,抑制自己的个人偏好去适应团队。只有这样才是职业人士的表现。

所以……公司要你做不喜欢的事情,只要不违法,你就应该用心去做,不仅要用 Java 写程序,还要好好写 JavaDoc,并学习 JBoss,Hibernate,Maven,或者任何其他 Java 业界的恶心玩意。唯有如此才对得起公司发你的薪水,唯有如此别人才会觉得你专业,因为所有专业人士都是这样的。就好像诉讼律师并不会因为客户是个杀人犯就不为他辩护,外科医生也不会因为病人长得丑就拒绝开刀,你也不应该因为不喜欢一种语言就不工作。当然你可以有自己的底线,如果公司要你做的这件事跟你内心的道德准则相悖,那你就礼貌地辞职不要干,早早找一个容你发挥才能和爱好的地方。千万不能又要做又要婊,这对你自己和公司都不好。

[1] 我不保证我的复述贴近原书。
原发布于 https://www.zhihu.com/question/24114420/answer/26722554