코딩 시간을 단축하는 일반적인 프로그래밍 기술


20

C ++로 코딩 해야하는 프로그래밍 공모전을 준비 중이며 짧은 시간 안에 작업 코드를 생성하는 것이 전부입니다. 예를 들어 매크로를 사용하여 최소 두 개의 정수를 얻거나 memsets를 사용하여 배열을 초기화하는 것이 있습니다 (그러나 여기서는 어느 것도 사용해서는 안된다고 들었 습니다 ).

이것은 실제 직업에서 어떤 종류의 코딩 기술이 사용 되는가하는 의문으로 이어진다.


26
코딩 경쟁에서 사용하는 기술은 실제 작업에서 사용하는 기술과 관련이 없을 수도 있습니다.
Doug T.

1
저는 실제 직업에서 기술을 요구하지 않고 코딩 경쟁에서 기술을 요구했습니다.
marktani 2016 년

1
@DougT. 코딩 경쟁에 대한 요령은 주제가 아니지만 작업 환경에서의 생산성에 대해 이야기하기 위해 확장 할 수 있으며 원숭이 코드에 소요되는 시간을 어떻게 줄일 수 있을까요?
James

1
왜 동적 배열을 초기화하기 위해 memset을 사용해서는 안됩니까?
James

3
C ++을 사용하지 마십시오. 가능한 최고 수준의 언어를 사용하십시오.
Kevin

답변:


52

작업 코드를 빠르게 만드는 방법 은 ... 느리게하는 것입니다. 아주 작은 조치를 취하십시오. 각 단계의 목적을 알고 있어야합니다. 각 단계 후에 코드가 컴파일되고 실행되는지 확인하십시오.

무엇보다도 테스트 주도 개발을 사용하십시오. 실패한 테스트를 작성하십시오. 테스트를 통과하기에 충분한 코드를 작성하십시오. 코드를 깨끗하게 유지하기 위해 리팩토링하여 여전히 모든 테스트를 통과하는지 확인하십시오. 반복.

이 작업을 수행하지 않으면 큰 코드 더미를 작성하는 것이 매우 쉬워 작동하지 않습니다. 그런 다음 당신에게 걸릴 것입니다 매우 는 작업을하지 않는 이유를 알아 내기 위해 오랜 시간.


21
진심 이세요? 콘테스트를위한 TDD?
Codism

1
@Codism : 일반적인 소프트웨어 개발에 적용 할 수있는 기술을 포함하도록 질문이 확대되었습니다.
Dima

2
TDD는 내 코드를 향상시키는 데 도움이되지만 코드를 더 빨리 작성하는 데 도움이되지는 않았습니다. 대화 형 프로그래밍 환경 (예 : Groovy 콘솔, Lisp REPL 등)은 내 경험에서 가장 큰 시간 절약이었습니다.
erturne

3
TDD의 경우 -1입니다. 프로젝트가 짧은 해커 톤이 아닌 장기적인 경우에 적합합니다.
TheLQ

1
@TheLQ 디버거를 사용하는 데 모든 시간을 소비한다고해서 TDD가 나쁜 제안이라는 의미는 아닙니다.
byxor

29

표준 라이브러리, 특히 STL 알고리즘을 강력하게 검토하십시오. 이렇게하면 많은 코드 줄과 많은 시간을 절약 할 수 있습니다. 프로그래밍 콘테스트에서 우승하는 열쇠는 가능한 높은 수준에서 프로그래밍하는 것입니다. 외부 라이브러리가없는 C ++에서 이는 for 루프 대신 STL 호출을 의미합니다.


+1-나는 이것에 전적으로 동의합니다. STL에서 코드를 빠르게 작성하는 방법을 아는 것은 이러한 종류의 경쟁에서 엄청납니다.
Jordan Parmer

23

ACM 대회에 정기적으로 참여합니다. 다음 팁이 도움이 되길 바랍니다.

  • 다른 사람들이 말했듯 이 C ++ 특히 STL에서 언어에 익숙해 지면 시간을 절약하기 위해 사용하려는 공통 함수 (binary_search, min, max)와 강력한 데이터 구조가 모두 있습니다 (재귀를 피하기 위해 스택) , BFS 대기열, Dijkstra의 priority_queue (원하는 경우).

  • 수학적, 동적 프로그래밍, 그래프 이론 등의 경우 문제의 범주를 식별하십시오. 스스로에게 물어보십시오. 해당 유형의 문제에 얼마나 익숙하십니까? 이 작업을 수행 한 후 해결 순서에 대한 결정을 내려야 합니다.

  • 타이핑하기 전에 문제를 완전히 이해하고 올바른 문제를 해결하고 싶습니다. 첫 대회에서 타이핑을하지 않으면 시간을 낭비한다고 생각했습니다. 나중에 이것이 실수라는 것을 알았습니다.

  • 주석은 최소한 "영리한"코드에서 시간 낭비라고 생각하지 말고, 잘못 된 것 (실제 시간 낭비), 가치 명확성 을 확인하기 위해 한 줄씩 디버깅하고 싶지 않습니다 .

  • 재미를 .


6
입력하기 전에 문제를 완전히 이해하려면 +1하십시오. 그렇지 않으면, 당신은 팀의 시간을 낭비하고 있습니다 (ACM 경쟁은 3 인 1 대 컴퓨터입니다)
Codism

좋은 대답입니다. :)
Jared Farrish

13

글쎄, C 만 아는 C는 아는 것처럼 들린다. 이 질문들은 언어에 대한 기본적인 실무 지식을 가진 사람이 쉽게 대답 할 수 있습니다.

예를 들어 매크로를 사용하여 최소 2 개의 정수를 얻는 것입니다

그냥 기능을 사용합니까? std::min이미 존재 함.

또는 memets를 사용하여 배열 초기화

std::array<T, N> 이미 내용을 초기화합니다.

실제 작업에 어떤 종류의 코딩 기술이 사용됩니까?

첫 번째 단계는 사용중인 언어를 아는 것입니다.


사용중인 언어를 알고 자하는데이 질문을했습니다. 에 대한 의견을 보내 주셔서 감사 합니다 .
marktani

7
오. 그때 당신의 질문을 오해했을 것입니다. 나는 을 추천 합니다 . 우리는 C 쓰레기를 가르치는 책 대신 읽을 가치가있는 책들만 친절하게 제시합니다.
DeadMG

10

언어를 아는 것 외에도 도구, 특히 편집기를 알아야합니다. 저는 전문적으로 15 년 이상 코딩을 해왔으며, 커서 키와 crtl-x / c / v 만 사용하는 유일한 편집기 명령으로 인해 훌륭한 프로그래머의 속도가 느려지는 것을 보았습니다.

편집기가 한 줄의 키 입력을 지원하여 줄을 삭제합니까? 줄을 다시 들여 쓰려면? 기능 / 방법 사이를 이동 하시겠습니까? 선택 / 붙여 넣기를 차단 하시겠습니까? 북마크? 단어로 이동? 에디터가 클래스 / 메소드 / 함수를 자동 생성 할 수 있습니까? 미리 만들 수있는 템플릿을 지원합니까? 빠른 리팩토링? 매크로 기록?

에디터를 알면 개발 시간을 크게 단축시킬 수 있습니다.


1
아멘. 나는 매우 빠르고 새로운 vim을 사용하는 새로운 남자와 일하고 있습니다. 그는 그것을 사용하는 방법을 배우는 데 시간이 걸리기 때문에 그를 위해 일합니다.
gbjbaanb

또한 ... 편집기가 여기에 나열된 거의 모든 기능을 지원하지 않는 경우 더 나은 편집기를 찾으십시오.
Abhi Beckert

구글 문서에서 인터뷰 ...이 이유로 최악의 경험.
UmNyobe

6

행동하기 전에 생각하십시오. 클래스 구현을 작성하기 전에 세 가지 실패한 것보다 생각하고 계획하는 것이 좋습니다. 또한 행동 하는 동안 작은 단계로 작업을 수행하면 개발 프로세스가 크게 단순화된다고 생각 하십시오.

현재 필요한 코드 만 작성하십시오. 즉, 다음과 같은 사고 방식으로 코드 작성을 시작하지 마십시오. " 나중에 이러한 기능이 필요하므로 프로토 타입을 작성하는 동안에도 그 기능을 계속 사용할 수 있습니다 ." 상황이 바뀌고 계획이 바뀝니다. 사용하지 못할 수도있는 코드가 생깁니다. 시간 낭비 야.

무엇을하고 있는지 알고 있습니다. 언어 및 / 또는 라이브러리의 기본 기능 및 기능이 어떻게 작동하는지 기억하는 것보다 나쁘지 않습니다. 사용하는 도구에 익숙해 지십시오.



4

이미 많은 답변이 있었지만 여전히 의견을 추가하고 싶습니다.

코딩 속도를 높이려면 타이핑 하는 동안 논리와 코드에 집중할 수있는 속도 로 터치 타이피스트가 되십시오 . 타이핑을 배우는 많은 소프트웨어가 있습니다 (예 : 타이핑 마스터, 빠른 타이핑, KTouch, gTypist).

나는 여전히 두 손가락 타이피스트 인 경험 많은 프로그래머들을 보았다. 이로 인해 문서가없는 불쾌한 코드와 매크로 및 약식 유형 이름을 가진 실제 암호 코드가 생성됩니다.


검지 손가락으로
하향 투표

좋은 대답입니다. 화면 대신 키보드를 보는 사람들은 종종 인식하기 전에 쓰레기를 입력하고 역 추적해야한다고 덧붙입니다. 또는 잘못된 창에 입력합니다. 슬프게도, 이것이 얼마나 느려지는지 알지 못합니다.
Dave Markle

2

소프트웨어 개발은 ​​고전적인 80-20 활동 중 하나입니다. 즉, 작업의 처음 80 %가 시간의 20 %를 차지하고 작업의 마지막 20 %가 시간의 80 %를 차지합니다.

따라서 일반적으로 작업 속도를 높이려면 노력의 20 %에 해당하는 성과를 향상시키는 데 노력해야합니다. 이것은 일반적으로 디버깅 단계이며 모든 것을 함께 묶어 사용 가능하게 만드는 작업입니다.

초기 단계에서 더 많은주의를 기울이면이를 개선 할 수 있습니다. 프로젝트 초반의 계획 및 설계 작업은 하드 코어 프로그래밍에 빠져들고 싶을 때 시간 낭비처럼 보일 수 있지만 나중에 많은 시간을 절약 할 수 있습니다.

사람들은 TDD 또는 BDD와 같은 특정 방법론에 대해 이야기합니다. 이것들은 훌륭하지만 지금하고 있지 않다면 적응하는데 약간의 시간이 걸릴 것이므로 프로그래밍 콘테스트를 시작하려는 것이 아닐 수도 있습니다. 그러나 다이빙을하기 전에 당신이하고있는 일을 계획하지 말고 무엇을 하든지 보상을 얻을 것입니다. 그리고 그들은 어쨌든 TDD와 BDD를 향한 첫 걸음입니다. 이곳은 당신이 시작하고 싶은 곳입니다.


-2

실제 프로그래밍 경쟁의 경우 C ++을 사용하지 마십시오. 빠른 대화식 RAD 스크립팅 언어를 사용하십시오. 이것은 VB6이 절대적으로 지배하는 것입니다. 미리 작성한 라이브러리로 미리 준비하십시오. 문자열 분할, 배열 반전, 검색, 정렬, rudementary 그래픽, 콘솔 제어.

그것이 일을위한 것이라면, 정반대를하십시오. 거기에 무엇이 있는지 배우고, 견고한 언어를 사용하고 (C ++은 괜찮음) 모든 것을 주석하는 등 두 가지 유형의 환경은 더 멀어 질 수 없습니다.


3
나는 downvoter 중 하나는 아니지만 C ++에서 프로그래밍 속도가 더 빠르기 때문에 아마도 -1이라고 생각 합니다.
Gordon Gustafson

9
VB6? 진심이야? 과거에 왔습니까?
Konamiman

2
@Konamiman : 그렇습니다. "C ++에서 프로그래밍 콘테스트를 준비하고 있습니다"또는 "C ++ 프로그래밍 콘테스트를 준비하고 있습니다"라는 의미인지 알 수 없었습니다. 잘, 칩은 그들이 어디에있을 수있다. 그럼에도 불구하고 문자 그대로 매 초마다 중요한 프로그래밍 경쟁에서 매우 빠른 RAD 환경을 능가하는 것은 없습니다.
Bryan Boettcher 2016 년

설명을 위해 질문을 편집했습니다.
marktani

RAD : Delphi 6이 아마도 가장 좋은 방법 일 것입니다.
mlvljr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.