레거시 코드를 다루는 것이 프로그래머로 발전하는 데 도움이됩니까? [닫은]


18

나는 1 년 이상의 경험을 가진 Java 개발자이며, 저를 중학교 이상의 어딘가에 있지만 아직 중간 수준의 개발자는 아닙니다. 최근에 나는 4 개월 동안 기존 은행 응용 프로그램 코드를 연구하고 필요할 때 변경 사항을 소개하는 장기 프로젝트를 제안 받았습니다. 경험이 많지 않은 프로그래머로서 나는 개발 방법을 찾고 있으며 그러한 프로젝트가 무엇을 줄 수 있는지 궁금합니다.

작고 잘 작성되지 않은 큰 응용 프로그램을 다루는 것이 초보자에게 좋은 방법이라고 생각하십니까?



1
다른 사람들의 실수로부터 배우는 것이 가장 안전한 방법입니다.
Michael Borgwardt

최근 한 달 동안 다른 사람들의 코드를 연구했습니다. 훌륭한 학습 경험이지만 큰 시간을 보냈습니다. 진정제 차를 실험해야했습니다.
usr

좋은 Java가있을 수 있지만 JR을 찾기가 더 어렵습니다. 대부분의 다른 초기 언어 배경을 가진 개발자보다 개발자가 주로 광범위한 백엔드에 노출 된 일반 주의적 프론트 엔드 웹 개발자로서 경험을 바탕으로 상상합니다. 내가 생각하는 문제는 Java는 완벽하게 서비스 가능하지만 Java 문화는 가능한 한 안전하고 책임이없는 모든 것을 절대적으로 재생하는 것입니다.
Erik Reppen

답변:


34

기존 코드 문제 해결은 프로그래머로 개발할 수있는 좋은 방법입니다. 코드가 잘못되면 실수로 인한 영향을 배우고 디자인을 할 때 실수를 피할 수 있습니다. 코드가 양호하면 유지 관리 가능한 응용 프로그램을 만드는 방법에 대해 배울 것입니다.

또한 실제 비즈니스 응용 프로그램의 복잡성을 다루는 법을 배웁니다. 이것이 은행 부문에 있기 때문에, 당신은 결코 생각조차 할 수 없었던 연방 규제 및 내부 회계 통제와 같은 것들에 대해 배울 것입니다. 금융 세계에서 다른 것을 디자인하라는 요청을받을 때 알아야 할 좋은 점입니다. 그리고 금융 프로그래밍은 일하기에 유리한 분야 일 수 있으므로 은행 경험을 얻는 것이 매우 좋습니다.

15 년 전에 무언가를 사용하지 않기를 선호하는 언어로 작성했기 때문에 반드시 나쁘지는 않다는 것을 배울 수도 있습니다. 결국이 모든 것이 성공적으로 실행되었습니다.

대부분의 레거시 응용 프로그램과 마찬가지로 응용 프로그램에 단위 테스트가없는 경우 변경 사항이 다른 것으로 영향을 미치지 않는지 확인해야하는 경우 해당 테스트를 추가하는 방법과 해당 테스트를 추가하는 이유에 대한 관리 판매 방법을 배울 수 있습니다 좋은 아이디어.


2
실제로 코드를 연구하는 데 4 개월이 걸리는 경우, 4 개월 동안 많은 것을 배워서 배운 내용을 설명하는 주석을 추가하고 핵심 구성 요소가 제대로 작동하는지 입증하는 테스트를 작성해야합니다 (원하는대로).
로스 패터슨

1
@RossPatterson, 이것이 뱅킹이기 때문에, 그들이 실제로 제대로 작동하기를 바랍니다. 테스트가 없다면 어쨌든 변화를 일으킬 위험이 크다. 시스템을 쉽게 판매 할 수 있도록 시스템 테스트를 작성하는 데 도움이되는 뱅킹 및 단위 테스트 작성에 큰 도움이된다.
HLGEM

3
프로그래밍은 조각을 움직이는 방법을 알고 있습니다. 시스템을 이해하는 것은 게임 방법을 알고 있습니다. 기술 구축 관점에서 경험을 후회하지 않을 것입니다. 과부와 고아를 훔치는 회사에서 일하는 것은 양심이 용납 할 수없는 일입니다.
메러디스 가난한

8

초보자 에게는 훌륭한 연습이라고 생각합니다 . 다른 경험을 통해 배우는 것이 매우 효과적 일 수 있습니다.

실제 문제는 실수를 찾는 것이 아니라 다른 개발자의 머리를 잡고 why코드가 그렇게 작성 되었는지 알아내는 것입니다. 때때로 그들은 조잡했기 때문에, 때로는 대담한 이유가 있었기 때문입니다. 개발자는 최소한 당신만큼 훌륭하지만 더 많은 도메인 지식을 가지고 있다고 가정하십시오.


2
또한 코드 작성시 사용할 수 없었던 방법을 이해하는 데 도움이됩니다.
HLGEM

이러한 상황에서 코드 주석이나 프로젝트 문서를 찾는 것이 좋습니다. 그렇지 않으면 함수를 구현하는 해킹이나 이상한 방법이 여전히 미묘하게 남아 있습니다. 해당 개발자는 더 이상 회사에 없을 수도 있으므로 이에 대해 물어볼 방법이 없습니다.
Radu Murzea

6

이것은 경력의 어느 시점에서나 개발자에게 좋은 습관입니다. 기존 소프트웨어를 검토 및 분석하고이를 개선 할 수있는 방법을 찾으면 귀중한 개발자임을 입증 할 수 있습니다. 뿐만 아니라 당신은 배울 다른 설계 및 소프트웨어를 개발,하지만 길을 따라 당신은 무엇을 배울 것입니다 어떻게 하지 자체로 가치있는 지식이다, 할 수 있습니다.

도전을 원한다면이 프로젝트를 시작하여 더 나아지십시오.


2

그것은 당신에게 절대적으로 도움이 될 것이지만 조심해야합니다.

레거시 코드에서 학습해야합니다. 무엇이 좋은지 나쁜지 어떻게 알 수 있습니까? 다른 패턴 / 메소드의 장단점을 인식 할 수 있지만, 만약 당신이 주니어 개발자라면 막 시작했을 수도 있습니다.

그리고 첫 직장에서 너무 오래 머무르면 충분한 기술을 배우거나 구축하지 못하고 결국 막힐 수 있습니다.


2

레거시는 '잘 작성되지 않은'의견에 근거한 것 외에는 아무 의미가 없으며 레거시는 '나쁜'또는 최소한 '오래된'기술과 패턴을 의미한다고 가정하겠습니다. 레거시 코드가 양호하면 모든 코드를 학습하지 마십시오.

나는 당신의 경력을 바꾸고 현재 까지이 스레드에서 가치없는 싱크 구멍에 갇히게하는 종류의 직업과 프로젝트에 대해 충분한 경고가 있다고 생각하지 않습니다.

스포츠 유추 경고 : NFL의 라인 배 커가 최악의 기록 또는 최고를 가진 팀에서 플레이함으로써 더 많은 것을 배우고 더 가치가 있다고 생각하십니까? 나의 대답 : 그들은 최고의 팀에서 활약 한 것보다 더 가치가있을뿐만 아니라, 모범 사례와 지식을 습득하고 경력 결말 관행과 태도를 피하는 것을 피했습니다.

실제로 비즈니스에 효과적이며 많은 개발자 급여를 지불하는 끔찍한 안티 패턴 코드가 많이 있습니다. 나는 '올바른'방법으로 코드를 충분히 보지 못한 개발자는 안티 패턴 코드를 합법적 인 해결책으로 잘못 생각할 수 있다고 제안합니다. 비즈니스에서는 솔루션이 효과가 있다고 말할 수도 있지만 이력서에서 원하는 것은 아니며 다른 개발자에게 자랑하는 것이 아닙니다. 이는 개인적 성장 경로에 엔지니어 동료의 존중을 얻는 것과 회사의 수입을 일시적으로 늘리는 것만이 포함되는 경우에만 관련이 있습니다 (사운드가 나쁘지만 결국 엔 최고의 엔지니어링이 절대적으로 가장 많은 돈을 벌게됩니다) .

불행히도 기술 부채가 드러나기 전에 지나칠 수있는 많은 코드와 시간이 있습니다. 그리고 기술 부채는 보통 너무 늦었을 때 정확하게 인식됩니다. 이전에 기술 부채 나 반 패턴을 막으려 고했던 사람은 추가 비용이나 확장성에 대한 이해 부족으로 인해 소외 될 수있었습니다. 기술 부채를 즉시 폭로하는 것이 엔지니어로서 우리의 의무입니다. 숙련 된 엔지니어가없는 프로젝트는 특정 시점에서 벽돌 벽에 부딪 칠 위험이 있으며 실제로는 재능있는 개발자가있는 모든 프로젝트에도 영향을줍니다. 대부분의 비즈니스는 '일부 시점'을 나중에 수정하기에 충분한 시간으로 간주합니다. 이것은 신입 개발자를위한 직업 선택을 매우 복잡한 문제로 만듭니다. 또한 개발자와 비즈니스 간의 완전히 다른 목표와 사고 방식과 그 차이를 극복하는 것이 얼마나 복잡한지를 지적합니다.

엔지니어는 실제 과학 작업과 설계 고려 사항을 '포함'하는 것이 목표이며, 불필요한 비용과 시간을 '제외'하는 것이 비즈니스 목표입니다. 엔지니어는 최종 상태가 실제로 완료 될 때까지 얼마나 많은 노력과 시간이 필요한지 알지 못하기 때문에 소프트웨어 개발은 ​​애자일, 스크럼 및 칸반과 같은 주요 역할을하는 훌륭한 드라마처럼 보입니다.

좋은 코드가 '손상'되지 않을 때까지 잘못된 코드를 피하는 것이 좋습니다. 나는 선임 개발자가 복잡한 문제에 대한 간단한 해결책을 만든다는 말을 좋아합니다. 마찬가지로 중급 개발자는 간단하고 복잡한 문제에 대한 복잡한 솔루션을 만듭니다.

이해를 돕기 위해 다른 지점에서 좋은 코드와 나쁜 코드를 작업해야 할 수도 있습니다. 어느 쪽도 수행하지 않았다면 더 나은 시스템을 접할 때 그것을 배우고 모두 배울 준비를하십시오. 나는 이것이 아마도 대부분의 개발자들에게 더 일반적인 궤도라고 생각합니다.

나는 매우 복잡한 '비밀 소스'산을 등반하는 것처럼 느끼고 있기 때문에 올해 편견입니다. 내가 본 것 중 최악의 패턴을 해독 할 수있는 능력을 키울 것이지만 너무나 '맞춤형'과 '일회성'으로 인해 내 투쟁이 내 시장성 또는 미래에 사용할 수있는 기술을 향상시킬 것이라고는 믿지 않습니다.

제 정신을 유지하기 위해, 나는 꾸준한 속도로 따라 가면서 코스의 파대로 모든 도로 블록을 수용하고 있습니다. 이 레거시 홀에서 발굴하는 것을 포함하여 상사와 함께 매년 목표를 검토 한 결과, 그것이 희생적인 등반이 될 것이라고 생각합니다. 나는 나쁜 리뷰와 지각 된 느림으로 그 과정에서 살아남을 수있었습니다. 이것은 어떤 일을해야하는지 궁금해하는 사람들에게 현실적이고 예리한 경고입니다.

면책 조항 :이 게시물은 내 의견보다 훨씬 오래 살 것이므로 소금 한 덩어리로 가져 가십시오. 내일 나는 레거시 코드를 좋아할지도 모른다! (이봐 요)


1

이 맥락에서 "레거시"를 어떻게 정의 하느냐에 달려 있습니다. C와 C ++의 예제를 보여 드리겠습니다. 많은 C ++ 프로그래머들은 C ++ 애플리케이션에서 C 문자열을 사용하는 것은 나쁜 습관이라고 부르며, 다른 사람들은 믹싱을 요구하지 않는 반면, 다른 사람들은 C 코드의 비트를 오래 사용하기 때문에 아주 무의미하다고 주장합니다. 레거시 "코드 일부는 더 나아가서 C ++ X 이전 ( 'X'를 적절한 숫자로 대체) 표준 관용구, 즉 "레거시"스타일의 구문 인 스타일을 사용하지 않습니다.

C ++ 스트림 및 문자열과 몇 가지 STL 특성의 성능 문제를 제쳐두고, 사랑하는 전 처리기 지시문 안에 무엇이 있는지 살펴 보는 것이 #include <string.h>좋습니다. 당신이 구현의 경로를 따라에서 유닉스 / 리눅스 시스템에서 자신을 발견하는 경우 /usr/include/string.h(그리고, 예를 들어, libc의 구현 소스를 이용 gnu.org ) 읽 strcmp.c거나 strlen.c또는 strtok.c, 나는 당신에게거야 듣는 "얼마나 아름다운 세상을 내기 "단계적으로 진행 중입니다.

그러나이 산문에는 경고, 즉 더 이상 사용되지 않는 클래스와 메소드가 있습니다. Java에서는 최근 환경에서 여전히 많은 레거시 항목에 액세스 할 수 있지만 올바르게 기억하면 모든 것이 아닙니다. IB 분야에서는 내 경험에 비추어 볼 때 모든 소프트웨어가 훌륭한 프로그래머가 작성하지는 않습니다. 많은 졸업생들이 분석가 / 개발자 직을 시작하기 전에 실제 프로그래밍에 거의 노출되지 않았습니다. 그러나이 진술을 일반화하지 마십시오. 처리량이 많고 대기 시간이 짧은 환경의 핵심에서 Java와 C #을 사용하는 많은 사람들을 알고 있습니다. 나는 그들에 동의하지 않지만 글쎄, 이것은 다행히도 그들의 사업입니다. 그들이 실제 HFT를 겪었다면, 그들은 줄을 서서 뒤로 밀려날 것입니다. 그러나 다시 이 문장에서 쉽게 추론 할 수있는 것은 Java 코드가 고도로 최적화 가능하다는 가정 (그리고 대부분의 경우)입니다. 그리고 필요한 경우이를 수정하는 것뿐만 아니라 최적화하는 데 능숙하면 개발자로서 귀중한 사람이 될 것입니다. 당신이 얼마나 많이 기여했는지 깨닫는 것은 매우 만족 스럽습니다. 내가 갈거야.

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