软件工程师的疯狂

这是我经常思考的问题,因为我不禁要问,其他大多数工作是否也是如此。

做软件工程师很辛苦。你需要从一开始就掌握一些编程语言和工具。但这并不能解决问题。公司希望你了解他们使用的特定框架。这可能是 Rails 或 Django 或 Laravel 或其他框架。你还需要掌握 CSS。这需要你花上一辈子的时间来学习,而且你还不知道为什么布局会被破坏,但只要知道足够的知识就可以了。

你不太可能不用处理 JavaScript。也许你很幸运,只需要偶尔在你维护的传统应用程序中加入 jQuery。但世事难料。

在某一时刻,Facebook 的员工构建了 React。原来,这家拥有数万名工程师的公司一直有两个专长:前端和后端。程序员们集体认为,React 是现在构建软件的正确方式,但与此同时,公司却认为他们负担不起更多的工程师。于是,全栈工程师诞生了,而你就是其中一员。开始学习 React,在你已经掌握的后端技术基础上构建 REST API。

不会止步于此。你知道你需要类型,对吗?添加 TypeScript。你真的打算像个傻瓜一样在 React 中管理状态吗?添加 Redux。躲过了这两步,是不是觉得自己很聪明?那就好好想想如何配置 webpack/esbuild/rollup、Prettier 和 ESLint 吧。

你说 “好吧”。”但我可以继续按以前的方式做事。它运行得很好。我不需要 React”。当然可以。你完全可以偏离你的快速发展、烧钱的初创公司的做事方式。只要告诉你的老板,你可以教那些只听说过 React 的新员工服务器端渲染的乐趣。

哦,原来我们才刚刚起步。

在恐龙漫游地球的时代,有一种职业叫做系统管理员。他们的全部工作就是确保你的后台运行良好。他们负责基础架构变更、数据库升级、系统升级、保持守护进程运行、重启等一切工作。后来出现了 DevOps。某家资金紧张的公司决定现在所有这些都由工程师来处理,大家都同意了。现在,你需要学习 Docker。哦,你的整个应用程序只是一个静态链接的二进制文件,不需要 Docker?那就学习 Ansible,我希望你能从中找到乐趣,找出需要传递给 SystemD 的选项。

你还没学到一半呢。现在你得学习 AWS。你不会像农民一样使用图形用户界面来配置你的基础设施,所以你最好学学 Terraform 或 Pulumi 什么的。

你干得不错。你被提升为经理。你需要学习另一项全新的工作。不过没关系,因为这是终极目标。幸福 以下是你需要做的一些事情:

  1. 猜测截止日期
  2. 给队友分配任务
  3. 指定任务
  4. 参与年度审查
  5. 在产品会议上提供有价值的反馈

你最好希望你的公司员工数量在这一点上已经翻了两番,否则你就得做管理加以上所有工作。

而且情况可能会变得更糟。几天前,一位招聘人员向我咨询了一家秘密公司的工程职位。他们认为,他们需要 Rails、Hotwire 方面的高级技能,令人难以置信的是,还需要原生移动开发方面的技能。为什么不把内核和编译器开发也加进去呢?

软件变得越来越复杂。所有这些复杂性都是有原因的。但专业化怎么了?在建造房屋时,会有大量人员参与其中:建筑师、土木工程师、水管工、电工、砌砖工、室内设计师、屋顶工、测量师、铺路工,等等。你不能指望一个人,甚至是整个公司,能够完成所有这些工作。

也许在未来,我们只需几条提示就能创建一个完整的应用程序也不是那么糟糕。

本文文字及图片出自 The Insanity of Being a Software Engineer

你也许感兴趣的:

共有 271 条讨论

  1. > 成为一名软件工程师很艰难。

    不,并不难。软件工程是最轻松的职业之一。我们被惯坏了,以至于认为这篇文章中描述的工作很艰苦,这本身就证明了我们的职业并不艰苦。

    1. 我得说,我做过农场工人、服务员、快餐店经理、流水线厨师、场地工作人员(迄今为止我最喜欢的工作,那是在一所大学里,我什么都能干)、水管工、电工、日工、 在我拥有电脑之前,我曾在工厂干过几份工作(我的家庭背景并不允许我拥有电脑,我拥有了第一台电脑后,电脑就开始工作了,不到一年,我就在一家互联网服务提供商工作,负责配置 Qmail 和 Bind,每个人都以为我从出生起就和电脑生活在一起)。

      我在技术领域的职业生涯非常成功,我做过很多让我印象深刻的事情(我不想在这里吹嘘,但你们可能从我的工作中受益匪浅,当然,你们所有人都做过比我更让人印象深刻的事情,为此我向你们表示感谢),我一天都不后悔,但作为一个从事过那些 “普通工作 ”的人,除了在工厂工作外,我发现这些工作本身比我现在做的任何事情都要让我感到满足。

      技术工作过去确实比现在好很多,我仍然喜欢学习新东西,但如果我每年能挣几十万,而且再也不用做 OKR 和园艺工作,我会很快就接受,你根本无法想象(事实上,我愿意一年挣 10 万)。

      现在我老了,我的人都依赖我,所以我做 OKR,玩所有的政治游戏,甚至领导我认为在组织中被错误应用的新技术,但如果我能让任何人相信我,只使用 SQLite,那就见鬼了。但是,如果我是单身,没有孩子,我会很乐意放弃 6 位数的生活方式,重新开始我的工作,甚至和团队一起在厨房里度过一段艰苦的时光,我以前的工作有很多值得我去做的地方,只是福利很差,如果没有很多运气和牺牲,我无法在美国养家糊口。

      我认为,也许你们中的大多数人认为其他工作如此辛苦,只是因为他们没有来自一个正常的家庭,但对我来说,它们是正常的,除了工资和福利,我不认为它们有任何问题。它们是诚实的工作。

      尽管如此,如果科技公司只是让我们做好本职工作,而不需要管理层那些奇奇怪怪的AMA、自我帮助的言论和怪异的行为,那我也就心满意足了。

      1. 我认为答案是视情况而定。如果你是一个完美主义者,想要制作出高效、安全、可维护的软件,那么软件工程是非常困难的。但在大多数情况下,你甚至不可能做到既是完美主义者又不超出预算。而且,需求往往不是你自己的。

        问题是,这是一份需要创造力、自发决策以及对这些决策承担个人责任的工作。如果你不需要承担这些责任,那么这份工作就会很轻松(例如,当我离开很久之后,那些追随我的人就要承担后果)。如果你有一些激情或道德上的顾虑,促使你去创建符合自己高标准和高要求的软件,那么这份工作就会变得很艰难。

        我认为,这正是许多人感到困难的地方。我们对工作充满热情(否则我们怎么会在空闲时间上这个论坛),但为了工作或继续就业,我们不得不不断背叛自己的原则。

        1. > 当你有一些激情或道德上的顾虑,驱使你去创建符合自己高标准和高要求的软件时,你就会发现这是一份艰苦的工作。

          这是很多软件工程师最难学到的一课。从本质上讲,计算机是无情的,因此我们中的很多人(大多数人?这种心态显然与现代企业环境格格不入,这是一个相当痛苦的教训。

          这并不是说任何一种方法都是唯一正确的方法。对公司而言,软件是实现更多利润这一终极目标的手段。

          而对于工程师来说,软件往往既是谋生的手段,也是快乐的源泉。在理论上,将第二点与第一点相协调很容易,但在实践中却很难。

        2. 完全同意!这些没有那么多激情却以开发软件为生的人往往不那么在乎,而当我们不那么在乎的时候,我们就会做得更多。而且,他们很少会提出蹩脚的解决方案,这些解决方案可能并不好,但却能发挥作用。这让那些充满激情的完美主义者的工作变得更加困难。

      2. 我最初是一名舞蹈教练(13 岁就开始参加比赛),后来我看到舞蹈室主任还在纽约市一个非常糟糕的地方与别人合租(!!)房间,于是我从丈夫从《纽约时报》上剪下的分类广告中找到了一份机场工作,我对航空产生了浓厚的兴趣和热情。我上了几节课,并参加了调度员执照课程。

        我喜欢它,第二次尝试就被内部录用了。如果我告诉你我们当时被称为 “飞行调度员”,你也许能猜出那是哪家航空公司。

        大约 12 年后,航空公司总部和运营中心搬到了中西部,所以我选择留在纽约,去学校接受再培训。因为没有编码学校,我选择了广域网管理。在这里,我拿到了 A+、MCSE、MCSD、CCNA、CCNP、CCIE。但与此同时,我开始大量接触脚本和编码。因此,我的第一份工作是 perl、PHP 和 SQL 开发员,现在已经做了很长时间。我必须说,这是我见过的最自由、最赏识人的职业。只要你的工作完成了,你可以去任何地方。除了丰厚的薪水和福利(好吧,没有出差),这些工作还很有趣。不错的选择。

        1. CCIE是合法的!

          我只想说,这令人印象深刻。

      3. 在我漫长的职业生涯中,我见过很多开发人员。那些为钱而来的人真的一辈子都在受苦。我从孩提时代就开始编程,直到现在也停不下来;)

        1. 老实说,如果可以的话,我早就离开了,但我丝毫不后悔我的职业生涯。我仍然以编码为乐,但我们的工作很少只与编码有关,而且金钱带来了很多毒害。

          1. 正是如此,如今编码也不再是为了创造力或乐趣。

            1. 是的,在大项目中,你看不到结果。它变成了一种无聊的例行公事。但当你的业余机器人迈出第一步时,感觉就完全不同了。

      4. 非常鼓舞人心的评论。我想,在过去,软件开发是一项更有影响力的工作。

        我确实从软件开发中获得了乐趣,但和许多人一样,我也梦想着开一家农场,使收入多样化,并定期从事一些体力劳动。

      5. 我想知道,如果你依赖于花园的收入(以及作物存活、生长并卖个好价钱以维持生计的能力),这种信念是否真的能让你存活下来,或者你只是梦想着能在度假时在土地上耕作一番。

        我曾在农场工作过,我觉得这种浪漫化的说法简直太荒谬了,因为我觉得你们很多人都不了解真正靠土地谋生有多难。

        1. 上面的 PP 说,在地勤人员那里工作是他们最喜欢的工作。我想他们说的就是这个。

          1. 是的,我说的是地勤人员,没有人为了钱去采摘树木,那是我最喜欢的工作,如果没有家庭负担,我很乐意再做一次(我在帖子中提到过这一点)。

            不过,我工作的农场和农场主及其父亲很熟,我在那里常年工作了几年,夏天休息。收获的季节是疯狂的,并不是所有的年份都很好,但家里人都很舒服,大多数时候工作量也很合理。也许现在情况不同了,但我当时住在农业州,我认识几个做得很好的农民,他们生活得很好,资产比我现在还多。因此,我不确定我是否完全赞同你对农业的看法。不过,这在很大程度上取决于时间和地点,我承认我不是专家。

        2. 我很抱歉这篇文章引起了如此大的负面反应,但我认为你太早停止阅读了,我们之间的共识多于分歧。听着,我已经为我错过的那些工作缴纳了税款,所以我知道我在说什么。

      6. Upvotes for you. 出于需要,我也打过很多零工。很多人做的事情坦率地说会让大多数人反感,或者人们会说这侵犯了工人的权利,或者违反了安全规定。尽管条件艰苦,但我更喜欢这些工作。

        毫无疑问,从经济角度来说,这些工作很不错。尽管我热爱编程、设计和工程,但如果不考虑钱的因素,这就是一份糟糕的工作。我的意思是,我喜欢设计、编程、模糊性和不断学习的要求。

        在这份工作中,我最大的理智来源就是在工作中多花时间做我喜欢的事情。具有讽刺意味的是,我因此获得了很高的绩效评级–但我必须争取把时间花在这上面。

        现代科技公司和文化都很糟糕,即使是我称赞过的最好的公司也是如此。在这一点上,我甚至不能责怪任何人,因为这很难,而且我还没有创办一家试图做得更好的公司。老实说,我甚至不确定自己是否会做得更好。

        1. 谢谢,我很感激。关于违反安全规定的问题,是的,其中有些原因是这些法律的执行不力,很难找到一个地方不在某种程度上违反法律条文,所以我认为他们只是轻率了一些。

          关于 “理智的来源”,我发现自己在做额外工作时也会这样做,但有时会适得其反,因为你写的有趣的小工具很好地解决了问题,成为了公司的标准,然后政治因素就来了。我指的是当它开始演变成政治上的指指点点,而你又被迫卷入其中,因为你是一个工具的创造者,切切实实地卷入了一些办公室间的政治。我还没想出如何避免这种情况。

        2. >在我的职业生涯中,我最大的理智来源就是在工作中多花时间做我喜欢的事情。具有讽刺意味的是,我因此获得了很高的绩效评级–但我必须努力争取把时间花在这上面。

          既然是额外的时间,为什么还要争取呢?难道你就不能在正常时间做这件事来避免争吵吗?

      7. 多么鼓舞人心。

        作为一个小时候只送过报纸、在音像店打过工,后来才找到第一份开发人员工作的人,我一直有这样的印象。

        我永远无法说服自己去农场、苗圃或加油站工作,因为经常在家里对着电脑工作,工资总是更高。

        我觉得大多数电脑问题都是编造出来的,而现实世界中的很多问题都能吸引你的情绪和感官。

        1. > 我觉得大多数电脑问题都是编造出来的,而现实世界中的很多问题都能吸引你的情绪和感官。

          有趣的是,我也有同样的感觉,但得出的结论却恰恰相反。我不想回首往事时,觉得自己把时间都花在了追逐假问题上。不过,每个人的计算方法都不一样。

          1. > 我不想回首往事时,觉得自己把时间都花在了追逐假问题上。

            如果我没理解错的话,这是不从事软件开发的理由吗?

            我同意,我主要是为了钱和自己的好奇心。

            而且我确实看到,软件开发有时能解决真正的问题,比如清除地雷。但这种情况很少见。

          2. >我不想在回首往事时,觉得自己把时间都花在了追逐虚假问题上

            新自由资本主义经济充满了虚假问题。

            以闪电交易为例。我知道它为什么存在,也知道它为什么有效。我并不责怪人们参与其中,因为他们(和我们)存在于我们所拥有的体系中。

            然而,想想那些被注入该行业的资金和该行业所赚取的利润,而这一切都是为了……能够通过算法交易一美分的价值差异,并因交易量而获利。

            这个问题值得解决吗?在我们当前的经济体系中,它是值得解决的,但它应该是值得解决的吗?

            我不知道什么是更好的(我并不是在为共产主义或其他明显失败的经济政治制度争辩),但我确实觉得我能找出一些问题,很容易就能归入编造的范畴。

            1. 闪电交易不就是通过计算迫使价格更快地达到平衡,从而提高定价效率吗?

              我不确定这是否值得在系统层面投入必要的精力,而不是在其他地方投入精力,但我认为这至少有一些抽象的好处。

      8. 对我来说,工作就是工作。周一早上起床总是令人扫兴。所以,我还不如拿工资和空调。

    2. 我完全同意,但我总是纠结于如何描述这一点。软件工程师一般都很优越,即使是相对平庸的工程师,年薪也能轻松突破 10 万美元。但是,这个领域的工作却令人难以置信地不满意和沮丧。可以肯定的是,我们中没有人会放下手头的工作去零售业工作。从严格意义上讲,我们并没有受苦;没有人可以虐待我们,我们的工作也不会毁掉我们的身体。但是,我们中的很多人都有点讨厌这份工作,留下来只是为了钱,如果其他工作的薪水足够高,他们也会去其他地方工作。

      在你拿出你的小提琴之前,我并不是说其他人的情况比我们更糟,也不是说任何人都应该对我们表示同情。我想这更像是一种金手铐的感觉。

      1. 我觉得这份工作超级令人满意,即使它的薪水低得多,而且被大多数人视为平凡的文职工作,我也可能会成为某种计算机程序员。我很庆幸生活在这样一个时代,它是一份高薪工作。

        1. 是啊,仇恨从何而来?编写软件既困难又具有挑战性,而且在某种程度上还很有趣。

          1. 在对工程一窍不通的工商管理硕士的领导下编写软件,在对工程一窍不通的销售和营销团队的推动下,不断 “冲刺 “以把东西推出门外……

            在这个行业里,有很多东西会让人失去编写软件的乐趣

            1. 诚然,我们不得不面对的所有垃圾确实会让你怀疑自己为什么要做这个工作–我想到了另一个问题,那就是,你经常要为你并不关心的某个功能的一小部分工作,而且一干就是好几个月。

              不过,对我来说,在某种程度上,我总是喜欢在数字世界(尤其是大容量应用程序)的苛刻环境中构建一些需要发挥作用的东西。是的,这需要你利用自己的经验和训练来解决棘手的问题,并产生真正的结果。至少对我来说,这通常足以让我坚持下去:)

      2. 不管钱多钱少,软件工程也能让人感到无比满足。这取决于你的工作内容和合作对象。在编写有趣的软件或解决令人费解的问题时,当你进入状态时,会有一种很棒的感觉。

      3. > 我们中的很多人都有点讨厌这份工作,留下来只是为了钱,如果其他工作的薪水足够高,他们也会去其他地方工作。

        我想你刚才描述的大多数人都不是 SE。唯一不同的是,他们找不到薪水更高的工作。

      4. 在美国。如果你在其他市场工作,薪水会低得多。我认识的工程师中,工资超过 10 万欧元的要么是领导,要么是创始人。

        1. 在英国,软件工程师雇员的收入有可能超过 10 万英镑,但这些往往是非常专业的领域。(并不都与金融有关)。

          我记得大约 10 年前,一位软件经理(好吧,苹果比橘子)抱怨他的收入超过了这一水平,不得不玩游戏来避免受到税收影响,因为税收影响在 10 万英镑到 12.5 万英镑之间。

          尽管如此,我确实认识一些工程师,他们表示自己的收入超过了 10 万英镑,但他们既不是领导级别,也不是创始人级别,只是在相应领域经验丰富而已。

          1. Contracting 可以做到这一点。(注意事项–了解 IR35,在银行存 6 个月以上的钱,能够临时搬迁,见仁见智)

        2. 10 万美元约合 9 万欧元(7.7 万英镑),你可能会说这并没有实质性地改变你的观点,但我不是在挑毛病,这相差不止 10%。

          我认为,人们经常这样直接比较跨币种的数字,或者只是一般的四舍五入数字,会把目标放得比实际更远。

          1. FWIW 这 10%几乎完全来自于当前的经济冲击。2025 年初,1 美元约合 1 欧元。

    3. 错。是很艰难。

      但大多数工作在某种程度上都很艰难。

      在我看来,软件工程是历史上信息最不稳定的行业之一。

      在实践、知识和改进方面,你必须积极跟上潜在的、我在这里猜测的、历史上转变最快的行业的步伐。

      不仅如此,它还不断面临失败和障碍–错误、框架、功能、平台等等–以及不断的抽象层。很多时候,你无法想象任何产出。

      软件工程是一个技术含量很高的行业,可能也是世界上竞争最激烈的行业,不确定性、裁员和变革的发生率非常高。我们的工作涉及人类历史上最复杂的系统。

      我不认为你可以笼统地认为我们受到了溺爱。在美国的某些人口中心,软件工程师的薪水当然很高,但放眼海外,情况并非如此。

      说真的,根据什么标准,软件工程是最轻松的职业之一?我想听听你的观点,因为我觉得你的观点太离谱了,我一定是漏掉了什么。

      它有它的好处,比如可以在家工作。

      但软件业是最艰苦的知识工作者行业之一。

      虽然也有更艰苦的职业,比如电子工程,但无论如何,软件业都不容易

      1. >,而且可能是世界上竞争最激烈的行业

        可以说,随着行业的成熟,软件业也想朝着这个方向努力,但事实并非如此。人们已经在软件行业赚了大钱。你不可能在一个竞争激烈的行业赚钱。

      2. 事实上,只要问一句 “既然这么容易,为什么不是每个人都在做呢?”就能对 GP 的假设提出质疑。

        1. 我的意思是,每个人都在尝试。我注意到,在软件工程领域,首先是为了薪水而工作的人明显增多。有些人甚至不喜欢写软件!

          这与编写软件的技能并无必然联系,但我也发现,在这一日益增长的人群中,表现不佳者的比例也越来越高。最终的结果是,随着时间的推移,技能水平的中位数似乎在下降。

          这并不一定是件坏事,而且随着软件开发人才队伍的壮大,这似乎也是意料之中的事。

          但随着时间的推移,肯定有越来越多的人在尝试(并且成功!)从事这项工作。

    4. 同意。我们甚至不需要用苹果和橘子来比较体力劳动的工作,只要看看任何从事其他高薪白领工作的人就知道了。

      把在大律师事务所工作和在大科技公司工作相比较,就会一目了然。我甚至还没有考虑到进入大法学院的基本要求(好学校本科毕业,GPA、LSAT 都很高,进入顶尖法学院要花很多钱,努力争取实习机会,BAR 等),而社会工作作为一种职业几乎不需要这些要求。单是工作与生活平衡方面的整体差异就已经让人抓狂了。

      1. >在大律师事务所和大科技公司工作的对比

        并非所有人都在大科技公司工作。全球很多开发人员都在母婴店、传统企业或各种咨询/体察店工作。大科技公司的员工是例外,而不是规则,美国员工可能是例外。

        1. >也许除了美国工人

          不,所谓的 “暗物质 ”开发人员在美国也占大多数。HN 只是开发者群体中的一小部分,那些为大型科技公司工作的开发者更是如此

        2. 这是很有道理的一点,但我不知道这有什么关系,除非那些在母婴店/传统企业等工作的开发者以及美国以外的开发者比美国的律师(或其他高薪白领)工作得更多,或者有类似的进入壁垒。从我认识的在这些地方工作的人(我自己也曾在一家传统企业–一家大银行–工作过)来看,情况似乎完全不是这样。初创企业当然如此,但那只是高风险/高回报类型的交易,而且它们也几乎没有任何准入门槛。

          美国以外的情况也是如此吗?这是个真诚的问题,因为我对美国以外的现实开发工作不太熟悉。但据我所见,他们的工作并不明显,也没有很高的准入门槛(相对于其他高薪白领工作而言)。

          1. 在美国之外,大多数开发人员的收入并不高。他们肯定是好工作,从薪资上来说,应该在水管工的范围内。

            没有高门槛,是否被累得半死取决于工作地点

            ,但总的来说,开发人员没什么可抱怨的。

            1. > 它们肯定是好工作,从薪酬上看,应该在管道工的范围左右?

              这是我的观察结果,在英国等地,软件开发人员的薪酬与水管工或电工差不多,除了伦敦的高级金融等特定行业之外

            2. >不过,一般来说,开发人员没什么好抱怨的。

              我不敢苟同。我认为我们的行业还有很多需要改进的地方,即使在薪酬方面,我们也可以做得更好。想想每位工程师创造的价值与他们的薪酬,两者的比例通常非常高,这意味着工程师的薪酬只是他们创造价值的一小部分。

            3. 看来我们意见一致。

              有趣的是,你提到了水管工:在美国,成为一名水管工要比成为一名工程师有更高的门槛(必须在有执照的水管工师傅的指导下完成学徒计划,并通过技工考试)。但从另一方面看,他们的薪水却相当可观。

    5. 昨晚,我在一个聚会上和朋友们聊起了他们的白领工作,是啊,SWE 是全场最轻松、最舒适的工作了。

      一位朋友刚刚结束了为期 3 个月的某型客机飞行认证课程。他们在 3 个月内所进行的紧张学习和测试可能比大多数人在 4 年本科课程中所做的还要多,包括 SWE。

      1. 也许我们应该同意,所有的工作都不能用苹果和苹果来比较。我有三个好朋友在各大航空公司工作。我对这些工作非常熟悉。

        -这些测试可不是闹着玩的,但说它们比 4 年制的 CS 学位还要难,那就太荒唐了。此外,你可以将大型航空公司与 FAANG 相提并论,很多人都要学习 6 个多月才能通过这些面试。如果你通过了面试,你就不会被解雇,除非你想做一些非常愚蠢的事情。- 你不会怀疑自己做得好不好,也不会把工作带回家。- 规章会变,你也可以换飞机,但职业生涯要比西南航空稳定得多。

        总之,它们是截然不同的工作。总的来说,SWE 是一份很好的工作,但我不同意有人说它比其他工作难或容易。答案就是 “视情况而定”。

        1. 没错。OP 陷入了一个典型的陷阱,即尽管只了解其中一个领域,却对两个完全不同的领域一概而论。我在将近十年前就拿到了 PPL(虽然与 ATP 相去甚远,但仍然如此),试图将计算机科学与飞行员的技能进行比较是非常可笑的。

          1. 就是这样。飞行员并不容易,你确实需要学习很多东西,但大部分都是死记硬背。

            这与我们在编程中进行的思考完全不同。两者并无优劣之分,只是不同而已。

        1. 这真是愚蠢的混淆。

          它打破了原有的隐喻,没有人知道它或定义的混乱边界–不利于沟通。

          大多数人似乎都以自我定位为蓝领或白领而自豪。

          显然,下一步粉领或黑领的含义是什么?

          1. 几十年前,我听说 “粉领 “用于指女性从事的工作(护士、教师、私人助理)。<耸耸肩>

            呀。术语繁多,令人困惑。

        2. 我不认为房间里的人会同意这个词。

            1. 坦率地说,他们的工作都需要接受更多的教育,压力和出错的后果也比我的高得多,如果说他们的工作不是白领工作,那就太无礼了,对每个人都是一种侮辱。

              1. 我觉得你对 “侮辱 “的定义实在令人困惑,因为几乎所有的 “白领工作 “都是 “我整天坐在屁股上,懒洋洋地思考问题,压力很小 “的工作。他们推纸、写报告,有时可能还要做一些烦人的数学题,但 “压力大”、“出错有后果 ”的整个工作概念似乎与白领完全不符,我个人还以为那些每天真正做一些重要工作的人(不像我)会觉得被归类为 “白领 ”是一种侮辱?

              2. 暗示一些蓝领工作不需要更多的教育,压力和出错的后果也比许多白领工作高得多,这同样是一种侮辱。

                有许多蓝领工作需要大量的教育,出错的后果就是失去生命。

                1. 那间屋子里的大多数人都做过蓝领工作,通过学校的学习,再接受白领职业培训。

                  如果我对他们说:“不,你的工作并不是_真正_的白领,你的社会地位并没有你想象的那么大改变。”那就太失礼了。

                  1. 白领/蓝领虽然与收入相关,但与社会地位无关。

                    我的一个朋友是建筑工头。他住在郊区的一栋豪宅里,是一家知名乡村俱乐部的会员,赚的钱比我多。他是蓝领。

                  2. 在美国,大约 60% 的劳动力是 “白领”。

                    为此感到自豪,就像在加利福尼亚为六位数的薪水感到自豪一样。

                    1. 一个人不能为自己的个人成就、自我改善、从事自己想要的工作或养家糊口而感到自豪?仅仅因为很多人都做了同样的事情?

                    2. 你是说 60% 的加州工人的最低收入是六位数?

              3. 你读过维基百科的文章吗?灰领是指需要智力和体力的工作。它甚至把外科手术也列为灰领。认为白领说明受教育程度更高,压力更大才是问题所在。有高中毕业生就能胜任的白领工作,也有大多数时候生死就在一瞬间的蓝领工作。

                1. 我明白人们想把所有事情分类,但这似乎不是一个特别有用的分类。如果你看看维基百科文章中的列表,其中包括 “熟练技工/技术人员”。仅这一项就占了传统上被认为是 “蓝领 ”的工作的很大一部分。

                  1. 无论你是否想使用 “灰领 “类别,最好还是避免将白领置于蓝领之上。

                2. 评论在后来的编辑中链接到的维基百科文章说这是一个有争议的定义,并说这类职业通常被描述为白领。这似乎支持了我的说法?

      2. 说实话,我觉得我的经历恰恰相反。我是一名机械工程师,而我妻子的大学老朋友都是硅谷的技术人员。

        在我头脑中的 10 个人中,大部分人在过去 5 年里都下岗了。据我所知,找到新工作的人都对自己的薪水不满意。

        我把自己的工资和他们的工资对比了一下,结果让我大吃一惊。我有近十年的工作经验,在工程部工作的 4 年里,我的薪水和他们差不多,但我的职位不是管理职位,而且工作保障更差。

        我可能把程序员和工程技术人员搞混了。我只是称他们为技术人员。

        1. 你能给出你的薪水(或一个范围)吗?

          一个 SV swe 4 年后就能赚到机械工程师的薪水,这似乎令人震惊。

      3. > 一个为期 3 个月的认证项目

        具有高难度认证的行业在获得认证后往往会保护这些认证。要想进入这个行业需要付出艰辛的努力,但之后的工作却轻松而有利可图。

        这是飞行员或医生职业生涯的承诺。(Inb4 doctors do hard things)

        相反,那些利润丰厚但进入门槛较低的行业(销售、房地产等)往往有直接的业绩竞争。

      4. > 一位朋友刚刚完成了一个为期 3 个月的课程

        在软件行业,当你完成 3 个月的课程时,技术已经被认为是过时的了。

        不仅仅是前端。后端技术也会瞬息万变。

        Elastic/MySQL/CockroachDB 使用不同的许可证,与 AWS 不兼容。我们必须转换堆栈!

        Kafka 被淘汰了。都是关于 Iggy 的!什么叫语言不同?学着点!

        事情会以不同的方式变得艰难。编码了整整一周后,做园艺工作几乎是一种解脱。

        1. > 当你完成 3 个月的课程时,这项技术已经过时了。

          这是一个不正确的说法。除了最初级的申请者或最临时的承包商,没有人会因为今年学到的技能而获得报酬。

          最重要的技能是永恒的。获得一个好的 CS 或 EE 学位仍然是入门的最佳途径。

          1. 没错。在过去的十年里,我的专业技术栈的主要区别在于,我写的是 Go 而不是 Java,我的软件在 Kubernetes 上的容器中运行,而不是在 CentOS 上的 JAR 文件中运行。我的朋友们在他们的职业生涯中都经历了更为重大的变化和再培训。

            1. 没错,即使在互联网技术领域,这也是荒谬的。想象一下,我们从 1995 年就开始培养一个只懂 http、Unix、网络等的 Perl 老手。他们在一个月内就能在任何公司发挥无价之宝的作用。

              1. >他们可以在一个月内成为任何公司的无价之宝。

                这是天方夜谭。在现实生活中,他们根本不会被录用。问我怎么知道的。在我生活的地方,招聘人员只检查你最近的工作经验和经历是否与工作岗位相符,否则你的简历就会被扔进垃圾桶。

                就像 Ygg2 在下面说的,雇主不需要具备一般 CS 知识的通才,他们需要的是能立即投入工作并开始处理 Jira 单子的人。

                1. > 雇主不需要掌握通用 CS 知识的通才

                  事实并非如此。就像我说的,如果你想打入公司,这更像是个问题。

                  > 他们可以立即投入工作并开始处理 Jira 单子。

                  这只代表最不稳定的软件合同。

                  > 在现实生活中,他们根本不会被录用。

                  我有招聘能力,我会雇用他们。

                  发帖人说他们的技能会过时。我觉得你把销售问题和技能问题搞混了。

                  1. >事实并非如此。

                    无论我在哪里应聘,情况都是如此,所以对我来说也是如此。

                    >这只代表最不稳定的软件合同。

                    论点同上。

                    >我有雇用能力,我会雇用他们。

                    你的工作地点在哪里?你是否完全远程招聘?

                    1. > 您是否完全远程招聘?

                      我想这可能是你面临的真正问题。

            2. > 在过去十年中,我的专业技术栈的主要区别在于我写的是 Go 而不是 Java。

              十年的时间还不足以将某件事标准化,并使之成为工作要求。

              1. 你想知道从我小时候开始编程到现在没有改变的事情清单吗?

                我仍然在写很多 Python 和 shell。我仍然使用 Linux,主要是 systemd。(早期我确实不得不使用 initscripts,但我一点也不怀念它们。) 整个网络堆栈的变化微乎其微,只有早期版本的 SSL/TLS 已经过时。我工作中使用的所有软件都是一样的(终端、Vim、Firefox、GNU coreutils 和少量其他工具)。我仍然使用同样的云服务和数据库。我在学校学到的技能,尤其是数学和 CS 理论,在今天也同样有用。

                在我的职业生涯中,唯一的重大转变是从 Linux 虚拟机迁移到集群上的容器(先是 Mesos,然后是 Kubernetes)。在对两者进行大规模管理后,Kubernetes 要容易得多。

                1. > 我仍在编写大量 Python 和 shell。我仍然使用 Linux

                  所有这些列出的东西都发生了变化。Python 从 2 个变成了 3 个,shell 的数量像兔子一样成倍增加。Linux 则发生了突飞猛进的变化。它有了 async、BPF、不同的技术栈和窗口环境。

                  > 你想知道从我小时候开始编程到现在,有哪些东西没有变吗?

                  当然,基本原理没有变,但生态系统的大块内容已经发生了变化。也许我们的视角不同。

                  这有点像生态系统。亚马逊热带雨林现在和 1000 年前从鸟瞰的角度看是一样的。但在地面上,整个物种来来去去,生活在那里的物种在质量和数量上都发生了巨大变化。

                  我的问题是,雇主需要的不是一般的知识,他们需要的是易于使用的资产。你需要了解他们的技术栈。即使它发生了变化。因此,法学硕士才如此抢手。

                  1. Python 3 和 Python 2 并没有什么不同。是的,如果你是一个专为解析和评估 Python 2 代码而设计的无意识解释器,你将很难用好 Python 3。值得庆幸的是,软件开发人员也是人,不应该有这个问题。

                    在我工作过的任何地方,与之相关的 shell 数量都是两个,如果你在苹果公司工作,可能是三个。所有这三种 shell 都与 POSIX 兼容。其他 shell 也存在,但完全可有可无,而且很少使用(我是以使用其他 shell 的人的身份说这番话的)。

                    Linux 的变化更大,而且可能是前一位发帖者所描述的列表中变化最大的源头,但正如他们所指出的,这些变化大多使 Linux 系统的管理变得更简单,而且不会真正造成重大问题。

                    我认为你严重夸大了变化的规模。

                    > 我的问题是,雇主需要的不是一般的知识,他们需要的是易于使用的资产。你需要了解他们的技术栈。即使它在变化。因此,法学硕士才如此抢手。

                    我是一名前端开发员。我做过的每一份工作,在我去做的时候,我都不熟悉他们使用的特定框架。每一次,这都不是问题,因为我都能清楚地证明自己了解前端开发的基础,这比公司选择的框架所使用的精确技术重要得多。我的总体经历与你在这里描述的完全相反:我工作过的每一位雇主想要的主要是更深层次的通用知识,而不是特定堆栈的具体知识。

                    也许这是市场的问题–也许欧洲的情况真的很不一样–但你的描述对我来说一点也不真实。

              2. 我们回应的评论说,技术技能过时需要 3 个月的时间。

        2. > Kafka 出来了。都是关于 Iggy 的!什么叫语言不同?学学吧!

          人们真的已经在用 Iggy/hyping 它了吗?它现在是 Apache 的一个项目[0],太棒了,看起来令人印象深刻!

          当然,大多数有理智的人还不会为了 Iggy 而放弃 Kafka,但我很高兴听到它得到了更多的使用/至少被考虑到了。

          [0]: https://blog.iggy.rs/posts/apache-incubator/

    6. 你多大了?如果你四十多岁还在做软件工程师,你就会意识到这个职业有多辛苦。你的视力可能会下降;你的颈部和脊椎可能会出现慢性疼痛;你可能会因长期不动而患上消化系统和肾脏疾病;你可能会得痔疮和腕管综合征;你的免疫系统可能会因持续的压力而衰弱,并可能导致抑郁症。单单是解决人体工程学问题的各种 “解决方案 ”的数量,就足以证明软件工程师这个职业在精神和体力上有多么困难。

      1. 实事求是地说,你不觉得这些事情中的大部分都可以通过有意改变你的日常生活方式来解决吗?

        上班前散步 30 分钟、下班后去健身房、户外运动/体育爱好、有意识地健康饮食等等……

        在我看来,这些并不难,而且最终给你的生活带来的净收益远远超过了实施这些改变所需的努力。

        1. 实际上,每天步行 30 分钟不足以抵消长时间的坐姿(无论椅子有多好);站立式办公桌也不一定是更好的解决方案。健身房和健康饮食是必须的,但不是每个人(在时间上)都能负担得起。

          总之,与我的非程序员朋友们不同,我永远无法离开我的工作–每当我遛狗、健身、做晚饭或洗澡时,我仍然会不停地思考我需要解决的问题、失败的测试、公关评论、我的开源项目等等。

          是的,我仍然热爱我的工作,不会用它来交换任何其他东西。当然,我很高兴不用在凌晨 2 点出门去冒生命危险,但这仍然不是 “最轻松的职业 ”之一–我很容易被抛弃,没有退休金,无论何时我需要另找工作–我都要经历七层地狱、 我有太多的老板,我必须不断学习新技能,经常证明自己的价值,为自己的观点辩护,因为在我们的工作领域,即使积累了二十年各方面的专业知识,也无法自信地称自己为专家。

          1. 我同意你的观点。

            过去两年来,我一直在与 RSI 等疾病作斗争,虽然我的两只手腕都需要接受治疗,而且将来两只手肘也可能需要治疗,但我已经开始取得进展。

            说 “哦,做这个锻炼吧 ”很容易,但如果你没有时间或有其他健康问题而无法进行锻炼,要做到这一点就非常困难了。

            就拿我来说,我的腿上有钢筋,脚踝也被融合了,所以即使我经常在跑步机上锻炼,也会感到非常疼痛。

            尽管对我来说,我在自己的时间里做的(或想做的)事情与我必须为工作做的事情是有区别的,但这些都没有妨碍我对构建软件的热情。

            当我能真正投入到工作中解决问题时,那是美好的一天。

            如果因为某种原因,我无法做好工作,那就没那么好了。

            而可悲的是,你往往不是因为技术或时间限制而无法做好工作,通常都是政治原因。

            这才是最糟糕的事情:)

            1. 对。我还不老,正值壮年;我锻炼身体,饮食健康。我的工作举重重量约为 350 磅。我在椅子旁放了一个哑铃,还使用 Pomodoro 等工具。每当我需要上厕所时,我也会尝试做一些深蹲或俯卧撑。

              但年轻的孩子们似乎不知道这一行会对身体造成什么样的伤害,这几乎是不可避免的。他们会说:”啊,那我连续打字十四个小时又怎么样?我的膝盖没事,走一走就好了……”。是啊,那就试着解决 Python 依赖关系冲突或 GitHub Actions 崩溃的问题,或者在坐骨神经绷紧或脖子疼得像肩胛骨下挨了一枪的时候,集中精力解决某个并发 Bug。

              我倒要看看,当他们忍受着慢性疼痛,几乎无法坐在屏幕前时,他们会如何高唱 “有史以来最轻松的工作 ”这首歌,甚至连四十分钟都做不到,更不用说几个小时了。

          2. > 每当我遛狗、健身、做饭或洗澡时,我仍然会不停地思考我需要解决的问题、失败的测试、公关评论、我的开源项目等。

            但这并不是软件工程的公理。有多少开发人员会像你这样全身心投入(痴迷、焦虑),有多少开发人员会在 5 点钟下班,把工作和个人生活分开?

            话虽如此,你的其他段落我还是非常赞同的。

            1. > 有多少开发人员在 5 点下班

              编程是一种创造行为。任何有创造力的工作者–艺术家、雕塑家、小说家、陶艺家–都会同意,你不能给自己的创作设定时限–即使你离开了工作室,离开了办公桌,它也会重新回到你的生活中。

              我曾在多个不同的国家工作过。与不同专业水平的程序员组成的团队一起工作。不同的堆栈,不同类型的行业。大多数程序员都是创造者。那些 5 点就下班、不考虑编程、将编程与生活分开的人,充其量只能算是 “上班族”–也许连程序员都算不上,我不知道该怎么称呼他们。在我的工作生涯中,这种人我只遇到过两次(经过一些延伸,可能有三次)。这两个人后来都转换了角色。所以,是的,在某种程度上,这也许是一种 “不言而喻的品质”。

        2. 如果你已经入坑了,那就祝你好运吧。

      2. 所有这些事情都是可以解决的。如果你选择不照顾好自己的身体,它就会散架

        1. 谢谢队长显而易见,但我不是这个意思。如果你的职业需要长时间坐着,你就已经是 “不爱惜自己的身体 ”了–人类进化为狩猎采集者,经常进行体力活动–散步、跑步和觅食,而不是整天坐着。想想看–我们与马、狼、鸵鸟和狗等少数几个物种一样,可以在一次活动中奔跑数英里–因为我们进化成了这样的动物。然而,我们长时间坐着的能力却非常不寻常,而且在进化过程中也不占优势。想象一下,强迫一只狼一动不动,眼睛盯着人工照亮的屏幕?狼很可能会得抑郁症,并在一两年内死亡,甚至更早。

          人体是为运动而设计的,久坐会扰乱新陈代谢过程,影响姿势,几乎不可避免地导致肌肉和骨骼衰弱。

          长时间盯着屏幕会导致数码眼疲劳–干涩、刺激、视力模糊、头痛。长时间盯着屏幕还会扰乱睡眠模式,影响褪黑激素的分泌。此外,它还会导致姿势不良和肌肉骨骼问题,尤其是颈部和肩部。

          长时间打字会导致重复性劳损–腕管综合症、肌腱炎,以及手部、手腕和手臂的肌肉疲劳。

          如果你认为偶尔运动一下就能消除几十年来对身体造成的伤害,那我要告诉你一个坏消息。如果你认为当你需要从头开始建立卡夫卡集群时,你可以像蝴蝶一样跳来跳去,因为这需要你具备一定的技术能力,同时还需要长时间的静坐工作、屏幕时间和打字时间–这些都不是 “很快且只做一次 ”就能完成的,那你想的是其他职业,而不是这个。把这种工作延长到每周五天,持续多年–这就是要求–你会发现自己醒着的大部分时间主要是坐着,盯着屏幕,打字。这是程序员生活的一个典型方面。

          软件开发职业会伤害你的身体,你能做的很有限,而且只能起到缓解的作用–没有神奇的治疗、补救或逃避方法。

      3. 考虑过每周活动几次身体吗?

        1. 我的评论并非自说自话,我不是在抱怨,我确实在锻炼。你注意到我之前的评论中使用了可能性而非确定性的词语吗?我只是在陈述软件工程师长期职业生涯的一般事实。

          1. 不要听那些孩子的话。我见过很多年轻人来当软件工程师。他们没有一技之长,没有学习动力,只是花大把时间在咖啡会谈上,拿着丰厚的薪水。如果他们失败了,就会有人对他们撒娇说:别担心,我们会给你找更轻松的工作。然后他们就去找某个 “老油条 ”工程师,让他来做这件事。

            我有一个亲身经历的故事,我的同事有一个这样的牛工,他想把他赶走。花了整整一年的时间,但他没有被解雇,而是升职了!!!但我的同事说:”他是个’老顽固’!但我的同事说 但我的同事说:至少,我们摆脱了他:)

            1. 我认为你把重点转移到了一个完全不同的问题上,老实说,我不能完全同意你的观点。我见过很多年轻有为的初学者,他们的表现非常出色,甚至能用新的视角教导老手。

              在我们这个领域,经验是一把双刃剑–有时,它可能会让人觉得是一种负担,把直觉推离目标。毕竟,我们都是初级 SE,每当我们需要开始一个新项目时,我们都必须学习或至少刷新我们的知识。一个刚从大学毕业的孩子不知道如何使用 Makefile,不会写没有内存泄露的 C 语言,或者没有使用过 Vim 键盘绑定,一看到 Emacs 就惊慌失措,这并不意味着他们缺乏编程才能。

              1. 我部分同意。我曾与有天赋和学习动力的年轻人共事。不幸的是,在我工作过的地方,这种情况越来越少。因此,我在这里发表了评论。

                在这里,行业转向了一个奇怪的方向…… 年轻人受到宠爱,而拥有知识和经验的老工程师却越来越受到挤压…… 这真的会让人失去动力……

    7. “珍惜你所拥有的一切 ”并不能帮助被剥削者减少剥削。相反,它的作用是促使相对较少被剥削的人感到内疚,从而保持沉默。

    8. 谢谢。如果我在家人面前抱怨我的工作时间短、收入高、假期长、学历要求低,我肯定会被嘲笑出家门。

    9. 与其他工程学科相比,成为一名软件工程师简直是小菜一碟。当然,驾驭复杂性和大量知识是一项艰巨的工作,但大多数其他工程学科的风险要高得多,需要你把自己摆在那里,如果你不尽职尽责,可能会让你锒铛入狱。

      你听说过现代软件工程师因为自己的错误导致他人丧生而锒铛入狱吗?通常情况下,软件错误会被一推了之,就好像它们是谁也无法改变的极端天气事件。

      创建可用的、优雅的、高效的、可靠的、可测试的和可维护的软件并不是一件小事,但它是可以做到的,而且没有做到 100% 正确的后果通常也比较轻微。

      如果我弄错了代码的一部分,通常会导致崩溃,打上补丁就没事了;如果我选错了电缆并把它们放进大楼里,要么会引起火灾,要么就得把整栋大楼拆了换电缆,土木工程就更不用说了。

      我记得在一堂有 30 人参加的课上,大家对一个复杂的负荷计算提出了 30 多种不同的解决方案,而这种方案一旦实现,就会死人。

    10. 我完全不同意这是最轻松的职业。

      作为邮政职员,我从来没有因为部署中的一个生产错误而免费加班到凌晨 1 点

      ,我也从来没有因为通常负责修理的人去山里度假而在麦当劳当场找出修理油炸机的方法

      ,我也从来没有作为代客泊车司机每隔几个月就要学习全新的汽车驾驶方法。

      也许你的软件工程工作很轻松,但这是我从事过的压力最大的工作。我也不是只知道写代码的普通 HN’er

      1. 这听起来不像是软件工程师的正常工作。这听起来更像是你找到了一个异常糟糕的工作场所。你为什么每隔几个月就要更换工具?为什么要免费加班?为什么只有一个人知道如何修理坏掉的东西(尤其是如果这种情况经常发生,而你只有一个人 “正常 ”修理的话)?

        1. > 你为什么要免费加班?

          这就是 oncall,我见过的每份工作都让你这么做

          1. 很明显,这是欧盟/美国的事情,因为在这里,加班和 on-call 总是要额外付钱的(就像超出正常每周 40 小时或合同规定的任何时间一样)。

            尽管如此,我也很少看到需要值班的工作。也许这是因为公司知道他们必须为此支付额外费用,因此不会随意发放,但通常会有一个行动小组负责值班,他们的工作是分流和修复他们能修复的任何问题,否则只是将损失降到最低,然后也许与业务最相关的几个小组也会轮流值班,以防出现行动小组无法单独解决问题的情况。

            就我个人而言,我从未有过待命安排。

        2. 其他两个功能不健全,但在美国,社会工作者几乎都被归类为豁免人员,在法律上无权领取加班费。

          我从你的简历中看到,你所在的国家的工人权利比美国好得多。

          1. 啊,如果是这样的话,我就能更好地理解这个论点了,但也许这篇文章的标题应该是 “在世界上最富裕的国家之一从事收入最高的职业之一,但工作条件仍然很差,这简直是疯了”。

      2. 此处。我在很多工作/生活平衡糟糕的地方工作过,在各行各业工作的朋友都能拿到 1.5 倍到 2 倍的加班费,而我每天和周末工作 12-16 个小时,除了可能因为表现不好而被炒鱿鱼之外,没有任何额外收入。

        我年轻时也干过建筑工作,但我不想在我这个年纪还干这行,虽然体力上比较辛苦,但我不会说这是艰苦的工作,一天结束后我就会离开,直到第二天上班时才会想起它。

    11. 我做过很多工作。我做过计算机工程师,现在是软件工程师。这些工作是我唯一觉得自己会因为工作表现而被解雇的工作。

    12. >我们太娇生惯养了,以至于我们认为这个帖子里描述的是艰难的

      ,只是因为压力是精神上的而不是身体上的,并不意味着它不存在。听说过职业倦怠吗?

    13. 没错。告诉卡车司机、建筑工人、农民、快餐店员工你的软件工作有多辛苦。

      1. 我认为这种比较是不公平的。

        开发人员、程序员、软件工程师,随便你怎么称呼这一类工作,它都会无情地限制大脑的使用,根据当前工作的问题或隐或显地使用大脑,在一天工作结束后,你需要付出难以置信的努力才能让大脑放松下来。

        我记得我曾为一个客户做一个非常困难的项目,每天我都要睡上 4-5 个小时,直到项目完成。项目结束时,我已经筋疲力尽,不得不花了整整一周的时间让大脑降温,让身体放松。

        我花了整整一个月才完全恢复!

        我曾和父亲一起当过建筑工人,也知道如何自己种植水果和蔬菜;我知道这些事情的艰难……但相信我,这两者无论如何都不能相提并论!

        完全使用自己的身体确实会很累,但一天结束后,你可以洗个澡,吃点东西,好好休息,第二天就可以继续工作了;而完全使用自己的头脑则会在很多方面带来危险!

        至少,我就是这样。

        1. > 我认为这种比较是不公平的。

          不要对卡车司机、建筑工人、农民或快餐店员工这么说。

          > 只用自己的身体确实会很累,但一天结束后,洗个澡,吃点东西,好好休息一下,第二天就可以继续工作了;而只用自己的头脑,在很多方面都很危险!

          结束一天的工作后回家,不用再考虑工作,这当然是件好事,只不过快餐店的员工可能在做第二份工作。至于那个农民,从某个方面来说,他们几乎肯定是在经营自己的生意。不是管理。是经营。他们在晚上也很难抛开工作的压力。建筑工人的情况也不尽相同。有些会像农民一样,经营自己的生意。有些可能从事繁重或危险的劳动。日复一日,他们的工作可能很累。长期下来,他们的身体消耗很大。如果不转行,他们的职业生涯就只能按部就班。卡车司机也有自己的问题要解决。同样,他们中的很多人都在经营自己的生意(即使工作安排让他们感觉像是受雇于他人)。如果他们在市区工作,通常要在不太理想的环境中连续驾驶数小时,还要面对一个试图把系统问题变成卡车司机问题的系统。一些长途运输司机可能会挣到一份不错的薪水,但代价是连续数天在路上行驶,被推到安全范围之外。

          所以,每个人都有抱怨的地方。但如果你想让那些人认为西南航空的人都是傲慢的混蛋,那就继续说你的工作比你的差多少吧。

          1. 嗯,有点感觉你在挑那些最难做的工作。没必要说得太深,但举个例子,是的,并不是所有快餐店的员工都身兼两职(似乎很多都是高中生?) 不是所有的农民都拥有自己的生意,也不是所有的农民都是雇员。我有个室友是卡车司机。他只是一名雇员,朝九晚五,并不拥有自己的卡车(很多人拥有,但这种情况越来越少)。

            虽然我同意,很多蓝领工作都很辛苦,尤其是对身体的影响–我自己也做过几个星期的建筑工作,如果你不学会如何掌握节奏和正确使用身体的话,它会很快毁掉你的身体(我个人并不想长期从事这种工作)。不过,也有很多轻松惬意的蓝领工作–我的室友在亚马逊仓库工作,她说她的工作是任何人都能做的无脑工作,就是把物品分类装箱。

            是的,我可能有些偏见,但说普通快餐店员工的工作比普通社会工作者的工作(有期限、压力和政治,更不用说多年的学习)更难,这似乎有点夸张。我支持蓝领工人,但我们也要讲道理。是啊,至少在我看来,很多时候,不是他们的工作艰难,而是他们的生活环境(当然,很多人的工资很低,这让一切都变得困难)以及他们成长过程中缺乏优势……

            …..不过,我也承认,有很多开发人员一旦克服了学习曲线,就会一心扑在工作上,几乎不学新东西,年复一年地在同一个系统上工作。嗯,有意思

            1. 我不太认为这是 “挑肥拣瘦”,我认为这是把选择某项工作作为职业道路的人看成是 “挑肥拣瘦”。例如:在快餐店工作的高中生,甚至是大学生,并不能完全靠这份工作养活自己(更不用说养家糊口了)。农场工人也不同于农民。卡车司机的工作千差万别,但大多数都有各自的压力。

              我不会假装软件开发工作没有压力。话虽如此,但几乎每份工作都有压力、截止日期、政治和其他诸如此类的无稽之谈。

        2. > 开发人员、程序员、软件工程师,随便你怎么称呼这一类工作,它对大脑的使用都达到了无情的极限,

          ,这太奇怪了,薪水远远超过 20 万美元的开发工作使用的脑力只有我上大学时的 5%,当时我的薪水大约是每小时 9 美元,每周清理盘子 40 小时。

          1. 也许是时候换个新角色/项目了。)

            不过,我同意,许多技术工作要求你在开始时进行艰苦的学习,然后不断重复做同样的事情(不过,无论好坏,我在技术领域的工作很少是这样的。我总是跳来跳去地学习新东西)。

        3. > 我记得曾为客户做一个非常困难的项目,我每天要睡上 4-5 个小时,直到完成项目为止

          这不正常,也不典型。

          1. 对于自由职业者来说,这其实很常见,也很典型。

            不幸的是,当你评估一个项目时,起初一切看起来和感觉都很好,尽快交付最终结果不会有任何问题。

            但是 我们知道客户是如何要求一些不会影响整个项目的 “微小 ”改动的,或者说他们是这样认为的(!),这些改动最终会拖延整个开发过程,因为它们成了令人痛苦的障碍,而你却发现自己正在为交付项目而挣扎,以便及时拿到报酬。

            了解这种噩梦的人都知道!

            1. 这听起来像是自己造成的问题。如果你同意为客户免费工作,那就不要抱怨睡眠不足。

              1. 我认为这更多的是由于技术领域的工作类型多种多样。正如你自己可能经历过的那样,如果你加入一家快速发展的初创公司,他们会让你拼命工作,而一家富有的大公司则会让你 50%的时间只去开会。

                1. 我加入过几家快速发展的初创公司,但我的经历并非如此。快速发展并不意味着要做更多的工作。

                  1. 嗯,我想在我看来,大多数开发人员都会同意,一般来说,初创企业的工作比普通企业的工作要多。如果我们在自己的领域没有共同的信念,也许我们就没有讨论的基础。我想我不用担心(耸耸肩)

          2. 只是想附和已经回复过的人,但承包是一个不同的世界。也许有人会说,当你是一个承包商时,你也是一个独立的商人–因此你要承担不成功便成仁的责任。

      2. 卡车司机是一种特殊的地狱,因为要离家很长时间。

        但如果工资够高,工作有保障,我宁愿整天盖房子。

        我在零售业工作过一段时间,做到了主管。这比软件工程师轻松多了,只是薪水太低。

        软件工程绝对是对脑力要求很高的工作,只是薪水高而已。

        1. 建筑和修剪草坪这两份工作可以说比编程更有成就感。每一天,你都有一种 “建造 ”了什么东西的感觉(或者,呃,在修剪草坪的时候,你有一种整理了什么东西的感觉)。

          用双手和体力完成任何事情都会让人立刻感到欣慰。

          1. 有很多编程工作,人们从来没有机会建造任何东西,只能修复别人做得不够好的地方。很多人从未见过绿地。其他人的工作则是不断推出新的创意作品。因此,当人们谈论编程在精神上如何令人满意时,我们会听到这种不和谐的声音。

          2. > 而用双手和体力劳动完成任何事情都会让人立刻感到满足。

            请允许我补充一点,敏捷(这似乎是目前 SE 中流行的工作方法)剥夺了软件工程的大部分满足感?

      3. 我在软件、农场和餐馆(尽管不是快餐店)工作。

        它们都有各自的难易程度。

      4. 我认为你把工作满意度和工作难度混为一谈了。

        软件工程可以带来无穷的乐趣,但它通常也是一项艰苦的工作。虽然它可能不像某些行业那样对体力要求很高,但它往往对智力要求很高,压力很大,尤其是面对紧迫的期限和不断发展的技术。

        你知道智力任务(如软件工程中的智力任务)需要大量的脑力劳动,而且由于持续的认知参与和压力,可能比某些体力工作消耗更多的卡路里吗?

      5. 在软件领域获胜就像在国际象棋中获胜一样容易。很多时候,你只需轻弹手腕,就能激起层层涟漪。你只需点击几下,就能与来自世界各地的对手一决高下。还有的时候,你只是盯着显示器,聚精会神地看着,却什么也没做。

        即使是孩子,也能在这种紧张的坐姿活动中登上世界之巅。

      6. 这样吧:告诉卡车司机、建筑工人、农民、快餐店员工:软件工程太简单了,你们应该去做。

        显然,卡车司机、建筑工人、农民、快餐店员工对他们来说更容易,而软件工程更难,否则他们早就改行做更容易、收入更高的工作了。

      7. 事实上,当我在阿拉斯加给鲑鱼开膛破肚、在 “教父 ”快餐店做披萨、修剪草坪、在宿舍当洗碗工以支付学费时……这些工作的压力都小得多,我回想起来几乎都是满怀深情的。(好吧,也许罐头厂不是。)

      8. 我想可以这么说……

        他们做不了我的工作。

        我不会做他们的工作。

      9. 也不容易,但他们没有那么多 “多劳多得,多学多得”。

    14. 这完全不是事实,因为八小时一班的真正编码工作很容易让大脑疲惫不堪,使整个晚上都毫无用处。这是一份久坐不动的工作,需要过量的咖啡因,结果就是健康状况会因为这份工作而缓慢但稳步地恶化。

    15. > 不是的。

      就是这样。我可以举出很多更轻松的职业。从会计、报税、机械师、焊工、理发师到美甲沙龙,等等。荒谬

    16. 在没有任何细节支持的情况下做出如此断言。老实说,读起来就像巨魔的诱饵。但我还是要以牙还牙:

      是的,确实如此。艰难是相对的。

      没有什么 “我们 ”需要呵护,只有你对一个难以把握的异质整体的错误认识。

      没有 “我们 ”可以对帖子中的描述形成单一的印象。

      修辞不是证据。

    17. 桥梁工程师需要知道如何根据物理学第一原理、国家认可的参考文件、国家机构公布的标准、国家机构未公布的标准、机构项目经理的偏好、内部管理偏好来设计结构,并在复杂的项目交付协议中完成。这些因素并不完全一致。哦,如果你错了,你可能会被起诉并失去执业资格。

      如果没有两层以上的管理部门进行医疗编码,医生就不能给你开阿司匹林。我只能猜测责任保险和执照会带来什么麻烦。

      知识工作通常是有报酬的,因为它并不琐碎。

    18. 我认为,很多人都不喜欢我们软件工程师的工作,这是有道理的。先不说喜欢这份工作的人,每次我描述自己的工作时,都会有很多人侧目而视。

      不过,其他工作通常受到的待遇确实很差。

    19. 软件工程师喜欢自我鞭挞,这让我非常恼火。如果我以前从未见过软件工程师,只是读过《HN》,我就会认为所有的软件工程师都是享有特权的混蛋,他们生活在泡沫中,拿着过高的薪水,还在工作时间上弄虚作假,对社会毫无价值。在现实生活中,这显然是不正确的。

      尤其喜欢那些经典的 “嗯,那不正常,只有我熟悉的才是正常的,因为每个人都和我想的一样 ”式的回答。显然,加班或紧缩工作是不正常的,因为我从来没干过。(别理 https://en.m.wikipedia.org/wiki/Crunch_(电子游戏),继续和 SWE 扯蛋吧)。

      1. 这个 “争论 ”在流媒体社区出现过几次。

        观众: “流媒体太简单了,你基本上都不用工作,流媒体人太有特权了”。

        观众:”你会演戏吗?

        观众: “不会,但是呢–”

        直播者:”好吧,你不会表演。你有没有试过演一出戏,但它长达 6 个小时,而且还有成百上千的人对你大喊脏话,有时你还必须在不破坏角色的情况下,完全用广告词来回应他们令人不安的评论,而且你还得同时玩杂耍?”

        观众 “……好吧,我还是觉得<插入工作>更难。”

        不需要天才也能意识到难度的不同维度,但不知为何,很多人都做不到

    20. 最容易的职业,但也是最难的工作,让事情不至于变得一团糟。

      1. 我以前在医院工作。软件也不错,哈哈。

      2. 至少软件工程师可以做一些事情来避免一团糟或改变它。一旦你进入真实的物理世界,这可能根本无法实现……

    21. 我认为大多数工作都是艰苦的,但 “草总是更绿 “的意思是,我们要关注本职工作中艰苦的地方,而其他工作中容易的地方。

  2. 我不确定有没有类似的事情。

    在我长达三十年的职业生涯中,我从事过应用程序、系统框架(不包括网络和后台)方面的工作,尽管如此,我也不得不学习各种新的(对我来说)语言、API、框架、工具等。而且,这还不包括软件创建/交付方式的变化:敏捷开发、技术驱动、QA、无 QA、单元测试、代码审查等。目标总是在不断变化。

    (举几个例子。

    我熟悉的一些语言 Pascal、C、6502 汇编语言(引入了 PPC 以及一整套新的回调)、C++、Objective-C(引入了英特尔硬件以及现在的 endianness 问题)、Javascript、Swift。

    在我刚开始工作的时候,善于管理内存、保持小而快是一项很受欢迎的技能。在我的职业生涯进行到一半时,你必须成为并发方面的专家–你必须能够在你的头脑中掌握多个进程的运行情况,其中一个进程可能在另一个进程之前完成,多个线程可能读取或写入共享变量,而 UI 正在主线程上更新,等等)

    ,而且分布也不均匀。在苹果公司(可能还有其他大公司),团队有 “好 ”有 “坏”。我之所以用引号,是因为我认为这往往与具体的工程师有关。也就是说,我不喜欢的团队–可能是竞争激烈的团队,或者是公司聚光灯下的团队–另一个团队可能会茁壮成长。

    在一个特别 “糟糕 ”的团队工作了几年后,我很奇怪地患上了严重的肠胃病,需要动手术切除部分肠道。巧合吗?我不知道。但我告诉仍在工作的人要认真对待压力。

    还有一个轶事:作为一个还在开支票付很多账单的人,我可以告诉你,我注意到我的签名在压力大的时候很糟糕,只有在我也能放松的时候才会变得放松和顺畅。我现在会观察我的签名,看是否有紧张的迹象。

    1. > 技术领先驱动型

      你能详细说明一下吗?尤其是它与敏捷的区别。作为一名技术主管,我在公司半生不熟的敏捷尝试中苦苦挣扎,非常希望了解其他方法。

      1. 这也许有点自相矛盾?(也可能是误导。)我将用一些趣闻轶事来补充,试图让它更有意义:

        1995 年我刚进苹果公司时,工作方式是:你与一个团队合作,这个团队主要负责操作系统的图形框架等。一位工程师是技术负责人。他们经常参加 SIGGRAPH 会议,努力把握 “行业 ”的脉搏,当然还有我们的用户在平台图形方面的需求……。

        因此,新的操作系统意味着有机会在我们的框架中添加这些所需的功能。技术领导通常会发号施令,选择团队中的不同工程师负责不同的部分。就这样,我们开始了编码工作。

        也许我有点跑题了,我描述的更像是团队中开发人员的 “所有权”:

        我们仍然有全公司范围的任务,但同样是团队中的工程师自愿或被选中负责某些 “交付成果”。当 Mac 转向 PowerPC 时,我从 Mac 源代码库中拿到了用 68K 汇编编写的 “颜色选择器”,我希望能将它们编译成 PPC 版本。除了用 C 语言重写之外,我还清理了 SPI,使颜色选择器可以模块化。虽然没有人要求我这样做,但我还是编写了一个蜡笔取色器和一个 HTML 取色器来测试 SPI,因为至少在 HTML 取色器方面,我认为用户会需要这样的取色器(网络是新事物)。

        当时我并不知道情况并非总是如此。一方面,不得不将代码从 68K 移植到 C 绝对是我职业生涯中未来几十年不断变化的一个例子。但是,我绝对没有想到工程师会成为商品(我认为敏捷就是这样,工程师是可以互换的齿轮),也没有想到会出现自上而下的控制(管理层或设计人员告诉工程师该做什么,而不是自下而上,由团队自己做出许多决定)。

        最后,我想说的是: 我讨厌敏捷开发。但我也见过在这种环境下茁壮成长的工程师,所以我不会谴责他们。

        对于那些看起来不开心的工程师,我总是建议给他们一段代码(或类,或框架的一部分,或整个框架,如果可行的话),让他们 “拥有”。

        我所说的 “拥有 ”是指由他们进行所有修改、修复所有错误等。他们拥有技术债务,可以自由地(在时间允许的情况下)抛开一切,选择重写。他们规划代码的前进方向。他们成为代码领域的专家。

        对于许多工程师(当然也包括我)来说,这可能是最有价值的工作方式。

        我从那些具有敏捷思想的人那里听到的唯一反对意见就是:”如果那个人离开了怎么办?现在我们没有该代码的领域专家了?”

        他们说得没错。必须由其他人接手。甚至可能是新员工。很快,他们也将 “拥有 ”它,甚至可能重写它。但我们是工程师,我们能解决这些问题。)

        1. > 对于许多工程师(当然还有我)来说,这可能是最有价值的工作方式。

          同意,这也是我成长的世界。没有什么能比在自己掌握方向和成果的情况下工作更有成就感了。

          在我职业生涯的大部分时间里,我从未听说过 “产品经理 ”这个词,这让我感到非常幸福。不知从什么时候开始,软件工程师从业务的智力领导者,变成了一个为一些完全不懂技术的 “产品经理 ”决定本周要做的事情编写代码的简单记录员。除了两周的冲刺时间外,他们无法思考或计划任何事情,这让人精神崩溃。

          自从软件工程变成一份如此悲惨的工作后,我已经换了不同的岗位。不过,如果有一家公司能像我们上世纪八九十年代那样,让工程师掌控工程设计,我还是会立刻跳槽回去的。

      2. 作为一项技能,你投入了多少时间?

        你读过产品思维、精益创业、敏捷估算和规划吗?

        如果不深入研究并成为专家,你怎么能指望利用一种方法论。

        1. 与其他回复类似,我不管理员工,也不推动方法的改变。

          我是大平台团队中一个小型(3 个开发人员)子团队的开发负责人。我们通常采用与其他开发人员相同的方法。据说他们遵循的是敏捷方法,但却具有高级管理层驱动的典型特征:几乎/根本没有敏捷方面的培训或教育(甚至在产品方面),开发人员不与客户交流,由于缺乏时间而不断取消延期,流程变更由产品团队(由公司总经理管理)决定,等等……。实际上,我并不相信公司能实现敏捷。部分原因是管理层不理解,部分原因是我们的主要业务客户对路线图和最后期限的要求很严格。还有一部分原因是,我自己的子团队从事的是重研究的长期工作。我们的很多工作都是在考虑算法变化的蓝图,然后进行尝试,如果不成功,就回到绘图板上。长达数月的迭代工作,每次迭代后都可能没有可行的改动。当我读到关于敏捷的文章时,它往往描述的是你最多在一两周内就能为某个功能制定出 MVP 的事情,所以如何应用它一直是个棘手的问题。

          因此,从根本上说,它的效果并不好,而我对改变现状的影响力有限。我所能做的就是为我的团队出谋划策。例如,最近有几个月的时间,整个平台团队(约 25 人)每天都要参加平均持续 30 分钟的站立会议,此外还有他们自己的团队会议。这显然是一种浪费,但工程经理却喜欢这种高高在上的感觉。在我多次提出这个问题后,我所在的团队的站队频率降到了每周一次,而更大范围的团队则是每周两次。因此,我很想了解更多关于敏捷系统与替代系统的知识,这样我就能继续有效地为我的团队争取利益。理想的最终目标是让我的团队完全摆脱这种半生不熟的敏捷混乱局面,无论这意味着更 “正确 ”地遵循敏捷还是改用更定制的方法。我很感谢你提供的参考资料,我已经开始翻阅《敏捷估算与规划》,目前还不错,但没有什么启发。我没有太多时间来做这件事,所以我很自然地对 “只需花大量时间阅读,我相信你会发现其中的好处 ”持怀疑态度。

        2. 我不是发号施令的经理。但作为一名工程师,我对这种做法始终深恶痛绝。但正如我所说,其他人却喜欢这样。

  3. > 软件变得越来越复杂。所有这些复杂性都是有原因的。

    在我看来,这不是什么好理由。过去,这个领域的各个方面都有提高效率的激励机制。人才稀缺、带宽和计算能力稀缺、预算稀缺。

    二十年来,“让我们都成为程序员”、不正常的资金和委员会设计,使这个世界变得非常复杂。

    1. 我不同意。我们之所以增加复杂性,主要(但不完全)是因为它们能解决问题。网络浏览器的全部意义就在于解决一个非常复杂的问题:”我们如何在客户端硬件上以对各方都安全的方式运行任意代码?

      1. 什么是共享文档,这仍然是它的主要目的。而目前的复杂性大多源于庞大的 JS API 表面。我们知道如何对软件进行沙盒化(虚拟机和恶意软件分析……),浏览器的复杂性主要是由企业驱动的。

        1. 我都忘了网页浏览器的最初目的是查看超链接文档。20 多年前,随着 Flash、Silverlight 和 Java Weblets 等技术的出现,我们似乎已经放弃了这一主要用途。

        2. 我不认为这是浏览器的主要用途。如果要共享文档,大多数情况下都是通过电子邮件发送。它早已从文件转向了应用程序。

          1. s/sharing/publishing/

            网络从来不是用来共享电子邮件意义上的文档的。

        3. 让我更新一下 OP 所写的内容:

          “我们如何在客户端硬件上运行任意代码,对各方都是安全的,而且不需要安装步骤?”

          15 多年前,在客户机器上安装软件需要专门团队花费数天时间。如今,大部分情况下都是 “直接运行”。

      2. VMS 是上世纪 70 年代发布的基于沙盒的操作系统,它解决了 “如何以对各方都安全的方式在客户端硬件上运行任意代码?”的问题。浏览器并非如此。

        浏览器确实有这个组件,但这并不是浏览器存在的理由。

        1. 我想知道提到这一点会有多大成效。当然,这可能不是浏览器存在和出现的原因(与交换文件有关的东西),但这可能是浏览器目前的主要使用方式。

          1. 你坚持要为浏览器的复杂性辩解,声称浏览器的功能与 70 年代人们通过手写汇编的小型操作系统获得的功能相同。

            对不起,但你似乎并不想进行富有成效的讨论。你只是有一个先入为主的想法,而事实证明这个想法是错误的。

            1. 我并没有坚持什么。我只是想指出,“浏览器存在/出现的原因 ”可能与讨论相关,但与浏览器当前的复杂性并不存在直接的逻辑矛盾。

              如果我说,pdf 的出现是为了以一种简单的方式来数字化表示打印/可打印文件,这可能是正确的,但实际上并没有表达出当前 pdf 格式的复杂性。诚然,由于其相似性,这也许是一个糟糕的例子。

              但我有可能理解错了。如果是这样,我深表歉意。

      3. 也许我有点夸张。

        随着我们试图解决的问题变得越来越复杂,某些子集的复杂性增加是合理的。

        另一个子集则是由于我列出的原因(没有良好的反馈回路来防止这种情况发生)而增加了复杂性,这在我看来并不好。我还觉得这个子集比第一个子集更大。

      4. 你认为拥有 20 多种不同的 JS 框架是解决问题的方法吗?

  4. >所有这些复杂性都是有原因的

    在过去的 25 年里,我从初级 Web 设计师/开发人员到 CTO/CPO,再到初创公司,我绝对相信,我们现在每天所做的事情之所以复杂,除了为 FAANG 类型的求职、工作利基建设和工作安全自我放纵而制作简历之外,没有其他好的理由,而且从根本上无视行业的成熟。

    1. 现在肯定有很多自我放纵的镀金工程师。还有简历驱动的开发和抵押贷款驱动的开发。

      虽然我有点同意作者的观点,但我认为这也是一个招聘/资源配置问题。招聘经理通常需要的是技术堆栈和领域的专家,而忽略了对类似复杂主题的掌握,以此来代表他们是否有能力掌握具体的技术。招聘经理还希望应聘者具备足够的通用知识,能够完成 gui、qa 和 infra 以及工程流程的其他工作。

      在这方面,作为首席技术官,你是问题的一部分,还是希望成为解决方案的一部分?

    2. 我认为,这就是社会工作作为一种职业的根本问题:大多数问题的最佳解决方案通常非常简单,也就是职业自杀。

      人类的管理者为了攀登高峰而建立人造帝国。

      机器的管理者建立人工的复杂性来攀登阶梯。

      这对母公司不利,但对简历来说却是必要的。

    3. 不,工作安全才是代码库写得糟糕且未加注释的原因。堆砌技术增长(POTG)的原因是为了避免未来的陷阱。最重要的是,应用程序开发人员并不希望自己处于必须使用第一原则来维持应用程序生命的境地。他们忽视的是,新增组件的收益为 1,但成本却以 N^2 的形式递增。这就是 “整合者困境”。简单、快速的依赖性管理、FOMO 以及管理者对 “在该日期发货 ”之外的任何问题的故意无知,加剧了通过集成商困境产生的 POTG。

      然而,一切从第一原则出发是行不通的,只关注非功能性需求也是行不通的。解决办法是工程领导重视未编写的代码和未添加的依赖关系。他们对大的提交感到恐惧。每个组件都必须各司其职。他们使用每个组件的每个部分,并融入其中。如果他们没有时间参与新的社区,他们会雇佣一个有时间的新人,而他们可能会代表你团队中的一个新专业。

      一个可靠的团队需要 5 个人。CSS 和 Figma(“设计师”)。SPA(“前端工程师”)。应用程序服务器、数据库和对外 api 调用(“后端工程师”)。基础设施和 CI/CD(“devops”)。最后,你还需要一个能制定目标、衡量过去和阐明未来的人,并在用户和业务沟通方面发挥主导作用(“产品”)。项目管理可以是团队中任何人的兼职工作,但与产品工作非常契合。我不认为一个人就能胜任设计师/前端/后端/开发人员的工作。他们根本没有时间去学习和了解所有这些方面的最新信息,而且需要进行大量的上下文切换,这是难以承受的。

    4. 把复杂性归咎于工程师,而不是归咎于不断变化的规格、不断膨胀的员工人数以及根本不知道软件工程为何物的管理者,这种说法太糟糕了。我会责怪首席技术官。

      1. 造成这种复杂性的主要原因是,作为一种文档语言,HTML 并不适合用于制作应用程序,但由于浏览器是我们唯一拥有的跨平台环境(而且推送新版本也很容易),所以我们就使用了这种语言。

        我们需要的似乎是一种针对每个应用程序的集成虚拟机。操作系统提供一个虚拟 CPU 和内存机器,但还需要扩展到虚拟文件系统、外围设备、显示器(操作系统会将其绘制到窗口中)、带有用户限制 URL 的网络等。这将防止应用程序滥用文件系统,使用户能够限制监控网络请求,并简化图形处理。

      2. > 把复杂性归咎于工程师

        我本想补充说,工程师本身确实(或应该,在一个健康的组织中)有责任有意识地选择不在无用或不需要的地方引入人为复杂性。

        但我转念一想,在很多情况下,也许工程师们并不是 “有意选择不这样做”,而是 “在不知情的情况下选择 ”引入这种复杂性,因为提出新的、替代性的工作方式和工具(实际上并没有什么不同)所涉及的内容和心智份额,似乎比围绕基本原理和不会经常变化的东西所产生的信息量要少得多。

        因此,也许任何责任都应该归咎于首席技术官、试图大显身手的开源开发者以及有影响力的人。

      3. 不,工程师之所以是工程师,是因为他们会对错误的决策进行反击。我不认为网络开发人员是工程师,因为他们拒绝为自己的行为负责

    5. > 为FAANG类型的求职、工作利基的建立和工作保障的自我放纵而制作简历,以及从根本上无视行业的成熟

      我认为软件既有固有的复杂性,也有人为的(或 “引入的”)复杂性。

      固有的复杂性来自于我们对编写何种软件的期望越来越高(网络和浏览器 “功能 ”自诞生以来的演变,移动设备、平板电脑和桌面设备上的交互方式),以及我们希望以何种方式编写软件。

      某种程度的高级工具几乎是必需的,因为要使更强大的抽象概念发挥作用,所需的低级工具绝对数量太多,难以处理。想用桌面上的原始硬件编写一个跨平台、功能齐全、带有动画的用户界面工具包?这是一个非常好的学习机会,但你几乎可以保证在学习过程中的某个阶段会开始使用更高级别的工具。

      然而,人工复杂性的增长来自很多方面(包括你列举的所有方面)。

      有时,它来自于引入的流程和工作方式(我当然希望你们能实现全自动的可发布构建,包括对计算机的管理)。

      有时是社会技术问题(在一个共享代码库中工作,还得协调变更和发布?如果团队之间永远不需要交流,只需独立发布一些小东西,肯定会更容易……)。

      有时,人们认为构建软件的方法更好、更简单、更快捷(发布桌面应用程序?如果只捆绑一个完整的 UI 布局引擎、脚本语言解释器、分层外观控制语法、可移植字节码解释器和一些应用程序代码,而这些代码本身又是由不同的语言编译而成的,这样就可以由你实际发布的解释器进行解释,那岂不是容易得多?)

      有时,这是由于系统设计方法被当作 “最佳实践 ”来推崇,而且在引入这些方法时并不一定了解你是否曾经遇到过它们想要解决的问题(请告诉我更多关于你的相对较小的电子商务应用程序如何需要基于事件才能 “扩展 ”的信息)。

      有时,这是因为提供加速硬件的少数几家公司几乎没有商业动机来统一 API,以编写可在硬件上运行的程序,这就给我们提供了一个有四种(至少)略有不同语法的世界,这些语法在完成相同任务的同时,又存在着令人尴尬的差异。

      我还可以继续说下去……

      并不是说某些人为引入的复杂性有时不能解决实际问题,或者不能发挥整体作用。在此,我并不批评引入基于软件的流程来使事情正规化、提高软件质量等做法。

      但我们应该牢记,有多少复杂性是为了改进整体流程而引入的,而有多少复杂性是为了 “解决 ”某些局部最大值而引入的,即在不提高整体软件质量的情况下增加更多技术,最终的结果是,我们自己的生活在某种程度上变得更糟,而最终的应用却没有得到明显改善。

  5. > 但专业化怎么了?在建造房屋的过程中,会有很多人参与其中:建筑师、土木工程师、水管工、电工、砌砖工、室内设计师、屋顶工、测量师、铺路工,等等。你不会指望一个人,甚至是整个公司,能够完成所有这些工作。

    你会大吃一惊的。虽然低学历工作或多或少都存在这个问题,但我发现任何需要高中以上文凭的工作都存在同样的问题。我们被要求变得越来越多才多艺,每份工作都有一份我们应该掌握的技能清单。

    仔细想想,这也很有道理: 一个人只要有足够的知识就能完成工作,为什么还要花钱请两个专家呢?除非工作/任务是高度规范的(你不可能去做会计),或者产出的质量真的很重要,否则半途而废的工作往往只占 99%。

    就拿盖房子来说,其实你也能看出来。很多建筑公司都是在做最基本的工作,这就是为什么检查至关重要。

  6. 我做了大约四十年的开发商,去年退休。头七年左右,我主要在 DEC VAX 中型机上使用 MUMPS。然后,在 90 年代初,我学习了 Visual Basic 以打入 Windows 世界,并用它工作了近十年,直到 2000 年左右 .NET 问世;我学习了 VB.NET,并用它编程了大约六七年。然后,我又自学了 C#,并在接下来的 13 年里一直使用它。我还做过很多 SQL Server 的编程工作,但除此之外,这些语言/框架确实是我近四十年来始终如一的职业生涯所需的唯一语言/框架。

    1. 棒极了!我的职业生涯已经走了一半(约 25 年),到目前为止,我所需要的只是 C#/SQL Server/VS 等。你觉得我还能再干 15 年吗?

  7. > 你干得不错。你被提升为经理。你需要学习其他工作

    相关链接:https://nebula.tv/videos/coldfusion-why-are-managers-so-bad-… (如果星云不给你看的话,也可以去 https://www.youtube.com/watch?v=m7-UdDg5uIw)

    这段话的意思是,很明显,多年学习一种技能绝对不能转化为 “调试人类 “的能力

      1. 这是该视频的主要话题之一,没错,但视频的其他部分介绍了一些关于如何解决这个问题的研究。一项研究表明,随机提拔人的效果更好,另一项研究表明,“向上或向下 ”也很有效。我想,在这两种方法之间做出选择,主要还是要看组织的文化

        1. 我想读一读那篇随机晋升的论文。我想知道他们究竟是在多高的职位上实施这一策略的,因为首席执行官就是那个被随机选中的人,而不是其他人,这种想法在我看来太搞笑了。

          1. 我的思维模式是,”晋升 “只发生在中层管理者身上;与董事会相关的席位要么由董事会任命,要么来自好孩子网络(我承认,这几乎肯定比从内部晋升一个糟糕的管理者更糟,因为后者至少有现成的关系和业务背景)。

            据我所知,这就是 https://www.sciencedirect.com/science/article/abs/pii/S03784

  8. 学习几门你可能在概念上不喜欢的编程语言和框架,与其说是艰难,不如说是 “轻微的烦恼”。

  9. 这篇文章应该叫做 “网络开发者的疯狂”。你可以在不接触 JS 的情况下成为 SE。

    1. 我注意到,对于网络开发人员来说,”开发人员 “是 “网络开发人员 “的同义词。作为一名非网络开发人员,我觉得这既有趣又令人反感。

      1. 这一点,最近有人向所有开发团队(我们做的是 C++/Qt 桌面软件)转发了一份 “技术薪酬 “调查,职位列表中(基本上)只有 “前端开发”、”后台开发 “和 “AI/ML 开发”。

        这让我想起了 KotH 的小品 “那么,你是中国人还是日本人?- 哼,我来自老挝和…… – 中国人,还是日本人?

        1. Crooter: “说说你在 XXX 机器人公司的工作吧。是前端还是后端?”

          我:”是机器人控制软件。它能控制机器人。此外,我还基于与控制软件本身相同的框架,做了一些用户界面方面的工作。”

          克鲁特 “啊哈,你用的是哪个数据库?甲骨文?MySQL?”

      2. 我的感觉正好相反。有时我觉得非网络开发人员不把网络开发人员当作 “真正的开发人员”,尤其是前端开发人员。

      3. 这是一种极其温和的少数派感觉。网络开发人员是最常见的开发人员类型。他们很自然地就把 “开发人员 ”和 “软件开发人员 ”等同起来。眼不见,心不烦。这并不是一种敌对行为,人们也不一定愿意这样做。但它还是发生了。这是人之常情。

    2. 别开玩笑了!但 “软件工程师 ”也会让我想到网络开发。

      与 “程序员 ”或 “开发人员 ”相比,“软件工程师 ”听起来就像是把 CRUD 的各个部分粘合在一起,并通过花哨的头衔使其看起来比实际上更高级。下一步自然就是 “提示工程师 ”了。

      如果你被称作/自称为 SE,我很抱歉,(可能)不是针对你个人:D

    3. 我是 FW 工程师,我的大部分时间都花在编写代码上,所以我可以把自己归类为 SWE 吧。

      我在日常工作中从未接触过 JS、html 或 php 或类似的东西。也没有用过 golang 或其他很酷的东西。当我说我是开发人员时,人们总以为我是网络开发人员,笑。女士,我知道 tcp/ip 是如何工作的,但任何更高级的东西对我来说都是陌生的。

  10. 与其他职业相比,这是不寻常的,特别是在专业化方面,但这就是系统。有些人乐于学习新事物。与其他工作相比,软件工作并不令人满意,因为当你关上笔记本电脑,环顾四周时,你会想:”我改变了世界上的什么吗?与砌砖相比,一天结束时,你可以看着自己亲手砌筑的砖墙。明天,那堵墙还在。明年,那堵墙还在。你能说你的代码也是这样吗?

    如果你拥有计算机科学学位,你就能看到语言和系统之间的共性和差异。你会很快掌握新知识。对于所有不利于大学的因素,这就是它的好处。

    也许我们需要给程序员们留个纪念: 你的哪些代码至今仍在运行?

    一周后、一年后、五年后、十年后,扪心自问。

    1. 事实。我曾开发过一个零售系统,该系统有将近 100 万个 loc,后来公司破产了。噗,所有的工作都没了。这对我来说是一次真正的顿悟,也是我与工作之间保持健康距离的开始。虽然软件可以带来丰厚的回报,但它只是一份工作。

  11. 可能吧–但对我来说,现在工作中最难的部分主要是处理中层经理以上的技术文盲问题–我并不责怪他们,因为大多数人之所以往上爬,主要是因为他们在其他方面并不擅长[抱歉]–但我要说的是–当你看到他们茫然的眼神时,你会感到非常痛苦。在进行非常简单的对话(比如关于输入验证的对话)时,看到他们茫然的眼神让我非常痛苦–十年前,这些对话只需要 5 分钟–而现在,人们想要花几个小时来讨论这个问题,因为他们不明白–基本上就是缺乏核心知识。..

    1. 面试时,我试图了解某项技术工作好坏的方法之一是:”技术文盲 “从管理层多高的位置开始?

      我曾在一些公司工作过,在这些公司里,从高级副总裁(向首席执行官汇报工作)一直到高级副总裁,每个人的技术水平都很高。也就是说,高级副总裁和他们下面的每个人都能顺利通过高级软件工程师的面试,或者至少能清楚地讲述系统架构、技术和设计决策背后的原因、性能权衡、安全性等等。如果你从未在这样的地方工作过,你几乎很难相信那是什么样子。

      我也曾在一家公司(幸运的是只有一家)工作过,作为一名叶子节点员工,我的一级经理实际上是个技术盲。这种地方需要他们的工程师都具备:1.良好的技术技能;2.罕见的沟通/翻译技能,能将技术概念/问题转化为商业机密。

      在大多数公司,懂技术的员工向不懂技术的员工汇报工作的地点是管理层的某处–通常是 “总监 ”级别左右。无论在组织结构图上的哪个层级,该员工的直接下属都需要具备从技术到非技术的翻译技能。

      1. 我的观点是,某些技能就是技术。特别是在涉及到建筑、代码、复杂系统等方面。

        当涉及到基础制造、化妆品等方面时,我并不介意让一个文盲执行员去做,但当涉及到科学、技术和工程学科时,这就变成了一场危险的赌博–尤其是当涉及到识别强者与弱者时。

        我见过太多次弱者被提拔的情况,因为负责的主管有点无能……

        我很幸运,因为我的家庭在我很小的时候就培养了我的沟通能力–但如今这种情况已经很少见了,我看到能力极强的年轻球员很快就被排挤出局…… 希望是个谜,但可以找到。

  12. 关于软件业,我最喜欢的理论之一是,没有人真正知道如何管理成熟的科技公司(YC 和初创企业界在管理年轻公司方面相当擅长)。

    科技界一个明显的灾难性现象是简历驱动的开发:一些工程师非常想在简历上写下下一个闪亮的科技流行词,因此他们一定要在自己的公司里推广这项技术。十有八九,如果项目和公司只使用其他人使用的标准、枯燥的技术,效果会更好。技术经理们应该能够发现这种模式并将其扼杀在摇篮里,但他们似乎做不到这一点。

    1. > YC 和初创企业界都很擅长经营年轻公司

      是吗?我刚看到一个 YC 初创公司的招聘广告,上面自豪地解释说:”我们不做公关。我们每天多次直接推送到主页“,”我们每周 7 天在现场工作”……所有这些都是为了一家从事严格监管行业的公司。

      1. > “We work onsite, 7 days a week”

        这就是金字塔的建造过程!现场工作,每周 7 天!

    2. 简历驱动的发展是薪酬停滞不前、长期低于市场水平的反面。如果一个工程师知道自己每隔一段时间就要找工作,他们就会努力强化自己的简历,试图将自己与其他求职者区分开来。

    3. 一线经理和项目经理也有同样的动机。

  13. 尤其是现在的网页其实并不比十年前的网页做得更多。然而,现在的机器要复杂得多,网页的下载量要大得多,网页的响应速度也较慢。

  14. 专业化并没有出现,因为一切都在不断变化,专业人员要么停滞不前,要么感到厌倦,要么找不到工作。

    一块砖的大小在 1840 年被标准化,然后在 1970 年被公制化。在我们开始专业化之前,让我们先在软件领域实现这种稳定性吧

    1. 我认为专业化在我们的领域仍然存在,但更多的是领域驱动,而不是技术驱动。我认识一些人,他们在银行、认证、加密、计费和医疗保健等领域都有所建树。在每种情况下,你的语言都会有所不同,但该领域总是有相似之处。

  15. 在我多年聘用其他软件工程师并与他们共事的过程中,我认为他们主要分为两类:

    – 知道如何使用特定工具或框架构建应用程序并专注于应用这些知识的工程师

    – 知道如何从数据结构和应用于数据结构的算法或流水线的角度对其工作进行建模的工程师

    第一类工程师在应用他们的知识方面可以做到有效和高效,特别是由于他们在工具方面拥有丰富的经验和实践。他们是专家–前端、Rails 开发人员、嵌入式工程师等。他们更了解自己所处环境的限制因素。

    第二类人更多考虑的是他们在做什么,而不是如何做。他们是通才。他们认为 React 是一种将状态转换为 DOM 树的功能性方法;他们认识到各种不同开发方法背后的价值和原因,不会将自己束之高阁。

    我发现第二类人几乎总是更有效。这并不意味着专家没有价值,例如,你需要你的嵌入式工程师深入了解这一领域。

    特别是在招聘时,我喜欢在系统设计练习中探究这一点:提出一个问题,然后设计一个简单的系统或某种管道。如果工程师回答的是具体技术(“我会使用 Kafka 向 MongoDB 发送 gRPC”),那么他们通常不够灵活。如果他们从技术和数据流的角度回答(“我会使用工作队列通过网络将有效载荷分发到后备存储数据库”),他们通常就会明白。

    我认为,改变一下思维方式有助于消除文章中描述的疲劳。虽然我承认,我和其他人一样,在开发了一个完整的应用程序之后,第一次提出一个新项目时也会感到沮丧,因为工具已经坏了,行业已经向前发展了(看着你,前端!)

    1. 你的第二类人包括那些善于 “把问题变小 “的人。

      这并不总是那么容易,但无论在什么情况下,这都是人们首先想到的。

      1. 这是一个很好的观点。一个优秀的软件工程师应该问的第一个问题是:”我们如何才能避免使用软件来做这件事?

        1. 我总是想起软件优化的层次结构,从最小影响到最大影响:

          1.微优化,例如编程语言选择、收紧循环、缓存命中率等,

          2.改变算法,

          3.改变问题。

          有时,改变问题会让软件彻底消失!

  16. 我把前三段称为 “分子问题”。

    在建筑领域,大多数部件都是标准化的,如螺栓、螺母、螺钉、屋顶瓦片等。即使尺寸不同,通常也有一种与材料相互作用的标准方式。例如,钢筋在与混凝土一起使用时有明确的作用和行为。

    编程还没有形成这种标准化。相反,我们在分子层面构建软件:if 语句、循环、数据结构或原子层面(机器代码)。每家公司或每个项目实际上都在为如何建造而发明自己的 “材料和标准”。

    试想一下,如果每一栋正在建造的房屋都没有标准长度的螺丝或标准化的螺栓螺纹,那么房屋将在数年内倒塌,或者建造时间将延长 5 倍。

    即使我们采用了标准工具(如 ORM 或框架),感觉上仍像是在使用分子而非螺母和螺栓。最佳实践是存在的,但由于 ORM 和框架种类繁多,即使知道其中一种也无法快速切换工作。同样,在佛罗里达州给屋顶铺瓦的人也可以拿起射钉枪给佐治亚州的屋顶铺瓦。

    我不知道我们的 “螺母和螺栓 ”标准化的未来是什么样子,但我知道法律硕士们正在使情况变得无限糟糕,因为在这一点上,正在编写的代码量已经超过了指数。

    1. “如果建筑工人按照程序员编写程序的方式建造建筑,那么出现的第一只啄木鸟就会摧毁人类文明”。- Gerald Weinberg

    2. 螺母和螺栓将是可嵌入的 DSL,它们是唯一不会腐烂的代码。把它们放在一个层次结构中,一个编译到另一个或几个,你就拥有了你的建筑。

      1. 这样怎么不会腐烂,怎么不会充满漏洞百出的抽象?

        1. SQL 或 regex 作为一种语言会腐烂吗?我会说,使用 SQL 或 regex 实现的抽象会腐烂,因为它并没有被形式化为一种语言。

          实现是否会通过 JSON 或 EBNF 语法等泄漏?性能可能是一个问题,但与库 api 不同的是,其实现不会通过语言泄露。如果你能访问编译器,你就可以调整实现,在不影响抽象的情况下获得你想要的性能。

          编辑:JSON 是耐腐性和良好抽象的完美范例。你总是能用任何特定的语言读取它,因为它是一种语言,而不是某个库。非 DSL 代码应被视为编译器输出,而这正是 99.9% 的软件开发人员花费时间编写的代码。他们嘲笑那些会编写汇编程序的人,然后为了某些业务问题在 Haskell 中创建一些乱七八糟的类型层次结构,并称之为良好的抽象。复杂性就这样成倍增加,最终导致了目前的行业现状。

  17. > 告诉你的老板,你可以教那些只听说过 React 的新员工服务器端渲染的乐趣。

    显然,一切旧事物都会焕然一新。我上次开发网络应用时,Javascript 顶多是个小装饰,如果你大胆的话,还可以用一点 AJAX。一切都是在服务器上渲染的。

    1. > 一切都在服务器上呈现。

      直到客户端渲染变得很酷。但搜索引擎讨厌这样,所以我们最好还是在服务器上渲染,然后在客户端重新渲染(“和解”)。等等,这是什么?现在你可以选择 “部分预渲染”,因为仅从服务器发送 HTML 并在客户端制作更多 HTML 是不够的,现在我们可以将仅在客户端渲染的 HTML 与服务器渲染-客户端重新渲染的 HTML 相混合。

      1. 在我看来,大部分问题都可以归结为是否需要搜索引擎优化。没有正确的通用答案

  18. 我倾向于认为所有工作的难度都取决于从事这些工作的人的能力。

    这很好地迎合了 “勤奋工作者 ”的神话。我们都是粗犷的个人主义者。

    这意味着公司要从劳动力身上榨取尽可能多的工作。我们都被剥削了。

    我们都毫无疑问地接受了这一点,因为这是现状。

  19. 我看到的 “现在人人都是全栈 “这一趋势的另一个问题是,没有人知道自己在做什么。

    基本上,你和你的团队花了一年左右的时间来架构和构建你熟悉的东西,这是你的领域,你知道系统的来龙去脉。然后,你的经理来了,说 X 团队需要一个功能,需要对你的系统进行修改,但我们不应该与他们合作来实现这个功能,而是应该做别的事情,由他们来对我们的系统进行修改。

    很显然,X 团队对堆栈或系统本身毫无经验,他们开始编写一些根本无法编译的无意义的 PR,你花了很多时间审核这些 PR,向他们解释问题,直到这变成了一场政治/自我驱动的讨论,然后……恭喜你,你现在成了一个阻挠者。

    在开发自己的功能时,你也会有同样的经历,弄乱你不喜欢甚至不理解的代码,创建你根本不知道实际作用的 yamls,只是在你认为合适的地方替换字符串,在生产中学习。

    当然,你根本没有时间去真正理解你正在做的事情,这些事情预计昨天就能完成。

    突然之间,为了提高生产率,每个人都在以最低效的方式工作,把几个月的时间变成了几个星期,把几个星期的时间变成了几天,把几天的时间变成了几个小时。

  20. 作为一名软件工程师,我同意工作中的某些方面会让人烦恼或精神疲劳。

    但不幸的是,三年前我不得不对神经外科医生和重症监护室的工作有了更多的了解。

    这让我彻底重新思考了工作中面临的困难,所以我不再抱怨了。

  21. 我对这些事情几乎一无所知。作为一名 ML 工程师,我做得很好。当然,我有时也需要学习新东西,但好奇心是我最初进入这个行业的原因

  22. > 之后,DevOps 出现了。某个资金紧张的公司决定现在所有这些都由工程师来处理,所有人都同意了。

    这让我哭笑不得。我不认为那是一家资金紧张的公司,但也差不多就是这么回事。

  23. 这听起来就像是一份知识工作。

    很多知识。它是流动的。而且你并不完全了解。你要不断学习,蒙混过关。

  24. 考虑到软件完全是人造的,我认为物理科学学科在开辟新天地、发现新技术和解决长期存在的问题方面可能要困难得多。

    想想看,在解决气候变化、治疗疾病或确保可持续食品供应等复杂问题方面,我们取得的进展是多么微不足道。这些都是极具挑战性的现实问题。

    相比之下,软件工程往往只是对数据进行重新排列–虽然功能强大,但从根本上讲并不总是像解决物理世界最棘手的问题那样复杂。

    1. 从技术上讲,气候变化、世界饥饿、贫困、和平等都是已经解决的问题。不幸的是,这些都不是技术问题。它们的本质是社会、政治和经济问题。

      几十年来,全世界都有办法在全球范围内消除贫困和饥饿,但我们没有做到。我们确切地知道实现气候目标所需的数量,但我们不会去做。世世代代互相残杀的人群本可以选择明天停止屠杀,永远和平相处,但他们拒绝了。这些问题与技术问题相去甚远。

    2. 同意物理科学在某一方面天生就比较困难,尤其是在研究方面,由于受到物理世界的限制,问题更难解决。

      但我也认为这正是开发工作的难点所在,因为我们的 “构建时间 ”太短了。因为我们不受现实世界的限制,我们往往可以在几秒钟内构建整个系统,然后进行测试,这让我们可以快速行动并产生巨大的复杂性。而对于物理科学来说,在实验过程中,他们测试的 “构建时间 ”通常要慢得多,往往需要数小时或数天,因此他们一次只能处理有限数量的变量和信息。

      另外,我认为这也是软件工程师擅长在其他技术领域工作的原因,我们在处理大型复杂系统方面有很多技术和实践经验,其中很多都可以应用到非软件问题中……

      (……但我这么说肯定是半理论性的,因为就我个人而言,还没有真正将其应用到实际的科学领域,只是在小型建筑项目和音乐理论领域应用过,是的,超级有用)

  25. 我非常喜欢你的文章;它或多或少表达了我个人对技术的担忧。

    我确信,只要有机会改变我的专业方向,我就会立即去做。

    对我个人来说,技术作为一种职业已经不值得了,它已经失去了意义。

    我只是把它当作一种休闲,仅此而已。

  26. 这一切并不难。模仿身边的任何东西,其实都很容易维持生计。我想,这就好比在 2008 年市场崩盘之前,到处幸福地出售 CDO。

    只是,我们不可能掌握这些工具。我们自欺欺人地以为自己掌握了工具,但当大祸临头时,我们就像疯人院里的任何人一样无能为力,无法弄清究竟发生了什么。我们都是没穿衣服的皇帝。

    我们每个人都知道自己赤身裸体,但不知何故,我们总以为外面有人没有赤身裸体。有人知道自己在做什么 不,他们不知道。

    把法学硕士扯进来只会让疯狂更疯狂。

    整件事就是一个集体自杀协议。

  27. 大多数公司都不需要 “工程师”,而是满足于他们认为完全可替代的 “资源 “这一必要之恶。鉴于许多程序员从事软件开发的原因与人类的可替代性背道而驰,他们不得不被称为工程师的宣传所欺骗。

  28. 很久以前就失去了 webdevhell 的踪迹。完全疯狂的变化以光速进行,以至于跟上它本身就是一种压力。SE 从内部看比从外部看更难,但大多数工作也是如此。所以,事实是介于两者之间,就像大多数时候一样。我不喜欢有人说 SE 是一份舒适的工作,但我也不同意有人说它比任何其他工作都难。但在精神上是的,我见过有实力的人转行做 SE,但 1-2 年后就像苍蝇一样飞走了。但在我看来,让你

  29. atoav 的不是工作,而是环境。说道:

    我并不想成为那样的人,但其他工作也同样疯狂。我必须准备我的电气工程证书,我必须学习所有的欧洲规范,包括我所遇到的地方建成时有效的规范。这意味着我需要知道在过去 100 年里,哪一年可以使用哪种断路器、电缆、布线等。整个资料集的压缩 PDF 文件超过 240 GB,我甚至花了几周时间才略微浏览了一下。规范是高度相互依存的,有点像没有可点击链接的超文本。最妙的是,有些东西他们根本就没有规定。我们团队里有一位核物理学家,他对复杂性颇有微词。

    我有时很喜欢软件工程的简单明了,因为这里的很多问题都是我们自己造成的。

  30. 这不是精神错乱。专家是构建平台、库和工具的人。了解多个平台的想法并不像作者试图表达的那样疯狂。

    1. 我同意,我在职业生涯中遇到过一些工程师,他们认为使用一种以上的语言工作是件坏事。

      就我个人而言,我不明白不懂 SQL、JS 和其他语言的人是如何在网络领域立足的。

      你不了解 SQL 可能给系统带来的缺陷,也没有能力调试这些缺陷,这种想法令人费解。如果你只能控制应用程序的一小部分,又如何能真正提高工作效率呢?

  31. 相关链接:https://www.stilldrinking.org/programming-sucks

    > 我的每个朋友,只要工作涉及每周拿起比笔记本电脑还重的东西两次以上,最终都会想方设法在谈话中夹带这样的话: “兄弟1,你工作不努力。我刚刚用螺丝刀在魔都地下挖了一条隧道,一周工作了 4700 个小时”。

    > 他们说得有道理。魔都太烂了,除非你是只蚂蚁,否则挖隧道肯定比敲键盘更耗费体力。不过,为了争论起见,我们能不能同意压力和精神错乱是坏事?棒极了 欢迎加入编程行列。

  32. 做全栈对我来说曾经更令人兴奋,但随着前端在感觉达到一定稳定性后仍在不断变化,我决定不能再做下去了。这确实迎合了早期初创公司工程师的特殊需求,他们需要不断进行绿地开发并创建新的仓库。问题是,这意味着你会一直处于贫困状态,因为你总是处于资金的早期阶段–而在这个市场和未来几年的市场中……祝你好运,这些选择中的任何一个都能变现。

    对于一个在硅谷需要支付 300 万美元抵押贷款的人来说,这不是一条可持续发展的道路。对于那些已经富得流油的人来说,修修补补才是正经事,而对于那些可以住在 6 平方英尺的房子里的年轻人来说,这才是正经事。

    我的职业生涯完全是围绕全栈构建的,所以我现在身无分文也不足为奇。白辛苦一场。专业化,加入大型科技公司。这些早期创业公司太烂了,不值得。

  33. 根据你的角色、公司和技术栈的不同,软件工程领域有很多东西需要学习。它可能会变得相当复杂、令人困惑等。这也是我喜欢软件工程的部分原因。我喜欢挑战。难题。我喜欢学习新东西。但有时这也很令人沮丧。

  34. 除了你需要学习的所有框架之外,如果你不是某个特定领域的专家,根据我的经验,你也是完全可有可无的。

  35. 这就是 “草木皆兵”。我在 $FAANG 的售前部门工作,如果能减薪 20%,然后去做一个压力不大的 SWE 角色,把 golang 扔来扔去,我愿意做任何事情。

    我的天哪……没有政治手腕、藩篱的建立和捍卫、工作狂们在周末或早上 5:30 起床后的第一件事就是追逐交易和回复……

    ,我曾在一家 SaaS 公司的专业服务团队短暂工作过。这是我经历过的最有趣的工作之一,压力不大,问题有趣但不太具有挑战性,主要是创意挑战,而不是 “配置 systemd ”的挑战。

    现在我知道你在想什么了: “哦,但在 SWE 这块土地上,我们也有你提到的所有问题!”

    没错,我就是这个意思。

  36. 在我的生活中,我还遇到过(也许)3 个使用过所有列出技术的开发人员。大多数人要么使用 ssh,要么使用 react,很少有同时使用两种技术的。

  37. 没有多少职业允许我穿着内衣在家工作,还能赚大钱

  38. 文章完全忘记了什么才是真正重要的:软件应该为用户提供价值,因此 SWE 需要了解领域并设计出能够实现这一目标的系统。有些人可能会说,这是业务分析师的工作,但业务分析师并不设计系统或功能。

  39. 热评:我看到很多评论都暗示了文章中的悲观态度。我认为这是不公平的,因为我觉得作者对这个行业充满热情。否则就不会有幽默感,作者也不会坚持这么久,看到这个领域的演变,直到现在这个充满活力的编码时代。

  40. 真高兴人类很快就能因为人工智能而不用大脑了 !

  41. 我是说,我目前的工作头衔是 “全栈软件工程师”,而我却只能写 Typescript。是的,我必须做文章中提到的所有事情: React、CSS、AWS、Docker、数据库等。我们做了很多 “绿地 ”项目,所以这些东西都是由我来设置的。

    但基本上都是网络范例。我不需要开发移动应用程序或驱动程序之类的东西。所以我认为 “全栈 ”并不是一个好的描述。我更像是一个 “网络开发人员”。是的,这很复杂,但如果你是移动开发者,你的世界就完全不同了,会有自己的软件生态系统。

    1. 你还没有承担过移动和人工智能的任务…… 还没有!

  42. 这就是为什么我们付给专家很多钱。

  43. 作为一个已经为世界带来巨大进步的职业,我们却很悲观,不是吗?

  44. 是啊,原来你需要提供价值来换取薪水。所以,既然没有身体上的劳累,就会有精神上的劳累。

    这就像写一篇关于 “现代社会成年人的疯狂 ”的文章,因为你必须考虑保险、洗碗、穿衣、吃饭、开车、头发、健康、财务等等…… 是啊 是啊。

  45. 所有这些还是比设计和建造桥梁简单得多,比如说。

    1. 不,造桥要简单得多,因为我们有一套编码规范可循(欧洲规范、ACI、英国标准什么的)。建筑物的性能遵循确定性的牛顿定律,甚至还有为此编写的软件包。

      你的客户不会中途改变规格,并希望你提供准确的估算,同时也不打算额外付钱给你。您可以非常准确地预测建筑成本,因为所有的桥梁都是相同的,而软件则不同,因为每次的需求都不同,所以软件每次都是新的。

      等等。

      我知道,因为我在土木工程软件领域工作。

  46. 这是一本有趣的读物。

    我们将不断提高就业所需的知识量,直到它不再具有可持续性。这就是资本主义的本质:从某人的薪水中榨取尽可能多的价值。

  47. 我是说,我朋友的妻子是眼科医生。我丈夫的表弟是儿科医生,专攻新生儿。我选软件工程。

    1. 眼科是最轻松、收入最高的专业之一。

      我妻子是儿科急诊医生。她的收入和我在一家大型科技公司做工程师的收入差不多,但她每个月要上 11-12 个班(8-9 小时一班)。

      最重要的是,她的工作时间非常糟糕,她必须面对痛苦的父母和生病的孩子,偶尔还要面对非常糟糕的结果。她还花了 14 年的培训时间和 20 万美元的债务才开始真正赚钱。

      但医生的社会地位确实不容小觑。她的自主权比我大得多。她的工作稳如泰山。

      还有面试 面试基本上就是医院让她飞出去,请她吃喝玩乐,试图说服她接受这份工作。

      1. 是啊,医疗保健行业的问题在于,如果你愿意轮班工作,这份工作就很有保障。即使是牙医,也经常需要在周末等时间长时间工作(虽然我不认为夜班是一种工作)。即使是最好的医生也很难找到每天按时下班的朝九晚五的工作。摇摆不定。

  48. 这整篇文章都在抱怨这个不需要任何证书、薪水高得惊人、入职微不足道的轻松职业是多么糟糕,因为你需要时不时地处理一些不舒服的事情。

    1. 这并不是一个 “无比轻松的职业”,否则每个人都会去做。总有一些人发现自己所处的职位可以让他们在基本上什么都不做的情况下继续拿钱,软件也不例外。但是,我们中的很多人都是通过努力工作才走到今天的,而且还在继续努力。

      1. > 这不是一个 “容易得令人难以置信的职业”,否则每个人都会去做。

        我不太确定这一点。“轻松 ”通常不是一个吸引人的就业特征。一般来说,人们似乎需要某种成就感来迫使他们日复一日地工作。对于那些被软件工程吸引的神经分裂症患者来说,这似乎很难,但对于大多数人来说,这只是一份毫无趣味的工作。

        1. 如果人们不在乎工作是否轻松,那么这个主题中的所有人都应该停止告诉人们,他们的工作轻松,所以他们不能抱怨。工作轻松与否,要么重要,要么不重要。

          1. 工作轻松不重要,但任何人的武断言论也不重要。

        2. 有很多人愿意为了数倍于中位数的工资去做无趣的工作。工厂工人和邮政分拣员等工作的流动率很高,因为这些工作既不有趣,工资也不高。我从来没有和任何人共事过,他们离开软件业是因为他们不够自闭,觉得软件业不有趣。

          1. > 有很多人愿意为了数倍于中位数的工资去做无趣的工作。

            多年来,我们都目睹了越来越多这样的人进入软件行业。但他们并不能代表所有人。很多人都不能仅仅为了钱而强迫自己早上起床。如果他们能,他们就会从事软件工作。

            > 工厂工人和邮政分拣员等工作的流动率很高,因为这些工作既不有趣,报酬也不高。

            制造业尤其提供了有趣工作的假象。事实上,由于这种假象,美国目前正在进行一场政治活动,试图增加制造业的就业机会。我想你是对的,人们会发现事实并非如此,但只要他们在尝试之前就相信了…… 另一方面,软件根本不用假装。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注