일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- BFS
- 네트워크
- App Runner
- CS
- React.js
- 스레드
- cs #네트워크
- 해시
- IT개발캠프
- react-query
- html
- 프로그래머스
- 프로젝트캠프
- ip
- 개발자부트캠프
- 유데미
- 알고리즘
- react
- 인사이드아웃
- 메모리
- Algorithm
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- 리액트
- 자바스크립트
- 타입스크립트
- 스나이퍼팩토리
- javascript
- 웅진씽크빅
- typescript
- 프로세스
- Today
- Total
Bin's Blog
생각하는 자바스크립트 1편 - 프로그래밍이란? 본문
들어가며
이 글이 200번째 글이다. 그동안 반 년이라는 시간 동안에 쉼 없이 써왔다. 때로는 지쳐서 쉬기도 했지만 200개의 글을 써보자고 목표를 잡고 달려왔는데 목표에 달성한 나에게 박수를 보낸다.
200개의 글을 써오면서 "어떻게 하면 더 글을 잘 정리할 수 있을까? 어떻게 하면 글에 내 생각을 담을 수 있을까?"등 여러 고민을 해왔다. 그리고 이제는 양질의 글을 써야겠다 다짐했다.
오늘부터 자바스크립트에 대해서 더 깊게 알아보는 시간을 가지려고 한다. 제목도 "생각하는 자바스크립트"라고 지은 이유도 이 시간을 통해서 자바스크립트에 대해서 더 깊게 고민해 보는 시간을 가졌으면 좋겠다는 의미에서 지었다.
"나는 왜 자바스크립트를 공부할까?"에 대한 이제까지의 나의 답은 "Front-End 개발자가 되기 위해서 or 웹에서 쓰는 유일한 프로그래밍 언어"가 전부였다.
그렇다 나한테 자바스크립트는 목적을 달성하기 위한 수단이었다. 그것이 잘못된 생각은 아니라고 생각한다. 누구나 다 그렇게 처음에 시작하니까.
그러나 문득 어느 순간에 들었던 생각은 "내가 과연 자바스크립트를 제대로 이해하고 쓰고 있을까?" 이 질문에 대한 해답이 나에게 가장 큰 관심사이었다.
그래서 나는 그 해답을 찾아가기 위해서 모던 자바스크립트 Deep Dive와 함께 할 예정이다.
지금까지 돌아보면 나의 글이 단순한 정보전달의 목적만 그쳤었다. 이제 정보에 대한 나의 생각, 궁금증을 담아보려고 한다.
오늘은 첫 번째 주제로 자바스크립트를 본격적으로 들어가기 전에 간단하게 프로그래밍에 대해 살펴보고자 한다.
프로그래밍
프로그래밍의 여러 사전적 정의가 있다. "0과 1밖에 알지 못하는 기계가 실행할 수 있을 정도로 정확하고 상세하게 요구사항을 설명하는 작업"이다.
때로 코딩을 하다 보면 내 머릿속에 있는 생각들을 컴퓨터가 완벽히 이해해서 코드가 잘 작동했으면 좋겠다고 생각했던 적이 얼마나 많은지 모른다.
내가 이과 & 전공자 출신이 아니다보니 가장 힘들었던 것은 컴퓨팅 사고였다. 초기에 "내가 작성한 코드를 어떻게 컴퓨터가 이해할 수 있을까?"에 대한 고민이 전혀 없었기에 난항을 많이 겪었었다.
내가 감정적인 스타일이다보니 냉철하며 이성적인 스타일을 지닌 컴퓨터와 잘 맞지 않았던 건 사실이었다. 그래서 나는 이성적인 판단과 사고 방식을 가지기 위해서 지속적으로 훈련했다. 나의 훈련법은 "역지사지"이었다. 코드를 짜면 "컴퓨터가 나의 코드에 대해 어떻게 생각하고 이해할까?"에 대한 부분에 고민을 많이 했었다. 에러가 나면 거꾸로 올라가서 문제가 발생하는 지점을 파악하기 위해 console.log()를 많이 사용했었다.
컴퓨터는 논리적, 수학적 사고를 좋아한다. 주어진 문제를 어떤 조건일 때 어떤 코드를 실행할지 기준을 가지고 컴퓨터에게 수치와 함께 정확한 정보를 제공해줘야 한다. 또한 문제를 작은 단위로 분해하고 패턴화해서 추출해야 한다. 처음에는 작은 단위로 패턴화한다는 말의 뜻을 이해하지 못했는데 내가 요새 알고리즘 문제를 풀면서 작은 기능 단위로 쪼개서 문제를 해결하려는 습관을 들이려고 하다 보니 이해하게 됐다.
예시 - 2023.11.03 - [Algorithm] - [프로그래머스] Level2 - 우박수열 정적분(Javascript)
프로그래밍 언어
우리가 문제 해결 방안을 컴퓨터에게 전달된다. 이때 사람이 이해할 수 있는 자연어가 아니라 컴퓨터가 이해할 수 있는 언어, 기계어로 전달해야 한다.
하지만 사람이 기계어로 이해해서 기계어로 직접 명령을 전달하는 일은 무리수다. 우리가 사용하는 언어와 체계가 다르기 때문이다.
그래서 Syntax라고 하는 약속된 문법으로 구성된 프로그래밍 언어를 사용해 프로그램을 작성한다. 코드를 작성하다 보면 SyntaxError가 자주 발생한다. 컴퓨터가 이해할 수 없는 문법으로 작성했을 때 발생하게 된다.
프로그램을 작성한 후, 기계어로 변환하는 번역기를 컴파일러 혹은 인터프리터라고 한다.
프로그래밍은 프로그래밍 언어를 사용해 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션이다. 프로그래밍 언어는 Syntax(구문)과 Semantics(의미)의 조합으로 구성된다.
const number = "string";
console.log(number * number);
위의 코드는 const라는 keyword를 사용해서 number라는 변수를 만들었고 그 안에 string이라는 문자열을 넣어서 출력해주고 있다.
코드 상으로 문제되지 않지만 변수의 이름을 number로 했으니 그 의미에 맞는 값을 넣어주는 것이 중요하다.
이처럼 프로그래밍 언어에서 구문과 의미는 매우 중요하다.
결과적으로, 우리가 프로그래밍을 하는 이유는 간단하다. "문제 해결"때문에 하는 것이다.
프로그래밍은 요구사항을 분석하고 적절한 자료구조와 함수를 사용해서 그 흐름을 제어하는 것이다.
마무리하며
오늘 200번째 글이라는 특수성 때문에 서론에 얘기가 길어졌다. 양해 부탁드린다.
기술 블로그는 나에게 특별한 의미이다. 내가 공부했던 기록을 남길 수 있을 뿐만 아니라, 나의 생각과 철학을 이곳에 녹여낼 수 있기 때문에 소중하다.
좋은 글을 쓰기 위해서 끊임없이 찾고 고민하겠다. 다음 목표는 400개다.
'JavaScript' 카테고리의 다른 글
생각하는 자바스크립트 2편 - 자바스크립트의 역사 (0) | 2023.11.17 |
---|---|
얕은 복사와 깊은 복사 (0) | 2023.10.30 |
기본형 데이터와 참조형 데이터 (0) | 2023.10.24 |
JS Framework & Library 트렌드 (0) | 2023.10.14 |
Garbage collection (0) | 2023.09.18 |