본 게시물은 대학교 학부 수업 및 참고 교재인 '이제 시작이야! 컴퓨팅 사고력으로 인공지능까지 파이썬 - 전수진, 박주연, 김수환 공저 / 연두에디션' 을 토대로 필자가 이해한 내용을 정리했습니다.
모든 시작은 밥 한끼다.
그저 늘 있는, 아무것도 아닌 한 번의 식사자리.
접대가 아닌 선의의 대접
돌아가며 낼 수도 있는, 다만 그날 따라 내가 안냈을 뿐인 술 값.
바로 그 밥 한 그릇이, 술 한 잔의 신세가
다음 만남을 단칼에 거절 하는 것을 거부한다.
인사는 안면이 되고, 인맥이 된다.
내가 낮을 때 인맥은 힘이지만 어느 순간 약점이 되고
더 올라서면 치부다.
첫 발에서 빼야한다. 첫 시작에서.
마지막에서 빼려면, 대가를 치뤄야 한다.
- 드라마 비밀의 숲 시즌 1 이창준(배우 : 유재명)의 대사
컴퓨터, 안 써본 사람은 있을지 모른다. 하지만 한 번만 써본 사람은 없을 것이다. 컴퓨터는 간단한 문서작업을 넘어 게임과 같은 고성능이 요구되는 작업이 취미가 되었고 이제는 돈을 벌 수 있는 수단이 되며 심지어 e-sports라는 자리로 또 하나의 스포츠로 자리잡기까지 했다.
신입생이었을 무렵 몇 권의 전공책을 가방에 넣고 완전 군장의 각오로 학교를 향하던 때가 있었지만, COVID19 시국이 끝나고 어느 날 강의실에서 전공책은 온대간대 없이 사라지고 이제 도서관에서만 볼 수 있게 되었더라. 사람은 죽어서 이름을 남겼지만, 전공책은 죽어서 아이패드와 노트북을 남겼다.
그만큼 이제 우리에게 컴퓨터는 우리의 삶의 필수적인 수단 중 하나가 되었다.
이제는 우리 인류가 만들어 냈던 컴퓨터를 사용하는 것에 그치는 것이 아니라 컴퓨터 그 자체를 이해하려고 한다. 기초과학 분야를 넘어 Computer science로 불리는 이 학문. 대체 컴퓨터를 어떻게 이해해야 하나.
바다를 건너가 옆 나라만 가보아도 우리나라 언어를 알아들을 수 있는 사람은 거의 없다. 한국어로는 대화를 할 수 없다. 그런데 사람도 아닌 컴퓨터와는 우리가 대화가 되겠는가??
근데 대화가 된다..! 한글 타자를 치면 한글이 쓰여지고, 영어 타자를 치면 영어가 쓰여 진다! 사람도 못하는 일을 컴퓨터는 해낸다. 우리는 이걸 당연시 여기고 사용해왔다.
하지만 이제 우리는 알아야 한다. 적어도 컴퓨터를 사랑하고 싶은 나는 그렇다. 우리에게 그 모습을 보여주기까지 컴퓨터는 얼마나 길고 긴 인고의 시간이 있었는 지 말이다.
가슴 아파 머리 아파 낳은 자식
컴퓨터에게도 올챙이 시절이 있었다. 하나를 알려줘도 하나를 겨우하는! 보면 볼 수록 참 컴퓨터도 인간미가 있다.
이렇게 하나를 시키려면 손이 많이 가던 시절이 있었더라
하지만 시작은 늘 위대하다. 수학자 겸 철학자였던 파스칼은 세계 최초로 계산기를 개발했다.
점점 복잡한 일을 처리하기 위해서는 컴퓨터도 복잡한 구조를 만들어가기 시작했다. 마치 단세포보다 다세포, 고등 생물인 우리를 보는 것 같다.
그리고 그 후 유명한 분께서 등장하셔서 컴퓨터에게 놀라운 2차 성징을 일으켰으니!
영화 '이미테이션 게임'을 본 사람이라면 이 사람이 누군지 알 것이다. 물론 극중에서는 베네딕트 컴버배치로 등장하신 분이 되겠다.
앨런 튜링 형님께서 이니그마 암호를 해독하기 위해 만들어낸 이 컴퓨터는 전쟁의 판세를 뒤집을 만큼 세상에 영향을 끼쳤다. 2차 세계대전에서 독일군이 암호화 기계를 만들어서 이를 해독하는 것이 필요했고, 연합군이 해독하기 위해 앨런 튜링이 만들어냈다. 그 결과, 독일군의 공격 위치를 파악할 수 있게 됐고 판세를 뒤엎었다. 이 콜로서스의 개발로 현대 컴퓨터 개념이 확립되었고 그 공로를 인정받아 컴퓨터과학 분야에서 노벨상이라고 불리는 튜링 어워드가 만들어졌다.
그 이후 1946년 애니악이 만들어지고 유니박은 세계 최초의 상업용 컴퓨터가 되었다. 크기는 더 작아졌다.
현대적인 컴퓨터의 특징
- 현대적인 컴퓨터는 기계보다도 전기전자 장치를 사용해서 계산한다.
- 아날로그가 아닌 디지털 방식이어야 한다.
- 내장 프로그램 방식을 사용하여야 한다.
기계적인 장치 즉 해석기관 같이 톱니바퀴를 사용하는 것은 기계적인 장치라서 현대 컴퓨터 방식이 아니다. 애니악은 프로그램 방식을 바꾸려면 스위치를 바꾸어야 했다. 그 이후 폰 노이만이 현대 컴퓨터 구조를 위해 내장 프로그램 방식의 논문을 집필했고, 이로 인해 전자식 기억장치가 가능해졌다. 그 결과 현대 컴퓨터가 가능해진 것이다.
오늘 날의 컴퓨터는 동일한 하드웨어 상에서 프로그램을 바꾸어 가면서 다양한 작업이 가능해졌다. 즉, 범용적으로 사용할 수 있게 되었다.
정보의 이진 표현
우리는 컴퓨터도 우리가 사용하는 문자나 숫자를 똑같이 사용하고, 소리를 듣고 사진이나 동영상을 볼 수 있다고 생각한다.
하지만 컴퓨터 내의 모든 데이터는 2진수로 표현된다. 우리가 컴퓨터에서 사용하는 텍스트, 이미지, 소리, 영상은 모두 0과 1로 바뀌어서 컴퓨터에서 저장되고 처리된다.
즉, 우리가 컴퓨터 내부에 들어갈 수 있다면 컴퓨터 속에서 볼 수 있는 것은 0과 1뿐일 것. 마치 매트릭스처럼.
진법은 주어진 수를 몇 개의 기호를 사용해서 나타낼 것인가에 관한 법칙
◦ 진법은 사용할 수 있는 개수로 결정
◦ 10진법은 0~9까지의 10개의 기호를 사용하여 수를 표현
◦ 2진법은 0과 1, 2개의 기호만을 가지고 숫자를 표현
◦ 8진법은 0~7까지 8개의 기호를 사용
◦ 16진법은 0~9와 알파벳 A~F, 16개의 기호를 사용
즉, 컴퓨터가 데이터를 표현할 때 사용하는 2진법은 0과 1만을 사용하여 모든 수, 문자, 이미지, 소리, 동영상 등을 나타낸다.
컴퓨터는 처음에 만들어졌을 때부터 0과 1로 구성된 이진수를 사용하였을까?
최초의 전자 컴퓨터로 간주되는 애니악은 10진수를 사용한다. 즉, 컴퓨터는 10진수를 이용해서도 만들 수 있다.
그런데 왜 지금 우리가 사용하고 있는 현대적인 컴퓨터는 2진수를 사용할까?
”하드웨어”때문에 2진수를 사용한다. 전자공학의 관점에서 보면, 10개의 전압레벨보다 2개의 전압 레벨을 구별하는 회로
를 설계하는 것이 훨씬 쉽기 때문이다.
컴퓨터 내부의 하드웨어는 전압의 크기를 10단계로 나눠 감지하는 것보다 전압이 있는지 없는지를 2가지로 구분하는 것이 더 쉽게 감지할 수 있다.
컴퓨터 하드웨어에서 10진수로 데이터를 저장하려면 하나의 전자 스위치가 10개의 상태를 가지고 있어야 하고, 이들 상태를 신뢰성 있게 유지해야 한다. 이것은 불가능하지는 않지만 상당히 어렵다.
반면 2진수의 0과 1은 전자 스위치를 이용하여 아주 쉽게 구현할 수 있다.
전자 스위치들은 ON 상태와 OFF 상태를 가짐. 즉, ON 상태를 이진수의 1로 해석하면, OFF 상태는 0으로 해석해 2진수를 여러 개의 스위치로 나타낼 수 있다.
- 정보를 처리하는 가장 기본적인 단위, bit(비트)
- 컴퓨터가 데이터를 저장하는 최소 단위, byte(바이트)
비트(bit)는 “binary digit”의 약자
- 비트는 쉽게 생각하면 전구로 나타낼 수 있다.
- 전구가 켜져 있으면 ‘1’, 꺼져 있으면 ‘0’이다.
- 바이트(byte): 8비트가 모인 것
Q.컴퓨터에서는 이렇게 단순한 비트를 이용하여 어떻게 다양하고 복잡한 여러 가지 정보를 표현하고 저장할 수 있을까?
A. 그 이유는 아무리 단순한 것이라도 많이 모이면 복잡한 정보를 표현할 수 있다.
비트열이 생성하는 정보의 수, 패턴의 수
- 1개의 비트로 나타낼 수 있는 패턴의 개수는 0과 1로, 2개가 된다.
- 2개의 비트로 나타낼 수 있는 패턴의 개수는 00, 01, 10, 11로 4개가 된다.
- 3개의 비트로 나타낼 수 있는 패턴의 개수는 001, 001, 010, 011, 100, 101, 110, 111로 8개가 된다.
이렇게 숫자로만 보면 와닿지가 않는다. 하지만 이 개념은 충분히 일상에서도 쓰일 수 있다.
오늘날과 미래의 컴퓨터
0과 1을 동시에 처리하는 큐빗(QUBIT) 이라는 단위를 사용한다.
병렬 연산이 가능해짐으로써 빠른 연산 처리 속도를 자랑한다.
양자 컴퓨터
▪ 중첩(superposition)과 얽힘(entanglement) 등 양자 물리학의 원리를 이용
▪ 다수의 정보를 동시에 연산, 새로운 개념의 컴퓨터
▪ 양자 비트(quantum bit) 인 ‘큐비트(qubits)’를 이용
▪ 성능은 슈퍼컴퓨터 보다 최소 1억배 이상 나은 결과
▪ 특정 연산에 최적화 된 초고속 대용량 컴퓨팅 기술
➢ 머신러닝, 최적화, 신약개발, 암세포 염기서열 분석, 검색 부문의 과제들을 해결하고 있다.
➢ 사물인터넷, 빅데이터, 인공지능 등의 분야에 활용될 것으로 기대한다.
양자 컴퓨터의 문제점
- 환경 조성이 까다롭다 : 섭씨 -273도 유지, 전자기파 x, 진동 x
- 에러가 많다 : 많은 QUBIT을 에러 줄이는 데 사용
- 알고리즘 개발 중요 : 완전히 새로운 양자 요리법 요구
양자 컴퓨터의 혜택
- 신약 개발 : 분자 단위의 시뮬레이션 가능
- 인공지능 개발 촉진 : 수천억 개 데이터 정리 입력
- 양자 보안 체계 : 양자 물리학 암호 - 해킹 x
➢ 불확실한 미래를 예측하고 진단
컴퓨터를 해부해보자
컴퓨터에는 크게 우리 눈에 보이는, 즉 기계인 하드웨어. 그리고 그 기계 속에서 일을 처리하는 프로그램 소프트웨어가 있다.
하드웨어(Hardware)
◦ 사람의 신체(몸, 뼈, 살)와 같은 역할
◦ 전자공학의 발달로 인하여 급속도로 발전
◦ 하드웨어는 컴퓨터 시스템의 물리적인 기반을 제공
◦ 전자 회로와 그 밖의 물리적인 장치들로 이루어짐
◦ 소프트웨어에 대응되는 개념
컴퓨터는 기본적으로 5개 부분으로 이루어져 있다.
-> 입력과 출력 장치, 중앙처리 장치, 주기억 장치, 보조기억 장치
▪ 입력 장치: 키보드, 마우스, 스캐너, 터치 패드, 바코드 등
▪ 출력 장치: 프린터, 모니터, 사운드 카드, 3D 프린터 등
▪ 중앙처리장치
- 중앙처리 장치는 하드웨어의 성능을 좌우
- 통상 CPU라고 부름
- 마이크로프로세서(micro processor)가 주로 사용
▪ 기억장치
- 컴퓨터 내에서 기억을 담당
- 통상 메모리(memory)라고 불리는 기억 장치
- 보조기억 장치(Auxiliary Memory): USB 플래시 드라이브 등
소프트웨어(Software)
▪ 소프트웨어란 ‘컴퓨터 프로그램과 그와 관련된 문서들’
▪ 소프트웨어는 컴퓨터를 작동하게 만드는 논리적 바탕을 제공
▪ 컴퓨터 자체인 하드웨어에 대응하는 개념
▪ 하드웨어를 활용하는 프로그램이나 이에 따르는 기술
▪ 사람의 두뇌(뇌 속에 들어 있는 지식, 정보)와 같은 역할
▪ 하드웨어에 비해 느린 속도로 발전
✓ 효율적인 개발방법론의 부재
✓ 개발 인력의 부족
✓ 적용 분야의 폭발적 증대 등
소프트웨어는 다음의 2가지로 분류할 수 있다.
▪ 시스템 소프트웨어(system software)
⁻ 컴퓨터 시스템을 가동시키는데 필수적인 운영체제 등
▪ 응용 소프트웨어(applications software)
⁻ 문서작성이나 게임 등 특정 분야의 업무 처리에 사용
프로그래밍 언어
앞서 언급하였듯 우리와 컴퓨터는 쓰는 언어가 다르다. 그래서 우리는 통역관을 필요로 하였으나 천재적인 컴퓨터공학 대선배님들께서는 다른 방법을 채택하셨다. 공통적으로 쓸 제 3의 언어를 만들어 버린것. 그것이 프로그래밍 언어 이다.
컴퓨터와 사람의 상호작용
- 컴퓨터는 전기를 통하여 동작
- ‘전기가 흐른다’,‘흐르지 않는다’만 기억하는 2진법 컴퓨터
- 자연어를 사용하는 사람과 2진법을 사용하는 컴퓨터의 상호작용 방법
- 사람의 언어를 컴퓨터가 인지한다.
- 인공지능(Artificial Intelligence) 분야에서 부분적으로 자연어 인식
- 현재 이 방법은 작고 간단한 응용에서 성과를 내고 있다
- 자연어 처리분야의 획기적 발전이 이루어질 경우 응용 분야 확대가 기대
- 컴퓨터 언어를 사람이 사용
- 컴퓨터 개발 초기에는 2진법을 이용해서 컴퓨터에게 간단한 일을 시키기도 하였
다.
-> 컴퓨터 언어인 2진법만을 사용해서 컴퓨터를 사용 한다는 것은 사람에게는 불가
능 한 일이다.
사람과 컴퓨터의 공동 언어 사용(프로그래밍 언어) - 한국인과 일본인이 상호작용을 하기 위한 방법
- 두 사람이 한국어로 의사소통 - 일본 사람이 한국어를 배운다
- 두 사람이 일본어로 의사소통 - 한국 사람이 일본어를 배운다
- 제3국어(영어, 불어, 독어 등)로 의사소통 - 두 사람 모두 제3국어를 배운다
- 컴퓨터와 사람의 의사소통은 1,2번 방법으로는 현재 불가능
- 컴퓨터와 사람도 제3국어에 해당되는 언어로 상호작용
- 프로그래밍 언어(Programming Language)
- 사람은 컴퓨터에게 일을 시키기 위해서는 프로그래밍 언어를 익혀 사용
- 2진법(0,1) 밖에 모르는 컴퓨터는 프로그래밍 언어를 어떻게 인식하는가?
컴퓨터가 어떻게 프로그램을 실행할까?
프로그래밍 언어
➢프로그래밍 언어는 컴퓨터 전문가들에 의해 개발된다.
➢컴퓨터 전문가들은 언어를 만들 때, 그 언어를 컴퓨터가 인지할 수 있도록 해주는 번역기도 같이 개발한다.
- 번역기는 사용자에 의해 작성된 프로그램을 0,1로 자동으로 변환
- 번역된 파일(0,1로 구성된 2진 파일)은 컴퓨터에 의해 직접 실행
저급 언어
- 기계어와 어셈블리 언어를 의미하며, 하드웨어에 관련된 직접 제어가 가능하다.
- 종류로는 기계어와 어셈블리 언어가 있으며, 프로그램 작성시 상당한지식과 노력이 필요하다.
고급 언어
- 하드웨어와 관련된 전문적인 지식 없이도 프로그램 작성이 가능
- 일상적인 언어나 기호 등을 그대로 이용
- 기억장소를 임의의 기호(symbol)에 저장하여 사용(예 : A, B, X 등)
- 하나의 명령으로 다수의 동작을 한꺼번에 지시할 수 있다 - 예 : A = B + C * D
- 종류로는 C, C++, Java, Python 등
번역 기법
컴파일(compile) 기법
◦ 사용자에 의해 작성된 프로그램은 컴파일러(compiler)에 의해 0과 1로 구성된 이진파일(0과1로 구성된 파일)로 번역
-> 컴파일러는 프로그램 언어를 개발한 전문가에 의해 개발
◦ 번역된 파일(이진파일)은 컴퓨터에서 직접 실행
- 장점
- 프로그램이 한번 번역되어 이진파일이 만들어지면, 다음 실행부터는 번역과정없이 이진파일만 실행하게 되므로 실행시간의 효율성이 좋다
- 단점
- 특정시스템에서 번역된 이진파일은 다른 시스템에서 실행되지 않는다
- 예 : 윈도우에서 번역된 이진파일이 리눅스 시스템에서 실행되지 않는다
- 대표적인 언어 : C언어
인터프리트(interpret) 기법
- 프로그램을 직접 한 줄 씩 번역한 다음 바로 실행시켜 그 결과를 나타내는 방식
- 컴파일 기법과는 달리 0과 1로 구성된 실행파일을 생성하지 않는다.
- 장점
- 배우기 쉽다
- 이식성이 뛰어나다
- 단점
- 실행 시간이 느리다
- 소스가 공개된다
- 대표적인 언어 : 파이썬, HTML, 자바스크립트, Perl 등
생각보다 지금있는 모든 거대한 무엇이든지... 대부분 시작은 단순한 무언가였다. 난 지금도 미약하다. 하지만 이게 창대한 끝을 위한 미약한 시작이었으면 좋겠다.
'COMPUTER SCIENCE > Computational thinking' 카테고리의 다른 글
스카이넷 vs 자비스 (1) | 2024.07.03 |
---|---|
우리도 선택받은 아이들이 될 수 있을까? (0) | 2024.06.30 |
조회수, 알고리즘의 은총 (0) | 2024.06.17 |
프로그래밍, 너 T발 C야? (0) | 2024.06.16 |
뻔하다 뻔해!! 다 보인다고 (1) | 2024.06.16 |
나의 성장 드라마
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!