프로그래밍은 사실 제대로 알려면 하드웨어까지 알아야 합니다.
왜냐하면 결국 프로그래밍 언어란 것은 하드웨어에게 이렇게 처리하라고 명령을 내리는 것 이기 때문입니다.
https://www.jjilbo.com/news/articleView.html?idxno=16000
컴퓨터 주요 구조도 - 전주일보
○ 컴퓨터 주요 구조도 컴퓨터 상식에 나가기에 앞서 기본적으로 컴퓨터 내부 부품을 알고 넘어가도록 합시다.일반적으로 컴퓨터는 하드웨어적으로 간단하게 구성되어 있지만 부품의 고가로
www.jjilbo.com
위에 같이 보면서 읽어보세요.
1. 메인보드는 모든 부품을 연결해주는 역할을 합니다. 그래서 모든 걸 품을 수 있다고 해서, 마더 보드 라고도 부릅니다.
2. CPU는 계산해주는 장치 입니다.
쿨러는 열 식히는 거니 넘어가겠습니다.
3. 그래픽카드는 아마도, 화면에 대한 것만 따로 계산해주는 그런 거 같습니다. 왜 우리가 그래픽 좋은 고사양 게임을 하려면 좋은 그래픽카드를 가져야 한다고 하잖아요?
화면이란 게, 모니터보면 다 하나하나 픽셀로 이루어져 있잖아요? 우리가 css에서 쓰는 px도 그 픽셀이구요. 요즘 통상적으로 해상도가 1920x1080 해상도 이니, 한 화면을 갱신 하려면 1920*1080개의 무수히 많은 픽셀(RGB 3개의 빛이 각자 정도껏 빛내며 매우 많은 색상을 표현합니다.)의 계산이 필요하잖아요? Red는 얼마나 빛을 낼지 Green은 등등등..
그래서 아마 그래픽카드는 이런 게 연산이 너무 많이 들어서, 따로 그래픽만을 위한 계산장치로 저는 이해하고 있습니다.
4. RAM 주기억장치라고 합니다. HDD(하드 드라이브), SSD도 기억장치인데 이것도 기억장치라고? 왜 기억장치를 최소 2개씩이나 쓰는거야? 하실 수 있는데,
예를 들어 우리가 의자를 만든다고 한다면, 의자의 도면 정도만 기억하면 되지, 뜬금없이 요리 레시피 같은 걸 기억할 필요는 없잖아요?
그러니까, HDD나 SSD는 창고,
저 RAM 같은 것은 작업대라고 생각하시면 됩니다.
이 작업대 안에 무수히 많은 부품들이 올라와 있다고 생각해 보세요. 정말 어지럽고 의자 만들기도 더딜 겁니다.
의자를 만든다고 하면,
창고(HDD)에서 몇몇의 부품(데이터)들을 작업대(RAM)로 가져오고, 우리의 손으로 의자를 만드는 거죠. 이 우리의 손으로 의자를 만드는 것(계산?)이 CPU가 하는 일이라고 할 수 있겠네요. 가져온 부품들로, 조합하여 우리가 의도한 것을 만들어 내는것이요.
5. 파워. 전기 공급해주는 겁니다.
그리고 컴퓨터는 왜 2진수를 쓸까요?
그럼 물어볼게요. 기계는 어떻게 숫자를 알 수 있을까요?
컴퓨터가 숫자를 알 수 있는 이유는, 전기가 있냐 없냐는 알 수 있기 때문에 그런거예요.
왜 우리가 뭐 삼성 나노미터 하면서 뭐 되게 작게 만들었다, 이런 이야기 들어보셨죠?
그게 전기가 들어가는 방을 아주 작게 만들었다는 이야기예요(추측). 반도체, 반은 전기가 흐르는..
그거를 아주 작게 만들었으니, 전기가 들어가는 방을 더 많이 넣을 수 있겠죠? 그래서 RAM의 용량이 커진 겁니다.
그래서 컴퓨터가 더 많은 걸 기억할 수 있게 되었어요.
컴파일러 라는 게 있어요. 우리가 짠 프로그래밍 코드를 컴퓨터가 알 수 있는 기계어로 변환해주는 애 인데,
이 기계어가 바로 2진수예요.
아마도 제가 알기로, CPU가 하는 더하기, 빼기, 곱하기 같은 명령어가 아마 2진수로 되어 있을거예요?
요 전기방의 패턴이 1(전기있음)0(전기없음)11001 이면 더하기.. 등
https://m.blog.naver.com/thebaleuncoding/221771077612
기계어, 어셈블리어, 고급 언어의 차이점이 뭐지?
기계어 (Machine Language) 기계어는 컴퓨터가 사용하는 언어 기계어는 컴퓨터가 사용하는 언어이다. 좀 ...
blog.naver.com
이거 대충 함 훑어보세요.
그리고 뭐 8비트, 1바이트 이러잖아요?
이 1비트가 전기방 1개예요.
1바이트는 8비트, 전기방8개구요.
1111 1111
쉽게 10진수로 보면 2의 8승 256.
원래 사실 자바스크립트라는 언어로 컴퓨터를 이해하는 건 매우 힘들어요.
왜냐하면 프로그래밍은 과거서부터 발전되어 왔고, 자바스크립트라는 언어는 매우매우 사용자 친화적이예요.
블랙박스라는 개념이 있는데,
저 블랙박스 안을 숨긴다, 보여지지 않는다 라고 해서 깜깜한 블랙박스라는 표현을 해요.
그리고 저 블랙박스라는 개념은 좋게 받아들여지고 있어요.
생각해보세요. 만약 우리가 document.querySelector('태그') 했을 때 우리가 저 querySelector 속을 알아야 저걸 쓸 수 있다면요? 그럼 정말 몇몇의 천재들만 프로그래밍 언어를 사용했겠죠.
하지만 우리는, 저 querySelector()라는 함수를 몰라도 '아, 저기에 태그나 선택자 등을 넣으면 HTML문서에서 그 요소를 가져올 수 있어' 이렇게 이해하고 있잖아요? 아마 자바스크립트 공식 문서에서도 그런 식으로 안내하고 있을 거예요.
(++ 지금은 이 블랙박스 영역을 추측할 수 있어야 디버그 등을 더 잘할 수 있게 된다고 깨달았습니다.)
그래서, 그래서 프로그래밍이 더 어려울 수도 있어요.
내가 뭔갈 했고, 의도한 데로 값이 나와도, 이게 왜 이렇게 된거지? 아리송 할 수도 있어요.
그래서 사실 영어가 중요해요.
저는 사실 프로그래밍 초-중급까지는, 수학보다는 영어가 더 중요하다고 생각해요. (사칙연산 할 줄 아는 가정 하에)
왜냐하면 사실 프로그래밍 언어의 모체는 영어니까요.
for ~동안, while ~ 동안 if ~ 만약
위 외에도, 사실 다 영어예요. querySelector 쿼리 선택자.
그래서, 우리가 함수 만들 때 함수의 이름 짓는 것도 굉장히 중요해요. 변수나.
함수를 저렇게 사용하기 편하게 블랙박스로 제공해 주는 대신, 함수의 이름으로 이게 무엇을 하는 것 인지 추측하게 해 줘야 해요.
특히 get은 얻다, set은 뭔가 값을 set하다, 아니면 is 이거는 ~~상태이냐 등 굉장히 많이 써요.
또, 프로그래밍 할 때 환경에 따라 숨겨져 있는 것 들도 있어요.
예를 들자면 document.
이건 어딘가에서 생성된 객체얘요. 객체인지 아는 방법은 console.log(document) 해보면 안에 필드도 있고, 메소드도 있잖아요. 이야기 해 보니까 console도 그렇네요.
누군가 자동으로 생성되게 해 놓고, 숨겨놓은 거죠. 어떻게 숨긴지는 저도 몰라요.
객체인지는 이름보고 파악한 거예요.
변수에 객체도 넣고, 원시타입(숫자, 문자열 등)도 넣잖아요? 그리고 보통 변수는 소문자로 시작하죠.
https://docs.popekim.com/ko/coding-standards/pocu-java
POCU 아카데미용 Java 코딩 표준 | 포프의 문서창고
컴퓨터처럼 사고하기 | 실무자에게 배우는 C | 고오급 C개발 공부 수백명에게 5.0 만점 리뷰를 받은 초특급 C 언어 인강! POCU 아카데미에서 C 언어를 마스터하세요!
docs.popekim.com
자바스크립트는 아니고, 자바 코딩 스탠다드 입니다.
이거 한번 보세요. 이런 스탠다드를 개발자들끼리 따르고 있기에, 개발자끼리는 코드로 대화한다는 이야기를 한답니다.
영어를 알아야 할 또 한가지 사실은, StackOverflow 등 광대한 프로그래밍 커뮤니티 때문에 그래요.
아마 과거에 패권국 미국이 반도체는 동양에 맡기고, 프로그래밍은 자기네들이 가져가 발전시키고 그랬을 거예요. 그래서 프로그래밍 정보는 거의 영어예요.
아마 저 StackOverflow 안에 여러분이 지금까지 프로그래밍 하면서 해왔던 고민들, 에러들 다 있을거예요.
영어로 검색해보는 습관도 기르셔야 해요. 저는 아예 브라우저 확장프로그램에 번역기를 설치해 놨어요.
또, 오류 뜨는 것도 한번 읽어보시고, 해석이 어려우시다면 번역기에 돌려보시고, 그 한글을 한번 읽으면서 생각해보세요.
컴퓨터가 프로그래밍 언어를 처리하는 방법은, 우리가 프로그래밍 언어를 작성하면,
실행을 하면 컴파일러가 컴파일(프로그래밍언어-> 2진수(아마?))해주고 그게 다 저 전기방 메모리로 들어가서 CPU가 하나하나 차례로 읽으면서 계산, 수행하는 겁니다.
그래서 사실 절차지향, 객체지향 이렇게 나뉘는 게 헷갈리실 수도 있어요.
절차지향 대신 객체지향이란 말은 잘못된 거 같아요.
절차지향 프로그래밍 언어라는 것에 객체라는 강력한 기능을 추가시킨 거 같아요.
프로그래밍의 발전은 되게 추상적으로 시작해서 발전한 면도 있어요.
아마도 객체를 넣는다는 것은 데이터를 한 곳에 묶어서 관리한다? 그런 느낌이었을 거예요.
예를들면 사람 3명을 만든다고 했을 때.
클래스가 없다면 (클래스는 무쇠주물같은 틀이고, 객체는 거기에 재료를 넣어 찍어낸 실제 제품같은 겁니다.)
person1Name = kim;
person2Name = kim;
person3Name = kim;
person1age = 14;
person2age = 15;
person3age = 16;
3명만 했는데도 이렇게..
100명 있다고 해 보세요. 코드가 마치 엑셀파일처럼 꽉 차 있을겁니다.
그래서, 클래스를 만들어서 한곳에다가 모아둔 거죠.
심지어 메소드(메소드와 함수의 차이는 메소드는 클래스가 가지고 있는 함수, 함수는 그냥 정의한 함수 입니다. 맞나?)도 딱 그 클래스가 가지고 있는 데이터에 맞는 메소드를 정의해 놓으니, 상당히 관리하기가 편하죠.
예를 들어 document.querySelector() 문서(html)에 관한 객체이고, 그 문서 중 쿼리선택자로 요소를 얻을 수 있는 메소드이죠.
아 참고로, 저런 querySelector()도 다 우리처럼 사람이 정의한 함수예요. 블랙박스 설명 드렸죠? 누군가 html문서와, html문서와 연결하는 것과, 그것 중 태그, 클래스, id를 html의 문서에서 잘 찾을 수 있는 똑똑한 사람이 정의 해놨겠죠. 뭐 이렇게 추측하는 겁니다.
클래스는 사실 저도 아직 어려워요.
그러니까, 사실 클래스를 잘 한다는 것은 정말 고수일 거예요.
클래스가 뭔지도 알고, 어떻게 쓰는지도 알지만,
정말 잘하는 프로그래머는 클래스들간의 관계를 잘 정의하는 사람일 거예요.
https://hckcksrl.medium.com/solid-원칙-182f04d0d2b
SOLID 원칙
객체지향 설계원칙
hckcksrl.medium.com
컴퓨터라는 것은, 기본적으로 계산기입니다.
compute가 계산하다. 란 뜻이잖아요.
그럼 calculate 하고 무슨차이일까요? 둘다 계산하다 라는 뜻인데?
compute에는 자동으로 계산한다는 뜻이 담겨져 있습니다.
자동으로.. 우리가 반복문 쓰고.. 조건문 쓰고.. 어떤 조건일때는 이렇게 하고.. 자동으로 반복하고..
컴퓨터의 시발점은 앨런 튜링이 만든 콜로서스입니다. 암호해독을 목적으로 만들었습니다. 이미테이션 게임이라는 영화가 있는데, 보면 기계가 계속 자동으로 돌아가고 있습니다. 영화도 재밌습니다.
짧게 보고 싶다면
https://www.youtube.com/watch?v=0REIhXWjo70
한번 봐 보세요.
결국.. 컴퓨터의 근본은 계산기라는 겁니다.
여튼 매우 발전한 프로그래밍에서, 우리가 할 것은 선조들이 만들어 놓은 함수나 메소드, 객체, 기능들을 이용하는 겁니다.
프로그래밍 정말 제대로 이해하고 싶으시다면,
https://www.inflearn.com/course/following-c/dashboard
홍정모의 따라하며 배우는 C언어 - 인프런 | 강의
'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 프로그래밍 인생, 한 단계 업그레이드!
www.inflearn.com
이 강의 추천드려요.
자바스크립트는 매우 사용자친화적이라 컴퓨터를 이해하기는 힘들고,
또 여러 언어를 접해보는 것도 좋은 점이 있어요.
결국 프로그래밍 언어도 도구라는 거예요. C언어로 구현한 거, 자바로도 할 수 있어요.
언어마다 공통적으로 있는 거 파악하는 것도 좋죠. 반복문, 조건문, 콜렉션(배열 등), 함수, 변수 등
우리가 쓰는 for문은 아마 대부분의 언어가 반복문은 거의다 for이라고 쓰는데
자바스크립트에서 for of, for in, forEach 등 이런 거 다 모체가 for문이예요.
더, 더, 더 편하라고 더 사용자 친화적이게 바꾼거죠.