독학의 노하우

외계인은 존재하는가?

JS에서 같은 이름의 변수를 만들수 있는가?

 

이 두 질문의 차이점은 전자는 인류가 모르고 후자는 안다는것이죠

하지만 이 두 질문의 공통점도 있습니다

그것은 나는 둘다 모른다는 점입니다

 

인류가 외계인의 존재 여부에 대해 알고자 어떤 노력을 하고있을까요?

인류가 이미 알고있는 지식을 활용해서 우주선을 만들어서 외계로 보내보기도하고

관측기계를 만들어서 관측을 하는등의 활동을 하죠

인류가 이런 시도를 해서 알아내기 전엔 신적존재가 알려주지 않는 이상 알 수 없죠

 

나에게 JS에서 같은 이름의 변수를 만들수 있는가? 라는 문제는 어떨까요?

내게 이 문제는 외계인이 존재하는지의 여부와 마찬가지로 내가 알지 못합니다

하지만 이건 외계인 문제와 다르게 이미 인류가 알고있죠

하지만 독학을 하는 내 입장에서는 물어볼 존재가 없다는것은 외계인문제와 다를바 없습니다

 

그러면 나는 이것을 알기위해 어떻게 할 수 있을까요

나는 인류가 우주에 대한 이해를 위해 기존의 지식을 바탕으로 연구해나가는 방법처럼

나도 기존에 알고있는 지식과 논리력을 바탕으로 이것을 알고자 하는 시도를 할 수 있습니다

 

지금부터 그 방법이 어떻게 만들어질 수 있을지에 대한 이야기를 해보고자합니다

다른말로 독학의 노하우입니다

 

bGV0IGFhID0gMTIzOwpsZXQgYWEgPSA0MzU7
let aa = 123; let aa = 435;

외계인은 존재할까? 라는 의문이 어떤계기로 인류에게 생겼던것과 같이 위와 같이 같은 이름의 변수를 만들수 있을까? 라는 의문이 나에게 찾아올 수 있습니다.

내가 이게 가능할지 어떨지 모른다고 할때 이것을 알 방법은 무엇이 있을까요?

 

그래서 나에게 미션이 주어졌습니다

"이게 가능할지 어떨지 모른다고 할때 이것을 알 방법은 무엇이 있을까" 이것을 알아내는것입니다

 

그래서 나는 고민한 결과, 나는 "실행해보면 될것같다" 라는 아이디어가 떠올랐습니다.

여러분은 다른 아이디어가 떠올랐을 수도 있습니다.

만약 아이디어가 안떠올랐다면 "이게 가능할지 어떨지 모른다고 할때 이것을 알 방법은 무엇이 있을까" 라는 이 질문에 아직 머물러 있어야합니다.

 

나는 "실행해보면 될것같다" 라는 아이디어를 떠올렸지만 정작 어떻게 실행하는지 모릅니다.

 

그럼 나의 그 다음 미션은?

"어떻게 실행할수 있을까"를 알아내는것입니다.

또 이와 동시에 생겨난 미션은 "어떻게 실행할 수 있을지에 대한 방법을 어떻게 알아낼 수 있을까?" 입니다.

 

나는 구글링을 하면 될것같다는 아이디어가 떠올랐고 구글링을 통해 실행하는 방법도 알게되었습니다

그래서 실행했습니다

 

실행해보니 뭔가 거부감 드는 빨간 라인이 표시되면서

Uncaught SyntaxError: Identifier 'aa' has already been declared

라고 하네요

 

그런데 나는 영어를 모릅니다

나에게 생긴 미션은? "이 영어의 뜻이 무엇이고 빨간 표시는 무엇을 의미하는가?" 라는 의문을 해결하는것입니다

동시에 생겨난 미션은 "이게 무슨뜻인지를 알아낼 방법은 무엇일까"에 대한 아이디어를 내는것입니다

 

그래서 떠오른 아이디어는 "구글링해보자 번역기에 넣어보자" 입니다

번역기로번역해보니 잡히지 않은 구문 오류: 식별자 'aa'가 이미 선언되었습니다. 라고 하네요

 

이렇게 까지 했을때 내가 최초 가졌던 같은이름의 변수는 만들수 있을까에 대한 답을 알게 되었다고 할 수 있을까요?

저라면 이 정도의 결과를 얻은 상황에서 "아.. 안되는거구나" 라고 생각하면서도 오해의 소지가 있을수도 있겠다라는 의심정도는 할 듯합니다

이 판단에는 오해가 있을 소지가 있으니 염두는 하는것이 좋습니다

그래서 오해를 해소해볼 방법으로써 "그럼 이름을 다르게 하면 문제가 없을까?" 라는 아이디어를 떠올렸습니다

 

bGV0IGFhID0gMTIzOwpsZXQgYWEyID0gNDM1Ow==
let aa = 123; let aa2 = 435;

그래서 이름을 바꿔보니까 빨간 오류메세지가 사라졌네요

이렇게 했을때 오류가 사라진것을 확인했을때 이전에 내린 결론에 오해의 소지가 많이 사라졌다고 평가할수 있을듯 합니다

 

이쯤되면 나는 어떤 결론을 내릴수 있을까요?

같은 이름은 못쓰네? 라는 내용을 나는 누구에게도 의존하지 않고 독학으로 내 연구를 통해 알아냈습니다

물론 내가 이 결과를 과정에서 잘못된 실험을 해서 오해했을 가능성도 꽤 존재합니다.

그렇다 할지라도 나는 내가 기존에 가지고있는 지식과 논리력을 통한 연구로 새로운 사실을 알아냈다라는 사실이 중요합니다

그리고 이렇게 얻은 사실에 오류가 존재한다면 추후 겪게될 상황들에서 나의 논리로 설명이 안되버리는 등의 상황이 만들어질 수 있고, 이런 상황이 오해를 풀 또다른 계기가 될 수 있게됩니다

과학의 역사도 보면 그렇죠 어떤 시대에 정설로 믿어졌던 이론이 시간이 흘러 뒤집어지기도 하는거죠

 

이 결과를 통해 아래와 같은 의문이 생겨날 수도 있습니다

아래와 같은 의문으로 이어질 수 있기를 바랍니다

 

aWYoIDEwID4gMjAgKXsKICAgIGxldCBhYSA9IDEyMzsKfQpsZXQgYWEgPSA0MzU7
if( 10 > 20 ){ let aa = 123; } let aa = 435;

이렇게 조건이 안맞아서 변수를 만들지 않으면 없는것으로 판단되어 아래 435를 담는 변수를 만들 수 있을까?

궁금함을 가질 수 있죠. 여러분이라면 궁금함이 생길거같나요? 이런 궁금함이 생기기 위해서는 적어도 if 에 대한 내용은 얕더라도 알아야겠지요

이것을 알아낼 방법은?

이전상황과 마찬가지로 "실행해보면 되겠다" 라는 생각이 들것같습니다

그리고 실행하는 방법은 이미 이전상황에서 습득해둔 상황입니다

그래서 바로 실행해보니 이번에는 에러가 없네요 문제없는거같습니다

 

그래서 두번째 테스트에서 이번에는 조건을 참으로 만들어서 let aa = 123; 가 실행되어 변수가 만들어지도록 해봅니다

첫번째 테스트였던 같은이름 변수 만들수 있는가에 대한 테스트의 결과 알게된 내용을 바탕으로 생각해본다면 아래 코드는 문제가 있어야할것이라고 생각이 들것입니다.

그래서 내 생각이 맞는지 실제로 확인해보고자 또 실행을 해봅니다

 

aWYoIDEwIDwgMjAgKXsKICAgIGxldCBhYSA9IDEyMzsKfQpsZXQgYWEgPSA0MzU7
if( 10 < 20 ){ let aa = 123; } let aa = 435;

문제가 발생을 안하네요?

나는 이것이 문제가 될것이라고 생각하고 테스트를 했습니다

그런데 문제가 될때 나오는 에러메세지가 안나오네요

내 생각은 어디서부터 잘못되었을까요?

위의 실험에 문제가 있었을까요?

논리적으로 내가 설명할 수 없는 상황이 만들어졌습니다

그래도 괜찮습니다. 이렇게까지 논리적인 접근을 했다면 이것으로 충분한 사고를 거친것이고 논리적 사고연습을 한것입니다

프로그래밍에서 이런식으로 논리적 사고를 하는것은 매우 중요합니다. 위에서 만들어진 나의 오해는 어떻게해서든 알아낼 방법을 찾아내서 풀면 되는것입니다

지금 당장 알아내지 못해도 괜찮습니다

그래서 일단 여기까지의 상황과 해결해내야할 숙제에 대한 내용을 글로 정리해두세요

 

bGV0IGFhID0gMTIzOwpsZXQgYWEgPSA0MzU7Ci8vIOuCmOuKlCDsnIQg7Iuk7ZeY7J2EIO2Gte2VtCDqsJnsnYAg7J2066aE7J2YIOuzgOyImOuKlCDrp4zrk6TslrTsp4gg7IiYIOyXhuydjOydhCDsnbTrr7gg7YyM7JWF7ZWcIOyDge2ZqeyXkOyEnCDslYTrnpjsnZgg7Iuk7ZeY7J2EIO2VtOuztOyVmOuLpAoKaWYoIDEwID4gMjAgKXsKICAgIGxldCBhYSA9IDEyMzsKfQpsZXQgYWEgPSA0MzU7Ci8vIOydtOqyg+ydgCDssqvrsojsp7ggYWHrs4DsiJjqsIAgaWbsobDqsbTsnbQg66ee7KeAIOyViuyVhCDrp4zrk6TslrTsp4Dsp4Ag7JWK7JWY7Jy866+A66GcIOuRkOuyiOynuCBhYeuzgOyImOqwgCDrp4zrk6TslrTsp4DripTrjbAg66y47KCc6rCAIOyXhuyXiOuLpAoKaWYoIDEwIDwgMjAgKXsKICAgIGxldCBhYSA9IDEyMzsKfQpsZXQgYWEgPSA0MzU7Ci8qCuq3uOufrOuCmCDsnbTqsoPsnYAg7LKr67KI7Ke4IGFh67OA7IiY6rCAIGlm7KGw6rG07J20IOunnuyVhCDrp4zrk6TslrTsoYzsnYzsl5Drj4Qg67aI6rWs7ZWY6rOgIOuRkOuyiOynuCBhYeuzgOyImCDrp4zrk6TslrTsp4DripTrjbDripQg66y47KCc6rCAIOyXhuyXiOuLpAoxMCA8IDIwIOyhsOqxtOydtCDssLjsnbgg7J207Jyg66GcIGxldCBhYSA9IDEyMzsg6rCAIOyLpO2WieuQmOyWtOyguCBhYeuzgOyImOqwgCDrp4zrk6TslrTsp5Dsl5Ag65Sw6528IApsZXQgYWEgPSA0MzU7IOyXkOyEnCDqsJnsnYDsnbTrpoTsnYQg7IKs7Jqp7ZWY6rOg7J6QIO2VmOuKlCDsnbTsnKDroZwg66y47KCc6rCAIOuwnOyDne2VtOyVvO2VnOuLpOqzoCDsg53qsIHtlZjripTrjbAg66y47KCc6rCAIOyXhuuKlCDsnbTsnKDrpbwg7JWM7JWE64K07JW87ZWc64ukCiov
let aa = 123; let aa = 435; // 나는 위 실험을 통해 같은 이름의 변수는 만들어질 수 없음을 이미 파악한 상황에서 아래의 실험을 해보았다 if( 10 > 20 ){ let aa = 123; } let aa = 435; // 이것은 첫번째 aa변수가 if조건이 맞지 않아 만들어지지 않았으므로 두번째 aa변수가 만들어지는데 문제가 없었다 if( 10 < 20 ){ let aa = 123; } let aa = 435; /* 그러나 이것은 첫번째 aa변수가 if조건이 맞아 만들어졌음에도 불구하고 두번째 aa변수 만들어지는데는 문제가 없었다 10 < 20 조건이 참인 이유로 let aa = 123; 가 실행되어져 aa변수가 만들어짐에 따라 let aa = 435; 에서 같은이름을 사용하고자 하는 이유로 문제가 발생해야한다고 생각하는데 문제가 없는 이유를 알아내야한다 */

사실 독학을 한다해도 코딩관련 커뮤니티에 이 문제를 공유해서 물어볼 수도 있습니다

위의 정도로 내가 파악한 상황을 논리적으로 정리해둔 의문을 담은 글은 충분히 다른 사람들도 관심을 가질만한 주제가 될 수 있을것이고 그런만큼 도움이 될 의견을 얻을 확률도 높아질 것이라고 생각합니다

 

처음으로 돌아가서 같은이름의 변수를 만들수 있는가의 의문은 어떻게 시작될 수 있는가에 대해 생각해볼 필요가 있습니다

이런 의문을 만들어내지 않으면 애초에 이것을 알아야할 이유도 만들어지지 않는것과 다름없고 이렇게 계속 스스로에게 질문을 던지고 해결해나가는것은 성장하는데 필수적입니다

이 이야기에 대해서는 다음기회에..