본문 바로가기

카테고리 없음

개발자 지망생과의 대화(이과적임 주의)

728x90

제 주변에는 개발자 지망생들이 많습니다. 그 중 3명이 취업해서 잘 다니고 있기도 합니다. 제가 개발자가 되어서 먹고사는 문제를 해결했기 때문에 개발자로의 길을 적극 권장 하고 있습니다. 요즘에는 전부터 알던 동생을 개발자로 취업 시키고자 가르치고 있습니다.

 

저부터 시작 해서 와이프, 동생 등을 다 취업을 시키고 나니 이런 부분의 생각을 트여주면 공부에 속도가 붙겠지 싶은 부분들이 있었습니다. 마침 오늘 대화하면서 그 과정이 나와서 본인 허락을 받고 대화 내용을 올려봅니다.

 

저는 11년차이고 이 친구는 이제 배운지 2달 되었습니다.

 

이 대화에서 풀고자 하는 문제는 random()으로 1~6까지 숫자를 두개 생성해서 합이 5가 되면 리턴하는 코드를 짜는데 뭔가 잘 안되나봅니다. 자꾸 이런식으로 물어보길래 질문 방법이나 문제 해결 방법을 가이드 해줘야겠다고 생각해서 가이드를 해주었더니 문제가 풀렸다고 하네요.

 

신랄함 주의

본인에게 동의를 구하였습니다. 제발 재미로만 봐주시고 불편함이 있을것 같다면 스크롤을 내리지 말아주세요.

 

[S군] [오후 2:56] 형
[S군] [오후 2:57] public class Exercise02_15 {
    public static void main(String[] args) {
        while(true) {
            int num1 = (int) (Math.random() * 6) + 1;
            int num2 = (int) (Math.random() * 6) + 1;
            if((num1 + num2) == 5) {
                break;
            }
            System.out.println("(" + num1 + "," + num2 + ")");
        }
    }
}
[S군] [오후 2:57] 이거 왜 틀린건지 모르겠어요;;  ---> 내가 컴파일러냐? ㅋㅋ
[S군] [오후 2:57] while문과 Math.random() 메소드를 이용해서 2개의 주사위 던졌을떄 나오는 눈을 (눈1,눈2)형태로 출력하고
눈의 합이 5가 아니면 계속 자사위를 던지고 눈의 합이 5이면 실행을 멈추는 코드 작성하시오.
[김경록] [오후 3:09] 훔
[김경록] [오후 3:09] 무슨에러 나는지도 보내
[S군] [오후 3:10] 에러는 안납니다요
[김경록] [오후 3:10] 근데 왜 안된다고 판단했어?
[S군] [오후 3:10] 숫자합이 5여야 하는데
[S군] [오후 3:10] 지멋대로 출력되네요
[김경록] [오후 3:11] 지멋대로가 어떻게
[김경록] [오후 3:11] 지멋대로인지?
[S군] [오후 3:11] (숫자1,숫자2) 이렇게 나오는데 합이 5여야 하는데
12이기도 하고 8이기로 하고 출력할때마다 결과가 달라요
[S군] [오후 3:11] if문이 반영이 안된것 같습니다..
[김경록] [오후 3:12] 안멈춰? ---> 학생 본인의 판단미스
[S군] [오후 3:12] 중괄호를 닫았으니 그럴것 같다는 생각도 드는데 그러면 출력이랑 if문 순서를 바뀌도 되나요?
[S군] [오후 3:12] 네 안멈춥니다
[김경록] [오후 3:12] num1 + num2가 5가 안나오나보네
[S군] [오후 3:13] 네..
[김경록] [오후 3:13] 질문 수준이 조금 올라오긴 했는데
[김경록] [오후 3:13] 아직 1차원적이노 ---> 이런건 혼자 해결해야지
[김경록] [오후 3:13] while문이 안멈추면 왜 안멈추는지 생각을 해볼수도 있는데
[김경록] [오후 3:13] 이 생각이 잘 안들어?
[김경록] [오후 3:14] 뭐라고 하는게 아니고 너의 상황을 알아야
[S군] [오후 3:14] while문은 멈췄어요 ----> 본인의 판단 미스인 것을 인정함
[김경록] [오후 3:14] 답변을 해주거나 방향을 제시를 해주니까
[김경록] [오후 3:14] 안멈춘대매 ---> 판단 제대로 못해서 뭐라 함
[김경록] [오후 3:14] while문을 멈추게 하라는 뜻이 아니고
[김경록] [오후 3:14] 저 생각을 해봤냐고 물어보는거라
[김경록] [오후 3:16] 저 생각을 해본건지 아니면 어디서 멈춘건지
[김경록] [오후 3:16] 궁금 ---> 궁금하다는 것은 제가 보기엔 생각의 방향이 틀렸다는 것을 돌려 얘기하는 것
[김경록] [오후 3:16] 이게 이 일 하는데 좀 중요한 부분이라서 ---> 논리적인 생각이 중요한데 접근이 좋지 않다는 것
[S군] [오후 3:17] 형 질문을 이해를 못해서... ---> 이제서야 본인의 잘못을 인정
while문은 break;로 빠져나가게 했으니깐 그냥 당연히 멈춘다고 생각했는데;;
[김경록] [오후 3:17] 그래 저 break;가 작동을 했으면 당연히 멈추는건데
[김경록] [오후 3:17] 당연한 일이 안일어났으면 ---> 왜 본인을 의심하지 않는지?
[S군] [오후 3:17] 쌍으로 합이 5가 될때까지 랜덤으로 나오다가 합이 5되면 빠져나간다고 생각했는데
[김경록] [오후 3:18] 그니까 지금 니가 하는 생각하고 니가 수행한 작업이 일치 하는건지
[김경록] [오후 3:18] 를 의심을 니가 안하는것 같아서 ---> 머리를 좀 쓰고 물어봐라 생각을 좀 하고
[김경록] [오후 3:19] 형이 물어보는 이유는 생각을 해보라는거야 답을 형이 주면 니가 프로젝트 해야 할 때도 계속 답을 줄 수는 없으니까 생각을 해보라고 자꾸 물어보는거야
[김경록] [오후 3:19] 이런 대화가 자연스럽게 안되면 니가 공부가 깊이가 안생겨
[S군] [오후 3:20] 네;; 오류가 안뜨니깐 뭐가 틀린지를 모르겠어요
[김경록] [오후 3:20] 그러면 지금 뭔가 안되면
[S군] [오후 3:20] if문도 while문 안에 들어있어서 따로 노는것도 아닌것 같고
[김경록] [오후 3:20] 뭐가 잘못됐을까 가설을 세워야지
[김경록] [오후 3:20] 형한테 물어보는게 아니고 여기에서 가설을 세워 ---> 왜 내 cpu자꾸 쓰냐고!
[김경록] [오후 3:21] if문이 잘못된건지 뭔가 잘못 코딩을 했으니까 잘못 작동할거잖아
[S군] [오후 3:22] 네.. 뭐가 잘못된건지 생각해보겠습니다  ---> 다음이란 없다 지금 머리를 써라
[김경록] [오후 3:23] 지금 생각해
[김경록] [오후 3:24] 뭐가 잘못된것 같은지 가설부터 세워봐
[김경록] [오후 3:24] 이게 안되면 책 뗘도 소용이 없을것 같노
[김경록] [오후 3:24] 가설은 뭔지 알지?
[S군] [오후 3:25] 형 예를 들어서 가설은 어떻게 세워요?
[S군] [오후 3:25] 제가 위에 볼때는
[S군] [오후 3:25] 출력이 따로 노는것 같긴해요..  ---> 표현이 문학적이다 = 문제 해결에 도움이 안되는 표현
위에 조건문들은 다 맞는데 출력을 어떻게 할지를 정해지기전에 조건문을 빠져나온 느낌
[김경록] [오후 3:25] 어
[김경록] [오후 3:25] 출력이 몬데?
[S군] [오후 3:25] println이요
[김경록] [오후 3:25] 그게 왜 따로논다고 생각한거지?
[S군] [오후 3:26] break; 가 있으니깐 이미 while문을 강제 종료 시킨 이후에 출력을 시키니깐
[S군] [오후 3:26] 안나오는것 같다는 생각이 들어서요
[김경록] [오후 3:27] println이 위 코드상으로는 while안에 있는데?
[김경록] [오후 3:27] public class Exercise02_15 {
    public static void main(String[] args) {
        while(true) {
            int num1 = (int) (Math.random() * 6) + 1;
            int num2 = (int) (Math.random() * 6) + 1;
            if((num1 + num2) == 5) {
                break;
            }
            System.out.println("(" + num1 + "," + num2 + ")");
        }
    }
}
[S군] [오후 3:28] 네,, 출력해서 보면 무한히 안돌고 몇개나오다 마는거 보면 그건 아닌것 같네요;;;
[김경록] [오후 3:28] 아까는 무한히 돈다고 하지 않았어?  ---> 앞에서 한말 기억 못하면 안되지
[김경록] [오후 3:28] 무한히 안돌아?
[S군] [오후 3:28] 네 그건 다른 얘기 였어요
몇개 나오다 마는데 총합이 5가 아닌 쌍이 나와요
[김경록] [오후 3:29] 근데 이 로직이
[김경록] [오후 3:29] 총합이 5가 나오게끔 만든거야?
[김경록] [오후 3:29] 목표가 총합이 5가 나올때까지 주사위 던지는거야?  ---> 목표를 모르고 코드를 짜면 맞게 짜고도 틀리다고 생각할 수 있음
[S군] [오후 3:29] 네 if문에 5일때 빠져나오라고 했어요
[S군] [오후 3:29] 네 맞아요
[김경록] [오후 3:29] 그러면 로직상으로는
[김경록] [오후 3:29] 총합이 5가 나오면 안되겠네
[김경록] [오후 3:29] 5가 나오면 끝나게 했으니까
[S군] [오후 3:30] 아하
[S군] [오후 3:30] ...
[김경록] [오후 3:31] 그럼 어케 고쳐야할까?  ---> 드디어 의미있는 대화의 시작
[S군] [오후 3:31] 그러네요 5가 아예 나오면 출력이 안되겠네요
[김경록] [오후 3:31] 엉 그럼 어케 고쳐야 할까?  ---> 정말 이해를 했는지 의심
[S군] [오후 3:31] 흠..
[김경록] [오후 3:31] 니가 5가 아얘 나오면 안된다메
[김경록] [오후 3:32] 그러면 어떻게 고쳐야 할지도 떠올랐을텐데  
[김경록] [오후 3:32] 이걸 못떠올렸다면 니가 아직 이해를 못했는ㄷ
[S군] [오후 3:32] 아뇨 합이 5가 나오면 빠져나오는걸로
[김경록] [오후 3:32] 이해한척 한거임 ㅇk
[김경록] [오후 3:33] 그니까 이 로직으로 니가 하고싶은게 모야?  ---> 설계를 하고 개발을 해야하는데 대체로 안하다가 방향을 잃는 경우가 많음
[김경록] [오후 3:33] 5가 나올때까지 던지는거야? 5가 나오게 하는거야?  ---> 목표가 정확하지 않음
[S군] [오후 3:33] 합이 5가 될때 빠져나온다는 생각을 한건데
[김경록] [오후 3:33] 그러면 맞게 짰는데?
[S군] [오후 3:33] 합이 5가 되면 그거까지는 출력해주고 빠져나오기
[김경록] [오후 3:33] 5가 될때 빠져나오는게 목표야?
[S군] [오후 3:33] 네
[김경록] [오후 3:34] 그러면 맞게 짰는데
[S군] [오후 3:34] 랜덤으로 던지다가 두수의 합이 5가 될때 빠져나오기
[김경록] [오후 3:34] 모가 안된다는건지?
[김경록] [오후 3:34] 웅 그건 맞지
[김경록] [오후 3:34] 니가 맞게 짰지 5가 될때 빠져나오는건 맞지
[김경록] [오후 3:34] 근데 왜 안된다고 질문한거였을까?
[김경록] [오후 3:34] 모라고 하는게 아니고 니가 질문할때 했던 생각을
[김경록] [오후 3:34] 추적해보기 위해 물어보는거
[김경록] [오후 3:34] 니가 아직 하는 방법을 모르는것 같음 ㅇㅇ
[S군] [오후 3:35] 출력이 쭉 되는데.. 마지막 쌍이 (2,3) 이런식으로 합이 5가 되는거 나오고 끝나는걸 기대했거든요
[김경록] [오후 3:35] 그렴 5가 됐을 때 빠져나오는걸 원하게 아니네  ---> 역시나 목표 설정 안됐을 뿐만 아니라 그냥 코딩부터 함
[김경록] [오후 3:35] 5가 될때까지 출력한 후에 빠져나오는게 니 목표였네  ---> 30분을 대화하고 나서야 목표가 뭔지 알게됨
[S군] [오후 3:35] 근데 막상 실행해 보면 
마지막 출력값이 (3,6) 이런식이 나와서
[S군] [오후 3:36] 출력은 해주고 빠져나오는거요..
[김경록] [오후 3:36] 그래 그럼 지금 5가 돼서 빠져나오긴 했는데
[김경록] [오후 3:36] 출력이 안되는게 문제잖아?
[S군] [오후 3:36] 네
[김경록] [오후 3:36] 몬말인지 이해 했어?
[S군] [오후 3:37] 그러니깐 제가 출력해서 본 값은 이미 두수의 합이 5가 되서 빠져나왔기 때문에 제가 확인이 불가능하다는말 아니에요?  ---> 실행 해보면 되는걸 물어봄
[S군] [오후 3:38] 저는 출력값에서 (2,3) 이 나오고 빠져나오는걸 기대한거고
[S군] [오후 3:38] or (1,4)
[김경록] [오후 3:38] 왜 물어보는거지?  ---> 그래서 짜증냄
[김경록] [오후 3:38] 실행 해보면 결과를 확인 할 수 있는데
[김경록] [오후 3:38] 물어보는 이유가 뭐냐
[김경록] [오후 3:39] 물어보는 이유를 알려줘라
[김경록] [오후 3:39] 뭐라고 하는게 아니고 이유를 듣고 싶다는거
[S군] [오후 3:39] 그건 형이랑 얘기하다보니 알겠는데,, 문제는 두수 합이 5가 되는걸 확인하려면 어떻게 해야할까요?
[김경록] [오후 3:39] 이런 질문을 떠올리라는거지 ㅋㅋ  ---> 드디어 의미있는 질문을 함
[S군] [오후 3:39] 두수합이 5가 되고 빠져나오는거
[김경록] [오후 3:39] 이런 질문을 스스로 떠올릴 수 있게
[김경록] [오후 3:39] 훈련하는게 프로그래밍 공부임
[김경록] [오후 3:40] 지금 상황을 파악 한거잖아
[김경록] [오후 3:40] 지금은 출력이 안되고 빠져나오는데 어떻게 고쳐야 할까?
[김경록] [오후 3:40] 이런 문제가 생겼지?
[S군] [오후 3:40] 네
[김경록] [오후 3:40] 그럼 어떻게 해결해야할까?
[김경록] [오후 3:40] 이런 생각이 들지?
[S군] [오후 3:40] 네 맞아요
[S군] [오후 3:40] 상황은 이해했는데
[김경록] [오후 3:40] 해결은 어떻게 해야할까?
[김경록] [오후 3:40] 이걸 니가 떠올려야지
[S군] [오후 3:40] 저 조건들중에 뺄건 없는데
[김경록] [오후 3:41] 문제가 뭘까?
[김경록] [오후 3:41] 이런 생각을 스스로 해
[S군] [오후 3:44] 형 이해했어요.. 출력을 먼저 시키고 if문을 달아야곘네요
[김경록] [오후 3:44] 고쳐
[S군] [오후 3:45] 그래야 제가 마지막 값을 확인하고 빠져나와지겠네요
[김경록] [오후 3:45] 일케 하는거다
[S군] [오후 3:45] 네 했습니다
[김경록] [오후 3:45] ㅇㅇ
[S군] [오후 3:45] 아,, 마지막문장이 무조건 println이여야 한다는 생각을 하고 있었습니다
[S군] [오후 3:45] 조건문이 그 뒤로 와도 되는군요
[김경록] [오후 3:46] 고치고 코드로 말해
[S군] [오후 3:46] public class Exercise02_15 {  ---> 결국 스스로 해결함
    public static void main(String[] args) {
        while(true) {
            int num1 = (int) (Math.random() * 6) + 1;
            int num2 = (int) (Math.random() * 6) + 1;
            System.out.println("(" + num1 + "," + num2 + ")");
            
            if((num1 + num2) == 5) {
                break;
            }

        }
    }
}
[김경록] [오후 3:46] 그래
[김경록] [오후 3:46] 글케 하는거지
[S군] [오후 3:46] 아하... 형 감사해ㅇㄱ요

728x90
  • 김용진 2022.06.10 12:51

    최근 포스팅이 없으셔서 많이 바쁘시구나 생각했는데 재미있는 포스팅이 올라와서 보는 내내 저의 모습을 떠올리며 재미있게 읽었습니다.
    사실 제가 부족한지 업무상에서도 이런 일이 빈번하게 발생하는 것 같아요
    업무가 주어졌을 때 목표점을 명확하게 생각하지 않고 급하다고 코딩부터 시작하면 꼭 문제가 발생하고
    잘못된 목표점을 기준으로 문제를 해결하려고 아둥바둥 대며 시간이 더 많이 소요되더라구요.
    답을 알려주시기 보다는 답을 찾는 과정속에서 과정을 어떻게 수정해야 하는지 생각 할 수 있는 조언을 해주신 대화가 인상깊었습니다.
    그리고 저 스스로에게도 다시 한번 물어보게 되네요~!
    항상 재미있게 포스팅 읽고 있습니다 감사해요~

블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.