本文中探讨的问题并不仅限于软件行业,许多大公司都存在这样的问题。
我在软件行业工作已经二十多年了,前前后后经历过很多公司。我曾在大型金融和咨询公司从事过一些无聊的工作,还曾在一些小型软件公司从事过一些很酷的图形项目,这些项目为电影制片厂开发出了非常酷的工具。
我可以透漏一个秘密,很多“软件工程师”,尤其是在大公司工作的人,所做的工作实际上很少。他们中的很多人几乎“无所事事”。
5 个月的工作干 3 年
我曾在一家大型金融公司担任软件开发人员,当时我一直有一个疑问:为什么我们花在编程工作上的时间这么少。
大部分时间里,我都在应付各种无聊的会议、准备无聊的幻灯片、制作愚蠢的 Excel 表和甘特图。如果幸运的话,每天我能拿出 1~2 个小时写代码。我们团队负责开发的软件实际上是一个 JavaScript Web 应用程序,用于监控和收集公司财务交易的详细信息。
老实说,我觉得我完全可以在 5 个月内仅凭自己的力量完成整个软件。整个解决方案的代码行数不会超过 24,000 行(包括大量生成的代码)——而我们团队花了将近 3 年的时间来构建这个软件。当然其中大部分时间都花在开会上,或者为琐碎的功能争论不休,比如我们是否应该使用特定的图表来显示某些数据,以及图表应该使用什么颜色。就连我个人的项目都比我们开发的这个软件更复杂。
当时我们团队大约有 20 人,但开发出的软件根本没有什么可展示的。所有时间都耗费在沟通瓶颈、办公室政治以及低效的工作流程上。有时,主管或“团队负责人”会介入并“贡献自己的力量”,给我们一些毫无价值的鼓励,比如说一说为什么图表应该使用哪个颜色,为什么信息应该以某种方式显示等等——基本上就是一堆假大空。
不要以为这只是我对于这份工作的感受,其他的几份工作也都是如此。
此外,有这类经历的人不止我一个,与我交谈过的许多程序员都抱怨他们编写代码的时间太少,大部分时间都浪费在了会议上。我们总是忙忙碌碌,却没有任何实质性的产出。在工作时间内,我们总是被各种事情折磨得焦头烂额,从来没有空闲时间。然而,我认为很多时候我们都是在白白浪费时间。
不利于个人成长
这些工作中遇到的另一个问题是不利于个人成长。在科技巨头公司内,我们都是“螺丝钉”,在一个大项目中承担一个很小的任务。自由开发者只需努力两个月就能轻松超过我们 1 年的产出,请不要感到惊讶。
有时,你只是编写了一小段代码,却要为此编写 50 页的文档,还要进行一堆有用的和无用的测试。你做出的每一个决定都需要与同事和主管反复争论。所以,我们辛辛苦苦努力 1 年才能完成一位开发人员只需两个月就可以做完的工作。可悲的是,你习惯了碌碌无为,并在层层监视下,假装努力工作。
选择为自己工作
后来,我回到了以前曾经工作过的一间小工作室,并在这里找到了内心的平静和满足。我使用的是 C++ 和一些图形 API,包括 OpenGL 和 DirectX。我们需要制作非常复杂的后期效果处理,比如颜色分级、色调映射、屏幕空间体积效果以及许多其他很酷的功能。
我们团队只有 3 个人,我的另外两位同事对工作充满了热情。每一天,我们都在积极地学习、探索和发现。我们编写、构建和调试了大量代码。我也终于有机会提高自己的数学水平,因为我们的任务需要应用非常复杂的数学知识。这里没有办公室政治、没有废话连篇,只有编写代码和不断的学习。有时,我们也会会选择加班,因为我们沉迷于手头正在解决的问题。
网友评论
评论1:
以前,也曾有文章说过:“与组织问题相比,技术问题非常直接。分布式系统是公认最复杂的系统,但这类系统丢弃的消息大约为 0.1%,损坏的消息百分比更低,延迟只是微秒或毫秒级别。当我与上级交谈,将他们认为自己所说的内容与我的同事认为他们所说的内容进行比较时,我发现丢失消息的比率远远超过 50%,而且每条消息都会被损坏,而延迟可能长达数月或数年。”
“当人们想象构建某个功能所需的时长时,通常他们都会想象一个完美的团队,工作时间 100% 用于写代码。但这类的团队不具备扩展性。问题不在于效率是否会降低,而是能降到多低。如果一家公司能够消除组织的低效,那么其创新能力将远超任何科技初创公司。”
与写代码相比,沟通的扩展性极差,大型组织需要的技能与小公司截然不同。看来,本文的作者只喜欢写代码,而不关心提供最大的商业价值,所以他不喜欢大公司也是有道理的。
大公司和小公司也有利弊。与小公司相比,大公司的经营无论多么优秀,都会产生大量的沟通成本。
评论2:
我同意,大型科技公司的效率很低,因为我们需要协调各方利益相关者,这些沟通成本是不可避免的。公司给我们报酬是为了最大化业务价值,如果企业不盈利,我们都会失业。而个人价值的体现不仅限于写了多少代码。
身处大公司,你要么选择接受这一点,兢兢业业地做一枚“螺丝钉”,要么努力抗争。如果你觉得会议占用太多时间,那么就努力协调,与同事和上司沟通。
我个人的工作习惯是,每天留出 4 个小时集中精力写代码。我与经理做了几次坦诚的沟通,促进双方彼此的理解并建立更好的期望。