은행 세계에서 코드 설계 노력 또는 게으름을 선택하십시오


23

저는 훌륭한 투자 은행에서 2 년간 일했습니다.

적절한 디자인 패턴, SOLID 원리, 데 미터 법칙을 존중하고 모든 종류의 중복 코드를 피하면서 가장 최적화 된 코드를 만들고자하는 기술 프로젝트를 만들었습니다.

프로덕션에서 제공 => 버그가 0이면 모든 것이 예상대로 발생했습니다.

그러나 대다수의 개발자가 모든 코드가 이해하기에 너무 복잡하다는 것을 정확하게하기 위해 나에게 왔습니다. 예를 들어, "만약 ifif와 instanceof를 만들고, 다형성을 잊어 버리면 긴급 생산 버그를 수정하는 것이 매우 쉬워집니다"라고 들었습니다. 나는 대답하는 것을 선호하지 않았다 ...

좋은 개발자를 이해하려는 노력을 거부하면서이 개발자들에 대해 전혀 궁금하지 않습니다. 예를 들어, 개발자의 90 %는 전략 패턴이 무엇인지 알지 못하고 절차 코드를 작성하고 결코 설계하지 않기 때문에 설계를하지 않습니다. ), 프로젝트 관리자는 내가 실제로 잘못된 방식으로 은행계에 너무 이상적이라고 말했습니다.

나에게 무엇을 조언 하시겠습니까? 정말 좋은 코드를 원하거나 대부분의 개발자에게 저를 적응시켜야한다면, 개발자의 모든 아름다움에 따라 나에게 맞는 디자인 코드로 흥미롭지 않습니다.

또는 반대로, 그들은 내 코드에 적응하기 위해 기본적인 OO 원칙과 모범 사례를 배워야합니까?


19
칠면조로 일할 때 독수리처럼 날아 가기가 어렵습니다 ;-)
JonnyBoats

8
조직을 변경하거나 조직을 변경하십시오.
-Martin

9
@ Mik378 통신 문제가있을 수 있습니다. 이 질문을 썼을 때 코드를 순식간에 문서화하면 (OO가 많을수록 사람들이이 ITradeSettlementVisitor인터페이스의 기능을 알 수 있도록 필요한 문서가 많을수록 ) 동료는 불만을 제기 할 수 있습니다. 그것은 당신이 좋아 하는 아름다운 코드를 작성 하는 것입니다. 다른 사람들이 액세스하고 사용할 수있는 방식으로 구조화하고 문서화하는 것은 또 다른 것입니다.
quant_dev

2
@ Quant_dev : Mik378에 대해 너무 많이 가정하고 있다고 생각합니다. 그의 질문은 나에게 잘못 표현되지 않은 것 같습니다. 그는 단지 원어민이 아닙니다. 나는 당신이하는 것처럼 OO의 장황하고 지나치게 엔지니어링 된 디자인을 싫어하지만 Mik378은 상황을 종소리로 울립니다. 부울 식과 같은 간단한 것들을 이해할 수없는 너무 많은 프로그래머와 함께 일했습니다. "만약 (exp)라면 True else False"라고 쓴다) ... 이런 종류의 사람들은 또한 디자인 패턴, 다형성에 의해 무서워하고, 따라서 오래된 절차 적 코드로 되돌아 갈 수 있습니다.
Andres F.

2
제목에 명시된대로 동료를 위해 코드를 간단하고 유지하기 쉽게 유지하는 것이 게으르다는 데 동의하지 않습니다.

답변:


20

저의 프로젝트 관리자들은 제가 실제로 잘못된 방식으로 은행계에 너무 이상적이라고 말했습니다.

GTFO!

떠날 시간과 동정. 왜 섹스를해야합니까? 무능한 직원과 장기적으로 비용이 많이 든다는 것을 알고 있습니다. 이것은 기술적 인 토론 게임이 아닙니다. 이것은 정치에 관한 것입니다. 다른 개발자 나 GTFO를 훈련 시키십시오! 정치적인 무게가 충분하지 않으면 GTFO! 모범 사례가있는 회사를 검색하십시오.

머무는 유일한 이유는 두통에 대한 적절한 보상입니다. 그래서 그들은 평균 또는 GTFO보다 더 나은 방법을 지불합니다! 소프트웨어 개발자로 성장할 수 있을지 의심됩니다. 우리 직업의 성장은 대부분 자신보다 나은 사람과 모범 사례를 장려하는 사람들과 함께 일함으로써 달성됩니다. 그리고 당신이 더 나은, 관심 회사에 대한 시장 가치가 높습니다.

그래, 나는 이것이 나의 일반적인 대답 중 하나가 아니라는 것을 알고 있지만 실제로이 회사 GTFO에서 정치 게임을 할 수 없다면.

나에게 무엇을 조언 하시겠습니까? 정말 좋은 코드를 원하거나 대부분의 개발자에게 저를 적응시켜야한다면, 개발자의 모든 아름다움에 따라 나에게 맞는 디자인 코드로 흥미롭지 않습니다.

차선책의 솔루션을 제공하려는 회사에서는 일하지 않을 것입니다. 소프트웨어에 내 이름을 새기고 싶습니다. 자랑스럽게 생각합니다. OO 패러다임을 기반으로 한 언어로 절차 적 응용 프로그램을 작성하지 않습니다. 나는 고품질의 소프트웨어를 믿고 회사가 그렇지 않다면 GTFO를 할 것이다! 당신이 "돈을 버는 것"을 충분히 얻었기를 바랍니다.


4
+1-GTFO가 무엇인지 나에게 일어난 적이 있다면 ... ( urbandictionary.com/define.php?term=gtfo )
Reddog

2
@Falcon 전적으로 귀하에게 동의하며 내 아이디어를 공유하는 사람들을 찾는 것은 매우 기쁩니다. 특히 당신이 말할 때 : "우리의 직업에서 성장은 대부분 당신보다 더 나은 사람과 모범 사례를 장려하는 사람들과 함께 일함으로써 달성됩니다." 가장 놀랍고도 실망스러운 점은 제가 젊은 개발자이고 실제로 나이가 많은 개발자로부터 배우지 않았다는 것입니다. 답변 주셔서 감사합니다 :)
Mik378

+1, 전적으로 동의합니다. 이 은행은 좋은 업무 환경처럼 보이지 않으며 나쁜 프로그래머, 나쁜 관리와 같은 문제는 극복 할 수없는 것처럼 보입니다. 실제로 GTFO!
Andres F.

2
@ Mik378 : 현재 고용주가 귀하의 능력을 완전히 사용할 수 없으므로 귀하가 가치있는 것을 지불 할 수 없습니다. 더 나은 조직은 더 많은 가치를 얻을 수 있으며 더 많은 비용을 지불 할 수 있습니다.
kevin cline

+1, 더 많은지지를 줄 수 있다면 나에게서 1000을 얻을 수 있습니다. 투자 은행에서 직접 일하면서 Mik378이 무엇을 다루고 있는지 정확히 알고 있습니다. 독성 행동, 극성 반응자 및 자아 마니아를위한 번식지입니다. 기술적 우수성을 홍보하기위한 아이디어 환경이 아닙니다.
황량한 행성

18

힘든 곳. 나는 당신이 두 가지 방법으로 동시에 갈 수 있다고 생각합니다.

  • 이것은 돈에 관한 것입니다. 실제로 모든 개발 작업으로 은행 환경을 강조하기 때문에 더 잘 작동합니다.). 당신의 스타일이 돈을 절약한다는 것을 보여주십시오. 설계로 인해 요구 사항을 실제로 쉽게 변경하는 방법에 대한 예를 찾으십시오. 조만간 깨지기 쉬운 다른 코드를 찾아보십시오 (여기서는 너무 공격적이지 않아야하지만 코드 스타일을 비교하는 것과 관련이 있습니다). 코드의 품질이 더 좋기 때문에 이러한 문제에주의하십시오.

  • 이것은 돈에 관한 것입니다. 코딩 스타일에 실제로 비용이 든다면 어떻게해야합니까? 다른 사람들이 적절한 디자인으로 저장되는 것보다 코드를 이해하는 데 더 많은 시간을 할애하는 것이 좋습니다. 기술적으로 올바른 일을하고 있지만 팀 노력에 긍정적으로 기여하지는 않을 것입니다. 또한 OOP 설계를 과도하게 수행 할 수 있습니다. 나는 "좋은 디자인은 아름답다"는 측면에서 당신과 함께 있습니다. 그러나 저는 여러분이 그들의 관점과 그들이 실제로 그들의 관점에서 어떻게 옳을 지 알고 자 노력하고 있습니다. 이전 지점과 병행하여이를 과장 한 지점을 찾으십시오. 그것은 당신에게 기동의 여지를 제공합니다 : 당신은 말할 수 있습니다. 여기저기서 좀 더 실용적이 될 수 있지만,이 코드가 더 나은 곳도 있습니다.


개발 된 답변에 감사드립니다. 나는 당신의 조언 : 언급 한
Mik378

간단한 FizzBuzz 문제를 추가하겠습니다. Java로 작성한 다음 TDD 방식으로 다시 수행하십시오. 갑자기 읽을 수 없게됩니다. ;-).
Martijn Verburg

@Martijn Verburg-TDD가 읽을 수없는 코드를 초래한다고 생각하십니까?
Don Roby

@Don 로비의 - 시간의 예에서, 객체 지향 언어로 FizzBuzz 같은 것을 다루는 특히
마티 Verburg

+1 @ Nicolas78 "또한 OOP 디자인을 과도하게 사용할 수 있습니다"-예를 들어 int와 같은 기본 데이터 유형을 Object로 만드는 것.
therobyouknow

16

그러나 대다수의 개발자가 모든 코드가 이해하기에는 너무 복잡하다는 사실을 정확하게 이해하기 위해 나에게 왔습니다.

그들이 옳을 수도있는 일이 당신에게 일어 났습니까?

나는 그가 우아하다고 묘사 한 코드를 작성하는 데 많은 노력을 기울인 누군가와 함께 일했습니다. 그는 다른 사람들의 작품을 우아하지 않은 것으로 돌리는 데 많은 시간을 보냈습니다. 코드를 유지 관리해야 할 때 그의 코드는 수정하려고 선택한 코드가 아닙니다. 너무 정확하고 정확하여 변경하면 위험이 따릅니다.

여기서 언급 한 흥미로운 단어는 "복잡한"입니다. 복잡한 것으로 설명 될 수있는 코드 는 특히 좋은 것으로 설명 될 수 없습니다.


1
+1000 동의 코드는 인간을위한 것입니다. 물론 다른 코더들이 대부분의 코더가 쓴 것을 읽을 수 있어야한다는 점에주의해야합니다 . 기본을 이해하지 못하는 사람은 개선해야합니다.
Iain 홀더

3
+1 @temptar "이것이 옳을 수도있는 일입니까?" "복잡한 것으로 설명 될 수있는 코드는 특히 좋은 것으로 설명 될 수 없습니다."
therobyouknow

2
-1 : 나는 그들이 옳다고 생각하지 않으며, 약간의 선임 일 뿐이며, 질문을 자세히 읽으면 그 점을 분명히 알 수 있습니다. OP의 핵심 문구는 "모든 종류의 중복 코드를 피하는 것"입니다. 그는 코드를 건조 시키려고 노력하고 있지만, 그렇게하려면 동료에게는 부족한 정교함이 필요합니다. 그는 동료들에게 "if ... instanceof 만 추가"하라는 제안을 인용했다. 그것은 또한 OP가 올바른 길을 가고 있으며 그의 동료들은 큰 WTF를 만들고 있다고 말합니다.
kevin cline

내가 너무 걱정하는 것은 "너무 복잡한"OOP가 좋은 일이 될 수 있지만 매우 빠르게 복잡해질 수 있다는 것입니다. 오리지널 포스터가 OOP 쿨 어시스트를 마신 것으로 생각되며 이것이 코딩하는 가장 좋은 방법은 아니며, 필요하지 않은 곳에서 많은 추가 복잡성을 초래할 수 있음을 이해하지 못했습니다.
Zachary K

이 동료와 같은 소리는 향후 유지 관리를위한 테스트가 없습니다. 프로젝트 관리자와 함께 할 수도 있습니다.

10

빅토리아 시대의 가구 제조업체 (적어도 오늘날 우리가 볼 일을하는 사람들)는 실제 장인이었고, 그들이 만든 것은 기능적이고 아름답고 잘 만들어졌으며 평생 동안 지속되도록 설계되었습니다. 그러나 지난 150 년 동안 세상은 바뀌 었습니다. 식당 테이블을 구입할 때 더 저렴한 대안이 상업적으로 실용적 일 때 그러한 장인 정신을 지불 할 사람이 많지 않습니다.

많은 프로그래머들이 불행히도 노예의 장인이되기를 원하며 이것이 항상 일어날 수는 없다고 말합니다. 선택, 적응 또는 탈퇴가 있습니다. 장인을 원하는 회사가 있지만 대부분 저렴하고 현재 작동하는 제품을 원하는 회사보다 훨씬 많습니다.

대부분의 상용 소프트웨어 개발에 적합하지 않다는 힌트는 "제작시 배달 => 제로 버그"입니다. Nasa조차도 우주 왕복선으로 달성하지 못했습니다.

세부 사항에주의를 기울여 초기 비용을 수용 할 수있는 유일한 장소는 항공 전자 / 항공 우주, 자동차, 군사 및 의료와 같은 수준 1의 생명에 중요한 시스템입니다.


1
+1 @mattnz "당신은 선택, 적응 또는 떠날 수 있습니다."
therobyouknow

2
나는 동의하지 않는다 – 이것은 은행 이다. 그들은 오류가 꽤 비싸 질 수 있기 때문에 소프트웨어에 버그가없는 것을 좋아하는 경향이 있습니다. 또한 솔루션은 수십 년 동안 실행될 수 있습니다.

2

문제는 당신이 잘못된 곳에서 일하고 있다는 것입니다. 학문적으로 기울어 진 프로그래머 인 것 같습니다. 당신은 당신이있는 환경에서 잘하지 않을 것이고 당신과 당신의 "너무 복잡한"코드를 제거하기위한 변명이 생길 것입니다. 정크 할당 및 / 또는 열악한 성능 검토가 제공 될 수도 있습니다.

학업 적 기대에 가치가있는 일할 곳을 찾는 것이 좋습니다. 저기 있어요 당신은 또한 실용적이고 학문적 인 사이에 울타리에있는 것을 찾을 수 있습니다. 이와 같은 직업은 다른 사람들이 자신의 문제를 해결하는 데 도움이 될 때 혼돈을 당신의 접근 방식으로 초대 할 수 있기 때문에 최선의 선택 일 수 있습니다.


+1 @jfrankcarr는 "정크 할당을받을 수있다"(건설적인 해고의 형태)에 대한 엄밀한 관찰
therobyouknow

2

고용주 변경과 같은 과감한 조치를 취하기 전에 경영진과 같은 프로그래머가 아닌 사람들에게 코딩 방식이 회사에 더 좋은 이유를 설명하고 시간과 돈을 절약하는 자신의 능력을 향상 시키려고 노력합니다. 또한 디자인 패턴을 위해서만 디자인 패턴을 적용하지 않았는지 확인하십시오. KISS 및 YAGNI의 규칙도 준수 했습니까? (오케이, 전략 패턴과 다형성은 로켓 과학이 아닙니다. 동료에게 그 접근 방식을 선택 했는지 설명하고 설명 할 시간을주십시오 .)


문제는 그들이 배우고 싶지 않고, 사고 방식을 바꾸고 싶지 않다는 것입니다. (저는 Java의 천재가 아니지만 대부분의 사람들이 훌륭한 것으로 생각하는 것을 이해하지 못하는 경우 알다시피, 나는 그것을 배우려고 노력할 것입니다 (책, 인터넷 기사, stackoverflow 등 ...) 요약하면, 그들은 패턴으로 두통을 느끼고 싶지 않습니다 (나는 패턴이라고 말하지만 프로그래밍의 "우수한"원리라고 말할 수 있습니다. 더 일반적으로) 더 많은 돈을 벌지 못합니다 ... 말하기는 어렵지만 사실입니다. 응용 프로그램 만 제대로 작동한다면 => 저는이 주제를 쓰지 않을 것입니다.
Mik378

@ Mik378 : 당신은 "다른 사람들이 잘못한 것"에 대해 많은 이야기를하고 있습니다. 당신 이 한 모든 것이 옳았 는가?
Doc Brown

@DocBrown 다형성은 간단한 인스턴스가 단일 방법으로 유지하는 파일에서 논리를 조각화한다는 뚜렷한 단점이 있습니다. 아마도 작업 단위가 너무 작습니까?

2

우리 회사에서는 Clean Code Developer를 기반으로 일련의 워크샵을 진행했습니다 . 목적은 개발자가 소프트웨어 설계 원칙 (예 : 언급 한), 프로그래밍 기술 등에 대해 배우고 프로젝트 및 그들 자신의 일.

실제 프로젝트의 실제 사례도 논의되었습니다. 참가자들의 의견은 AFAIK 매우 긍정적이었습니다. 그러나 실제 혜택을 측정하기는 어렵습니다.

이 워크숍에 참석 한 것은 회사가 후원하는 시간, 참가자의 여가 시간에 일부있었습니다. 학습에 신경 쓰지 않고 단순히 일을하고 집에 가고 싶어하는 동료들에게 다가 가지 않을 것입니다. 그러나 자신의 일에 관심이있는 다른 사람들에게는 이것이 흥미로울 수 있습니다.


나는이 아이디어를 많이 좋아한다.
temptar

2

나는 우선 당신의 길이 정말로 더 낫다는 것을 확인합니다. 객체 지향 코드는 매우 훌륭하지만 숨겨진 부작용으로 인한 악몽이 될 수 있으며 모든 작업에는 여러 가지 클래스가 필요할 수 있습니다.

InfoQ로 이동하여 Rich Hickey의 "Simple Made Easy" 에 대한 이야기를 시청하십시오.


1

끊임없는 노력없이 계속 일하고 싶다면 조금만 주어야합니다. 모든 절차적인 개발자 그룹은 다형성을 즉시 받아들이지 않을 것입니다. OO 방식으로 디자인 할 수는 없지만 코드에서 배울 수 있습니다. 그들은 일부 코드를 유지 관리하기가 쉽다는 것을 이해할 수도 있습니다.

참고로, 취향에 맞는 것이 중요하다고 생각되면 인터뷰 프로세스 중에 질문을하여 어떤 개발 프로세스 및 코딩 방법이 사용되는지 확인해야합니다.


0

비상 사태가 발생합니다. 당신은 완벽하지 않으며 그들의 손 어느 시점에서 코드를 망칠 것입니다. GP가 확인 하듯이 시간을 절대로 쉬지 않으면 건강에 좋지 않습니다. 그리고 코드가 잘못 생성 될 가능성이 높아집니다.

코드의 품질이 더 높을 수도 있지만 (증명되지 않은) 정책이 있습니다. (지독한 사실)

정책을 준수하라는 경고를 받았으며 해당 정책을 따르지 않을 책임이 있습니다. 긴급 상황에서. 은행 응용 프로그램에서. 만약 내 말은, 당신의 목표는 가난한 사람들을 종료하고 감옥에 나는 같은 결과로 얻을 수있는 많은 더 재미보다 의미있는 방법을 알아낼 수 있습니다.

하지만 동료 직원 들은 이전 동료 의 호기심부족하다는 사실 을 듣고 기뻐할 것 입니다.

(귀하의 회사는 아마도 OO 디자인에 대한 내부 정책이 없을 수도 있지만 코드를 수정하려고하는 서투른 코볼 훈련 엔지니어는 약간의 공기를 만들어 내고 최악의 경우 IMHO는 치명타 명중률이 40 %입니다.)


1
개인적으로, 나는 정말 훌륭한 개발자가 더러운 코드만큼 빠르게 훌륭한 코드를 작성한다고 생각합니다. 나는 긴급 상황에 대해 동의하지만 ... 4 개월 동안 프로젝트가 계획 될 때 개발자는 수행 할 작업, 응용 프로그램에 어떤 일이 이미 존재하는지, 어떻게 될지에 대한 전반적인 견해를 가지고 있지 않습니다. 그들을 도울 수 없었습니다. 개발자가 다음과 같이 말합니다. "이 코드는 끔찍하지만 코드를 깨뜨릴 수 있으므로 리팩터링하지 않을 것입니다." 그들은 엔지니어입니까? 엔지니어는 위험을 감수하고 좋은 단위 테스트를 확신해야합니다.
Mik378 23.56

1
우리가 여기서 은행을 말하지 않는 곳에 동의합니다. 나는 항상 그들이 다른 프로그래머와 다른 무리라고 느낍니다. 그들은 또한 보통 나이가 많습니다. (내 환경에서는 최소한 모든 곳 에서처럼 추론합니다) 그들의 수학은 간단하지만 정확성은 아닙니다.
ZJR

@ZJR 귀하는 OP에 대한 귀하의 예언이 OO 사용에 대한 감옥 시간을 보내고 있음을 알게되었습니다. 대부분의 은행 코드는 그러한 조사 대상이 아닙니다.
quant_dev

0

프로그래밍은 자신을 위해서가 아니라 목적을위한 수단으로 프로그래밍을 고려한다는 것을 기억하십시오. 사용하는 모든 제품과 서비스를 생각해보십시오. 아래 코드가 우아하게 작성되는지 고려하는 데 많은 시간을 소비하십니까? 아니면 그들이 일하는 것처럼 단순히 감사합니까? 열정을 갖고있는 산업이나 원인을 찾은 다음 해당 조직을 찾은 다음 프로그래밍뿐만 아니라 그 외에 다른 솔루션을 제공하십시오 . 여러 가지 방법으로 문제를 훌륭하게 해결할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.