我负面的实习经历能代表现实世界吗?[关闭]


85

我很好奇我目前的实习经历是否代表实际行业。

作为背景知识,我将学习一所主要大学的两个计算专业和一个数学专业的较好部分;我上过每一堂课,并且都崇拜过他们,所以我想以为我并不擅长编程。我曾在一家主要的软件公司实习,直到现在一半,我对代码质量异常低落感到震惊。注释不存在,全是意大利面条式的代码,所有可能出错的内容甚至更糟。我已经做了大量的辅导/ TAing,所以我很习惯阅读错误的代码,但是我一直看到的主要行业产品都胜过所有这些。我每天工作10到12个小时,从不觉得自己无所事事,因为 数小时的尝试,试图找出一个未公开的API或确定(完全未公开的)产品其他部分的行为。到目前为止,我每天都讨厌工作,而我非常想知道这是否是我一生中最需要的东西。

我是不是在实习上吸了一根短草(荒谬的薪水暗示着这不是一个低素质的职位),或者这就是现实世界吗?


22
比应该的更常见。许多地方完全无所事事。
韦恩·莫利纳

35
您认为负面的东西实际上是正面的,最好早一点获得真实世界的体验,而您所体验到的现实世界比您的学术经历要高出几个数量级。

69
请记住,程序员大多讨厌其他程序员的代码。后来处理您编写的代码的人会说同样的话。我知道您认为您是一个优秀的程序员,也许您确实是,但是无论谁编写您正在查看的代码的想法也是如此。但是不,它并不总是像您描述的那样糟糕。可能部分原因是您还没有完全学会正确地阅读和评估真实世界的代码,一旦掌握了它似乎会更好。
psr 2012年

22
如果您在大学期间看到的代码不是低质量的意大利面条代码,则您的经历与我的经历不同。...学术项目中的代码经常作为概念证明退出,而与可维护性无关。
Michael Borgwardt 2012年

10
@psr:我不同意程序员通常讨厌其他程序员的代码。如果您拥有一些质量参数,例如可读性,良好的文档记录,简单性等,即使您的代码风格与您的不同,即使您使用别人的代码,也可以欣赏它们。另一方面,如果您看到复杂,混乱,即兴的代码,则您不喜欢这样,不是因为它是别人的代码。顺便说一句,当我被迫匆忙写东西而结果不符合我的质量标准时,我也讨厌自己的代码。
Giorgio 2012年

Answers:


128

他们称其为Real World™是有原因的。

在真实的企业世界中,您遇到的99%都将被视为废话,我有充分的理由解释。不被认为是垃圾的1%最终会变成垃圾。

#1编写代码,#2 ????,#3利润!

首先存在的企业是要牟利的,但它们的存在并不是要产生出理论上完全干净的设计和原始的学术代码,这些代码都存储在完美的黄金存储库中。甚至没有关闭,甚至没有销售他们产生的源代码的业务。

在商业世界中,代码是达到目的的一种手段。如果某些代码解决了业务问题并赚到了比创建和维护所需的钱更多的钱,那么这对于企业来说是理想的。聘请您编写代码只是企业获取代码的一种方法。

理论0-实践∞

理想情况下,维护应该成为更多问题,但通常不会如此,因为从短期来看,它不会带来经济上的好处。从长远来看,软件通常具有相对较短的生命周期,尤其是基于Web的应用程序,它们很快就会过时并且需要重新编写。

由于许多基于动量的原因,内部业务应用程序被视为无止境的僵尸项目。这些项目实际上是它们继续取得的成功,因为它们继续使业务获利。

在理论上,理论与实践之间没有区别。实际上有。-瑜伽士贝拉

从理论上讲,完美构建的绝对干净的原始代码库具有100%的代码覆盖率可以为公司节省资金,实际上,它甚至无法提供接近有效投资回报的任何东西。

软件生命周期的物理学

在软件世界中,还有一个强大的熵力在起作用。这是不可避免的一个黑洞,它谴责所有软件退化为泥泞大球

您从BBM开始越远越好,但是如果有足够的时间,每个软件系统最终都会到达那里。接近100%熵的速度取决于您从何处开始,累积技术债务的速度以及利息的高低。

软件系统退化是由于维护而不是因为缺乏维护而导致的。一个已经定义多年且无需更改代码的系统可以满足其所有要求和目标,并且是成功的。

那些需要不断变化的系统是不断被戳破和推动的,因为它们开始时接近于最大熵,而正是维护会加速这种负面变化。

足够好就是足够

诸如生命周期不断变化的网站之类的短生命周期系统无法从昂贵的庞大前期设计中受益,因为前期设计时间太短而无法收回成本,因此无法在单元测试中获得100%的代码覆盖率。

像上面提到的内部业务应用程序这样的长生命周期系统,也不会真正受益于100%代码覆盖率单元测试的大量投资,因为项目生命周期内的变化率在一个过程中接近于零。非线性时尚。

这就是为什么寿命终止计划更为重要,为什么应该在发布某些产品时就计划更换系统,而不是在它已经过了几年且无法支持时就计划了,因此必须尽快安装新系统。

据我所知,他们没有教授BBM,我从未遇到过一位CS毕业生,他知道这是什么,更不用说它为什么发生了。

这就是为什么“足够好”就是“足够好”,或多或少不是。

软件霸主

有房地产贫民窟的领主是有原因的,他们从自己拥有的破烂的棚屋中获利。所赚取的利润超过了对破旧财产进行增量维护所花费的资金。如果他们不这样做,他们将拆除该建筑物并予以更换。但是它们没有,因为增加的成本远远少于大修或更换整个建筑物。还有一些顾客(租户)愿意为破旧的财产支付费用。

不管是房主还是贫民窟主,都不会因为某些学术上的完美概念而将钱花在房产上,而这并不意味着可以从相关成本中获得可观的利润。

没有客户愿意为可以接受的软件系统升级付费。没有任何企业会花钱在编写和重新编写代码上而没有明显的可观利润。

微软是最主要和最成功的软件公司。Windows直到最近才开始进行主要的基础重写。而且他们仍然没有从内核中删除所有遗留代码。对他们而言,这没有商业意义,人们更愿意接受他们在过去十年中设定的低期望值。

预后

这是我从事软件开发20多年的一种模式。它不会很快改变。这不是人们希望它脱离某种信念体系的方式,而是企业外部力量的现实。业务驱动决策,利润不是邪恶的,他们支付您的薪水,短期或长期愿景无关紧要,这从定义上来说是一个不断变化的短期行业。任何反对足够好赚钱的人都不了解业务。

我花了15年的咨询时间,很快就了解到,足够好就是什么,其他任何事情都使我付出了金钱。是的,我希望一切都完美无缺,但是除非您出售的代码库(即在出售解决方案的 99.99999%的时间中),否则所有完美的,有条理的完美代码都将丢失,并且您只是在浪费时间,就永远不会得到报销。

进步与希望

至少在哲学上,敏捷方法学是朝正确方向迈出的良好一步。他们以头等公民的身份应对混乱和不断变化,并接受它。他们拒绝教条式的实践,承认方法和实践应随着需求和技术而改变。

他们接受由于缺乏时间或不断变化的需求,不断变化的员工以及带有技术债务概念的软件系统的活力而引入的熵。

但是敏捷不是万能药,它不会改变物理学的基本定律,无论如何代码库都会腐烂。在腐烂完全失控和难以控制之前,管理人员应计划如何处理腐烂。

如果正确完成,敏捷将有助于管理熵,降低熵,对其进行跟踪,对其进行度量并以计划的方式进行处理。它不会阻止它!

职业决定

如果这对您来说是一个真正的哲学问题,那么您可能应该考虑其他职业选择,因为事情的工作方式背后具有有效的商业价值。开源项目没有更好的跟踪记录,而且在许多情况下,这些代码甚至比我所见过的大多数公司代码还要糟糕。


2
我对此没有哲学上的问题,只是无奈而已。但是,这绝对是有道理的;我正在处理的许多代码已经有20年的历史了,具有3个级别的互操作性...
AtAtAtonymity 2012年

8
“它们不存在生成完美的理论上干净的设计和原始的学术代码,这些代码存储在完美的黄金存储库中。”:但是,他们没有意识到如果给开发人员更多的时间清理代码,他们会节省多少钱,所以后来,他们不必花数周的时间来寻找错误或重写没人能再理解的代码。我认为许多公司的这种短期想法会长期降低其利润。但这是IMO管理不善的标志。
Giorgio 2012年

22
有趣的是,我所工作的公司似乎确实获得了极高的代码覆盖率,严格的代码审查,每天30分钟的设计会议等方面的投资回报。在开始时开发速度可能会慢一些,但在此之后的回报是以后的代码库将变得笨拙。
2012年

4
我已经看到足够多的项目失败,知道您的答案不正确。您描述了业内大多数人的看法。信念在工程界不是一个很好的素质,尤其是在很久以前科学证明这种信念是错误的时候。
deadalnix

27
-1尽管某些点有效,但有许多错误。例如,“从理论上讲完全干净的设计”是一个清晰的稻草人。计划重写而不是重构不是一个好主意,甚至行业中许多人都知道这一点。并且代码库不可避免地会腐烂,因为缺乏维护,它们会腐烂。
sleske 2012年

44

我很好奇我目前的实习经历是否代表实际行业。

不它不是。它代表了您的职业水平和经验。这是从内部质量控制的角度了解企业运作方式的全部内容。

作为背景知识,我主要学习两门计算专业和一所主要大学的数学专业;我上过每一堂课,并且都崇拜过他们,所以我想认为我并不擅长编程。我曾在一家主要的软件公司实习,直到现在一半,我对代码质量特别低感到震惊。

您的技能,经验,学历不会影响他人的工作质量。仅仅是因为您无权更改这些做法。不论你在大学里的好坏都没关系。这并不会改变您目前所工作的公司的运作方式。因此,虽然很棒,但您具有所有这些背景。这确实是为了您自己的利益,而不是他们的利益。这就是为什么研究自己喜欢的东西很重要的原因。

我曾在一家主要的软件公司实习,直到现在一半,我对代码质量异常低落感到震惊。注释不存在,全是意大利面条式的代码,所有可能出错的内容甚至更糟。我已经做了大量的辅导/ TAing,所以我很习惯阅读错误的代码,但是我一直看到的主要行业产品都胜过所有这些。

我在多年编程中所学到的是,“代码质量”与“可接受代码”之间存在差异。事实是,有权限的人发现源代码处于可接受的状态,或者发现源代码不可接受,但有必要。如果我们都可以清理参与的项目将是很好的。分配业务资源来进行这项工作通常不符合企业的利益或预算。在第二天太阳升起之前,可以进行逻辑上的争论,为什么这将是一件好事,但是当管理层确定当前状态为“可接受”时,则无能为力。所有这些都与谁管理事情直接相关。他们要么珍视良好的内部质量,要么就不重视。您清楚地看重它,因此这种当前状态困扰您。

您将在依赖内部质量控制的任何行业中找到此类问题的示例。从软件开发到制造。您需要学习将其视为问题而不是问题,而只是将其视为源代码的当前条件。就是这样,找到某物需要X分钟,修复某件事需要X分钟。

企业要么不在乎这多余的时间,要么发现它可以接受。

我每天工作10到12个小时,从不觉得自己无所事事,因为要花费大量时间来尝试找出未公开的API或确定(完全未公开的)产品其他部分的行为。到目前为止,我每天都讨厌工作,而我非常想知道这是否是我一生中所能拥有的。

为什么花大量时间在大学学习某个主题是可以接受的,但是现在花大量的时间学习源代码是不可接受的?我确定雇主雇用您的原因是因为他们认为您可以处理。

让我给你一些建议。好的开发人员知道何时该向他们的跟随队友寻求帮助。不要以为答案总是在代码中。我只问了几个问题就节省了自己的时间。听起来您需要一些帮助以加快速度。

其次,我们不知道工作条件。在许多行业中,长时间工作是生活中的现实。您需要自己解决,但我可以告诉您。讨厌工作绝不是好兆头。您应该处理这种感觉并扎根。很抱歉您发现这种体验是负面的。

我是不是在实习上吸了一根短草(荒谬的薪水暗示着这不是一个低素质的职位),或者这就是现实世界吗?

您在学校的表现很好,但是现在您有一个实习机会,但现在做得不好。听起来您已经在现实世界中了。那是生活的一部分。问题是,您将如何处理?唯一重要的是我的朋友。我们无法告诉您该怎么办。您必须下定决心。

我可以告诉您,听起来您的年龄比我拥有的任何机会都要好得多。在90年代,对我来说,生活是一场挣房租和寻找我的下一份合同的斗争。认为自己很幸运。


3
感谢您的见解!原谅我,如果我发牢骚或自以为是,我很清楚自己很幸运,仍然有很多东西需要学习。而且我想我做得很好(我可能会得到一份全职工作),我只是不知道这种经历是否应该说服我去其他地方看。感谢您对行业的了解!
tryAtAnonymity 2012年

9
就像我父亲告诉我什么时候开始的。“你永远不会停止寻找其他地方”。您应该始终与业内其他人建立联系。始终保持简历最新,并始终学习新的编程语言。像失业一样过着自己的生活,并且您将永远得到良好的就业。
Reactgular 2012年

鉴于我现在有多喜欢,我看不到自己没有继续学习。很高兴听到那对我有帮助!
tryAtAnonymity 2012年

5
+1表示“优秀的开发人员知道何时向其关注的队友寻求帮助。” 我在一家小公司工作,只有一个队友,他在编程经验方面对我来说还很初级,但是他经常会在我遇到问题的问题上很清楚。问!
TecBrat 2012年

2
@Jodrell更改“工作”代码是巨大的风险,“清理”是有良好意图的更改,但是通向善意的通往地狱的道路。很少有产品所有者/项目经理会同意仅出于更改的目的而进行更改,这会带来太多风险。

25

在经过25年的发展之后,我可以说:
是的,这很普遍。
这就是为什么工程师通常会获得高薪的原因,他们必须善于应付杂乱无章的杂物箱,并且仍然能够进行更改,同时抵制重构整个该死的东西并找出到底该是什么的迫切愿望。在做。我在那里激起了您的感情-对您遇到的代码有这种感觉是正常的!

您看到的代码通常会由不同的程序员经过无休止的迭代,使用不同的方法和标准以及不同的命名约定等。

尽管发生的是美元压力始终存在。长期以来,总是很想描述如何以及为什么更好的代码是唯一的方法,但是在许多工作中,短期的快速解决方案需要时间。只需一名工程师即可在短时间内破坏项目中的标准。需要一位非常优秀的经理,他知道如何防止这种情况并捍卫正确的方法(在合理可能的情况下)才能真正解决该问题。

可以肯定的是,“好的代码”一词过于主观而无用。当然,这不受您的限制,您可以列出具体原因/项目。但是,其他人列出了他们认为很重要的不同项目和优先级,有些甚至不是技术性的,因此是主观的。

像德雷卡一样,这听起来令人沮丧,所以让我尝试变得更积极一点,因为这确实是真的:-

  • 有些组织,通常是拥有最大技术成分的组织,它们做正确的事情。
  • 该公司新...和代码...它的清洁往往是。意大利面条由于时间和人而增长。
  • 有些人会进行TDD和BDD,而其他人则不会。范围很大。
  • 大约10年后,目前,整个技术基础发生了变化,因此,那些从事该行业的人可能很难跟上新手一样。

最后,正如安东尼·布莱克(Anthony Blake)所指出的,总有3个因素-时间,成本和质量。
我喜欢相关的表达: “ pick 2”


我很高兴其他人有这种感觉,哈哈。了解到这是正常现象,我一定会对此有更大的容忍度。谢谢!
tryAtAnonymity 2012年

6
如果您获得“ Pick 2”,则很幸运,因为“ Pick 1”更常见。

我认为“好的代码”根本不是主观的。在项目中放置一个普通的开发人员,并要求他们创建一个常用的功能。如果要花费几个小时,则您的代码很好。如果需要几天(或几周),则您的代码是错误的。
kubi 2012年

kubi,我认为这不是一个好规则。必须考虑到产生了什么。作为示例,较慢的代码可能会有更多的测试。快速代码可能(尽管并非总是如此)成为繁重的维护工作。
Michael Durrant 2012年

同样,“平均开发人员”有点主观...;)
Michael Durrant

16

对此有很多意见,因为每个人的经历都不一样。

我碰到的是,我遇到的开发人员中约有一半是善意的,但能力中等。顶部有一小群才华横溢的人,而底部一小群正在尝试但基本上应该做些其他事情的人,因为他们并没有真正做到这一点。不幸的是,还有一小组不称职的傻瓜,他们认为自己比其他所有人都聪明,通常在您面对时应该如何跟从他们。

在项目方面,我从事了很多工作,并立即被要求“照顾”一些已建立的项目,通常是企业在失去最后一个开发人员后才发现它真正需要的项目。我通常会找到您上面概述的确切内容-未记录,过度设计的越野车意大利面条。有时我可以修复它,有时我只是重新开始。它甚至不需要是旧的代码,我也被要求在新项目中“帮忙”。

大多数公司将为实习生提供糟糕的工作,您必须对此感到振奋。有趣的事情是在您完成两件事之后出现的:1-证明自己和2-花一些时间从事除纠正别人的错误之外的事情。换句话说,你必须表现出能力和主动性。

处理错误代码的真正技巧是弄清楚什么是可挽救的,什么不是。这来自经验和研究。

您的另一个职业选择是停止在老牌公司工作,而打算在初创公司工作。这样就不会再维护旧代码了,因此您将有机会帮助构建更好的东西。不利的一面是,交付到启动项目上的压力通常意味着在不应该使用快捷方式和黑客的情况下。

程序员常常愿意承担技术债务,以便尽早或按时交付。不幸的是,这种技术债务的影响通常被开发人员和管理人员掩盖,最小化,忽略或忽略,直到为时已晚并且遇到麻烦为止。

抱歉,这听起来令人沮丧。我相信其他人可以做得更好。:-)


一点都不沮丧,很高兴知道这种经历并非不可避免且永久的!
tryAtAnonymity 2012年

8
启动只是创建尚未被认为是废话的代码...

是的:-)我也曾在一家初创公司工作,那里有我提到的一些无能的傻瓜,这些傻瓜创建了很多废话。
drekka 2012年

12

这里有一些很好的答案,但让我补充一下;

欢迎来到现实世界-不幸的是,这很常见。

请参考下图;

在此处输入图片说明

使用公司软件,您只能选择2个或以上,并且必须牺牲一个。

正如您似乎已经发现的那样,大多数企业界都追求速度和价格。


17
实际上,您甚至会很幸运地选出2个,大多数地方只选1个
softveda 2012年

1
事实上,不止这三个-还有范围(又称功能),兼容性,安全性和可用性,仅举几例。与往常一样,获得良好的结果就是选择最佳的折衷方案(就像一生中一样……)。
sleske 2012年

我同意这两个评论,但这是一个非常高的例子。在此示例中,您可能只想将范围(又称功能),兼容性,安全性,可用性放在“质量”标题下。
AnthonyBlake 2012年

1
@AnthonyBlake:是的,我知道。我不想破坏一个很好的例子,对不起:-)。
sleske 2012年

为我的这个竞争性答案+1。时间,成本和质量是要记住的重要三角形。使用三个词可以更轻松地与他人进行推广,共享和讨论。
Michael Durrant 2012年

6

根据我5年以上的有限经验,并不能完全代表该行业。我会通过您的实习工作,并从经验中吸取尽可能多的教训。寻找标志和指示符。例如,对于您的下一个职位,您无疑将必须进行一系列面试。这个过程是双向的,使您有机会了解公司。这至关重要,很可能会带来您自己的幸福和幸福。

总而言之,要发现传说中的迹象。

  • 谁在经营公司?它是单个经理,营销团队(如果需要的话,请远离),开发团队等。这个角度意味着您可能会或多或少地获得项目的杠杆作用,在项目上花费的时间等。
  • 有技术上的欣赏吗?看一下管理层,主管和团队成员之间如何相处。我曾在一次采访中,一旦技术负责人开始讲话,经理们就会做各种眉毛动作。之后,了解到他们没有使用源代码控制-您无法足够快地向我展示这扇门。
  • 经营目标?公司是否像日常财务目标那样每天都在生活,或者您有长期计划吗?软件开发通常需要几个月的时间,因此拥有一家具有精神分裂症性质的公司通常会导致软件混乱。
  • 大量挖掘-在询问技术问题时,看看人们是否在洗牌。源代码控制,文档控制,发布过程,错误报告,管理样式,条款和条件等。

因此,生活和学习,然后考虑下一个角色。拥有糟糕的经历并没有那么糟糕,因为您将更好地了解工作和商业领域。


4

好吧,我已经从事第二个十年的业务了,我可以告诉你,很少有完美的干净代码发生,当它真正发生时,不会长久保持这种状态。总的来说,您会发现自己不断地尝试修复过去的错误,而(由于时间限制和领导力不佳而不得不)犯下现在的错误。

除非您从事非常特殊的软件业务,否则将功能产品推向市场的压力将超越所有其他问题,并且超出某个特定点的优化被认为是毫无意义的。如果程序在5分钟内运行,而我们只需要在5分钟内运行,则没人会给您几个星期的时间来将运行时间缩短到2分钟。

如果您奇迹般地拥有了称职的管理人员,明确的目标,金钱,才华和时间的完美融合,并且生产出清洁,优质的产品...那么,只有在您永不动手的情况下,这种方式才能保持下去再来一次。维护和扩展几乎总是被赋予非常低的优先级,总是总是需要在零通知的情况下进行更改,并且最终会出现错误的结果。

我昨天在考虑这个项目。对我来说,这真是一个显而易见的梦想,我跳出了一个功能极少的废话。我认为这是浪费时间和资源。

好吧,惊喜,惊喜,每个人都喜欢它并且效果很好。所以我跳回了绘图板上,并正确地做了。而且新版本很棒!但是随后出现了管理方面的失误,整个事情都被废弃了,转而支持“新的业务方向”。

第二次迭代在公司内部进行了一次半定的部署,我从没听说过其他事情,这很有趣,因为我知道至少有约10个业务部门仍在使用它(我们正在调试该软件来完成这项工作比原定计划晚了近2年),而且显然从未中断。

这将我们带到了最后一点。即使您确实创造了奇迹,它运作良好的事实也意味着没有人至少会熟悉它,而当它崩溃时(通常是因为他们做了一些愚蠢的事情),那么他们会骂您的名字比他们差曾经诅咒那个写每三星期二休息一次的白痴。


2

很难说出您认为糟糕的低质量代码是什么,但是,是的,很少有程序员非常优秀(根据定义)。随着软件的发展,人们会犯错误。随着时间的流逝,这些因素逐渐形成,并且业务压力(以及程序员的懒惰/无知)使重构变得不常见。


好了,作为参考,我通常会很快地编写代码,但是在过去的六周中,我编写了大约一页代码,因为要弄清任何代码库的含义需要花费很长时间。缺少注释的地方是变量和函数的任意名称(以亚洲位置命名的成员变量是我的最爱...)。
tryAtAnonymity 2012年

1
另外,在软件开发中是否有50至60小时制的每周标准?
tryAtAnonymity 2012年

2
仅在不良公司。
韦恩·莫利纳

2
完全没有,这就是为什么这是一个“取决于”问题的原因。在初创公司之类的?当然。再加上很多!在高等教育或政府网络,没有。在咨询中,是的。再加上更多。它们在其他领域和收益上都有所不同,当然$
Michael Durrant 2012年

1
是的,您会发现您在工作场所需要不同的生活方式补偿技能。固定时间,午餐时间,熬夜有很大不同。在约束中找到一些小事情,这些事情可以帮助并记住给定的时间和良好的态度,您将进行调整,随着时间的流逝,您将获得更多的尊重,并且将拥有更多的权力和权力以自己的方式和/或做事得到改变。
Michael Durrant 2012年

2

不能真正为所有人说话,但这就是我能说的。

我已经在该领域工作了30多年,但我看到的足以说几句话。一个项目的生命周期很像人类。经过20年的发展,最初的设计可能不能满足当前说一个项目的需求。就是说,在那段时间里,很多人更改了与之混淆的代码,并添加了起初不可能实现的功能。

很难想象在旧项目或相当旧的项目上使用难看的代码。我们不能期望每个人都能完全理解初始设计。很可悲,但事实就是这样。

就是说,您必须记住,重构遗留项目并非总是可能的,有时甚至是不希望的。我在一家公司工作,他们正在为我正在从事的项目开发替代产品。不允许我对项目进行过多的重构,因为担心它会比新项目更好。我敢肯定,这个项目不可能比新的项目更好。这个短语有点像“不要做得更好,就要做”。

最终,您将不会像我经常阅读和收听的那样经常进行此类项目。您应该尝试与初创公司而不是大公司合作。初创企业非常有趣,如果您发现它并没有按照您想要的方式发展,那么您最终可以继续前进。

您也可以做一件事,我真的不做任何承诺,但是如果您觉得代码真的很糟糕,需要重构。与团队分享。请记住,编写该丑陋代码的人可能正在与您一起工作。这不是在伤害人们的感觉,而是如果您看到正在处理的项目在一段时间后会崩溃,并且人们将花费更多的时间来了解它的作用而不是改善它。最好是大声说出来并传达问题,而不是亲自解决。如果足够幸运,您可能最终会重构项目。

如果最终重构项目,则可能最终会成为错误的设计选择所针对的人!然后您可能会理解为什么重构很少发生。希望如果整个团队都需要重构,那么没有人指出。他们会解雇所有人=)


2

我会尝试用一个简单的引号来总结这个问题的答案:

All code turns to crap given enough time and hands.

剩下的只是故事...


不管多么丑陋,有效的代码在生产中的使用时间将比原始编码人员想象的要长得多。
珍妮弗·S

2

代码质量主要取决于两个因素。

首先是金钱。具有高生存压力的公司通常支付低工资,聘请经验不足的开发商,时间表紧迫,既没有时间也没有金钱来利用其开发商。

其次是人。首先,那些决定预算的人必须选择花在代码质量上的支出,然后他们必须吸引想要“实践”它的人。可以想象,将一个薪水高,五十岁,自上而下的Delphi程序员(无刻板印象,对不起)转换为负责CI构建和生产的最新Java开发人员,可能会变得困难松散耦合的代码。许多开发人员对(可能更年轻)研究员的课程感到反感,他们不喜欢有人在池塘里钓鱼-或在宝座上晃动。

因此,并考虑到每个公司旁边都有旧代码的事实,我想您会在现实生活中得到很多。您可以做的就像是童子军:走进树林,捡拾一些垃圾,清理干净。下次您将不再需要麻烦。


2

欢迎使用预算编写代码!当管理人员推动开发工作过早,没有计划,偷工减料时,存在很大的差异。当我从大学毕业后的第一份编程工作时,我也有过类似的现实世界经历。没有文档!随着时间的推移,我学到了很多时间,编写和保持正式文档的最新状态只是浪费时间。对我来说幸运的是,这是一支很棒的团队。这是由一个知道自己在做什么的人领导的,其他团队成员真的很在乎以正确的方式编写代码。从那时起,我的经历一直与您相似。许多可怕的代码,许多不良代码,无知的“开发者”。对于每一个好的开发者,似乎都有100个不好的开发者。

您注定不会永远讨厌工作。您只需要找到一家足够聪明的公司来认识长期利益并愿意预先投资即可。我已经设法证明以正确的方式而不是最快的方式做事是有益的,并且在我所工作的公司中也因此受到尊重和信任。随着时间的流逝,意大利面条代码是固定的或过时的,您的代码将接管。只是准备妥协。有时,最酷或最健壮的编程方法只是过分的杀伤力,可以快速而又肮脏的方式进行编程。


1

我曾在一家主要软件公司实习

并非所有公司都一样。在大多数公司中,您会发现糟糕的团队和糟糕的软件代码库。但是您也可以找到优秀的团队和出色的代码库。

我认为Solaris上的人员对大型公司中发现的那种代码库做了很好而诚实的描述:http : //hub.opensolaris.org/bin/view/Community+Group+on/dev_solaris

到目前为止,我每天都讨厌工作,而我非常想知道这是否是我一生中所能拥有的。

不,我已经编码超过15年了,但我仍然喜欢它。

这并不是说一切都完美。我看过一些可怕的代码库,也有一些很棒的代码库。诀窍是为您找到合适的地方。

大型公司与小型公司大不相同。在同一公司的团队A中,有时与团队B截然不同。找到一个对您而言具有适当平衡的人(例如,具有挑战性的项目,您喜欢的文化,高薪等)

祝好运!


不仅所有公司都不相同,在大型公司中,并非所有集团都相同。有时,不同的小组受完全不同的审核过程约束。请注意,可以直截了当地询问面试经理(如果可以访问它们,则可以是面试程序员)是什么样的最佳做法。(请注意,如果老板和他们在一起,程序员的回答将毫无用处。)
Novak 2012年

1

我见过和你相似的东西。对于这种情况,我有两种经验。

  1. 当开发过于项目驱动时。唯一重要的是按时交付功能,然后注销。下一个更改将由其他人,其他具有新预算的团队/项目经理完成。
  2. 当只有几个人长时间维护一个软件时,开发人员往往会变得懒惰,因为他们仍然知道他们的软件。学术原则距离很远。

很伤心,但是在某些地方就是这样。

看看您是否可以做一些较小的改进,习惯或改用另一家公司,并要求在面试时筛选一些代码:-)


1

这将是一个简短的答案。

教育对于使您感到合格和理想化非常有用。这是一件好事,您应该尝试坚持理想主义。

如果您完全有目标,并且将来可以回顾自己的工作,那将不会是非常令人满意的体验。除非您对自己撒谎或没有学到任何东西,否则您将看到许多方法来改善自己的工作。

总的来说,全世界都在您身边这样做。因此,当您回顾过去的工作时,除了例外情况,它会显示为次品并且需要即兴创作。如果您不喜欢这种方式,则意味着您做错了工作,或者报酬太高。

好消息是,您可以从别人的错误和与以往的比较中受益。如果所有应用程序都运行良好且易于维护,则不需要新开发人员。我认为,保留其他一些开发人员的经验是有益的学习经验,应该是所有蓝天开发人员的必修课。


1

您的消极经历是大型知名品牌公司的典型情况,与那些第一次有机会一起工作的人相比,许多开发人员在学习时要更加谨慎和恐惧。基本上,您拥有的管理层越多,倡导的平庸程度就越高。中层经理不会向高级经理报告代码质量。他们报告了在X时间内交付的功能,并在neato UI功能上进行了简报演示,他们希望这些功能足够长的时间才能使它们通过。如果一个月后一切都崩溃了,那通常是别人的问题,他们知道。

因此,是的,在这样的地方生活的开发人员往往不太在意。如果他们做到了,他们将无法在那里生存。我听说硅谷说过,如果您想变得懒惰,那就为其中一位知名人士工作。如果您想要激动人心的工作,请寻找一家还不是家喻户晓的较新的创业公司。我在芝加哥工作,可以在这里证明类似的现象。

作为一般规则(我敢肯定会有很多例外),对于那些规模较小,由仍继续编写代码的人管理或拥有的公司,您会发现对高质量代码的更高评价。报酬通常较少,但我认为这项工作往往会收获更多。

作为入门级开发人员,起初您不太可能控制自己的工作对象,但我会说,在自己的简历上拥有大名望长达一年或更长的时间肯定会吸引招聘人员和人力资源人员。另外,您可以学到很多,否则您将无法学习,否则会在头六个月左右为完全糟糕的人工作,这还可以帮助您更好地掌握哪些最佳实践实际上很重要,以及为什么以及哪些只是技术时尚。

当然,当使用更多主流的流行公司工具时,您趋向于发现中层人才水平将变得非常糟糕。如果您的主要技能是Java和C#的某种结合,请稍微扩展一下自己的视野。您可能会在中级写作Erlang或Python或:o JavaScript时找到一个更快乐的细分市场。

而且不要让任何人告诉你任何不同。在如何进行方面,您可能别无选择,但是废话代码很昂贵!


-2

您的问题集中在实习上。我从来没有编程的人,但是在广播电台实习,在这里并不适用。

您的问题还提到了实习期间的经历。经过27年的编写软件工作(从1985年6月中旬开始),您的实习经验和迄今收到的答案几乎可以概括我的经验。

我从来没有完全相信学校的时候,当我们的老师说比实际编写代码更多的思考。他们是对的。而且,如果您试图弄清楚其他人的代码,则没有注释会更糟,而注释则更糟。尝试维持一个没有注释,没有文档,没有正式构建以及没有源代码控制的本地市政税收系统。

只要您能在不直接违反标准订单的情况下做好,那就做好。永远记住,为您未要求许可的事情做而道歉要比不授予许可并违反直接命令要容易。

不要忘记您在学校所教的标准。它们并不是没有用的,但是这些标准很有可能是微积分极限中的渐近线。您总是可以尝试接近它们,但是您可能永远无法达到它们的价值。

祝好运。

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.