在Bank world中选择代码设计工作或懒惰


23

我在一家出色的投资银行工作了两年。

我进行了一些技术项目,希望创建最优化的代码,同时尊重适应的良好设计模式,SOLID原则,demeter规律并避免各种重复的代码...

当生产交付=>零错误时,一切都按预期进行。

但是,大多数开发人员来找我是为了使我的所有代码过于复杂以至于无法理解阅读。我听了一个例子:“做一些if和instanceof,忘记多态性,这样很容易纠正紧急生产错误”。我不想回答……

知道这些开发人员一点也不好奇,拒绝努力理解一个好的设计(例如,90%的开发人员不知道什么是策略模式,并且编写过程代码,并且从不进行设计,因为他们说,他们很简单) ),我的项目经理告诉我,我对银行世界的看法确实是错误的,而且过于理想化。

你会建议我什么?我要重申的是,我是否真的希望真正好的代码,或者让我适应大多数开发人员,对于我来说,重复设计代码对我而言,这并不是真正有趣的设计代码,而是我们开发人员工作的全部美。

或者相反,他们是否应该学习基本的面向对象原则和最佳实践以适应我的代码?


19
当您使用火鸡时,很难像鹰一样
so翔

8
更改您的组织或更改您的组织。-马丁·福勒(Martin Fowler)
唐·罗比

9
@ Mik378您可能有通信问题。如果您在编写此问题时草率地编写代码(并且存在更多的“ OO残骸”,则需要更多的文档,以便人们知道此ITradeSettlementVisitor接口应该做什么),您的同伴是正确的抱怨。编写喜欢的漂亮代码是一回事,以使其可以被其他人访问和使用的方式构造和记录它是另一回事。
quant_dev

2
@quant_dev:我想您对Mik378的假设太多了。他的问题在我看来措辞不佳。他只是不讲母语。我不喜欢OO中的冗长和过度设计,但是Mik378所描述的情况也敲响了警钟:我与太多的程序员合作,他们无法理解布尔表达式等简单的东西(所以他们会写“ if(exp),然后为True,否则为False”)。。。这种人很可能也会被设计模式,多态性吓到,因此会恢复为普通的旧程序代码。
Andres F.

2
我非常不同意标题中所说的使您的同事保持简单和易于维护的代码是懒惰的。

Answers:


20

我的项目经理告诉我,对于世行世界,我的做法确实错误,过于理想化。

GTFO!

是时候离开并怜悯他们了。你为什么要他妈的?您知道,从长远来看,如果他们的员工素质不高,就会花钱。这不是技术讨论的游戏。这是关于政治的。让他们培训其他开发人员或GTFO!如果您没有足够的政治力量,那么GTFO!搜索具有更好实践的公司。

留下的唯一理由是可以为您的头痛提供足够的补偿。因此,他们最好支付高于平均水平或GTFO的费用!我怀疑您也可以在那里成长为软件开发人员。我们职业的发展主要是通过与比您更好并且鼓励最佳实践的人一起工作来实现的。而且您越好,对关心的公司的市场价值就越高。

是的,我知道这不是我惯常的回答,但实际上,如果您不能在这家公司GTFO中玩政治游戏。

你会建议我什么?我要重申的是,我是否真的希望真正好的代码,或者让我适应大多数开发人员,对于我来说,重复设计代码对我而言,这并不是真正有趣的设计代码,而是我们开发人员工作的全部美。

我不会为希望我提供次优解决方案的公司工作。我想将我的名字刻在软件中。我想为此感到骄傲。我不使用基于OO范式的语言编写程序应用程序。我相信高质量的软件,如果公司不这样做,我会GTFO!希望你有足够的“操钱”。


4
+1 -一旦它发生,我什么GTFO是...(urbandictionary.com/define.php?term=gtfo
Reddog

2
@Falcon我完全同意您的看法,很高兴发现有人分享我的想法;特别是当您说:“我们的职业成长主要是通过与比您更好并且鼓励最佳实践的人一起工作来实现的。” 最令人惊讶和真正令人沮丧的是,我是年轻的开发人员,而且我并没有真正从长者那里学到东西。感谢您的回答:)
Mik378 2011年

+1,我完全同意。这家银行似乎并不是一个良好的工作环境,而且它的问题似乎无法解决:不良的程序员,不良的管理。确实是GTFO!
Andres F.

2
@ Mik378:您当前的雇主无法充分利用您的能力,因此将无法向您支付您的身价。一个更好的组织将能够从您那里获得更多价值并为您支付更多。
凯文·克莱恩

+1,如果可以给您更多支持,您会从我这里得到1000。我自己在一家投资银行工作过,我完全知道Mik378正在处理什么。这是有毒行为,极性反应者和性欲减退的温床。不是促进技术卓越的理想环境。
荒凉星球

18

难点。我认为您可以同时采取两种方法,即站稳脚跟并显示出妥协的意愿:

  • 这是关于金钱。实际上是任何开发人员的工作,但是由于您强调银行环境,因此应该会更好;)。向他们展示您的风格可以省钱。找到一个示例,说明由于您的设计,如何真正轻松地进行需求更改。尝试查找其他代码(您必须确保此处不要过于激进,但是,嘿,这是关于比较代码样式的问题),这很容易很快就打破,并向他们展示您不必关心此类问题是因为您的代码从一开始就具有更好的质量。

  • 这是关于金钱。如果您的编码风格实际上要花钱怎么办?如果其他人花更多的时间来尝试理解您的代码,而不是通过适当的设计来保存代码,那么这样做可能会很好。您可能在技术上做对了事情,但仍然没有为团队工作做出积极的贡献。另外,有可能过度设计OOP。我与您一起站在“好的设计就是美丽”的一边,但是我想在这里让您知道他们的观点以及从他们的角度来看他们实际上可能是正确的。与上一点平行,尝试找到一个过分的位置。这给了您一些回旋的余地:您可以说,好吧,到处都是,我会更加务实,但是,在某些地方,此代码确实更好。


感谢您提出的答案。我注意到了您的建议:)
Mik378 2011年

我将为此添加简单的FizzBu​​zz问题。用Java编写它,然后以TDD方式再做一次,突然变得不可读了;-)。
Martijn Verburg

@Martijn Verburg-您认为TDD导致无法读取的代码吗?
唐·罗比

@Don Roby-有时是的,尤其是在以面向对象的语言处理FizzBu​​zz之类的东西时
Martijn Verburg

+1 @ Nicolas78“而且,有可能过度进行OOP设计”-例如,使原始数据类型成为诸如int之类的对象。
therobyouknow 2011年

16

但是,大多数开发人员来找我的原因是我的所有代码过于复杂,无法阅读理解

您是否想到他们可能是正确的?

我与某人合作,他花了很多精力编写他认为很优雅的代码。他花了很多时间指责别人的工作不够优雅。当需要维护代码时,他的代码不是我会选择修改的代码。如此精确和严格,以至于更改它充满了危险。

您在这里提到的一个有趣的词是“复杂”。可以被描述为复杂的代码很少被描述为特别好。


1
+1000同意。代码适用于人类。当然,需要注意的是其他编码人员应该能够阅读大多数编码人员编写的内容。任何不了解基本知识的人都应该得到改善。
伊恩·霍尔德

3
+1 @temptar表示“您是否确实想到他们可能是对的?” 和“可以被描述为复杂的代码也很少被描述为特别好。”
therobyouknow 2011年

2
-1:我认为他们是不对的,只是有点老套,我认为仔细阅读这个问题可以使之显而易见。OP中的关键短语是“避免使用各种重复的代码……”他试图使代码干燥,但是这样做需要他的同事显然缺乏技巧。他还引用了同事的建议“仅添加if ... instanceof”。这也告诉我,OP的方向正确,他的同事们正在建立一个大型的WTF。
凯文·克莱恩

我担心的是“过于复杂”的OOP可能是一件好事,但也会很快变得非常复杂。我怀疑原始海报可能已经喝了OOP的辅助工具,并且还不了解这并非总是最好的编码方式,并且他可能会在不需要的地方引入很多额外的复杂性。
Zachary K

听起来您的这位同事没有针对未来维护的测试。您可能需要与项目经理联系。

10

维多利亚时代的家具制造商(至少,到今天我们仍然会看到他们的作品)是真正的工匠,他们制作的是功能齐全,美观,精心设计和制造的,可以持续一生。然而,在过去的150年中,世界发生了变化。当人们在购买餐桌时更便宜的替代品在商业上更加实用时,准备这种工艺的人并不多。

不幸的是,许多程序员希望成为古老的工匠,而商务却表明这不可能一直存在。您可以选择,适应或离开。有一些公司想要手工业者,但数量却远远超过那些希望产品能正常工作,便宜而现在的公司。

对我来说,您不适合大多数商业软件开发的提示是“生产时交付=>零错误”。美国宇航局甚至都没有通过航天飞机实现这一目标。

唯一可以关注细节并因此可以接受初始成本的地方是1级生命关键系统-例如,航空电子/航空航天,汽车,军事和医疗。


1
+1 @mattnz表示“您可以选择,适应或离开。”
therobyouknow 2011年

2
我不同意-这是一家银行。他们倾向于喜欢软件中没有错误,因为错误可能会变得越来越昂贵。解决方案也可能运行数年或数十年。

2

问题是您在错误的地方工作。听起来您是一个非常有学问的程序员。在您所处的环境中,您的表现不会很好,很可能会发明一些借口摆脱您和您的“过于复杂”的代码。可能会给您分配垃圾任务和/或对它们进行不良的评估,直到您自己离开或他们有足够的后盖纸迹来解雇您为止。

我建议您找到一个值得您重视学术的工作场所。他们在那里。您还会发现一些介于实用和学术之间的栅栏。这样的工作可能是您最好的选择,因为这样可以在您帮助其他人控制工作时,让您的工作陷入混乱。


+1 @jfrankcarr精明地观察到“可以被赋予垃圾任务”(一种有建设性的解雇形式)
therobyouknow 2011年

2

在采取诸如更换雇主这样的严厉措施之前,我将尝试提高您自己的能力,向像您的主管这样的非程序员解释为什么您的编码方式对公司更好,并为他们节省时间和金钱。而且,请确保您不只是为了设计模式而应用设计模式-您确定自己也遵循了KISS和YAGNI的规则吗?(好吧,策略模式和多态性不是火箭科学,给您的同事一些时间来适应和解释他们为什么选择这种方法。)


我同意,问题是他们不想学习,不想改变他们的心态(我不是Java的天才,但是当我不了解大多数人认为对他们有帮助的事情时,知道,我将努力学习它(书籍,互联网文章,stackoverflow等...)总结起来,他们不想对模式感到头痛(我说模式,但我可以说“优秀”的编程原理更多)通常情况下)不给他们带来更多的钱......这很难说,但它是如此真实。如果仅应用运行良好=>我肯定不会写这个话题。
Mik378

@ Mik378:您在谈论“其他人做错了”的事情。确定所做的一切都是正确的吗?
布朗

@DocBrown多态性有一个明显的缺点,那就是将文件之间的逻辑碎片化,而简单的instanceof会将其保存在一个方法中。也许工作单位太小?

2

在我公司,我们举办了一系列基于Clean Code Developer的研讨会。目的是创建一个日常事务之外的论坛,以忙碌,最后期限和犯规妥协为代价,使开发人员可以了解软件设计原理(如您所述),编程技术等,并反思他们的项目和自己的工作。

还讨论了实际项目中的实际示例。与会者的反馈是AFAIK非常积极的。但是,很难衡量实际收益。

参加这些研讨会的部分时间是公司赞助的时间,部分时间是参与者自己的业余时间。您不会接触那些不关心学习,只想干自己的工作并回家的同事,但是对于其他对自己的工作有兴趣的人来说,这可能很有趣。


我非常喜欢这个主意。
temptar 2011年

2

我首先要检查您的方式是否真的更好。面向对象的代码可能非常好,但是它也可能是隐藏副作用的噩梦,每个动作都可能需要几个不同的类。

最好去InfoQ并观看Rich Hickey的“简单易用”演讲


1

如果您想在那儿不停地挣扎着继续工作,就必须付出一点。所有程序性的开发人员组都不会立即接受多态性。尽管他们可能无法以OO方式进行设计,但他们可以从您的代码中学习。他们可能会喜欢某些代码更易于维护。

附带说明,如果您认为匹配个人喜好很重要,则需要在面试过程中提出问题,以查看使用了哪种开发过程和编码方法。


0

紧急情况发生。您并不完美,他们的双手在某些时候破坏您的代码。除非您从不休假,否则您的健康将不被您的全科医生确认。并导致发出不良代码的机会更高。

您的代码质量可能更高(未经证实的事实),但是它们有政策。(当然是地狱)

系统已警告您遵守政策,并有可能不遵守这些政策。在紧急情况下。在银行应用程序中。我的意思是,如果您的目标是结束贫困,并入狱,我可以找出许多更有趣和更有意义的方法来获得相同的结果。

不过,您的室友会很高兴听到您对前同事缺乏好奇心的说法。

(再一次,您的公司可能没有针对OO设计的内部政策,但是笨拙,受过COBOL培训的工程师将试图修复您的代码,这是凭空产生的,恕我直言,在最坏的情况下,他会会有40%的机会获得致命一击)


1
就个人而言,我认为一个真正非常优秀的开发人员可以像处理那些脏代码一样快地编写出色的代码。在紧急情况方面,我同意您的看法……但是当一个项目计划在四个月内进行,并且开发人员甚至没有全局了解他们将要做什么,如何以及如果应用程序中已经存在某些东西时,帮助他们,我不能接受。当开发人员说:“我知道这段代码很可怕,但是我永远都不会重构它,因为我可能会破坏它”,这太荒谬了。他们是工程师吗?工程师应该冒险并进行一些真正好的单元测试,以确保一致性
Mik378 2011年

1
如果我们不在这里谈论银行,我会同意。我总是觉得他们和其他程序员不同。他们通常也比较大。(我推断,至少在我周围的环境中)它们的数学很简单,但准确性却不高。
ZJR

@ZJR在这里,OP的预言使使用OO入狱,这使您无所适从。大多数银行代码不受此类审查。
quant_dev

0

尝试记住,某些人认为编程是达到目的的一种手段,而不是出于本身的目的。想想您使用的所有产品和服务:您是否花费大量时间考虑下面的代码是否设计精巧?还是您只是欣赏它们的作用而已?找到一个您感兴趣的行业或事业,然后找到一个有兴趣的组织,然后为他们提供包括编程但不仅限于编程的解决方案。可以用不同的方式出色地解决问题。

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.