C ++로 코딩 해야하는 프로그래밍 공모전을 준비 중이며 짧은 시간 안에 작업 코드를 생성하는 것이 전부입니다. 예를 들어 매크로를 사용하여 최소 두 개의 정수를 얻거나 memsets를 사용하여 배열을 초기화하는 것이 있습니다 (그러나 여기서는 어느 것도 사용해서는 안된다고 들었 습니다 ).
이것은 실제 직업에서 어떤 종류의 코딩 기술이 사용 되는가하는 의문으로 이어진다.
C ++로 코딩 해야하는 프로그래밍 공모전을 준비 중이며 짧은 시간 안에 작업 코드를 생성하는 것이 전부입니다. 예를 들어 매크로를 사용하여 최소 두 개의 정수를 얻거나 memsets를 사용하여 배열을 초기화하는 것이 있습니다 (그러나 여기서는 어느 것도 사용해서는 안된다고 들었 습니다 ).
이것은 실제 직업에서 어떤 종류의 코딩 기술이 사용 되는가하는 의문으로 이어진다.
답변:
작업 코드를 빠르게 만드는 방법 은 ... 느리게하는 것입니다. 아주 작은 조치를 취하십시오. 각 단계의 목적을 알고 있어야합니다. 각 단계 후에 코드가 컴파일되고 실행되는지 확인하십시오.
무엇보다도 테스트 주도 개발을 사용하십시오. 실패한 테스트를 작성하십시오. 테스트를 통과하기에 충분한 코드를 작성하십시오. 코드를 깨끗하게 유지하기 위해 리팩토링하여 여전히 모든 테스트를 통과하는지 확인하십시오. 반복.
이 작업을 수행하지 않으면 큰 코드 더미를 작성하는 것이 매우 쉬워 작동하지 않습니다. 그런 다음 당신에게 걸릴 것입니다 매우 는 작업을하지 않는 이유를 알아 내기 위해 오랜 시간.
표준 라이브러리, 특히 STL 알고리즘을 강력하게 검토하십시오. 이렇게하면 많은 코드 줄과 많은 시간을 절약 할 수 있습니다. 프로그래밍 콘테스트에서 우승하는 열쇠는 가능한 높은 수준에서 프로그래밍하는 것입니다. 외부 라이브러리가없는 C ++에서 이는 for 루프 대신 STL 호출을 의미합니다.
ACM 대회에 정기적으로 참여합니다. 다음 팁이 도움이 되길 바랍니다.
다른 사람들이 말했듯 이 C ++ 특히 STL에서 언어에 익숙해 지면 시간을 절약하기 위해 사용하려는 공통 함수 (binary_search, min, max)와 강력한 데이터 구조가 모두 있습니다 (재귀를 피하기 위해 스택) , BFS 대기열, Dijkstra의 priority_queue (원하는 경우).
수학적, 동적 프로그래밍, 그래프 이론 등의 경우 문제의 범주를 식별하십시오. 스스로에게 물어보십시오. 해당 유형의 문제에 얼마나 익숙하십니까? 이 작업을 수행 한 후 해결 순서에 대한 결정을 내려야 합니다.
타이핑하기 전에 문제를 완전히 이해하고 올바른 문제를 해결하고 싶습니다. 첫 대회에서 타이핑을하지 않으면 시간을 낭비한다고 생각했습니다. 나중에 이것이 실수라는 것을 알았습니다.
주석은 최소한 "영리한"코드에서 시간 낭비라고 생각하지 말고, 잘못 된 것 (실제 시간 낭비), 가치 명확성 을 확인하기 위해 한 줄씩 디버깅하고 싶지 않습니다 .
이 재미를 .
:)
글쎄, C 만 아는 C는 아는 것처럼 들린다. 이 질문들은 언어에 대한 기본적인 실무 지식을 가진 사람이 쉽게 대답 할 수 있습니다.
예를 들어 매크로를 사용하여 최소 2 개의 정수를 얻는 것입니다
그냥 기능을 사용합니까? std::min이미 존재 함.
또는 memets를 사용하여 배열 초기화
std::array<T, N> 이미 내용을 초기화합니다.
실제 작업에 어떤 종류의 코딩 기술이 사용됩니까?
첫 번째 단계는 사용중인 언어를 아는 것입니다.
언어를 아는 것 외에도 도구, 특히 편집기를 알아야합니다. 저는 전문적으로 15 년 이상 코딩을 해왔으며, 커서 키와 crtl-x / c / v 만 사용하는 유일한 편집기 명령으로 인해 훌륭한 프로그래머의 속도가 느려지는 것을 보았습니다.
편집기가 한 줄의 키 입력을 지원하여 줄을 삭제합니까? 줄을 다시 들여 쓰려면? 기능 / 방법 사이를 이동 하시겠습니까? 선택 / 붙여 넣기를 차단 하시겠습니까? 북마크? 단어로 이동? 에디터가 클래스 / 메소드 / 함수를 자동 생성 할 수 있습니까? 미리 만들 수있는 템플릿을 지원합니까? 빠른 리팩토링? 매크로 기록?
에디터를 알면 개발 시간을 크게 단축시킬 수 있습니다.
행동하기 전에 생각하십시오. 클래스 구현을 작성하기 전에 세 가지 실패한 것보다 생각하고 계획하는 것이 좋습니다. 또한 행동 하는 동안 작은 단계로 작업을 수행하면 개발 프로세스가 크게 단순화된다고 생각 하십시오.
현재 필요한 코드 만 작성하십시오. 즉, 다음과 같은 사고 방식으로 코드 작성을 시작하지 마십시오. " 나중에 이러한 기능이 필요하므로 프로토 타입을 작성하는 동안에도 그 기능을 계속 사용할 수 있습니다 ." 상황이 바뀌고 계획이 바뀝니다. 사용하지 못할 수도있는 코드가 생깁니다. 시간 낭비 야.
무엇을하고 있는지 알고 있습니다. 언어 및 / 또는 라이브러리의 기본 기능 및 기능이 어떻게 작동하는지 기억하는 것보다 나쁘지 않습니다. 사용하는 도구에 익숙해 지십시오.
이미 많은 답변이 있었지만 여전히 의견을 추가하고 싶습니다.
코딩 속도를 높이려면 타이핑 하는 동안 논리와 코드에 집중할 수있는 속도 로 터치 타이피스트가 되십시오 . 타이핑을 배우는 많은 소프트웨어가 있습니다 (예 : 타이핑 마스터, 빠른 타이핑, KTouch, gTypist).
나는 여전히 두 손가락 타이피스트 인 경험 많은 프로그래머들을 보았다. 이로 인해 문서가없는 불쾌한 코드와 매크로 및 약식 유형 이름을 가진 실제 암호 코드가 생성됩니다.
소프트웨어 개발은 고전적인 80-20 활동 중 하나입니다. 즉, 작업의 처음 80 %가 시간의 20 %를 차지하고 작업의 마지막 20 %가 시간의 80 %를 차지합니다.
따라서 일반적으로 작업 속도를 높이려면 노력의 20 %에 해당하는 성과를 향상시키는 데 노력해야합니다. 이것은 일반적으로 디버깅 단계이며 모든 것을 함께 묶어 사용 가능하게 만드는 작업입니다.
초기 단계에서 더 많은주의를 기울이면이를 개선 할 수 있습니다. 프로젝트 초반의 계획 및 설계 작업은 하드 코어 프로그래밍에 빠져들고 싶을 때 시간 낭비처럼 보일 수 있지만 나중에 많은 시간을 절약 할 수 있습니다.
사람들은 TDD 또는 BDD와 같은 특정 방법론에 대해 이야기합니다. 이것들은 훌륭하지만 지금하고 있지 않다면 적응하는데 약간의 시간이 걸릴 것이므로 프로그래밍 콘테스트를 시작하려는 것이 아닐 수도 있습니다. 그러나 다이빙을하기 전에 당신이하고있는 일을 계획하지 말고 무엇을 하든지 보상을 얻을 것입니다. 그리고 그들은 어쨌든 TDD와 BDD를 향한 첫 걸음입니다. 이곳은 당신이 시작하고 싶은 곳입니다.
실제 프로그래밍 경쟁의 경우 C ++을 사용하지 마십시오. 빠른 대화식 RAD 스크립팅 언어를 사용하십시오. 이것은 VB6이 절대적으로 지배하는 것입니다. 미리 작성한 라이브러리로 미리 준비하십시오. 문자열 분할, 배열 반전, 검색, 정렬, rudementary 그래픽, 콘솔 제어.
그것이 일을위한 것이라면, 정반대를하십시오. 거기에 무엇이 있는지 배우고, 견고한 언어를 사용하고 (C ++은 괜찮음) 모든 것을 주석하는 등 두 가지 유형의 환경은 더 멀어 질 수 없습니다.