마지막챕터 : 컴퓨터
[ 소통을 원하지는 않습니다 ]
컴퓨터 기초 (2)
[혼공컴운] 혼공학습단 13기 활동 회고((1.01^365=?)


활동 기간: 2025.01.06 ~ 02.23(6주)
책이름: 혼자 공부하는 컴퓨터 구조 + 운영체제 
저자: 강민철
출판사: 한빛미디어
판본 표시: 초판 발행. 2022년 08월 16일

출처: 혼공게시판




입문자용 책을 위한 소소한 고찰..

 


한빛미디어에서 운영하는 "혼공학습단" 13기에 참여했습니다. 

개발자는 아니고, 컴퓨터, 네트워크, 소프트웨어를 하찮은 수준에서 관리하고 있습니다. 워라벨이라는 시소(seesaw)가 한 쪽으로 기울어진 게 아니라 완전히 주저앉은 직장입니다. 단점은 굳이 말하지 않아도 짐작할 수 있겠지만, 유일한 장점은 업무난이도가 낮고 상대적으로 여유시간이 있는 편이라는 점입니다. 

AI 등장으로 다양한 분야에서 혼자 학습할 수 있는 환경이 훨씬 풍부해졌다고 생각되지만, 초보적인 영역에서는 멘토 혹은 가이드가 꼭 필요하다고 보는 편입니다. 

평소 기본을 다지기 위해 몇 권의 컴퓨터 기초 관련 서적과 유튜브 강좌들을 보며 초심자들을 위해 씌여지는 책들이 가졌으면 하는 미덕들이 떠올랐습니다. 


1. 초보자용 서적은 "쉽게" 씌여지는 게 당연하지만, "쉽게"라는 부사는 넣지 않는 않는 것이 좋을 것 같습니다. 


배경지식이 거의 없다시피한 초심자나 비전공자에게는 전공 관련 서적이 대부분 가파른 언덕입니다. "쉽게"라는 부사가 적당한 주기로 등장하는 경우가 많은데, 읽는 사람이 쉽다고 느끼는 경우는 생각보다 많지 않습니다. 오히려 "쉽게" 쓴 걸 본인의 능력이 부족해서 이해 못하는 게 아닌가하는 자괴감에 빠지는 경우가 생각보다 꽤 있다고 보시는 게 좋을 것 같습니다. 자매품 "간단하게도" 있습니다. 
"쉽고 간단하게" 썼다는 데 그 부사의 뒷부분이 하나도 이해가지 않으면 책을 덮는 사람들이 있습니다. 
"쉽게", "간단하게"는 정말 주의해서 적확하고(=정확하게 맞아 조금도 틀리지 아니하다), 정확하게(=바르고 확실하다) 사용하면 좋겠습니다. 습관적으로 부사를 넣어서 책의 페이지수를 늘리지 말아주세요. 나무가 웁니다. 


2. 입문자 혹은 비전공자용 서적들은 용어에 해당 업계에서 사용하는 원어(주로 영어)를 같이 써주면 좋겠습니다.  


이어서 뭔가 설명이 잘 납득하지 못해서 학습자가 다시 검색, 질문해서 헤쳐나갈 때가 많은데, 책을 쓴 사람이 이해를 돕기 위해, 혹은 지은이가 더 적확한 뜻을 담고 있다고 생각하는 단어로 설명한 경우에 검색결과가 별로 좋지 않을 때가 있습니다. 이때 원어가 같이 써 있으면 도움이 된다고 생각됩니다. 

 


3. 문장을 길게 쓴다고 해서, 부사를 더 많이 넣는다고 해서, 더 쉽고 자세하게 설명할 수는 없습니다. 


이건 누구나 하는 실수 아닌 실수라고 생각됩니다. 수학자 블레즈 파스칼조차 "시간이 없어서 길게 썼네"라고 할 정도로 글을 간결하게 쓰는 건 아주 어려운 일입니다. 대개 내용이 좋지 않은 책들은 부실한 설명을 보충하려고 문장이 장황하게 길어지고, 내용이 좋은 책들은 중요하고 관련있는 내용들이 간결하고 빽빽하게 들어차는 바람에 읽는 이를 주눅들게 합니다. 
이런 부분을 모두 개선해야 좋은 초보자용 책이라고 생각되지만, 이게 쉬운 일은 아니죠. 그런 책이 발견되면 집에 신주단지 모시듯 보관할 겁니다.  

 


3. 가독성도 중요하지만, 흐름을 유지하도록 구성하는 것도 중요합니다.

 
비단 초보자용 책들 뿐 아니라 대부분의 서적에 해당되는 부분이지만, 눈이 시원시원하게 페이지가 만들어졌으면 좋겠고, 불필요하게 책의 앞뒤로 이동하지 않도록 구성하는 게 좋을 것 같습니다. 간단한 퀴즈나 복습용 퀴즈의 답을 굳이 페이지 뒤에 배치하지 말아주세요. 왔다갔다 하느라 정신만 사납습니다. 
어차피 초보자들의 약간 불성실하게(?) 책을 읽을 것 같으면 같은 내용을 약간 다른 관점이나 관련성을 중심으로 반복 설명으로 넣어주세요. 불성실하게 읽는 사람들은 책을 어디까지 읽었는지도 헷갈리고, 이 내용이 어디서 나왔는지 이전 부분도 기억 못하는 경우가 왕왕 있습니다. (경험담입니다. ^^;;) 어디서 읽어도 굳이 앞부분이나 뒷부분을 찾는 일이 별로 없도록 서술해주세요. 어쩔 수 없는 경우에는 "목차"라는 걸 활용할 수도 있습니다. 


4. 목차는 생각보다 중요합니다. 


오랜만에 책을 이어서 읽을 때도 목차가 중요하지만, 책을 다 읽은 후에도 목차를 보며 머릿속으로 복습할 때도 좋습니다. 각 챕터 요약의 문맥을 읽고 목차를 봤는데, 뭔가 이질감이 느껴질 때면 가끔.. 약간.. 불안합니다. ^^;;
 

5. 가급적 실습해 볼 수 있는 가이드나 이미지 자료, 풍부한 참고자료가 있으면 좋겠습니다. 


이번에는 지은이의 gitbub, 유튜브 영상 등 참고자료가 풍부한 편이었지만, 그래도 읽는 사람이 되도록 직접 입력해보고 해당 설명이 어느 부분에 있는지 확인하는 구성도 추가되었으면 좋겠습니다. 
윈도우, 리눅스 운영체제에서 명령어를 입력한 뒤 결과에 대한 설명이 꽤 있다고 생각됩니다. 


6. 입문서, 풍부한 추가자료 외에 다양한 SNS를 활용한 소통과 주기적인 현황 점검 페이지도 좋았습니다. 


10여권이 마다 수십개의 게시글들이 달리는데, 일일이 답글을 달리는 걸 보면서 궁금한 점은 AI를 활용했는가였습니다. AI를 활용했다고 보기에는 답글의 내용이 다채로워 보였고, AI를 안 썼다고 하기에는 양이 너무 무리라고 생각될 정도로 많다고 느꼈기 때문입니다. ^^;;


7. 혼공학습단의 책들도 서로 연관성이 있을 것 같습니다. 

 

13기에서 어떤 책을 읽었다면, 14기에서는 어떤 책을 읽으면 좋을지, 혹은 14기 참여할 때, 13기의 어떤 책이 좋았는지 공유해 보는 SNS 페이지도 있으면 좋겠습니다. 


책 잘 읽었습니다. 올해는 책을 좀 더 읽고 싶고, 느슨했던 지식들을 다시 재정비해서 주변에서 컴퓨터와 씨름하는 비전공자들(사실상 컴맹)에게 체계적인 가이드 역할을 해줄 수 있으면 좋겠다는 바램이 있습니다. 좋은 커리어가 있다면 멘토라고 하고 싶으나.. 차마.. 쿨럭.. 

 

올해 목표는 이런 거라고 말하고 나니 2월이 끝나가네요. ㅋㅋㅋ

요즘은 이런 거 안 주나요?

  Comments,     Trackbacks
[혼공컴운] 1주차_컴퓨터 구조+운영체제 01장 ~ 03장

[책을 읽게 된 이유] 

컴퓨터 운영체제에 대한 복습과 쉬운 설명이 들어있는 안내서를 찾기 위해 "혼자 공부하는 컴퓨터 구조와 운영체제"를 읽게 되었습니다. 현재 01장 ~ 03장을 읽었는데, 아직은 전체 내용에 비해서는 미리보기 정도의 내용인 것 같습니다. 

 

 

 

Chapter 01 컴퓨터 구조 시작하기

 

01-1 구조를 알아야 하는 이유

- 컴퓨터 구조를 이해하면 문제 해결 능력이 향상됩니다.

- 컴퓨터 구조를 이해하면 문법만으로는 알기 어려운 성능/용량/비용을 고려하며 개발할 수 있습니다. 

 

[개인적인 생각] 컴퓨터 운영체제의 목적 중 하나가 응용 프로그램을 컴퓨터 하드웨어와 상호 작용할 수 있게 해주는 것이므로 개발환경이 되는 컴퓨터 구조와 운영체제에 대한 전반적인 이해가 없다면 상호 작용에서 발생할 수 있는 오류나 문제점 등에 대해 적절하게 대응하기 어려운 게 당연하다고 생각됩니다. 

 

01-2 컴퓨터 구조의 큰 그림

- 컴퓨터가 이해하는 정보에는 데이터(Data)와 명령어(Instruction)가 있습니다.

- 메모리(Memory)는 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품입니다. 

- CPU는 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 부품입니다. 

- 보조기억장치(Secondary storage)는 전원이 꺼져도 보관할 프로그램을 저장하는 부품입니다. 

- 입출력장치(Input/Output device)는 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 부품입니다. 

- 시스템 버스(System bus)는 컴퓨터의 네 가지 핵심 부품들이 서로 정보를 주고받는 통로입니다. 

 

출처: 혼자 공부하는 컴퓨터 구조 + 운영체제. 한빛미디어.

 

Chapter 02 데이터

 

02-1 0과 1로 숫자를 표현하는 방법

[참고] "정보 단위"란 컴퓨터에서 정보를 처리하고 저장하는 데 사용되는 기본적인 데이터의 크기 또는 형식을 의미합니다. 일반적으로 정보 단위는 다음과 같은 여러 가지 형태로 나뉘어질 수 있습니다. 정보 단위는 데이터 저장, 전송, 처리와 같은 다양한 컴퓨터의 기능에서 중요한 역할을 하며, 효율적인 데이터 관리를 위해 이해하는 것이 중요합니다.

- 비트는 0과 1로 표현할 수 있는 가장 작은 정보 단위입니다.

- 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트는 비트보다 더 큰 정보 단위입니다.

- 이진법은 1을 넘어가는 시점에 자리 올림을 하여 0과 1만으로 수를 표현하는 방법입니다. 

- 이진법에서 음수는 2의 보수로 표현할 수 있습니다. 

- 십육진법은 15를 넘어가는 시점에 자리 올림하여 수를 표현하는 방법입니다. 

 

** kB, MB, GB, TB와 KiB, MiB, GiB, TiB는 서로 다른 표현이고, 후자는 키비바이트, 메비바이트, 기비바이트, 테비바이트라고 읽는다고 합니다. 새롭게 알게 된 내용.. 


02-2 0과 1로 문자를 표현하는 방법
- 문자 집합은 컴퓨터가 인식할 수 있는 문자의 모음으로, 문자 집합에 속한 문자를 인코딩하여 0과 1로 표현할 수 있습니다. 

- 아스키 문자 집합에 0부터 127까지의 수가 할당되어 아스키 코드로 인코딩됩니다. 

- EUC-KR은 한글을 2바이트 크기로 인코딩할 수 있는 완성형 인코딩 방식입니다. 

- 유니코드는 여러 나라의 문자들을 광범위하게 표현할 수 있는 통일된 문자 집합이며, UTF-8, UTF-16, UTF-32는 유니코드 문자의 인코딩 방식입니다. 

 



Chapter 03 명령어

03-1 소스 코드와 명령어
- 고급 언어는 사람이 이해하고 작성하기 쉽게 만들어진 언어입니다. 

- 저급 언어는 컴퓨터가 직접 이해하고 실행할 수 있는 언어입니다.

- 저급 언어는 0과 1로 이루어진 명령어로 구성된 기계어와 기계어를 사람이 읽기 편한 형태로 번역한 어셈블리어가 있습니다. 

- 컴파일 언어는 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 언어입니다. 

- 인터프리터 언어는 인터프리터에 의해 소스 코드가 한 줄씩 저급 언어로 변환되어 실행는 언어입니다. 


03-2 명령어의 구조
- 명령어는 연산 코드(Operation code)와 오퍼랜드(Operand)로 구성됩니다. 

- 연산 코드는 명령어가 수행할 연산을 의미합니다. 

- 오퍼랜드는 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 의미합니다. 

- 주소 지정 방식은 연산에 사용할 데이터 위치를 찾는 방법입니다. 

 

[참고] 명령어(Instruction)는 CPU의 명령어 레지스터(IR, Instruction Register) 안에 저장된다고 합니다.

주소 지정 방식(Addressing mode)

- 즉시 주소 지정 방식(Immdiate addressing mode): 연산 코드에서 사용할 데이터(상수값 같은..)를 오퍼랜드 필드에 직접 명시해서 사용.

- 직접 주소 지정 방식(Direct addressing mode): 오퍼랜드 필드에 사용할 데이터의 메모리 유효주소를 명시해서 사용.

- 간접 주소 지정 방식(Indirect addressing mode): 오퍼랜드 필드에서 사용할 데이터의 메모리 유효주소에 대한 주소를 명시해서 사용.

- 레지스터 주소 지정 방식(Register addressing mode): 오퍼랜드 필드에 연산에 사용될 데이터가 들어 있는 레지스터를 명시해서 사용.

- 레지스터  간접 주소 지정 방식(Register indirect addressing mode): 연산에 사용될 데이터를 메모리에 저장하고, 그 메모리의 유효주소를 저장한 레지스터를 오퍼랜드 필드에 명시해서 사용. 

 

** 5개의 주소 지정 방식은 각기 장단점이 있는데(속도, 유효주소의 크기 등), 그건 책 사서 읽으시면 좋을 것 같습니다. 헷갈리는 부분이 있어서 그 부분만 써봤습니다. 

 

 

[기본숙제]

 

51쪽 확인 문제 3번.

다음 설명의 빈칸에 들어갈 알맞은 내용을 써 보세요.

프로그램이 실행되려면 반드시 (메모리)에 저장되어 있어야 합니다.

 

65쪽 확인 문제 3번.

1101(2) 의 음수를 2의 보수 표현법으로 구해 보세요. 

1 1 0 1

↓ 모든 0과 1 뒤집기

0 0 1 0

1 더하기

0 0 1 1

 

1101(2)을 표현한 값은 0011(2)입니다.

 

 

 

 

[추가 숙제]

 

100쪽의 스택과 큐 개념 정리해 보기.

 

스택(Stack)과 큐(Queue)는 자료 구조(Data Structure)의 두 가지 중요한 형태.

스택 (Stack)

스택은 "후입선출(Last In, First Out, LIFO, '리포'라고 읽는다고 합니다.)" 방식으로 작동하는 데이터 구조. 즉, 가장 나중에 추가된 데이터를 가장 먼저 삭제.
 - 푸시(push): 스택에 요소를 추가합니다.
 - 팝(pop): 스택에서 가장 최근에 추가된 요소를 제거하고 반환합니다.
 - 피크(peek): 스택의 가장 위에 있는 요소를 반환하되, 제거하지 않습니다.

큐 (Queue)

큐는 "선입선출(First In, First Out, FIFO, '피포'라고 읽는다고 합니다.)" 방식으로 작동하는 데이터 구조. 즉, 가장 먼저 추가된 데이터를 가장 먼저 삭제.

 - 인큐(enqueue): 큐에 요소를 추가합니다.
 - 디큐(dequeue): 큐에서 가장 먼저 추가된 요소를 제거하고 반환합니다.
 - 프론트(front): 큐의 가장 앞에 있는 요소를 반환하되, 제거하지 않습니다.

  Comments,     Trackbacks