유창한 코더가 좋은 관행을 무시한다면, 유창한 사람이 그를 상대하지 않습니까? [닫은]


16

나는 상당히 크고 버그가 많은 응용 프로그램을 작성 중입니다. 작성 방법으로 인해 (세부 사항을 아끼지 만 생각할 수있는 대부분의 영역에서 규칙을 위반합니다) 주요 리팩토링없이 개발하는 것이 불가능합니다.

앱의 중요한 부분은 인턴, n00bs 등이 작성했습니다. 그러나 마스터 개발자의 순위에 프로그래머가 있었고 모든 겸손으로 그가 남긴 코드는 아마도 다른 방법으로 여전히 모호합니다.

물론, 그의 코드는 대부분의 시간에 작업을 수행하는 경향이 있지만 일반적으로 암호화되어 바퀴를 재발 명합니다 (예 : 다소 일반적인 SQL db 백업을 수행하는 큰 사용자 정의 방법). 기본적으로 불필요 한 혼란과 많은 오버 엔지니어링

그리고 다른 기술을 수반하지 않는 한, 숙련 된 코더 (고의적으로 "개발자"라는 단어를 사용하지 않는 경우가 많음)는 실제로 다른 종류의 독이 될 수 있다고 생각했습니다.

그것이 사실이라고 가정하면, 내가 생각할 수있는 몇 가지 이유는 다음과 같습니다.

  • 쉽게 코딩하는 경우 라이브러리, 기존 기능 등을 사용하지 않고도 현장에서 자체 솔루션을 신속하게 스냅 할 수 있습니다.
  • 복잡한 프로그램의 정신적 이미지를 쉽게 유지하기에 충분한 경험이 있다면, 모듈, 레이어 등으로 나누려는 경향이 적습니다.

유창한 코더가 나쁜 개발자라면 유창함이 후자를 보상 할뿐만 아니라 실제로 더 많은 해를 입히는 것입니다.

당신은 어떻게 생각하십니까? (그렇다면 어느 정도) 사실입니까?


24
"나무를 자르려면 6 시간을 줘라. 그러면 도끼를 깎는 첫 4 시간을 보내겠다." --Abraham Lincoln "자신의 시간에 도끼를 깎으십시오." -대부분의 보스
JeffO

15
'유창성'을 읽을 때 제목으로 인해 여기에 약간의 혼란이 I.ThinkOf(this).KindOfThing()
생겼습니다

이 선임 개발자에게 그가 이런 일을 한 이유를 물었습니까? 이미 지적했듯이 응용 프로그램은 버그가 있습니다. 따라서 수석 개발자는 버그가있는 응용 프로그램으로 할 수있는 작업이 제한적일 수 있습니다. 그의 코드가 "대부분"작동하는 경우 버그가 포함되어 있으며 교체 및 / 또는 수정되어야합니다.
Ramhound

@Ramhound-아니, 내가 입사하기 전에 회사를 떠났을 때. 그는 내가 일을 시작하기 전에 그 일을 한 마지막 사람이었습니다. 많은 고객 불만으로 인해 앱을 수정하는 것이 최우선 과제이기 때문에 동료에게 서두르고 있다는 것을 알고 있습니다. 그러나 그는 시간 관리 측면에서 아주 좋은 일을하지 않았습니다. BTW는 WPF 및 Winforms 응용 프로그램을 지역화하기위한 자체 라이브러리를 만들었습니다.
Konrad Morawski

1
관련성이 높음 : this and this . 일부 (많은) 사람들이이 단계에 갇히게됩니다 ...
BlueRaja-Danny Pflughoeft

답변:


22

쉽게 코딩하는 경우 라이브러리, 기존 기능 등을 사용하지 않고도 현장에서 자체 솔루션을 신속하게 스냅 할 수 있습니다.

예. 나는 그 사람이었다. 그리고 나는 그것이 끔찍한 일이라는 것을 배웠습니다.

그것은 모두 당신을 위해 아주 좋습니다, 당신은 새로운 것을 배울 필요가 없습니다.

하지만 나머지 팀은 어떻습니까? 그들은 당신에게 매우 의존하게됩니다. "Clive 's Quicky ORM"에 대해 Google에서 작성한 객체 관계형 매퍼에 대한 도움말을 얻을 수 없습니다.

그리고 새로운 사람을 고용해야하는 날이오고 Clive의 Quicky ORM에 경험이있는 사람들을 찾을 수 없습니다.

그리고 마침내 당신이 떠날 날이 오며 누군가 ORM에 버그를 발견했습니다. 그리고 제품을 테스트하고 수정하는 사람들로 구성된 커뮤니티가 없기 때문에 존재합니다.

그렇습니다. Hibernate를 배우는 것은 가벼운 것을 쓰는 것보다 더 많은 시간이 걸렸을 것입니다. 그러나 그렇게하는 것의 이점은 무시하기에는 너무나 크다, IMHO.


1
나도 그 남자 였고 두 번째 문장에 동의하지 않습니다. 대부분의 문제를 해결할 수 있다고해서 솔루션이 강력하고 유지 관리 가능하고 유연하며 확장 가능하거나 초기 구현이 신속하게 개발되었다는 의미는 아닙니다. 언어 / 라이브러리 참조 매뉴얼 외부에서 배우는 최고의 아이디어는 "왜 그렇게 생각하지 않았습니까?"입니다. 등을 간단하고도 유연하고 확장 가능한, 최악의 것들 중 하나 - 나는 실현 했다 나는 ... 그것을 필요로 할 때 그래서, 생각 이전에 노출, 아직 실용화와 무의미 학술 부조리로 기각
Steve314

6
일부 조직에서는 타사 라이브러리 사용 승인을받는 데 6 개월 이상 걸릴 수 있습니다. 어떤 경우에는 6 개월 동안 기다렸다가 결국 거부 될 수 있습니다. 나는 이미 짧은 타임 라인에있을 때 관료주의를 다루는 시간을 낭비하고 싶지 않기 때문에 일회성 ORM을 구축했습니다.
Toby

2
@ 토비 : 페어 포인트. 그러나 이러한 회사는 일반적으로 비용을 절감 할 수 없습니다.
pdr

미 공군은 말할 것도없이 @Toby가 언급 한 회사와 동일합니다. 우리는 Ruby on Rails를 푸시하려고했지만 마음에 들지 않았습니다.
Travis Pessetto 16:14에

바퀴를 개혁하는 것은 할 수있는 올바른 일이 몇 가지 경우가 있습니다 @Toby, 열쇠는 당신이 왜 당신이 이해하는 것입니다
JK합니다.

14

• 쉽게 코딩하는 경우 라이브러리, 기존 기능 등을 사용하지 않고도 현장에서 자체 솔루션을 신속하게 파악할 수 있습니다.

언어에는 능숙하지만 도구에는 익숙하지 않습니다. 그것은 실제로 강력한 코더가 아닙니다. 그것은 단지 한 기술을 연마하고 (언어 지식) 다른 사람이 녹슨 것을 얻을 수있게합니다 (도서관 지식). 다른 방법은 나쁘지만 발견하기 더 쉽습니다.

• 복잡한 프로그램의 정신적 이미지를 쉽게 유지할 수있는 경험이 있다면, 모듈, 레이어 등으로 나누려는 경향이 적습니다.

그것은 단지 기술로 위장한 게으름입니다. 적극적으로 작업중인 내용을 머리에 담기 위해 많은 노력을 기울이지 않습니다. 적절한 이음새를 찾고 코드를 분할하는 데는 기술이 필요합니다. 모든 것을 한곳에 두는 것이 더 빠르거나 낫다고 말하는 코더는 종종 어떤 항목을 분리할지 알 수 없습니다.


1
네 확실합니다. 그리고 나는 그들을 위해 청소하기 위해 오는 몇 년 동안 좋은 삶을 얻지 못했다면 이런 종류의 사람들에 더 반대 할 것이라고 생각합니다 ... ;-)
Mike Woodhouse

4

"키보드를 클릭하지 않으면 작동하지 않습니다"환경에서 작업하고 있기 때문에 이것이 아닌지 확인하십시오. 우리는 모두 코드를 되돌아보고 우리가 무엇을 생각하고 있었는지 궁금합니다. 또한이 상점은 코드를 리팩토링하는 실습입니까? 그가받지 못한 사치 였을 수도 있습니다.

그러나 우리는 첫 번째 아이디어 (당신이 앉아서 망치는 아이디어)에서 벗어나 계획, 연구, 사고를 조금 더해야합니다. 각 작은 문제를 해결하려는 유혹은 유혹적이며 전체 프로젝트는이 관행으로 어지럽 힙니다. 아무도 "파산하지 않은"문제를 해결하기 위해 사람들에게 비용을 지불하고 싶지 않은 이유는 무엇입니까?

편집 : 답변을 알고있는 사람들을 처벌하지 않도록하십시오. 유창하고 속도가 좋은 코드를 작성하는 사람들이 있습니다. 열쇠는 이런 식으로 모든 문제에 접근하는 것이 아닙니다.


내 생각이야 회사의 주요 목표가 가능한 한 빨리 제공하는 것이라면 사람들은 종종 늦은 시간에 일을하고 압박없이 일할 수 있다면하지 않는 일을합니다. 입력하는 동안 생각할 코드를 많이 입력하면 더 "생산적"이고 유용합니다. 문제의 문제에 대해 생각하거나 동료들과 대화하기를 기대하는 것 ... 이런 종류의 물건은 프로젝트를 지연시키는 것처럼 쉽게 느끼게합니다. 당신은 그때 코딩을 할 수 있습니다. ;-).
deadsven

나는 운이 좋았다. 이사 후 집에서 일할 수있었습니다. 모두가 그것이 끝났는지 알고 싶어하고 내가 일하고 있지 않습니다. 나는 답을 아는 것에 대해 형벌을받지 않을 것입니다.
JeffO

3

100 %

이것을 보는 냉소적 인 방법은 이러한 종류의 코더가 실제로 대부분의 개발자를 작업 상태로 유지하면서 안정적이고 유연하며 안전한 절반으로 가지 않고도 수천 시간의 개발자 시간을들이 킬 수있는 근본적인 버그를 수정하는 것입니다 , 모듈 식 또는 [좋아하는 소프트웨어 속성] 시스템. 이 시스템은 많은 특유의 특성을 가지고 있기 때문에 이미 존재하는 기능의 95 %와 그 뒤에 역동적 인 커뮤니티가 있어도 다른 것으로의 마이그레이션에 대한 생각은 터무니없고 근거가있는 것으로 간주됩니다.

요컨대, 유창한 코더는 많은 경쟁자보다 더 많은 피해를 줄 수 있지만 가격은 일반적으로 수년에 걸쳐 지불됩니다. 그리고 그들은 보통 단순히 다른 사람이 정의한대로 일을하고있었습니다.

개발자인지 코더인지 어떻게 알 수 있습니까? 불가능하다고 생각하지만 품질낮추지 않고 코드를 간단 하게 만드는 방법을 찾을 때마다 깨달음을 향한 또 다른 단계를 밟았습니다.


1

설명하신 문제는 기본적으로 NIH ( "여기서는 발명되지 않았습니다")였습니다. 다른 증상이 있습니까?

때때로 NIH, 특히 한 두 사람에게 격리 된 경우 그룹 토론에서 다루어 질 수 있습니다 ( "Joe는 표준 라이브러리를 사용하여 SQL 백업을 수행 한 경험이 있습니다"). 이것은 사람에게 직접 가서 "이봐! 표준 라이브러리를 사용하라."라고 말하는 것보다 덜 대립적 일 수있다. :)


1

귀하의 상황에 처해 있고 유사한 상황을 초래 한 것은 귀하의 좌절을 이해하지만 귀하의 질문에 대한 대답은 평평한 "아니오"라고 생각합니다. Fluency는 프로그래머가 유지 관리 가능한 코드를 생성한다고 보장하지 않습니다. 종종 조직은 예산과 시간 제약으로 인해 프로그래머가 잘못 설계되고 구현 된 소프트웨어를 제공하도록 강요합니다. 유창한 프로그래머가 고객이 관심을 갖는 것을 제공하기 위해 프로그래머 만 관심을 갖고있을 가능성이 있습니다. 분명히 이것은 실제로는 좋지 않지만 슬프게도 모든 프로그래머가 경력의 어느 시점에서 처리해야하는 현실입니다. 유창한 프로그래머가 게 으르거나 만족 스러울 수도 있습니다. 완벽한 영어를 구사할 수 있지만 속어를 사용하는 것이 더 쉽고 재미 있습니다.

다른 사람의 코드를 사용하거나 자신의 주장을 굴리는 것에 관해서는, 그것이 가장 잘하는 일에 달려 있다고 생각합니다. "최고"가 2 주 안에 6 주 프로젝트를 제공하는 경우 "최고"는 스타일 및 유지 관리 성과 같은 것을 고려하지 않는 경우가 있습니다. 이것이 우리가 리팩토링하고 개선하는 이유입니다. 또한 개발자는 타사 코드와 관련하여 제공되는 내용을 알고 있어야하며 코드를 사용하는 방법을 알고 코드가 작동하고 제대로 지원 / 유지 될 것임을 신뢰해야합니다. 이러한 것들을 사용하는 대중적인 개발 패러다임을위한 수천 개의 선택적 프레임 워크, 라이브러리 및 API가 있다고 가정하면, 사용자 자신을 굴리는 것보다 더 많은 시간, 에너지 및 스트레스를 줄 수 있습니다. 또한 타사 코드가 내가해야 할 일을 정확하게 수행하지 않는 경우를 찾습니다.


0

나는 그 보트 (유창하게 유창하게 작성된 코드)에 있고 잠시 유창한 유형이었습니다.

"빠르고 더러운"솔루션의 가장 큰 장애물은 나중에 더 많은 솔루션을 추가해야 할 때입니다. 더 많은 기능이 필요할 때 구조 없이는 할 수있는 일이 너무 많습니다. 그 후에는 깨지고 재정렬하는 데 많은 비용이 듭니다 (아직 만족 스럽지만 실제로는 감사하지는 않습니다).

기본적으로, 당신은 열망하는 영업 사원이 판매 할 준비가 된 "가능한 솔루션"이 될 수있는 모든 해킹 으로부터 자신을 보호해야합니다 . 그것은 "준비되지 않았습니다!-그러나 그것은 효과가 있습니다." 수수께끼.


이것은 질문에 어떻게 대답합니까?
gnat

@gnat 질문은 "그것에 대해 어떻게 생각하십니까?"라는 질문에 대한 대답은 제가 생각한 것입니다. 나는 여전히 똑같은 견해를 가지고 있습니다 : 유창성 (따라서 빠른 솔루션, 해킹 등을 할 수 있음)은 장기적으로 해로운 코드로 이어질 수 있습니다. 언어에 유창 할뿐만 아니라 코드를 구성하는 방법을 알아야합니다.
MPelletier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.