일단은 표준적인 C/C++을 배운다는 가정하에 작성했습니다.
1. 컴파일 에러 잡아줄 노예 한명을 구하세요. 치킨으로 고용을 해서라도.
초보자들이 흥미를 잃는 대부분의 순간이 분명히 예제를 따라 쓰던 내가 직접 쓰던 실행해볼려고 하니까 겉잡을 수 없이 나타나는 에러 때문인 경우가 많아요. 일반인은 평생 타자에서 이모티콘 외에 써볼일 없는 세미콜론은 왜이리 많이 들어가는지 빼먹기 십상인데,
에러코드 쳐서 구글에 치면 해결방법이 다 나온다지만, 코딩 입문할만한 사람들은 이제 막 구글신의 존재를 인지할 뿐인 시기에 지나지 않아서, 거기서 나온 설명 보고 수정하는것도 최소한의 지식이 쌓인 다음에야 할 수 있는 경우가 많아요. 여러분이 똑같은 실수를 연발하더라도 포커페이스를 유지하며 오류수정하는 셔틀을 해 주며 왜 이런 오류가 발생했는지, 앞으로 어떻게 해야 하는지 "반복적으로" 설명할 수 있는 사람을 구하는게 사실 문법 진도를 팍팍 나갈 수 있는 방법이에요.
본삭금과 답례인사 원칙만 지켜주신다면 프게에서 꾸준히 질문/검색하시는것도 괜찮겠지만, 정말 즉각적인 피드백이 오갈 수 있는 사람이 있는게 가장 좋아요.
2. #include 헤더 파일을 왜, 어떻게 쓰는건지 잘하는 분께 가서 집요하게 물어보세요.
일반적인 코딩 다루는 과에서도 끝까지 헤더 파일이 왜 있는지 모르고 그냥 부르라는 헤더 불러다 메인파일에 코드들을 다 쑤셔박아서 돌리는 사람들이 꽤나 수두룩해요. 이런 경우엔 메인에서 500줄만 넘어가도 가독성이 엄청 떨어져서, 저걸 왜, 어떻게 쓰는지 확실하게 알고 가는것이 좋아요.
3. "자료구조"를 익힙시다.
보통 데이터형 하나만 가지고 산술 연산을 하는 경우는 조금만 복잡한 걸 구현하려고 해도 드문 경우가 많아요. 당장 2차원 게임을 만들려고 해도 캐릭터의 위치는 x, y 2개의 좌표로 나타내야 하는데, 이때 필요한 것이 "구조체", "클래스"에요.
근데 후술할 "지렁이 게임"을 만들더라도 현재 꼬리가 어느 좌표들에 걸쳐 늘어나 있는지, 이 "구조체"정보를 여러개 담을 수 있는 것들이 필요한데 그게 바로 자료구조에요.
어느정도 문법을 뗀 상태에서 할 수 있는 입문 중에서도 중급 레벨이라 할 수 있지만, 쓰고 안쓰고 차이가 코딩 효율 측면에서 큰 차이가 나서 반드시 알고 가는게 좋아요.
크게 배열/링크드리스트/스택/힙 등등으로 나뉘는데, "링크드리스트"와 "스택"은 꼭 한번쯤 직접 구현해보시는걸 추천합니다.
"링크드리스트"로 "지렁이 게임"을 한번 만들어보시고
"스택"으로 미로 길찾기를 만들어보시면 자료구조에 대한 기본 지식은 졸업한다고 볼 수 있어요.
이후에 C++ 기준으로 STL이라는 자료구조를 무지 편하게 쓰게 해주는 라이브러리가 있는데, 이거까지 익히고 나면 그래픽 작업같은걸 제외하고 자기가 직접 코딩해야하는 상황이 올 때 왠만한 로직들은 (효율적으로)구현할 수 있어요.
--------------------------------------------------
그외에 무엇에 중점을 둘 지는 자신이 뭘 위해서 코딩공부를 하는지 우선 확실히 해야 합니다.
1. 알고리즘 구상한걸 구현 / 실험하는 목적으로 하는 경우 : 대학원생이나 학문하는사람들이 검증용으로 하는 그런거
- 이런건 메모리고 뭐고 실질 수행시간 측정하고 퍼포먼스 확인하고 그런게 우선이라 for if문만 잘 쓰고 자기 쓸 함수만 제대로 구현 잘 하면 문제없어요. 사실 이런건 오히려 MATLAB같은게 적합하죠.
2. 윈도우창 띄우고 UI같은거 만들어서 간단하게 가시화 하고싶은경우.
- 1번이랑 연결되는 경우가 많긴 한데, 간단하게는 MFC라는 VisualStudio에 내장되어 있는 기능을 사용해 구글링해가며 만들면 되겠지만, 그냥 심심풀이로 창띄우는거 아닌 이상 대부분 가시화를 위해서 최소 OpenGL이든 OpenCV든 그래픽 라이브러리를 수반하니까 어쩔수 없이 남의 코드를 빌려 써야합니다. 이 라이브러리를 가져다 쓰는 과정이 제일 세팅이 쉽다는 Visual Studio에서도 미리 만들어진 Binary(.dll)파일 안쓰고 새로 라이브러리 빌드해서 쓰려면 초반에 고생하는 경우가 많아서,
일단 사용하고싶은 라이브러리에 "빌드"라고 검색해서 좀 귀찮은 작업을 수반하지만 자기 버전에 맞게 .dll파일을 만들어 적용하는법을 좀 습득할 필요가 있고, 유명한 라이브러리 아니면 레퍼런스 보면서 함수명이랑 인자보고 얘가 뭐하는 함수인지 지레짐작해서 하는것도 익숙해질 필요가 있어요.
3. 전자장비 만들고 싶다 (임베디드)
- AND OR XOR & | 같은 비트연산 써먹을 일이 정~말 많고, 요즘 전자기기도 메모리가 빵빵해서 그렇게 아껴쓸 필요까진 없지만, 공간최적화 관련 지식이 좀 필요합니다.
- 아두이노라고 있는데, 사서 한번 만져보는거 추천해요 (사실 Atmega kit같은거 사서 레지스터 레벨에서 다뤄보는걸 더 추천하지만)
4. 앱 만들고 싶다
안드로이드인지, 윈도우인지, 앱등인지 플랫폼 하나 정하고 나서
보통 객체지향(OOP) 맞춰서 제대로 설계하는게 이상적인데, 진짜로 진지하게 앱을 만들 단계가 온다면 좀 중형 프로젝트가 될 것 같으니 코딩을 해보면서 자기 자신 코드를 끊임없이 갈아엎어서 가독성을 향상시키는 연습을 해야해요.
그리고 C/C++ 기준 처음 문법 익히실때 중요도순을 매기자면 다음과 같아요
(http://soen.kr) 에서 언급된 범주 기준
변수형(int, double, bool 등) - ★★☆☆☆ (단 어느정도 실력이 쌓이면 완벽하게 알아야 해요)
문자형(char[] 배열, strcmp 등등) - ★★★☆☆
(후에 더 좋은 기능을 가진 string이라는걸 쓰는 경우가 많긴하나 대부분 연습용 숙제들에서 많이 활용됩니다)
연산 규칙 - ★★★☆☆
(int/int => int라던가 int/double => double이라던가 true/false는 숫자1, 0과 같다던가, 논리연산 ==, ||등은 결과가 0또는 1로 나타나는 등을 이용한 여러가지 활용을 의미합니다. 초반에는 모르고 넘어가도 되나, 후에 효율적인 코딩을 위해서 필요합니다.)
조건문(if, switch), 반복문(for, while) - ★★★★★
(S/W자체가 컴퓨터의 동작을 제어하는 것임에 만큼 핵심 코드의 90% 이상은 이 안에 들어있습니다.)
포인터 - ★☆☆☆☆
(처음에는 모르고 지나가도 됩니다. 대부분 포인터를 설명하기 위한 예제 코드가 포인터의 실제 사용예가 아닌, 설명을 위한 코드인 경우가 많아 배우는 사람이 이게 왜 필요한지 받아들이기 어려운 경우가 많아 여기서 힘들어하시는 경우가 많은데요)
(기본 문법을 다 떼기 전까지는 실제 적용할만한 예가 함수에서 Call by Value와 Call by Reference의 차이를 규명할 때 뿐입니다.)
(후에 초중급 과정으로 자료구조를 공부할때 포인터가 다시 등장할텐데, 그때 다시 한번 포인터 항목을 찾아보시면서 공부하시는걸 추천드립니다.)
함수 - ★★★★★
(조건문/반복문과 함께 프로그래밍의 대부분 요소중 하나입니다. 함수 앞에 붙는 void int 등의 의미와 return 명령이 왜 있고 어떻게 쓰는지 중점적으로 보시는 걸 추천합니다.)
함수호출 방식(Call by value / Call by reference) - ★★★★☆
(이것도 매우 중요합니다만, Call by reference부분에서 포인터 개념이 나오는데, 아직 포인터가 이해 안되신 상태라면 그냥 저렇게 쓰는구나~ 라고 따라해보고 일단 넘기는걸 추천드립니다.)
헤더 파일 (#include) - ★★★★★
(함수를 만들기 시작했으면 .h와 .cpp파일로 나눠서 함수의 머리와 몸통을 분할하는 경우를 볼 수 있을겁니다. 이것 역시 반드시 알아야 합니다.)
매크로 (#define) - ★★★☆☆
(아마 헤더 파일을 만들면서 같이 언급되겠지만, 자기 프로그램을 테스트하는과정에서 수정작업을 줄여주는 고마운 기능입니다.)
지역변수/전역변수/정적변수 - ★★★☆☆
(이런것들이 있고 왜 쓰는지에 대해 대략적으로 이해 하시면 됩니다. 전역 변수는 실제 코딩에선 비효율적이긴 하지만, 공부하는 과정에서는 유용하므로 써먹을 일이 많을 것이고, 정적 변수도 사용예를 하나 보고 기억해두시는 편이 좋습니다.)
배열 - ★★★★★
(어떻게 보면 가장 기초적인 자료구조로, 나중에 가면 이 배열 자체를 쓸일은 많지 않지만, 어떤 데이터 뭉치를 만들고 거기의 몇번째에 접근하겠다는 개념은 정말 많이 쓰이므로 포인터가 언급된 부분을 제외하고 익혀둡시다)
포인터 연산 - ☆☆☆☆☆
(안보는걸 추천합니다. 지금 넘어가도 훗날 포인터에 대해 이해하고 나면 필요에 의해서 스스로 찾는 날이 올 겁니다)
구조체 - ★★★★★
(본문에 언급된대로 자료구조를 쓰는 이유가 이놈을 저장하기 위해서입니다.)
<자료구조>
동적 배열 - ★★★★★
(C#이나 JAVA를 쓰지 않는이상, 훗날 많이 쓰게 될 문법입니다)
연결리스트(링크드리스트) - ★★★★★
(이 링크드리스트란 구조 자체는 실제로 자주 쓰이진 않지만, 앞서 넘어간 포인터의 개념을 이해하기에 아주 적절한 적용예입니다.)
스택 - ★★★★★
(스택까지는 자주 사용할 수 있는 자료구조입니다.)
찾았다...치킨한마리에 내 오류를 찾아서 설명해줄 천사를...
대부분의 오류는 오타/초기화 문제죠.
잘 안되면 시스템탓 하지 마시고 오류메시지부터 구글에 복붙하세요.
그래서 글쓴이님 무슨 치킨 좋아하신다구요?
영어가 좀만 되면 컴파일 에러 노예는 필요 없어요. stackoverflow가 있으니까요.
스크랩 스크랩!
요즘 그런쪽 언어를 배우고 싶은데
파이썬 부분의 킵도 포함인곤가요?? 부가적인 팁이 잇다면 알고 싶습니다
..내 눈은 { ( } ) 다 똑같아 보임 {)(}({)}({)})({})({}){(}){(}){(}){(})({}){(}{)(}){(})(}{)()(}{(}{)(}{)(}0[]()}(}[)(}{)(}{)(}{)(}(})(})}{)()}{({)(}{)(}
좋은글 감사합니다.
값지고 비싼 글이네요.
어째서 iOS만 앱등이죠 ㅠㅠ
좋은 내용입니다.
다만, 언어에 집착하진 마세요. 언어는 그냥 도구에요.
무엇으로 만드는지보다는,
무엇을 만들지 공부하시는게 좋을것 같습니다.
- 영상처리 알고리즘 현업 종사자
쓰다가 왠지 지쳐서 횡설수설하다 끝난 글이 어쩌다 베스트를 갔을까요..
아니..!
이렇게 직설적인 설명이 필요했어요
감사합니다.
남의 코딩 잘 찾아서 갖다 쓰는 게 포인트라 찾는 실력 키우는 것도 어지간히 중요한 게 이쪽인긋
우오 감사합니다!
왜때문인지 추천은 안되지만 스크랩!
뭔지 모르겠고 저런거랑 관련없는 일을 하며 매달 돈이 입금되는 입장에서..
그냥 추천 하나만 가볍게.
실전경험을 직설적으로 잘써주신것 같네요. 감사합니다
구조체에 별 다섯개를 주셨네용
클래스도 별 다섯개 인가요?
학부생때 진짜 이런 조언해줄 사람 있었으면 전자공학에 흥미를 더 가졌을 텐데 아쉽네요. ㅎㅎ
아트메가로 진짜 캡스톤 뒤지게 한 기억하고 자료구조를 캡스톤하고 같이하던 기억이 떠올라서 추천드려요.
제일 첫번째 1번.. 아니다 이 악마야..ㅋ ㅠㅠ