최근 새로운 스마트폰을 샀어요.

오랜만에 구입했어요.

스마트폰에 대한 이야기를 해보고자 합니다.

 

한 스마트폰 제조회사가 있어요.

이 회사에서 스마트폰을 생산하고자 스마트폰을 설계도를 만들었지요.

이 설계도의 이름을 "APhone" 이라고 정했습니다.

설계도 이름은 대문자로 시작하도록 짓는 업계의 규칙이 있었어요.

스마트폰의 기능으로써 사용자가 스마트폰에게 이름을 지어줄수 있도록 했대요.

그리고 메세지가 오면 소리를 내어 알려주는데 소리의 볼륨을 0에서 10사이로 설정할수 있도록 했다고 해요.

이 설계도는 제조공장으로 보내져서 이 설계도대로 스마트폰을 생산합니다.

공장에서는 설계도대로 똑같이 생긴 스마트폰을 여러개 찍어냈죠.

생산되어져서 출고될때의 소리 볼륨은 5로 해두었다고 합니다.

이렇게 만들어진 스마트폰들은 시중으로 유통되어 판매되어졌고, 그렇게 해서 내 손에 까지 들어오게 됩니다.

 

나는 내 손에 들어온 스마트폰의 이름을 더 이뻐해주고자 "흰둥이"라고 이름지어줬어요.

나는 흰색으로 샀거든요.

매일 화면도 천으로 깨끗히 닦아줬어요.

그리고 아침에 일어나면 가장 먼저 찾았고 자기전에도 함께 했죠.

스마트폰은 새 소식이 오면 소리를 내서 내게 알려줘요.

잠을 자기전에는 스마트폰의 목소리를 0으로 해둬요.

그리고 아침에 일어나면 이것을 다시 7로 해두었죠.

10까지 할 수 있는데 너무 컷어요.

스마트폰은 내가 어딜가나 항상 데리고 다녔어요.

다니면서 내 눈으로 봤던 것들을 스마트폰의 눈을 통해서도 보게 해서 스마트폰도 기억하게 했어요.

그래서 스마트폰은 나랑 공유하고있는 기억이 많습니다.

 

어느 날 친구에게 내 스마트폰을 소개해줬어요.

"이게 내가 쓰고있는 전화기야"

 

그랬더니 친구가 자기도 똑같은거 오늘 샀다는거에요.

나랑 똑같은 흰색으로 샀대요.

친구손에도 이미 내가 산 전화기와 똑같은게 있는거에요.

그리고 이름도 "밝음이"라고 지어줬대요.

산지 얼마 안돼서 이름만지어주고 전화벨소리 크기는 손대지 않았대요.

아직 산지 얼마 안되서 사용방법을 잘 모른대요.

앞으로 많이 알아가야한다고 하더군요.

 

그리고 2년 후, 시간이 흘러 새로운 스마트폰이 출시됐고, 난 그걸 샀어요.

그래서 내 손엔 지금 새로운 스마트폰이 있죠.

예전에 쓰던 "흰둥이"는 더 이상 내 손에 없어요.

지금 나는 새로운 스마트폰과 함께 하고있습니다.

 

나는 더 이상 "흰둥이"가 기억나지 않습니다.

이 글은 프로그래밍 입문자 혹은 초보자 분들을 위한 글입니다

이 글에서는 내가 생각하는 효율적인 입문방법을 소개하고자합니다

학습에는 왕도가 없고 사람마다 맞는 방법이 다를 수 있다는 점 참고하시기 바랍니다

그런거 없고 차이점 없습니다

그러면 같은 역할을 하는 while랑 for둘다 알아야 할지에 대해 이야기해보려고 합니다

처음에는 둘중 하나의 사용법만 익히기를 추천합니다

그리고 선택한 한개에 익숙해지기 위해 많이 사용해보는것이 아주아주 중요합니다

익숙해졌을 무렵 나머지 한개를 익히는 건 별 문제 아닙니다.

그때가 되어서도 나머지 한개는 익히지 않아도 상관없습니다.

이쯤에서 궁금해지는것이 있습니다.

그러면 왜 같은역할을 하는게 두개나 있지?

프로그래밍언어는 시간이 흐르면서 계속 버전이 올라가요

구버전으론 만들수 없는 프로그램을 신버전으로는 만들 수 있게된다는 의미일까요?

그렇지 않습니다

구버전으로도 신버전으로도 동일한 프로그램을 만들 수 있습니다

그런데 이때 차이가 있습니다

그 차이는 코드의 모습입니다

신버전의 코드로 더 예쁘게 만들수 있습니다

프로그래밍 할때에는 고려해야할 가치들이 있는데요

일단 성능을 생각해야겠지요

또 성능만큼 중요한것이 예쁜코드입니다

버전 올라감에 따라 새로운 문법들이 생겨납니다

이렇게 생겨나는 새로운 문법들은 예쁜코드를 만드는데 도움을 주기위함 입니다

그런맥락에서 while과 for가 있는것이고 두개는 같은역할을 하지만 코드의 모습이 다릅니다

코딩을 처음 하는 우리 입장에서 생각해봅시다

우리에게 지금 중요한건 뭘까요

코드를 예쁘게만들기?

아닙니다

우리는 예쁘게는 둘째치고 돌아가게 만들기도 쉽지 않습니다

돌아가게 만드는데 먼저 집중합시다

돌아가게 만드는데 필요한 최소한의 문법만 익혀서 돌아가게 만드는 연습을 합시다

돌아가게 만드는데 어느정도 익숙해졌을 때 그때 비로소 코드의 미적인 부분에서의 아쉬움이 눈에 들어오는겁니다

그런데 지금은 아닙니다.

프로그래밍언어는 버전을 거듭할 수록 코드의 아름다운 설계를 위한 여러가지 문법들이 늘어났고 현재 프로그래밍언어에서 제공되는 기능들중 대부분의 것들은 편의, 아름다운 설계를 위한 것들입니다

우리 초보자들은 위에서 말했듯 코드의 미적인 내용을 고려할 여유 없습니다

돌아가게도 못만듭니다

또한 우리는 코딩을 하며 아쉬움이나 불편을 느껴본적도 없습니다.

프로그래밍언어에서 편의를 위해 제공되는 다양한 요소는 우리들에게는 불편함을 해소해주는 요소가 아니라 그저 배워내야하는 부담들일뿐인겁니다.

우리는 그것들을 보며 편하다는 생각을 전혀 할 수 없습니다.

애초에 그게 없어서 불편했던적이 없습니다.

지금 코딩 처음시작했으니까요.

우리는 배워야할 내용을 최소화 하고 최소화해서 배운 몇개안되는 방법에 익숙해지는데 집중하는게 중요합니다.

몇개안되는것을 익혔다고 해서 더 알면 만들수있는거 조금안다고 해서 못만들고 그런거 아닙니다.

필수적으로 알아야할 것들과 선택적으로 알아도 되는 것에 대해 간략히 이야기해보겠습니다.

 

let 으로 변수만들기

값을 담기위한 방법입니다

이때 var, const는 알지 않아도 됩니다.

let과 동일한것은 아니지만 나중으로 미뤄버려도 상관없습니다.

변수를 만들때는 그냥 let을 사용하세요.

변수를 익히면서 유효범위에 대한 내용은 익힙시다

클로저와 실행컨텍스트라는것에 대해서는 나중으로 미룹시다

클로저, 실행컨텍스트는 변수의 유효범위에 대한 이해가 생겼을때 스스로 당연하다고 생각할 수 있게 되는 내용입니다

 

if 조건에 따라 코드 실행하기

만약 마트에 계란이 있다면 우유를 사오도록 하는등의 상황에 따라 흐름의 분기를 만드는 방법입니다

switch문, 삼항연산자는 익히지 않는것으로 합시다

if의 else, else if 정도는 익혀봅시다

 

while 로 반복하기

반복을 구현할 수 있는것이 상당히 많습니다 나열해보자면 for, while, do...while, for...in, for await.. 많습니다.

이 모든것들은 나중으로 모두 미룹시다.

while만 씁시다. while만으로 모든게 가능합니다.

while이 싫다면 for를 써도 상관없습니다.

그런데 while을 추천하는 이유는 if와 코드의 모습이 같습니다.

 

함수 사용방법 익힙시다

이것은 코드를 예쁘게만들어주는데에 큰 역할을 하는 요소입니다

저는 코드예쁘게 만드는 요소는 우선순위에서 순위를 낮추고자하는데 그럼에도 함수는 필수 익힘요소로 넣었습니다

함수의 매개변수는 뭐고 리턴이 뭔지는 잘 알도록 합시다

다만 화살표함수는 익히지 않아도 됩니다

제러레이터, 이터레이션, 프라미스, async/async 키워드 익히지 않아도 되고 this, arguments, call, apply, bind등 함수관련 기능들 익히지 않도록 합시다

콜백이란것에 대해서 따로 공부하지맙시다

 

배열과 오브젝트는 익힙시다

배열을 반복시켜주는데 사용되는 forEach, map, reduce, filter, every 등등등 익히지 맙시다

옵셔널체이닝, 널리시, 게터세터, 스프리드, 비구조화할당 익히지 맙시다

프로토타입과 상속, 클래스 만드는 방법 익히지맙시다

 

문자열, 숫자 처리방법익힙시다

백틱사용법익히지맙시다

++ 같은 연산자익히지 맙시다

비트연산 필요없어요

 

에러핸들링 방법익히지 맙시다

try catch throw 등등 익히지 맙시다

핸들링 하지 말고 그냥 에러가 애초에 안나게 합시다

에러핸들링이란건 에러를 나게해서 그 에러를 처리하는 방법에 대한 내용입니다

 

 

물론 여유가 된다면 하면 됩니다만 그렇지 않다면 위에 나열한 최소한의 내용만 익혀서 그것에 익숙해집시다

근데 어떻게 익숙해지지?

자주 써봐야지요

뭐에 써먹지..?

내게 만들어보고싶은 아이디어가 넘쳐난다면 좋겠지만..

코드를 이용해서 할 무언가가 떠오르지도 않을 수 있습니다

이럴때 쉽게 선택할 수 있는 해볼거리가 코딩문제 풀기입니다

많은 코딩문제 풀어볼 좋은 사이트들이 있습니다

검색해보면 어렵지않게 접할 수 있습니다

누구나 알고있다

알려줘야 아는 새로운 내용이 아니다

하지만 모르는것 처럼 생활한다

그러다가 문득 어떤 계기들로 인해 다시 돌아보게 된다

우리가 서로 언제까지 볼 수 있을지 모른다

그렇다해도 일단 지금은 우리가 볼 수 있다

나중에는 절대로 못하지만

지금은 나중에는 절대로 못할 그것들을 할 수 있는 특별한 시간이다

이 기계의 이름을 "자명종"이라고 부를것이다

 

이것을 만들기 위해 나는 일단 음반재생기계를 하나 준비하기로 했다

준비한 이 기계안은 텅텅 비어있다. 배터리도 없고 음반도 없다.

그래서 아직은 이 기계는 사실상 아무 기능을 하지 못한다.

별도의 작업을 통해 이 기계를 "자명종"으로 만들어보고자 한다

 

과정은 다음과 같다

 

1. 꽹가리 치는 소리가 나도록 하여 지름 12cm의 원반에 기록한다.

그리고 이 원반을 만들때 주의할 점은 원반 가운데에는 구멍을 만들어둬야한다.

음반재생기계는 뚜껑을 열어보면 원반 끼우는 튀어나온 부분이 있다.

원반 가운데 만든 구멍을 음반재생기계의 튀어나온 부분에 맞게 넣어서 고정시킬수 있도록 했다.

 

2. 원통형태로 에너지 저장용기를 만들고 여기에 니켈수소를 담는다.

이 원통의 지름은 3.5-14.5mm 이고 원통높이는 51mm로 만들어서 음반재생기계의 배터리 넣는곳에 넣는다.

 

이렇게 규격에 맞게 만든 두개의 요소(음반, 에너지저장용기)를 음반재생기계에 결합하고 음반재생기계를 구동시키면, 내가 만든 두개의 요소는 음반재생기계에 의해 쓰임을 받게된다

음반재생기계가 사용할 수 있도록 음반재생기계의 요구조건에 맞게 만든것이니 음반재생기계는 내가 만들어서 기계에 제공한 저장용기 안의 에너지를 이용할 수 있게 되었고 이 힘을 이용해서 원반에 기록한 데이터를 읽어들여 소리로 변환해낼 수 있게되는 것이다

 

이 작업은 결국 음반재생기계가 내가 만든 요소를 사용할 수 있도록 만들어서 음반재생기계에 제공한 작업이다

그리하여 음반재생기계에 의해 내가 만든 요소가 이용되는 형태가 된것이다

이를 위해 나는 음반재생기계의 규격에 맞춰서 요소를 만드는 작업을 해야했다

만약 원반, 원통의 형태가 아닌 네모형태로 만들었다면 내가 만든 요소는 음반재생기계에 의해 이용되지 못했을 것이다

 

그런데 중요한 것이 빠졌다

이 기계를 알림이 울려할 시간에 구동시킬 방법을 마련해두지 않았다

재생버튼을 눌러야 소리가 날텐데 말이다

 

그래서 나는 아이디어를 떠올렸다. 고양이에게 시계보는 방법을 알려주었고 아침 정해진 시간에 버튼을 누를수 있도록 했다

이렇게 고양이는 나에 의해 쓰임을 받게 되었다.

고양이가 만약 제대로 작동하지 않았다면 강아지로 교체할 수도 있었을 것이다.

 

그래서 나는 이렇게 해서 "자명종"을 만들 수 있었다.

뭐부터 해야할지 생각을 좀 해본결과 요리는 식재료의 성질의 이해를 바탕으로 가공하고 조합해서 맛과 영양을 만들어내는 것을 의미한다는 생각을 했고 이에 따라 식재료에 대한 이해와 식재료를 다루기 위한 도구에 대해서 잘 알아야겠다는 결론을 냈다.

그래서 나는 식재료에 대해 깊이 알고자 식재료를 이루는 물질은 무엇이고 물질이란 어떤정의를 가지고 있으며 물질을 이루는 기본단위는 무엇일까 등의 것을 아는것이 기본이고 기초라고 판단하고 이것을 공부하기로 했다.

물질의 고전적 의미는 물체를 이루는 존재로 여겨왔지만 인류가 새로운 것들을 발견해나가면서 이 물질에 대한 정의가 조금씩 바뀌어왔다고 한다. 또한 물질의 기본단위는 딱딱하고 관통할수 없는 것을 기본단위라 여겼지만 이 또한 인류가 많은것을 발견해나가면서 정의가 계속 변해갔고 현대 물리학에서는 쿼크와 렙톤이 물질을 이루는 기본입자라고 파악한다고 하는걸 알게됐다.

쿼크와 랩톤이 물질의 기본입자임을 모른다면 아마 식재료를 다루는데 있어서 매우 큰 지장이 있을거라 판단하여 마음속 깊게 새기고 더 깊이 공부하기로 했다.

공부를 하다보니 양자역학과 전자, 양성자, 중성자등에 대한 내용을 접하게 되었다.

특히 양자역학을 공부하며 내가 요리한 음식은 먹어보기 전에는 맛이 정해져있지 않고 한입 먹어 맛을 볼때 맛이 결정된다는 사실도 깨닫게 되었다

또한 물질의 상태에 대한 내용도 알게되었다. 물질의 상태는 고체, 액체, 기체로 나뉘며 이는 온도, 압력등에 따라 결정되며 이 상태를 물질의 상이라고 한다고 한다

요리할때 열을 가해 물질에 해당하는 식재료의 상태를 변화시키는것은 빠질수 없는 내용이므로 열역학이라는 것을 전문적으로 깊게 더 공부하기로 했다.

나는 그렇게 "요리의 기본 및 기초" 라고 생각되어지는 내용들에 대한 공부를 이어나갔다.

요리를 위해서는 칼을 다뤄야하니 칼을 이해하고자 칼을 제작하는 제철기술도 공부했다.

그렇게 공부를 한지 4년정도가 흘렀다.

어느날 집에 손님이 오기로 했다.

손님에게 음식을 대접하기 위해서 어떻게 할지 고민을 했고 고민 결과 우편함에 중국집 전단지가 쌓여있다는것을 기억해내고 전단지를 가지러 우편함으로 갔다.

나는 몇개월 전에 마음이 매우 답답해서 그냥 나와 별로 관계 없는 아무나들이 있는 곳에서 내 이야기를 했던 적이 있다

사실 나와 상관없는 아무나들이였기 때문에 사실 그들이 어떤 생각을 할지 큰 생각 없었고 내 말에 귀를 기울여 줄지에 대해서는 기대를 하지 않았다

그냥 나는 누군가에게 그냥 아무말이나 하고싶었던것 같다

오늘, 그때의 일을 기억하고 오랜만에 말을 걸어주신 분이 계셨다

마찬가지로 아무나였을 내 말을 기억을 해주고 내 생각이 나서 말을 걸어준다는 것은 매우 특별한 일이다.

이건 나부터 안하는 일이다.. 떠올려보면 나는 누군가에게 그래본적이 있는가 싶다.

살다 보면 중요한 가치라고 생각되는것들이 만들어지게 돼

그것이 뭐가될지는 그 사람이 살면서 어떤 일을 겪게 될지에 따라 사람들마다는 조금씩 다르겠지

나는 그것이 내 자아실현이라고 생각되었고 이 생각은 30대 초중반의 나를 지배했어

내 생각을 실행을 통해 이루고 결과를 만들어내는 것이였지

사실 이것은 30대 이전 더 어릴때에도 그 활동을 해왔지만 그게 뭔지에 대한 인지 없이 단지 본능적으로 손이 가는 활동을 해왔던것이고 그게 30대에도 그리고 지금까지도 이어지고 있는것일 뿐인것 같아

이 자아실현의 과정에서 중요했던것은 일은 나에 의해 기획되고 나에 의해 실행되어야했어. 꼭 나에 의해서만, 남의 도움이 개입되면 안됐어.

그리고 이렇게 실행된 일에서 성과가 만들어지는 경험을 하면서 스스로에 대한 긍정적인 기분이 최고조에 달하게 됐지.

생각에만 머물러 있을때는 0이지만 실행을 하면 운이라는 요소와 결합해서 어떤 결과를 만들어낼지 모른다는 것을 운이 좋게 30대에 실제 일어난 일을 통해 경험하게 된것이였지

그래서 30대 초반의 키워드는 "실행" 이였어. 그리고 실제로 이루어진 성과는 내 자존감을 높이는데도 결정적 역할을 했어. 자만할 정도의 자신감으로 가득차있었으니까.

시간이 좀 흐른 글을 쓰는 지금의 내 가치에는 어떤 변화가 생겼는지 생각해보게됐는데 나는 여전히 자아실현은 내 뇌를 기쁘게 해주는데 중요한 요소인듯해

생각해보면 자아실현이 중요한 가치였던 이유는 그만큼 이를 통해 뇌가 기뻐할 수 있기 때문인거였겠지

그런데 나이가 들면서 중요한 가치들이 조금 더 보이게 되더라고

평소 별 생각없던 평범한 것들의 가치에 대한 재평가가 이루어지는거 같아

개발을 왜 하는가에 따라 달라질 수 있다고 생각한다

개발을 하는 이유는 많겠지만 대표적으로 들어보자면 다음과 같다

 

1. 취업

취업한다는 것은 남이 요구하는 것을 남이 요구하는 방법대로 해주어야하는 입장이 되겠다는 의미이다

이때 남은 주로 나를 고용한 고용주 혹은 의견을 맞춰서 함께 일해야하는 동료가 될것이다

이들이 내게 요구하는것이 최신기술이라면 나는 선택의 여지없이 그것을 익혀야한다

 

2. 나의 문제 해결 or 내 비지니스 운영

코드를 이용해서 이루고자 하는 것에 대한 해결방법의 선택이 온전히 내 뜻과 결정에 달려있는 경우이다

방법의 좋고 나쁨의 저울질은 스스로가 할수 있다

선택된 방법으로 목적달성을 할 수 있고 이 방법이 스스로의 판단에 의해서 문제가 없다고 생각된다면 어떤 방법이던 상관없다

꼭 새로나온 최신의 기술이여야만 할 필요가 없다는 의미가 된다

나는 식당을 운영하고 있고 웹사이트를 만들어서 웹상에서 손님으로부터 예약을 받도록 하고자 한다

이때 최신기술인 Svelte를 이용해서 시스템을 구축하지 않으면 손님이 예약하는데 문제가 생기는지에 대해 생각해보자

PHP+JQUERY를 이용했을때 손님이 기술스택을 뜯어본 후.. PHP+JQEURY가 사용된것을 보고 예약을 취소하게 될지도 생각해보자

 

결론은 기술의 이용 목적을 어디에 두느냐에 따라 최신기술을 따라가야할지가 결정된다

+ Recent posts