나쁜 코드를 작성해야합니다. 얼굴을 어떻게 구합니까? [닫은]


69

저는 주니어 개발자 일 뿐이지 만 제 직업은 정말 끔찍한 PHP 코드를 사용하도록 강요합니다. 나는 보통 버그를 고치고 새로운 기능을 추가하기 위해 코드베이스와 싸운다. 때때로 나는 더러운 해킹을 포함하지 않는 것보다 더 빨리 작동하는 것을 주문하라는 명령을 받았습니다.

이 제품은 이전에 오픈 소스였으며 앞으로 오픈 소스로 갈 수 있을지 걱정됩니다. 누군가 (특히 잠재적 인 고용주)가 내 변경 명 중 일부에서 내 이름을 찾을 수 있다면 부끄러 울 것입니다. 좋은 이름을 지키려면 어떻게해야합니까?

이것이 관련이 있는지 확실하지는 않지만 내 상사 나 동료 모두 코드가 잘못되었다고 인정하고 싶지는 않지만 추가 할 것이라고 확신합니다. 첫 직업.


21
나쁜 코드를 어떻게 작성해야합니까? 왜 일어 서서 나쁜 코드에 이름을 붙이지 말고 문제, 해결책, 시간, 노력 및 돈의 비용, 지금 문제를 상급자에게 고치는 이점을 설명 할 수 없습니까?
Thomas Owens

17
"빠르고 더러운 해킹 장려하기"? 격려? 어느 것이 더 나빠요. 당신의 자부심 (그리고 새로운 직업을 찾음) 또는이 직업을 고수합니다. 옳은 일을지지하는 것은 나쁘지 않을 수 있습니다. 무엇이 널 멈추게 해? 폭력의 위협? 약탈? 형사 소송? 진심으로. 좋은 코드 작성을 방해하는 요인은 무엇입니까? 제발 특정 . 그리고 정직합니다.
S.Lott

113
위안이라면 오늘 작성한 좋은 코드조차도 5 년 안에 나빠 보일 것입니다.
Kyralessa

7
face it PHP는 "빠르고 더러워" 권장 하지 않으며, 사실을 쉽게 알 수있게함으로써 PHP는 Perl을 제외하고 다른 언어보다 "qucik and dirty"에 능숙하다고 말할 것입니다. 경영진이 행동을 장려하는 경우 특히 중단하기가 어렵습니다. 작동하는 것처럼 보이는 엔드 코드에서, 관행에 관계없이 코드가 전혀없는 것보다 회사에 더 가치가 있습니다.

7
죄송하지만, 거기에 있는 코드를 작성 옳고 그름 방법. 올바른 방법은 표준 산업 관행을 사용합니다. 나쁜 길은 함께 똥을 치고 "작동"이라고 말합니다.
웨인 몰리나

답변:


132

로마는 하루 만에 지어지지 않았지만 좋은 '보이 스카우트'가 될 수 있습니다. 코드를 만질 때마다 이전보다 좋게 남겨 두십시오. 현명한 기능 이름, 우수한 코딩 표준을 사용하고 작업 할 때 적절한 설명을하는데 시간이 많이 걸리지 않습니다.

나는 그 위험이 전부라고 생각하고 있다고 생각한다. 우아한 코드를 작성하고 싶은 시간을 보낼 수 없다고해서 쓰레기를 완전히 포기하고 작성해야한다는 의미는 아닙니다.


2
+1. 빠른 수정을 위해 믿고있는 모든 것을 희생 할 필요는 없습니다.
tdammers

4
+1 : 전부 또는 전혀-매우 사실.
엄버 페룰

3
보이 스카우트 규칙은 잘못된 손의 보이 스카우트 규칙이 문제를 일으키는 원인이 될 수 있습니다. '). 다음은 내가 수행 하지 않은 다른 작업에서 만난 보이 스카우트 규칙 구현입니다 . '함수에 가입하고 가능한 한 적은 수를 갖도록하십시오' 빨리 만들기 '
keppla

40
Every time you touch the code, leave it better than it was before.
Qwerky

3
+1. 당신이 분명하게 개선을 많이했다면, 실제로 당신의 공헌을 보는 사람은 당신이 엉터리 프로그래머라고 생각하지 않을 것입니다. 프로젝트가 엉터리이기 때문에 엉터리라고 생각하는 잠재적 고용주는 당신이 일하고 싶은 사람들이 아닙니다.
Matthew 읽기

59

주석 *에서 S.Lott에 동의하십시오 (한 번만). 잘못된 코드를 작성하도록 강요하는 사람은 없습니다. 문제는 주니어 개발자입니다. 모범 사례, "아름다운 코드"에서 잃어 버리는 경우가 많으며, "당신이 부르고 싶은 것은 무엇이든 ... 그들은 많은 일을하지 않습니다." 또는 그들은 그것을 끝내지 만 많은 시간을 낭비합니다. 그들에게 나쁜 코드 (또한 작동하는 코드)를 작성하라고 말함으로써 "그것을 통해"얻는 것보다 무언가를 전달하게합니다. 시간이 지남에 따라 (이제 더 이상 :) 주니어 개발자는 신속하고 더러운 솔루션을 신속하게 제시하지만 나머지 시간을 개선하는 데 소비합니다. 시간이 지남에 따라 더 많은 것을 배우고 어느 시점에서 실제로는 좋은 코드 인 빠르고 더티 솔루션을 제공하기 시작합니다.

그러나 처음부터 완벽한 코드를 작성하려고 시도하면 많은 시간을 보냈으며 거의 ​​아무것도하지 않았을 것입니다.

따라서 ... 나쁜 코드를 작성하고, 많은 코드를 ... 거의 작동하지 않는 코드를 작성한 다음 ITERATE. 모든 반복이 조금 더 좋습니다!

처음으로 완벽한 솔루션을 작성한 사람은 없습니다.

* 이것은 짧았을 때 주석이되었을 것입니다.


1
+1이 답변에 강력하게 동의합니다. 나는 당신을 두 번 찬성했습니다.
Vitor Py

3
동의한다. 이것은 "분석 마비"를 통해 자르는 훌륭한 방법으로, 문제에 대한 "완벽한"솔루션에 도달하려고 할 때 유지 될 수 있습니다. StackOverflow 와 비슷한 것을 썼습니다 .
Kyralessa

4
+1. 나는 이미 프로그래머들에게서 이것을 읽었지만 (소스를 모른다) : 주어진 시간 내에 도자기를 만드는 두 그룹이 임무를 맡았다. 하나는 가능한 최고의 품질의 항목을 만들고 다른 하나는 가능한 많은 항목을 만드는 것입니다. 결국, 후자는 그룹이 더 나은 품질의 아이템을 제공했다. 왜냐하면 반복은 숙달의 길이 기 때문이다. 묵상만으로도 아무데도 갈 수 없습니다. 결국, 우리 모두는 행함으로써 배우고, 잘못한 것에 대한 두려움은 우리를 시도, 실패, 그러나 실수로부터 확실히 배우는 데 방해가됩니다.
back2dos

1
결과적으로 저장소를 사용하십시오! 개인 컴퓨터 일지라도 자신의 컴퓨터에 설정 한 것입니다. 그것들을 사용하기 시작하면, 많은 변경을하고, 작동하지 않는 것을 발견하고, 롤백하는 것이 얼마나 자유로울 수 있는지 알게됩니다. 나의 개인적인 취향은 화석이다
Spencer Rathbun

"그래서 ... 나쁜 코드를 작성하고, 그 중 ... 거의 작동하지 않는 코드를 작성하고, ITERATE를 수행하십시오. 모든 반복이 조금 더 좋습니다!" 새로운 프로젝트가 계속 진행되기 때문에 결코 반복하지 않으면 어떻게 될까요? 그리고 알파가 프로젝트가 죽을 때까지 밀리는 경향이 있음을 깨닫기 시작합니다. 처음에는 뻔뻔스러운 코드와 업데이트 부족으로 인해 속도가 빨라집니다. 많은 후배들에게 "아름다운 코드"를 작성해야한다고 생각하는 것은 이런 종류의 상황이라고 생각합니다.
Serhiy

40

코드 주석은 당신의 친구입니다.

압력 때문에 값싼 해킹을 써야한다고 생각할 때마다 "이 코드는 시간 제약 때문에 X를 수행합니다. 이상적으로 Y를 대신 사용합니다.-Ashamed One, 2011 년 7 월 5 일"

그런 다음 잠재적 고용주가 그것을 본다면, 당신이 좋은 코드를 작성하는 것을 선호한다는 것을 알게 될 것입니다. 그러나 코딩 스타일을 비즈니스 요구에 맞게 기꺼이 조정할 것입니다. 대부분의 고용주는 두 가지를 모두 좋은 것으로 간주합니다.


4
바로 그거죠. 댓글과 커밋 메시지도. 나는 그것을 한 적이 없지만 일부 vc에서 주석이 달린 변경 세트 이외의 것을 기반으로 개발자를 평가하는 것은 흥미로울 것입니다.
timdev

글쎄, 당신은, "완료", "blahblahblah": 커밋 코멘트를 "고정"하는 사람에 대해 뭔가를 말할 수
gbjbaanb

+1이 작업을 여러 번 수행했으며 동료 개발자의 경우에는 작동합니다.
Jacek Prucia

7
나는 일반적으로 그들을 뛰어 넘을 때마다 그런 의견을 삭제합니다. TODO 또는 FUTURE-ENHANCEMENT로 표시된 주석은 계속 유지해야하지만 사과는 쓰레기 일뿐입니다.
Kristopher Johnson

1
왜 최적이 아닌 솔루션이 구현되었는지 (그리고 그 솔루션이 무엇인지) 설명을 포함하는 데 동의합니다. 그러나 나는 그것이 부끄러워하거나 사과해야 할 것이 아니라고 생각합니다. 그것은 단지 그 코드에서 작업 할 때해야 할 중요한 일이 있었고 주어진 구현이 충분하다는 것을 의미합니다.
저스틴 옴

10

그들이 당신을 강요하는 방법에 달려 있습니다.

내 경험에는 두 가지 가능성이 있습니다.

빡빡한 일정, 레거시 코드 등으로 인해 압박감을 느낍니다.

이 경우 대부분의 다른 답변에서 이미 말했듯이 '차가움을 최적화'하는 것은 귀하의 책임입니다. 당신은 MVC의 코드베이스를 다시 작성하는 시간이 없을 수 있지만, 첫 단계로, 예를 들어, 당신이 손으로 당신의 SQL 접착제 도포 중지하고 대신 좋은을 기록 할 수 있습니다 execute_sql($query, $params), 그와 같은 추상화을위한 토대를 낳는 fetch_customer($filter_params)등, 기억을, 모든 최고의 실제로는 상사가 제품을 더 빨리 얻는 관행이 있으므로 미래와 현재에 투자하는 데 시간이 얼마나 걸리는지에 대한 갈등은 없습니다.

올바른 컨텍스트를 설정하면 ( '6 개월 이내에 추가 시간을 얻지 않고 모 놀리 식 코드를 MVC로 리팩토링했습니다') 코드에 이름을 남기고 치료사처럼 자랑스러워해야 뇌졸중 피해자에게 한 마디 만 다시 말해

부적절하다고 생각되는 방식으로 구현하도록 명시 적으로 명령

뷰를 모델과 분리하려는 시도는 검토가 살아남지 못합니다. '너무 복잡해서 왜 일반 SQL 쿼리를 수행하지 않습니까?' 귀하는 execute_sql'분야와 코더 것을 필요로하지 않는다'때문에 통조림됩니다.

이 사건은 안 좋아 필자의 경험으로는 보통 소규모 경영진과 팀 리더들이 성공을위한 것이 아니라 정치적 이유로 승진했습니다. 실제 문제는 제어 할 수없는 무언가 (코드)를 관리해야한다는 것입니다 (그 방법으로 수행해야 함). 가장 좋은 해결책은 근본 원인을 해결하는 것입니다 (즉, 당신은 그런 사람으로 취급됩니다). 두 번째로 좋은 (그리고 내 경험에 따르면, 일반적인) 해결책은 종료하는 것입니다.

단점은이 시나리오에서 팀 리더가 모든 성공에 대한 기여를하기 때문에 어쨌든 귀하의 이름이 게시되지 않을 것이라는 점입니다.


8

나는 당신의 상사가 당신에게 빠른 것을 제공하라고 요구하지만, 당신이 고의적으로 나쁜 것을 만들기 위해 추가적인 노력을 기울이지 않을 것이라고 확신합니다. 즉, 실제로 나쁜 코드와 약간 덜 나쁜 코드 중 하나를 선택할 때마다 두 옵션 모두 구현하는 데 시간이 오래 걸리면 약간 덜 나쁜 옵션을 선택합니다. 이것이 단기적인 해결책이며 전혀 노력할 필요가 없습니다.

장기적으로 상사와 상담하십시오. 여기서 15 분을 투자하면 어떻게 시간을 절약 할 수 있는지 설명하십시오. 당신이 설득력있는 예를 가지고 있는지 확인하십시오- "내가 이것을했다면 여기에 내 희망은 내년에 다른 일을 할 수 있다는 것입니다." 그 중 문제를 발견하는 데 3 시간이 걸렸습니다. 만약 내가이 방법으로 그렇게했다면, 버그는 바로 명백했을 것입니다. " 여기서 경고 : 우아하고 유지 보수가 쉬운 코드는 훨씬 더 좋고 효율적이지만 느낌이 들지 않습니다. 조잡한 퀵 픽스가 완벽하게 정당화되는 상황이 있습니다. 때로는 일회용 코드를 작성하거나 때로는 오래된 쓰레기를 살아있는 상태로 유지하고 있습니다. 때로는 적절한 솔루션의 이점이

다른 모든 방법이 실패하면 다른 직업을 찾으십시오.


3

아무도 당신이 나쁜 코드를 작성하도록 강요하지 않습니다. 이 상황을 돌이켜 긍정적으로 만들 수 있습니다. 정책 및 절차에 대한 개척자 변경. 그리고 항상 "예"남자 / 여자가 될 수는 없습니다. 그들이 하루가 끝나기 전에 기능 x 가 필요하다고 말한다면 , 그것이 가능하지 않다고 말하지만 실제로는 그렇지 않은 이유를 정당화하십시오. 문제가있는 경우 솔루션을 제공하십시오. 맹목적인 눈뿐만 아니라 더 악화되는 것도 아닙니다.

개발자 상점은 엄격한 기한을 가진 최초의 사람은 아니지만 여전히 잘 설계된 코드를 유지하려는 욕구를 가지고 있습니다.


4
-1 : 미국에서 상사가 "빠른 크 래피 코드 작성"이라고 말하고 거부하면 해고 할 수 있습니다. 합법적 인 일을하라는 직접적인 지시에 불복종하는 것은 비자발적 해지 사유입니다. 따라서 그것이 "강제"되지 않을 수도 있지만, 상사가 말하는 것을 수행하는 대안은 훨씬 나빠질 수 있습니다.
밥 머피

그것은 모두 당신의 접근 방식에 달려 있습니다. 이상적으로 당신은 당신의 전문 지식을 존중하고 판단력을 높이 평가할 우수한 인물을 갖게 될 것입니다. 타임 라인을 지시하는 사람들은 종종 개발자가 아니며, 가능한 것과 불가능한 것을 고려해야합니다. 물론 커버 아래에 "크 래피 (crappy)"코드를 작성할 수 있지만, 모든 사람이 행복 할 수 있도록 푸시 백으로 충분할 수 있습니다. 좋은 코드의 좋은 결과.

1
당신이 실제로 일하지 않는 이상적인 우수한 인물은 훌륭하지만, 월급에 서명하는 사람은 당신이 기쁘게해야합니다. 청구서 수집가가 업무 외 시간에 항상 전화를 걸면 정말 짜증납니다.
밥 머피

1
원시 이기심보다 더 많은 것이 있습니다. 저는 관리자이자 기업가였으며 고객이 지불하는 모든 것이 빠르고 더러워지면 돈을 잃는 좋은 일을하면 사람들이 해고 될 수 있습니다. 회사 전체를 한 번 해고해야했지만 다시는하고 싶지 않습니다. 도덕적 입장을 취하는 데 확실히 찬성하는 동안 ... 엉터리 코드를 작성하는 것은 일반적으로 도덕적 인 문제가 아니며, 어느 시점에서 개인적 선호와 직업이 있거나없는 사람들의 실제 문제 중에서 선택해야합니다.
밥 머피

1
나는 큰 시스템의 대규모 재 작성을 거의 옹호하지 않을 것이지만, 이것이 미래에 쓰는 코드가 끔찍해야한다는 것을 의미하지는 않습니다.
PeterAllenWebb

3

모든 회사는 광범위한 문서 및 단위 테스트를 통해 훌륭한 코드를 작성하고 합리적인 예산과 시간 내에 제품을 시장에 출시하는 것 사이에서 균형을 찾아야합니다.

세계에서 가장 좋은 코드는 릴리스되기 전에 사용되지 않더라도 중요하지 않습니다.

실용적이라는 것은 그 균형을 찾으려고 노력하는 것입니다. 기능을 신속하게 수정하는 것이 현재 상업적으로 필수적 일 수 있습니다.

이 균형을 맞추려면 많은 경험이 필요합니다 (대부분의 코더보다 더 많은 경험이 필요합니다). 어느 쪽이든 극단적으로 가기가 매우 쉽습니다. 중간 길을 찾는 것이 더 어렵습니다.

당신의 상사가 옳다는 말은 아닙니다. 코더로서 상업적으로 실행 가능하지 않은 아름다운 코드를 지속적으로 생성하려는 유혹이 있습니다. 이 유혹을 염두에두면 이러한 핵 중 일부가 그렇게 나쁘지 않다는 것을 깨닫는 데 도움이 될 수 있습니다.

충분한 시간이 지나면 대부분의 코드에는 특정 상황에 대한 해킹이 포함되어 일반 프레임 워크로 리팩토링하기에는 너무 많은 비용이 듭니다.


2

나는 당신이 지금하고있는 것처럼 계속 말해서는 안되며 아무것도 말하지 않고 해킹과 해킹 만하면됩니다.

일어 서서 구체적인 코드를 지적하고 그것에 대해 짜증나는 점을 알려줘야합니다. 구체적으로 작성하고 코드 측정 항목을 사용하여 클레임을 백업하십시오. 실제로 코드가 잘못되었을 때 코드가 잘못되었다고 주장하는 것보다 더 난처한 것은 없습니다.

PHP 코드 분석에 무료로 사용할 수있는 많은 도구가 있다고 확신합니다. http://en.wikipedia.org/wiki/Code_analysis

또한 물론 http://en.wikipedia.org/wiki/Code_smell

그것을 읽고, 응용 프로그램에서 찾을 수있는 것을 요약하고 물론 대안을 나열하십시오 . 다른 방법 (바람직하게는)을 수행하는 더 좋은 방법을 제시하지 않고 "일어나는 방법이 마음에 들지 않는다"고 외치는 것은 나쁜 습관입니다.

빠른 해킹에는 돈이 필요합니다. 그리고 그것을 완전히 부정적으로 보지 마십시오-당신은 지금이 직업에서 많은 것을 배울 수 있고, 다음에 경험 한 것들로부터 이익을 얻을 수 있습니다.

hth


0

무엇보다 먼저, 어떤 종류의 소스 제어를 사용합니까? 그렇지 않다면 거기서부터 시작하십시오. 먼저 도움이되며 나머지 팀에서 신속하게 채택 할 수 있습니다.

소스 제어가있는 경우 코드에 이름을 입력하지 말고 회사 이름 만 입력하면됩니다. 나쁜 코드에서는 파일의 맨 위에 주석에 개정 내역을 넣는 것이 일반적이며 소스 제어에 더 잘 위임됩니다.

이제 코드 품질과 관련하여 빅뱅 접근 방식으로 코드를 변경할 수 없습니다. 천천히 하나씩 다른 문제에 대한 새로운 접근 방식을 추가하십시오. 제대로하면 시간을 절약 할 수 있고 전반적인 품질을 향상시키는 데 사용할 수 있습니다.

내 예를 들기 위해 모든 HTML이 코드에 포함 된 Perl / CGI 응용 프로그램을 사용하여 프로젝트 중간에 도착했습니다. 전체 앱은 명확한 구조가없는 단일 파일에있었습니다. 버전이 없습니다. CVS 저장소 (당시 SVN을 사용할 수 없음)를 구성하고 고객을 위해 웹 인터페이스를 배치하는 것으로 시작했습니다. 처음에는 동료들의 커밋을 직접 처리하고있었습니다. 그런 다음 모든 방법을 다른 모듈 (파일)로 나눕니다. 그 시점에서 동료들은 CVS를 채택하기 시작했습니다. 그런 다음 코드에서 HTML을 옮겼습니다. 그런 다음 코드의 일부를 변경해야 할 때마다 일부를 리팩토링하는 데 약간의 시간이 걸렸습니다. 결국 개발 속도가 너무 높아져 고객이 매우 만족했습니다. 그들은 외관상의 변화를 요구할 것이며 우리 대신 "2 일이 걸릴 것입니다."

그러나이 방법은 전체 코드를 충분히 숙달 한 경우에만 작동합니다. 큰 그림을 이해하지 못하면 응용 프로그램의 일부를 이해할 수없는 상태로 유지하면 작업이 정말 어려워집니다.

마지막으로, 완전한 재 작성은 때때로 유일한 솔루션이지만 일반적으로 관리 비용을 정당화하기는 매우 어렵습니다.


0

당신은 주니어 개발자이기 때문에 이것은 실제로 좋은 것입니다. 코드가 엉망이되어 버리는 것은 완벽하게 '깨끗한'코드로 작업하는 것보다하지 말아야 할 일에 대해 훨씬 더 많은 것을 가르쳐 줄 것입니다. 상황을 활용하고 잘못된 코드를 리팩터링하고 천천히 다루기 쉬운 것으로 변환하는 방법을 배우십시오. 그리고 최대한 빨리해야한다고 불평하지 마십시오. 요점-마감일이 지남에 따라 코드를 리팩토링하고 정리하는 법을 배우십시오. 결국, 끝없는 시간이 있다면 누구나 완벽한 코드를 작성할 수 있습니다.

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