毕业生期望与现实[关闭]


50

当选择我们想要学习的东西,以及我们的职业和生活时,我们都对它会是什么样子抱有一些期望。现在我从事该行业已经有近十年了,我一直在反思自己的想法(当时我在学习计算机科学时),编程的工作生活将是什么样子,以及它实际上如何变成是。

到目前为止,我的两个最大的震惊(或者应该说是打破期望)是软件涉及的大量维护工作以及总体上缺乏专业精神:

  1. 维护:在uni,我们都被告知大多数软件工作是对现有系统的维护。因此,我知道可以抽象地期望这一点。但是我从未想过这到底会是多么令人难以置信。也许这是我精神上的困惑,并希望我能从头开始构建更多新颖的东西。但是,实际上大多数工作都是以维护,错误修复和支持为导向的。

  2. 缺乏专业素养:在uni,我始终给人以商业软件工作非常注重流程和严格设计的印象。我有ISO流程的图像,大量技术文档,严格记录了每个功能和错误以及普遍专业的环境。震惊的是,意识到大多数软件公司的运作方式与一个为期一个学期的大型项目的学生团队没有什么不同。我曾经在小型敏捷黑客商店和中型企业中工作过。虽然我不会说它一直都是完全“不专业”的,但绝对可以感觉到软件行业(总体上)与我期望的强大工程学相去甚远。

其他人有类似的经历吗?您对我们职业的期望与现实有何不同?


4
作为几乎要离开大学的学生,这是一个非常有趣的问题!迫不及待想看到一些答案
Mike42

8
您现在所看到的就是现实。其他也属于现实的乐趣是:数十亿没有食物的人,文盲,在持续的战争威胁下,金融市场即将崩溃等。换句话说,大学是美好的现实扭曲场,人们可以在此领域的保护范围内学习很多教科书知识。
rwong

您应该期望任何东西。如果事实证明您期望的结果不那么实际,那就不要接受它。成为开拓者,实现您的期望!
Atomix

1
我喜欢编程。我讨厌在“真实”世界中如何开发软件的现实。您所描述的是对软件行业状况的相当准确的描述。
明智船长

作为Fresh Jr. Software工程师,我也正在经历这一点,我以为这仅在我的国家/地区,现在我已经拥有了软件开发的Unwrite功能。
parmanand 2011年

Answers:


27

我觉得你是男人。实际上,我才刚刚一年多才毕业,就跳上了我的第一份工作邀请,这是我一生中最大的震惊。

我没想到的事情:

学校压力和工作压力并不相同 -与朋友一起进行学校项目或独自工作的压力,即使迫在眉睫的论文截止日期或特殊项目防御也无法与看似不合理的工作截止日期,沟通问题带来的压力相提并论,(一些办公室政治)和紧缩时间。

缺乏最佳实践 -与您的专业素养相同。在开始我的第一份工作之前和在培训期间,我急于审查和阅读有关编程和软件工程的最佳实践。出于不切实际的原因,并且出于公平,实际的原因,并没有遵循这些建议。有时,您的知识与仅仅惧怕未知事物并轻视这些实践的其他人相比就显得微不足道了。

他们在学校教的只是冰山一角 -认为我从中学到的自学知识和上课的知识足以使我顺利通过,至少当我瞪着目瞪口呆的第一段代码时,我感到震惊应该维护。我现在使用的许多技能是在工作中或工作期间学到的,我一直在想,如果没有大学学位,我是否可以做到这一点。XD

交流的重要性 -让我意识到所有这些英语课堂的目的。在现实世界之前,自从我们一年级开始教课时,我看不到在大学开设三到四个不同的英语课的意义。可以与计算机交谈但无法与人交谈的工作毫无用处。


5
+1沟通的重要性。至于第二,并不是没有最佳实践。(i)过多的最佳做法,以及(ii)普遍缺乏遵循任何最佳实践的兴趣。
rwong

1
+1为冰山一角!如此多的毕业生认为他们什么都知道,现在我觉得我比以往任何时候都更了解!
billy.bob 2010年

+1这里的一些优点。缺乏最佳实践/系统/程序的原因通常是前期的“成本”(即需要购买资本支出),但缺乏这些成本的代价是维护成本增加,或者由于失控的错误清单或失败而导致产品故障。不满足要求..良好的沟通可以帮助避免:-)
JBRWilkinson 2010年

2
我喜欢这个答案。这是一个很好的。这让我感到奇怪:为什么没有像所有医生一样必须进行某种“实习”?一个漫长而认真的专业过渡区,可以参与其中,但不能妨碍任何项目的关键路径。一些大公司可能会这样做,但这并不是该行业的通用标准。但是,许多程序员/软件开发人员/软件工程师所做的工作对于各种组织而言,就像医生为个人所做的一样,同样是危险和至关重要的。
DarenW

1
如果可能的话,我会给冰山一角额外的+1!
DarenW

18

您所做的大部分工作都不是开创性的

在Uni期间,我从事AI例程的控制足球机器人的工作,我构建了编译器并入侵了操作系统内核。

但在现实世界中,99%*的软件开发其实是很无聊的。我一直很钦佩建筑师或建筑商,他们被问到“你以谋生为目的吗?” 可以指向建筑物或其他建筑物,然后说“我做到 ”。但是大多数软件开发人员无法做到这一点。当被问到“你以什么谋生?” 与我所能到达的最接近的是,当我曾经在一家公司工作时,该公司所建立的软件可以处理广播电台等的SMS消息。我可以说,“您知道当您发送短信到广播电台投票选歌,我写了处理那些选票和东西的软件。” 仍然无法像指向建筑物并说“我建造了那栋建筑物”那样酷。

当然,也有人谁可以说“我的工作在Windows”或什么,但我敢肯定,他们实际上并没有告诉任何人,对恐惧的下一个问题是“我不能让我的打印机工作,你能帮我解决这个问题吗?”


*并且所有统计的62%是当场构成的


1
这是真的,但突破性的进展并不意味着它并不重要。有许多并非开创性的应用程序,如果没有支持和修复,可能会崩溃,这说明我们的经济(从极端的角度来看……)……此外,根据项目的不同,总会有创新之处……
Aggietech,2010年

3
我们中的许多人每天都在开拓创新。也许这不是治愈癌症的方法,但我们以全力以赴的胜利来庆祝小胜利,一轮蛋糕/松饼/甜甜圈等等,以纪念这一时刻。许多工作,不仅是编程工作,没有可以显示给朋友/家人的输出,而这只是框架问题:您可以说“我配置网络交换机,DNS服务器和防火墙”,或者可以重新命名表示为“您知道互联网-Facebook,YouTube,Twitter等吗?嗯,我帮助它工作”。
JBR威尔金森

1
@JBR威尔金森:+1。我最好的“重新构架”案例是在以前的工作中,我曾在NurseCall医院的蜂鸣器软件上工作。您可以说一些类似的话,例如“我编写了运行蜂鸣器的程序”。OTOH,您也可以说:“我编写了可以帮助医院更好地运行并且可以挽救生命的软件!”。直到现在还没有想到...但是从统计学上讲这可能是正确的。实际上,我现在对这项工作感觉好多了。例如,由于我的努力等,该软件得以更早地投入生产。确实可以挽救生命。:)
鲍比表

1
@Guzica:您每天可以/可以为挽救生命做出贡献,这可能是任何人都能获得的最佳工作满意度-做得好!
JBRWilkinson

1
哈哈,很好的回答,+ 1带来幽默感!
机敏队长

17

如果您今天从工程历史的角度来看软件,那肯定是某种工程,但是这是没有拱门概念的人们所做的那种工程。如今,大多数软件非常像埃及的金字塔,成千上万的砖块彼此叠放,没有结构上的完整性,只是由蛮力和成千上万的奴隶完成的。-艾伦·凯(Alan Kay),2004年

完整的采访:http : //queue.acm.org/detail.cfm?id=1039523

我不是行业兽医;相反,我是应届毕业生,但来自美国一所顶尖的CS学校。但是我的直觉是,我们构建软件的方式是错误的。与其点击暂停按钮并重新检查编程的基本原理,我们不如使用50、60年代过期的模型向前冲,不断在上面加一点糖。如果我们继续这样下去,我们将永远无法超越自己所在的位置。人类只是无法管理像MS Windows代码库一样大小的事物的复杂性。我们需要一种新方法。我不知道那是什么

我认为这是造成大小软件商店似乎都是通过将软件一起黑客入侵而没有对基本原理有任何深入了解的感觉的根本原因。


作为一个相对较新的毕业生,我给人的印象是很多地方使用软件的方式错误的,但是我目前的工作位置...不是很完美,但是他们尝试了,而且效果更好。当然,似乎确实有很多地方采用了可怕的“蛮力”方法……但是,如果您在这些地方之一,请考虑考虑寻找其他地方。

1
整个软件开发是一个进化的过程,而不是革命性的过程。当然,从理论上讲,您可以用碳纳米管建造一个金字塔结构,该结构比理论上的埃及金字塔更坚固,更耐用且更轻巧。但是这样做既不切实际,也不可行。如果您工作的地方真的很糟糕,请找一份新工作。否则,不要太过完美,因为真正的编程工作会受到真正的限制(例如时间/资金)。请记住,“理论上,理论和实践是相同的。实际上,事实并非如此。”
Evan Plaice 2010年

>>>我们需要一种新的方式。我不知道那是什么 -其他人也没有,因此继续!
加里·威洛比

5

我没有学位,但是我在大学图书馆和实验室学习了一些。

  • Big Iron-他们教授的技术主要是大型机和微型计算机。一所大学的院长告诉我,我无法找到工作,因为我什至不知道什么是masterfile。因为我买不起大型机,所以我没有打算从事大型机的工作,但是我不会愚蠢到没有作好准备。VAXen很酷,我很期待能在自己的小隔间中获得使用自己的Micro VAX进行编码的报酬。市场完全崩溃真是太可惜了。(事实证明,我在大型机上有两个职位……作为IBM的承包商。)

  • 软件工程 -在结构化编程,SASD和其他设计方法之后,您可能认为我们将成为真正的工程师。是的 但是老师对我在图书馆里读到的设计技术的指导很少。学生们不得不自力更生,而micros使得编写代码太容易了,直到他们得到满意的答案为止。我没有意识到在就业市场上情况有多糟。我以某种方式必须做很多新代码,所以它并不是那么无聊。但是我也接手了很多东西,而且它们非常糟糕,就像一个新项目一样,因为我必须修复很多代码。这是研究现有功能和创建新代码(替换它)的结合。编写工具以简化流程并建立更好的项目管理。

  • 高科技职业 -当学校有旧楼房和设备(在1984年我开始学习之前更换打孔卡设备时,这是一回事),但是当您在光线昏暗的仓库中工作或挂断老板时,这是一回事对于致电支持热线的客户,您开始意识到您的职位描述不太可能包括用5兆瓦激光烹饪爆米花。


5
  • 发展主要是团队合作。这意味着通信(语音和阅读),阅读他人的代码以及重用以前的模块(内部和外部)几乎是每天都要面对的事情。在我的大学里,至少我很少需要与更多的人一起编码,所以我认为工作的主要部分是在旷野独自编码。它不是。
  • 向非开发人员解释事情很困难(第一点也要讲),这是您提出观点的责任(不是世界上其他99%的观点)。
  • 好的测试是失败的测试。(至少是第一次)并且,当然,没有没有错误的代码。如果您有错误,那么您不是一个糟糕的程序员。错误只是您工作的一部分(非常重要且耗时)。
  • 没有银弹。每种技术都有其优点和缺点。
  • 大学不会教您最先进的技术。而且,90%的作品都使用了相当古老的技术。顺便说一句,有时是需要的。
  • 非技术人员会决定技术解决方案,主要是出于诸如维护,合作伙伴关系,工人的可用性等深奥的原因。
  • 年轻的爸爸你才开始

从那时起,我就开始意识到以下事实:编码是您与更多人一起完成的工作,尤其是在开源变得更加突出的今天。但是当我上大学时(九十年代末),我坚信自己将要从头开始做事情,而不必研究别人的代码或与他人协调...

回顾过去,对我来说最好的部分之一就是学习教别人


“学院不会教给您最先进的技术。”:是和否。在某些领域,学术界在整个行业中领先20-30年,您可以在大学中学习其中的一些知识。
Giorgio

3
  • 计算机编程是非物理和非直觉的。
    • 房屋建筑工人完成工作后,便可以走来走去,立即查看/感觉是否有任何问题。不能以相同的方式发现计算机编程错误,并且可能在系统中潜伏数月甚至数十年。
    • 尽管程序员可能会通过代码审查来查看/感觉到一段源代码,但并不能保证发现代码中包含的每个错误。但是,通过使用某些输入执行程序,计算机每次都能准确地再现错误。因此,人们对一段源代码的理解始终是一个不完善的模型,其本质是对计算机的指令。
  • 编写处理最常见情况但完全无法处理边缘情况的程序非常容易。
    • 在其他学科中,事后采取补救措施相对容易。甚至可能有专门针对补救措施的知识体系。软件开发中没有这样的东西。
    • 幸运的是,测试驱动的开发有助于整理代码应处理的边缘情况。
    • 补充说,另一方面,某些软件开发方法似乎表明,我们可以通过有意识地选择不处理极端情况,并将这些决定传达给客户来获得业务价值(加快上市时间等)。
  • 客户可能会在仅处理最常见情况的软件中发现商业价值,因此软件提供商不太担心处理罕见情况。
    • 客户只是学会避免粗糙的边缘。

添加

  • 源代码的优雅不被重视。
    • 客户看不到源代码的优雅。他们只看到用户界面和交互的优雅。
    • 另一方面,程序员通常不重视用户界面的优美性,并且他们通常不会在单个项目中停留足够长的时间以开始欣赏优美的软件设计。
    • 由于客户和程序员都不重视源代码的优美性,因此企业也不会重视它。

添加

我的两分钱:习惯它。


8
房屋建筑与修复错误相比,嗯?“嘿,我只是朝错误的方向打开了门把手,房子就消失了!”
xor_eq

3

ISO流程的图像,大量技术文档,严格记录每个功能和错误以及通常专业的环境都很好地描述了我公司。我们这样做的关键基础设施的软件/硬件产品了,所以,好了,压力是质量(我们是ISO 9001认证,例如)。


1
@Guzica:我供职的公司之一是面向工程的公司。未通过ISO9001认证,但是相当正式地遵循了非常严格的内部流程。如前所述,其他人则很好-与一群共同完成最后一个项目的CS学生相比,他们的组织能力更强。
鲍比表

2

我认为毕业后,负责人将能够从不好的工作中识别出好的工作。在获得“真正的代码,我们的顶级编码器放在一起”的第百万份副本后,它看起来像这样:

def lf(p, q, r):
    x = 4
    xx = 4.5
    t = {1:p, 2:p+2, 3:p*4} #I think there's a bug in here but I don't know
    .
    .
    .

我几乎已经放弃尝试去理解尖顶老板的耳朵之间发生了什么。“好”表示维护方面的噩梦,“好”表示崩溃时轻而易举,“可怕的混乱”表示要么是结构良好的代码库,要么其工程师显然拒绝遵守淫秽的截止日期以保持理智。


1

我听说它辩称,代码第一行之后的所有软件工程都是维护性。这肯定符合我的经验。我编写的唯一没有导致大部分成本维护的代码是不成功的代码,以至从未使用过或仅短暂使用过。

我认为您可以找到纪律严明的工程团队,他们负责开发和遵循强大的流程,从而导致发布健壮的代码,而该团队可以对此充满信心(尽管我不会在大量文档中将其弄混)。我相信目前我正在像这样的团队中工作。尽管我当然也经历了另一种发展。

我要体会的是,挑战并不总是找到完美的算法或最干净的解决方案。但是通常要权衡各种约束(资源,知识,金钱,时间,技能,风险,预先存在的用户培训等),以获取可用投资的最高回报。那就是建立一个最适合所有这些因素而不仅仅是技术影响的系统。


非常好点。我工作过的两个大中型企业在这两种情况之间形成了鲜明的对比。一个以工程学为导向,另一个则更像是一堆由CompSci学生组成的团队,在自己的泡泡中完成单独的最后一年的项目-然后以某种方式不得不稍后整合这些东西。(注意:管理层实际上支持这些“冒泡”-实际名称-认为团队独立工作比担心开发过程中的集成更有效。我不是在开玩笑。)
Bobby Tables 2010年

1

许多软件只是无法使其充分使用/购买。当它做到这一点时,它往往会粘住并且仅在维护中被“弄乱”。

用户对功能的期望每天都在增加,但是在许多领域中,它们在工程领域中的期望值较低。假设银行交易软件与现代汽车一样坚固且经过专业设计。处理数量是现代的奇迹,但是每笔交易的可靠性又如何呢?没那么多。关于小狗在地毯上的第一次胡扯的帖子已删除,该怎么办。它更像是杂货店里的小塑料袋。他们赚了数十亿美元,他们撕裂撕开被扔掉了。大多数人都不在乎是否需要更好的包。

我认为最终会制作出高质量的软件。其中一些比大多数商业产品更早进入市场。谁可以在Beta版中开车?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.