“휠을 재발 명하지 마십시오”는 인간의 기억의 한계를 무시합니까?


16

Haskell과 F #에서 일한 한 가지는 저보다 똑똑한 대학의 누군가가 이미 내가하고있는 것에 대한 추상화를 이미 발견했다는 것입니다. C # 및 객체 지향 프로그래밍과 마찬가지로 "it"에 대한 라이브러리가있을 수 있습니다.

프로그래밍에서 추상화를 재사용하는 데 중점을 두는 경우가 종종 있습니다.

최근에 여기에있는 코더 중 하나가 CSV 파일 용 (직렬화) 직렬화기를 작성했으며, .NET 표준이 제공되지 않으면 온라인에서 쉽게 찾을 수 있다고 생각할 수는 없습니다. 아피스.

내가 그를하지만, .NET I에서 일하는 여러 번 함께 내가 알고있는 것을 기반으로하는 솔루션을 패치 한 비난하지 않는다, 일부 메소드 호출 또는 개체 또는 뭔가 있다는 것을 실현하기 위해 종종 같은 라이브러리에, 무슨 짓을했는지 나는 원했고 나는 그것에 대해 몰랐다.

이것은 단지 경험이 부족하다는 표시입니까, 아니면 새로운 것을 쓰는 것과 오래된 것을 재사용하는 것 사이에 항상 절충의 요소가 있습니까? 내가 가장 싫어하는 것은 이미 알고 잊어 버린 솔루션을 실행할 때입니다. 요즘 한 사람이 대부분의 언어로 사전 패키지 된 대량의 코드를 소화 할 수없는 것처럼 느낍니다.

답변:


9

먼저, 라이브러리 또는 타사 솔루션이 이미 존재할 가능성이있는 일반 / 재사용 가능한 "구성 요소"를 식별하는 방법을 배워야합니다. 일단 그렇게하면, 훌륭한 개발자라도 같은 문제에 대해 수많은 시간을 보낸 수많은 개발자들의 경험이 이전보다 더 나은 솔루션을 만들었을 것입니다. 그렇다고 해서 바퀴를 다시 발명 해서는 안된다는 의미는 아니지만 그렇게하기로 선택했다면 그렇게하는 데 DAMN의 정당성이 더 좋습니다.

프로그래밍에서 추상화를 재사용하는 데 중점을 두는 경우가 종종 있습니다.

심지어 언급이의 가치가 있다면 그것은 스스로를 작성처럼 기존 라이브러리 / 해결책을 찾기 위해 시간을 당신에게 동일한 금액을 소요, 그 일을하는 것은 자신 또한 당신이 그것을 유지해야 의미 기억 을 영원히 . 당신은 바퀴를 재발 명할뿐만 아니라 바퀴를 계속 달리기 위해 전체 피트 승무원입니다. 물론 일부 라이브러리는 버그가 많거나 유지 관리 수준이 좋지 않지만 타사 솔루션을 선택할 때 명심해야합니다.


2
그러나 종종 라이브러리가 훌륭하고 적극적으로 유지 관리 되더라도 라이브러리에서 더 많은 유지 보수 시간을 소비 할 수 있습니다. 일반적으로 이것은 코드에 맞지 않는 방식으로 설계되었을 때 발생합니다.
Jason Baker

기존 라이브러리 / 솔루션 검색에 소요되는 시간 을 정당화 하기 위해 +1
rwong

피트 승무원을 지적 +1, 우리는 항상 그들을 잊어 것
Filip Dupanović

5

때때로 이것은 특정 언어 또는 일반적인 프로그래밍에 관계없이 경험의 표시입니다. 적합 분명하지 않은 경우 때때로, 그러나, 그것은 않는 자신의 코드 롤 단지 더 나은 정확히 당신이 원하는 것을 아무것도 더를 . 일반적으로 유용하지는 않지만 일반 라이브러리는 필요없는 요구 사항에 맞게 구축 할 수 있으며 경우에 따라이 수준의 일반성으로 인해 가치보다 문제가 발생할 수 있습니다.

예 : 소규모 1 인 프로젝트의 경우 "실제"로깅 라이브러리를 사용하지 않습니다. 나는 print문과 약간의 임시 구성을 사용합니다. print문장이 내 목적에 잘 작동 할 때 사용할 것보다 훨씬 많은 기능을 가진 로깅 라이브러리를 설정하고 구성하는 데 방해가되고 싶지 않습니다 . 또한 사용하려는 컴파일러 / 인터프리터 버전과 호환되지 않을 수있는 다른 종속성을 원하지 않습니다. 배포해야합니다.


1
... 또는 다른 방법. 때로는 매우 특별한 작업을 위해 조정되었으며 코드에서 필요한 작업을 수행하기에 충분히 유연하지 않습니다.
Jason Baker

이것이 제가 대답하려고하는 것입니다
Dominique McDonnell

4

프로그래밍 세계에 오신 것을 환영합니다. 이 문제는 당신과 당신의 미래 동료들 사이에 많은 의견 차이가있을 것입니다. 두 가지 옵션이 있습니다.

  1. 자신의 롤.
  2. 다른 사람의 솔루션 위에 무언가를 만드십시오.

두 솔루션이 모두 적절한 시점이 있다고 생각합니다. 예를 들어, 매우 지루한 작업으로 인해 대부분 피할 수 있다면 ORM의 CSV 파서를 롤링하지 않는 것이 좋습니다. 반면에 라이브러리는 종종 제한됩니다. 나는 내가 작업 한 모든 프로젝트 에 대해이 단점이 아니라면 내 문제를 완벽하게 해결할 수있는 라이브러리를 발견했다고 말합니다 . 또는 때로는 무언가를 처음 시작할 때 라이브러리가 정확히 필요한 것이지만 일단 변경해야 할 때 도움보다 더 해 롭습니다.

그러나 일반적으로 "올바른"답변이 존재하지 않기 때문에 시도하지 않는 것이 좋습니다. 확실치 않은 경우, 직감과 함께 가십시오. 나는 누군가가 당신이 얼마나 많은 실수를했는지에 의해 경험이 정의된다고 말하는 것을 들었습니다. 일반적으로 무언가를 배우거나 효과가있는 것을 만듭니다. 어느 쪽이든, 그것은 모두 나쁘지 않습니다.


이 방법은 세 가지 선택입니다.이 특정 요구에 맞는 솔루션을 롤링하거나 다른 사람의 기존 솔루션을 조정하거나 자신의 범용 솔루션을 롤링하여이 요구 와 향후 요구 를 처리하십시오 . 그것이 3 방향 선택이라는 사실은 2 방향 선택보다 훨씬 어렵습니다.
supercat

2

프레임 워크가 심각한 내부 플랫폼 효과로 어려움을 겪었던 이전 작업에서이 (또는 비슷한 일)가 종종 발생했습니다.

기본적으로 코드 기반은 초기 Windows C / C ++에서 발전한 다음 MFC에서 컴파일되기 시작했습니다. 따라서 관리자는 MFC와 기존의 사내 데이터 구조 및 창 구성 요소를 혼합하기 시작했습니다. 내부 플랫폼은 문서화가 잘되어 있지 않았지만, 제공 한 내부 기능으로 인해 해당 제품에서 작업을 수행하는 것은 "길"일 것입니다. 회사의 내부 프레임 워크를 사용하여 작업하는 방법을 배우기보다는 처음부터 자신의 자료를 작성하는 것이 더 쉽고 빠릅니다 (MFC 기초부터).

(좋아, 이것은 당신의 초기 시점과 거의 반대되는 것처럼 보이지만 원칙은 동일합니다. 그렇습니다!) 때로는 때로는 기존의 재사용 가능한 것을 찾기 위해 시간과 노력을 쓰는 것보다 자신의 일을하는 것이 더 빠릅니다 해결책.)

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