대부분의 프로그래머는 코드를 복사하여 붙여 넣습니까? [닫은] 코드를 잘라내어

다른 사람의 코드를 잘라내어 붙여 넣는 것은 장기적으로는 직접 작성하는 데 시간이 오래 걸립니다. 내 의견으로는 실제로 이해하지 않는 한 잘라 내기 및 붙여 넣기 코드는 해결해야 할 악몽이 될 수 있습니다.

잘못 이해하지 마십시오. 다른 사람들의 코드를 찾아서 배우는 것이 필수적이지만 앱에 붙여 넣지는 않습니다. 우리는 다시 개념을 우리의 응용 프로그램에.

그러나 나는 잘라내어 붙여 넣는 사람들에 대해 끊임없이 듣고 있으며, 일반적인 관행처럼 그것에 대해 이야기합니다. 또한 일반적인 관행을 나타내는 다른 사람들의 의견 도 볼 수 있습니다.

따라서 대부분의 프로그래머는 코드를 잘라내어 붙여 넣습니까?



답변

두 가지 일반적인 경우 :

한 프로젝트에서 다른 프로젝트로 :

대부분의 프로그래머는이 용량으로 코드를 잘라 붙여 넣습니다. 그들은 이전 프로젝트 나 온라인에서 무언가를 찾아 정확하게 복사 / 붙여 넣기 또는 복사 / 붙여 넣기를하고 변경을 할 수 있습니다. 나는이 연습이 일반적으로 좋다고 생각합니다. 이것은 입증 된 코드 일 때 특히 좋습니다. (예 : 과거에 잘 작동했던 과거의 프로젝트 또는 약간의 변경이 필요한 블로그의 유틸리티 개체). 이것이 나쁠 수있는 곳은 이해하지 못하는 코드를 복사 할 때나 코드가 불량한 곳 또는 붙여 넣는 코드보다 훨씬 더 나은 대안 솔루션이있는 곳입니다.

동일한 프로젝트 내부 : 동일한 프로젝트에서
복사하여 붙여 넣기하는 것은 일반적으로 좋은 생각이 아닙니다. 이것은 복사되는 코드가 메소드 / 클래스에 있고 반복적으로 호출되어야한다는 나쁜 냄새입니다. 이에 대한 몇 가지 예외가 있지만 일반적으로 프로그래머는 다음과 같이 생각해야합니다. ” 복사중인이 코드를 매개 변수화 할 수있는 방법이 있습니까? “.


답변

대부분의 프로그래머가 그렇게하지만 그렇다고해서

내 프로그래밍 만트라 중 하나는 “코드를 복사하여 붙여 넣는 경우 잘못된 일을하고있는 것” 입니다. 본질적으로 DRY .

코드 재사용은 코드를 반복하는 것이 아니라 코드를 리소스로 사용하는 것을 의미한다고 생각합니다. 때로는 코드를 직접 복사하여 붙여 넣었습니다. 대부분의 경우 보일러 플레이트 코드 또는 실제로 비슷한 모양으로 끝납니다 .

그 코드로 시간을 더 투자 한 후에는 다음과 같이 끝납니다.

  • 성분 (참조 : 관심의 분리 )
  • 나는에 의지 할 수 반사 일들이 간단 청소기와 미래에 reapeat 더 쉽게 할 수 있습니다.
  • 더 나은 디자인 , 그것이 효과가 있더라도, 교훈을 배운 후에 다시 한번하지 않겠습니까?.
  • 추상화하고 라이브러리 구성 요소로 바꾸고 중복 된 코드를 제거 할 수 있는 패턴 입니다.

클라이언트 / 보스가 신경 쓰지 않고 (적어도 직접적으로 그리고 단기적으로) 코드를 복사하여 붙여 넣지 말아야하는지 여부는 논쟁의 여지가 있지만 동일한 결과로 끝날 수 있지만 문제는 실제로 발생할 때 발생합니다 버그, 모듈성 상실 및 궁극적으로 유지 보수 지옥으로 이어집니다.

해야 할 일 : 최대한 빨리 리팩터링

복사 및 붙여 넣기를하지 않고 자신의 코드 인 경우에도 작동하더라도 완벽한 코드를 작성하는 사람은 아무도 없습니다. 리팩토링 할 내용과 왜 … 직접 리팩토링하지 않더라도 유지 관리자에 대한 행복과 전체 좌절의 차이가 될 수 있습니다.

결국 복사하여 붙여 넣더라도 좋은 코드 로 끝납니다.

XKCD 를 통해


답변

갇혀서 문제를 해결할 물건을 찾고 내가 원하는 것을하는 유용한 코드 스 니펫이 발생하면 자연스럽게 복사합니다. 때때로 그것은 단지 그것의 요지 일뿐입니다. 그런 다음 필요에 맞게 변경합니다. 이것은 내가 전문가가 아닌 것들 (현재 Objective-C)을 탐구 할 때 더 자주 발생합니다.

나는 항상 코드에서 무언가를 배우는 데 시간이 걸리므로 나에게 바퀴를 배우고 재발견하지 않는 좋은 방법입니다.


답변

다른 사람들의 코드를 복사 / 붙여 넣기에 대해 이야기하겠습니다. 내 개인 도서관에서 내 작품의 일부를 잡는 것은 공정한 게임입니다. 나는 그것들을 알고 정의에 의해 이해합니다.

코드를 “잘라내어 붙여 넣기”하는 가장 빈번한 상황은 특정 문제가 있고이를 해결하는 블로그 게시물에 접속 한 경우입니다. 대부분의 경우 솔루션을 프로젝트에 다시 입력합니다 (결국 블로그 작성자의 스타일로 작성되었을 것입니다). 실제로 코드는 아니지만 해당 시나리오에서 사용하는 것에 대해 나쁘지 않습니다.

전체 메소드 또는 시스템을 그대로 가져 와서 프로젝트에 그대로 붙여 넣은 다음 이해하지 못합니다. 다른 날 에 StackOverflow 에 대한 질문 이 있었는데 그와 같은 일을하는 데 대한 문제를 완벽하게 설명했습니다.

서로 다른 코드 부분에서 프랑켄슈타인 괴물을 함께 묶는 것이 그렇게 효율적일 수는 없습니다. 내 말은, 당신이 그것을 잘한다면, 그것은 당신이 동일한 솔루션을 반복해서 복제하거나 동일한 레벨의 복사 / 붙여 넣기가 더 이상 필요하지 않다는 다른 사람들의 코드를 충분히 이해했음을 의미합니다. 호환되지 않는 코드 샘플 간의 문제를 해결하지 않아도 생산성이 향상됩니다.

저는 개인적으로 대규모 복사 / 붙여 넣기를하는 많은 프로그래머를 만나지 못했습니다. 나는 가장 깊고 어두운 구석에 자신을 코딩하는 많은 사람들을 보았지만 그것은 다른 이야기입니다. 내 개인적인 일화를 바탕으로 대부분의 프로그래머는 전체 응용 프로그램을 함께 복사 / 붙여 넣지 않지만 실제로 말하기는 어렵습니다.


답변

나쁨 : 동일한 코드 블록을 반복해서 복사하여 붙여 넣기

이 작업을 수행하는 경우, 복사되는 코드에서 무엇이 추상화 될 수 있는지 생각하고 처리 할 함수 / 메서드를 작성하는 데 잠시 시간이 걸릴 것입니다. 여기는 DRY (Do n’t Repeat Yourself) 원칙이 중요합니다.

양호 : 작동하는 것으로 알려진 코드 블록 복사

DRY (Do n’t Repeat Yourself)도 다른 의미로 적용됩니다. IE, 과거에 이미 해왔 던 작업을 반복하지 마십시오. 코드 섹션을 작성하는 데 시간이 걸리면 디버깅하고 테스트하면 프로덕션 코드베이스에서 작동하는 것으로 입증됩니다. 당신은 그것을 재사용하지 않는 바보 될 것입니다.

대부분의 사람들은 많은 초보 프로그래머가 그물을 and이 뒤져 다른 사람들의 코드를 복사 / 붙여 넣기하는 데 실제로 많은 시간을 소비하기 때문에 나쁜 랩을 붙여 넣습니다.

매번 처음부터 모든 것을 작성하는 것이 더 좋지 않습니다. 나는 모든 오래된 학교 순수 주의자 프로그래머들이 모든 것을 처음부터 새로 작성해야한다는 것을 알고 있으며, 그들과 함께 일하지 않아도되기를 바랍니다. 5 년의 프로그래밍 경험이 있다면 재사용 할 수있는 매우 실질적인 코드 라이브러리가 있어야합니다. 숙련 된 프로그래머가 잠재적으로 많은 개발 시간을 절약 할 수 있기 때문에 테이블에 가져올 수있는 최고의 자산 중 하나입니다.

이전 코드가 처음에 이해하지 못하는 경우 잠시 시간을내어 댓글을 읽고 친숙 해지십시오. 귀하의 의견이 빠지면 … 음, 그것은 또 다른 문제입니다.


답변

25 년 동안 코드를 작성하고 나면 (이전 고용주를 위해 작성한 코드에 액세스 할 수없는) 잘라내어 붙여 넣기를 원했던 때가있었습니다. 그러나 이것은 매우 드 (니다 (그리고 계속 읽으십시오).

아마도 가장 좋은 예는 몇 년 전에 유닉스 운영 체제에서 온 정말 간단한 명령 줄 파서입니다. args를 통한 간단한 루프 압축 및 옵션 처리 그것은 엄청나게 간단하고 우아했으며, 그 이후로 여러 번 사용했습니다 (문자 그대로 잘라 붙여 넣기보다 패턴으로 사용). 이것은 규칙이 아닌 예외입니다.

일반적으로 일반 ole cut and paste는 완전히 부적절합니다. 중요한 개념이나 알고리즘을 잘라내어 붙여 넣습니다.

나는 너무 자랑스럽지 않습니다. 나는 정말로 빠른 패리티 또는 해밍 코드 확인 알고리즘이나 그와 비슷한 것을 찾기 위해 행복하게 검색 할 것입니다. 그런 다음 몇 시간 동안 그것을 이해하여 그것이 실제로 내가 찾은 엄청난 초고속 일인지 또는 순진한 쓰레기 더미인지 확인하십시오.

누군가가 코드를 이해하기 위해 멈추지 않고 코드를 복사 할 때마다 걱정합니다. 그들은 천재이거나 (그것의 모든 미묘함을 한눈에 이해) 또는 바보입니다. 그 사이에 어떤 공간도 없습니다. 아, 그리고 진정한 천재도 많지 않습니다.

이해하지 못하면, 행복뿐만 아니라 불행한 상황이나 입력 조건 하에서 실제로 실제로 무엇을 던 졌는지 전혀 모릅니다. 때때로 이것은 운이 좋을 때 중요하지 않습니다. 때로는 장기적인 고통이 있습니다.


답변

기본적으로 생산성을 높이기 위해 필요한 일반적인 상황이 있습니다.

당신에게 익숙하지 않은 기술은 실습 예제가 없다면 배우기 어렵습니다. 따라서 실제로 복사하여 붙여 넣은 다음 실제로 실행 하는 것을 가지고 붙여 넣 습니다.