윈도우 재설치 중 디아3 설치 기다리면서 쓰는 잡설. 짧게 쓰고 짧게 넘깁니다. 볼사람은 보고 말사람은 마세요. 평소 하고 싶은 이야기 좀 쓰고 갈랍니다.
저같은 경우는 C/C++ 정도에만 답글을 달고 다른 건 별로 안 답니다. 그 정도면 스스로 찾아서 해도 될 정도라고 생각해서요..
= 프로그래밍 관련 질문 패턴= - 과제해달라는 유형: 무개념으로 찍혀서 올리고 욕먹고 그리고 글은 얼마 후 지워집니다. 딱 봐도 생각하기 귀찮아하는 친구들인데, 이런 친구들은 싹수가 노란 거죠. 제일 한심한 유형입니다.
- 뭔가 열심히 짰지만... 음...: 아직 어떻게 프로그래밍해야 하는지 감을 못잡은 케이스인 것 같아요. 그래도 자기가 할 수 있는 부분은 열심히 했으므로 위 경우처럼 욕먹을 일은 아닙니다만... 하지만 제발 다른 분들의 조언을 받았으면 고맙다는 말도 남기기를 바랍니다. 또한 감사도 없이 답변만 받아 먹고 글 지우는 경우가 있는데, 뭔가 찔리는 거죠? 게다가 답변하는 사람의 성의를 개무시하는 파렴치한 짓이니, 그러려면 아예 여기 질문하지 않는 게 좋겠습니다. 주변의 친구나 선배에게 물어보세요. 예의를 갖춰서요~
- 리눅스/유닉스 관련 질문: 이미 여기서 징징대는 것보다 구글 검색을 하는 것이 나을지도 모르겠네요. 이것도 자기 과제에 대해 생각을 충분히 하지 않는 케이스가 다반사인듯?
- 자바/GUI/기타: 위와 마찬가지로 자기가 어떤 것에 대해 질문해야 할지만 명확히 하면 자기 스스로도 답을 찾을 수 있을텐데... 이미 이런 유형의 질문은 오히려 책이나 주변 사람(선배, 동료)에게 물어보는 것이 더 쉽습니다. 물론 질문하지 말라는 말은 아니죠 ^^; 하지만 조금만 내용이 깊어지면 오유에서는 답이 안 달리는 경우가 많습니다.
= 그럼 질문은 어떻게 해? 입문자, 그리고 질문하는 이들을 위한 C 조언 =
- "HOWTO For Beginners" 를 좀 읽어 보십시오. 질문에도 에티켓이 있습니다. http://oops.org/?t=lecture&sb=beginner&n=1 - 답변만 먹고 튀지 마십쇼. 정말 기분 나쁩니다.
코딩 요령이야 정말 수없이 많겠죠. 몇 가지 하고 싶은 것만 짧게 적겠습니다. 개인적으로 C는 "배구포함" 만 되면 거의 다 된거라고 생각합니다. 배 = 배열 구 = 구조체 포 = 포인터 함 = 함수 이 네 개면 됩니다. 제발 책이나 인터넷을 통해 문법 개념부터 정확히 다잡고 코딩하기를 권합니다.
- 질문자들의 문제 투성이 코드들은 대개 어떤 식으로 짜야할지 미리 생각하지 않고 짠 듯한 느낌이 듭니다. 그러면 절대 안됩니다. 머릿속에서 확실하게 하나하나 잡히기 전에는 미리 "종이"와 "연필"을 가지고 프로그램을 구상한 후 짜세요. 핵심 기능은 반드시 모듈화(함수화)하여 프로그램의 흐름이 명확히 보여야 합니다. 그렇지 않은 너저분한 코딩은 돌아가더라도 fail입니다.
- 근본적으로 프로그램은 컴퓨터한테 "이거이거 해라" 지시하는 명령들입니다. 명령을 엉성하게 하니 에러가 날 수 밖에요. 여러분이 단상 앞에서 연설을 한다고 생각해 봐요. 그걸 준비 없이 드립만 날리면 좋은 연설이 될까요? 미리 철저히 어떤 내용을 어떻게 전달할지 연습하고 생각한 후에 하지 않습니까... 프로그래밍도 마찬가집니다. 잘 생각할수록 더 좋게, 깔끔하게 떨어집니다.
- 특히 제가 오유에 올린 C 프로그램을 보면서 제일 눈쌀찌푸려지는 것 중에 하나는 printf 범벅과 불필요한 "메뉴 인터페이스"...그거 짜다가 중요한 거 놓칩니다. 프로그램의 본질은 그게 아닌데 말이죠... 그리고 오유에는 indentation/highlighting 도 잘 안되어 보기 힘들구요.
예를 들어, 화씨를 입력받아 섭씨로 변환하는 아주 간단한 프로그램을 짠다고 생각하죠. 그러면 입력으로 숫자, 출력으로 숫자 둘만이 필요할 뿐입니다. 너저분하게 일일이 "이거 입력해주세요, 이거의 출력은 저겁니다." 라면서 컴퓨터가 씨부렁거릴 필요가 없어요. 그런 건 주석만으로 충분해요. 그렇게 너저분한 것들이 들어갈수록 문제가 생겼을 때 해결하기 매우 어렵습니다. 중요한 건 어떻게 화씨->섭씨 변환을 하는지에 대한 핵심적인 논리 아니겠습니까?
제발 핵심적인 것만 집중해주세요. 대수의 질문하시는 분들은 트레이닝을 위한 입문자의 프로그램을 할 겁니다. 그런 걸 짤 시간이 아깝습니다. 짜서 누가 쓰는데요? 나중에 실력이 붙으면 그런 건 금방 완성할 수 있어요. 제 말 믿으시고 불필요한 코드는 가능한 한 없애고 간결하게만 짜세요. 안그러면 자기가 나중에 짜고도 뭘 짰는지 도통 모르게 되어요! 필요한 설명은 주석만으로도 충분합니다.
쓸데없는 콘솔로 돌아가는 메뉴같은 거에 치중하지 마시고, 표준입력을 통한 입력, 매개변수를 통한 입력, 파일 입출력 등을 공부해서 프로그램에 적용하는 게 훨씬 좋습니다. '<'를 이용한 리다이렉션만 알아도 필요없는 메뉴는 거의 제거할 수 있어요.
마지막으로 가장 중요하다고 생각하는 것... 코드 죽 올려놓고 이거 디버깅해주셈~ 하는 디버깅은 정말 저질 디버깅입니다. 아주 초보자의 실수가 아닌 이상 답변받기 정말 어려울 겁니다. 제발 자기가 뭘 물어봐야 하는지 명확히 해 보세요.그 과정에서 문제가 해결되는 경우가 있습니다. 답변하는 사람은 질문하는 사람의 미주알고주알 코드를 보기 귀찮습니다. 핵심적인 것만 잘 추려서 올리세요. 그것이 힘들면 자기가 도전하고 있는 문제 자체를 이해하지 못한 거라고 할 수 있겠죠.
주저없이 글을 써서 정신없긴 하지만 쓰고 나니 좀 후련하네요. 뭐 다들 정직하게 열심히 공부하다 보면 다들 잘 되실겁니다. 건투를 빌어요 ㅎㅎ