在选择我们想学习的东西,并与我们的职业和生活一起工作时,我们都对自己的状况有一定的期望。既然我从事这个行业已经近十年了,我一直在思考自己的想法(我正在研究计算机科学时)的编程工作生活的样子,以及它实际上如何看待是。

到目前为止,我两次最大的冲击(或者我应该说,期望值)是软件所涉及的大量维护工作以及整体缺乏专业精神:

  1. 维护: :在UNI,我们都被告知大多数软件工作是维护现有系统。所以我知道要抽象地期待这一点。但是我从来没有想过确切地说这会有多大的压倒性。也许这是我精神上的釉面,希望我会从头开始构建很酷的新东西。但实际上,大多数作业都是绝大多数的维护,错误修复和面向支持的情况。

  2. 缺乏专业精神: :在Uni,我总是给人的印象是,商业软件工作非常面向流程和严格设计。我有ISO流程的图像,技术文档的转换,严格记录的所有功能和错误以及通常专业的环境。意识到,大多数软件公司与从事大型学期项目的学生团队没有什么不同。我曾在小型敏捷骇客商店和中型企业企业中工作。虽然我不会说这一直是完全“不专业”的,但绝对感觉像软件行业(总体上)远非我期望的强大工程学科。

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

有帮助吗?

解决方案

我觉得你男人。实际上,我刚刚毕业了一年多,实际上是我的第一笔工作机会,并获得了我一生中最大的震惊。

我没想到的事情:

学校压力和工作压力不一样- 即使在迫在眉睫的论文截止日期或特殊项目辩护中,与朋友一起工作或独自工作的压力也与看似不合理的工作截止日期,沟通问题,(一点点办公室政治)的压力并不相比时代。

缺乏最佳实践- 与您的专业经验相同。在完成我的第一份工作和培训期之前,我急忙阅读和阅读有关编程和软件工程中最佳实践的信息。对于不切实际的,公平的,实际的原因,它们并没有像它们那样遵循。有时,您的知识几乎没有针对其他人,他们只是害怕未知的人并轻蔑地对待这些做法。

他们在学校教的只是冰山一角- 以为我学到的自学和从课程中足以让我度过难关,至少在我凝视着我应该维护的第一件代码时,我感到震惊。我现在使用的许多技能都在工作中或在工作中得知,我一直想知道我是否可以没有大学学位就可以做到这一点。 XD

沟通的重要性- 让我意识到所有这些英语课的用途。在现实世界之前,我看不到大学在大学时就开始教授三到四个不同的英语课程的意义。当您可以与计算机交谈但无法与人交谈时,您在工作中没有用。

其他提示

您所做的大多数工作都不是开创性的

在UNI时,我研究了AI例程来控制足球播放机器人,我构建了编译器并在操作系统内核上砍了。

但是在现实世界中,有99%* 软件开发实际上很无聊。我一直很欣赏建筑师或建筑商,当被问及“您为谋生做什么?”时。可以指向建筑物或其他任何东西,然后说“我做了 “但是大多数软件开发人员无法做到。处理了广播电台等的SMS消息……我可以说:“您知道您在发短信到广播电台投票以投票为歌曲时,我写了处理这些投票和内容的软件。“仍然没有附近能够指向建筑物并说“我建造”的酷。

当然,那里 可以说“我在Windows上工作”的人,但我敢肯定,他们实际上并没有告诉任何人担心下一个问题是“我无法让我的打印机上班,您能为此解决这个问题我?”


* 所有统计数据中有62%是现场构成的

如果您今天查看软件,通过工程史的视角,它肯定是一种工程学,但这是没有拱门概念的人们所做的那种工程。当今的大多数软件都非常像一个埃及金字塔,数以百万计的砖块彼此堆积,没有结构完整性,而只是用蛮力和成千上万的奴隶完成。 -Alan Kay,2004年

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

我不是行业兽医;相反,我是最近的毕业生,但是来自美国顶级CS学校,但我本能的感觉是我们构建软件的方式是错误的。而不是按下暂停按钮并重新审查我们如何编程的基本原理,我们刚刚使用50年代,60年代的过时的型号不断向前迈出了少量糖。如果我们这样坚持下去,我们将永远不会超越自己所处的位置。人类无法管理MS Windows代码库大小的事物的复杂性。我们需要一种新的方式。我不知道那是什么。

我认为这是大小小型软件商店似乎通过将软件黑客入侵而没有对基本原理的深刻理解来制造软件的根本原因。

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

  • 大铁 - 他们所教的技术主要是大型机和微型计算机。一所大学的院长告诉我,我将无法找到工作,因为我什至不知道什么是主人。我无意在大型机上工作,因为我负担不起,但是我不会那么愚蠢,以至于没有稍作准备。 Vaxen很酷,我期待着在我的小隔间中使用自己的微量VAX获得代码的报酬。市场完全崩溃了。 (事实证明,我有两个职位与大型机一起工作……作为IBM的承包商。)

  • 软件工程 - 在结构化编程,SASD和其他设计方法之后,您可能已经认为我们将成为真正的工程师。我做到了。但是老师几乎没有关于我在图书馆阅读的设计技巧的指导。学生被屈服于自己,而Micros使得在代码中进行操作变得太容易了,直到他们得到满意的答案为止。我没有意识到在就业市场上这有多糟。不知何故,我必须做很多新的代码,所以这并不是那么无聊。但是我也接管了很多,他们很糟糕,就像一个新项目一样,因为我必须修复很多代码。这是研究现有功能和创建新代码(其替代)的结合;编写工具来简化流程并建立更好的项目管理。

  • 高科技职业 - 这是一件事,当学校拥有旧的建筑物和设备时(我在1984年开始在我开始之前的学期更换了打孔卡设备),但是当您在光线不佳的仓库中工作,或者是为挂断顾客挂断电话的老板时支持线,您开始意识到您的职位描述不太可能包括带有5兆瓦激光的烹饪爆米花。

  • 发展主要是团队合作。 这意味着通信(口语),阅读其他代码并重复使用以前的模块(内部和外部)几乎每天都面对。在我的大学中,至少我不得不在很少的情况下与更多的人进行编码,所以我认为这项工作的主要部分是在荒野中独自编码。它不是。
  • 向非发展者解释事物很难 (也涵盖了第一点),这是您提出观点的责任(不是其他99%的世界)。
  • 良好的测试是失败的测试。 (至少是第一次),当然,没有一个无错误的代码。如果有错误,您并不是一个坏程序员。错误只是您工作的(非常重要且耗时的)一部分。
  • 没有银子弹。 每种技术都有其优势和缺点。
  • 大学不教您最先进的技术。 但是,90%的作品使用了漂亮的旧技术。顺便说一句,有时是需要的。
  • 非技术人员就技术解决方案做出决定, ,主要是出于深奥的原因,例如维护,伙伴关系,工人的可用性...
  • 您才刚刚开始, , 年轻的 帕达万.

从那时起,我就开始意识到,编码是您与更多人一起做的一项工作,尤其是现在开源更为突出。但是当我上大学(九十年代末)时,我坚信我会从头开始做事,而不必研究他人的代码或必须与他人协调...

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

  • 计算机编程是非物理和非直觉的。
    • 当房屋建造者完成他/她的工作时,他/他可以走来走去,立即看到/感觉到是否有问题。计算机编程错误不能以相同的方式发现,并且可能潜伏在系统中数月甚至几十年。
    • 虽然程序员可以通过代码审核看起来/感受到源代码,但不能保证发现代码中包含的每个错误。但是,计算机每次都可以通过使用某些输入执行程序来精确地重现错误。因此,人类对源代码的理解始终是它作为计算机指示的本质的不完美模型。
  • 编码处理最常见案例但完全无法处理边缘案例的程序非常容易。
    • 在其他学科中,事后采取补救措施相对容易。甚至可能有一个专门致力于补救行动的知识。软件开发中没有这样的事情。
    • 幸运的是,测试驱动的开发有助于编码代码应处理的边缘案例。
    • 添加 另一方面,某些软件开发方法似乎暗示我们可以通过有意识地选择不处理边缘案例并将这些决定传达给客户来提取业务价值(更快的营销时间等)。
  • 客户可能会在仅处理最常见案例的软件中找到业务价值,因此软件提供商不太关心处理罕见情况。
    • 客户只是学会避免粗糙的边缘。

添加

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

添加

我的两分钱:只要习惯它。

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

我认为毕业后,负责人将能够从不好的工作中认识到出色的工作。在将百万副本交给了“真正的最高编码器组合”的百万副本之后,并将其看起来像这样:

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
    .
    .
    .

我几乎放弃了试图了解尖头老板的耳朵之间发生了什么。 “伟大”是指维持噩梦,“良好”是指轻声崩溃,而“可怕的烂摊子”是指该工程师显然拒绝遵守淫秽的截止日期,只是为了保持理智。

我听说它认为第一行代码之后的所有软件工程都是维护。当然,这似乎与我的经历相符。我写的唯一没有最终使其大部分成本维护的代码是如此不成功,以至于它从未或仅短暂使用过。

我认为您可以找到有学分的工程团队,这些团队开发和遵循强大的流程,从而释放强大的代码,该团队可以对此充满信心(尽管我不会在大量文档中陷入困境)。我相信我目前在这样的团队中工作。尽管我肯定经历了另一种发展。

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

许多软件并没有达到足够使用/购买的程度。当一个人做到这一点时,它倾向于粘住,并且只会在维护中“混乱”。

用户对功能的期望每天都在增加,但是在许多领域,工程领域的期望值较低。让我们假设银行交易软件与现代汽车一样坚实且经过专业设计。数量的处理是现代奇迹,但是每笔交易的可靠性是什么?没那么多。您关于小狗在地毯上的第一个废话的帖子被掉了下来,那又如何。它更像是杂货店的小塑料袋。他们赚了数十亿美元,撕裂和撕裂并被扔掉。大多数人不太在意一个更好的包。

我认为最终制造了高质量的软件。其中有些比大多数Comeperial产品更快地进入市场。谁可以在Beta驾驶汽车?

许可以下: CC-BY-SA归因
scroll top