«   2018/12   »
            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 31          
Tags
more
Archives
Today
0
Total
783
관리 메뉴

프로그래밍에 빠져들다

프로그래밍 언어란? 본문

프로그래밍은 늘 당신 곁에

프로그래밍 언어란?

올클리어 2015.11.24 20:49

시대가 바뀌면서 현대를 살고 있는 우리들은 컴퓨터라는 문명의 기기를 손에 넣게 됩니다.


컴퓨터는 인간보다 몇억 배 빠른 속도로 정보를 처리하는 인간의 든든한 동반자입니다.


하지만 컴퓨터는 스스로 무엇을 할지 생각은 못하기에


사람들은 컴퓨터에게'어떤 상황에서, 어떻게 행동할지' 일의 순서를 알려줬습니다.


이 동반자를 우리가 원하는 바대로 효율적으로 움직이기 위해서


'일의 순서 (프로그램)'를 알려줄땐


사람들이 언어를 사용하여 의사소통을 하듯이,


컴퓨터에게 일을 시키려 할 때도 컴퓨터와 의사소통 수단이 필요합니다.


단도직입적으로 말씀드리면 컴퓨터는 숫자 0과 1로 조합된 기계어를 사용합니다.


엥? 0과 1??? 왜 기계어를 사용할까요?


이것을 이해하기 위해서 컴퓨터의 핵심 부품인 CPU에 대해 이야기를 시작하겠습니다.


CPU란 'Central Processing Unit'의 약어로 '중앙 처리 장치'라는 뜻 입니다.


사람으로 치면 생각하는 뇌에 해당하죠


하지만 불행하게도 믿기 힘들겠지만


CPU는 전기 신호를 다른 회로와 주고 받는일만 할줄 압니다

더구나 전기 신호는 ON과 OFF (전기가 들어왔다, 나갔다) 2개 밖에 없어서

이것만 이해하는 아주 불쌍한 녀석입니다.


그래서 아주 오래전에는 이런 전기 신호만을 이해하는  CPU가 도움이 되는

기계가 될 것이라고는 생각하지 못했습니다.

그러나,,,,






시간이 흘러 사람들은 전기 신호


ON과 OFF의 개념을 사람이 이해하기 편하게


0과 1에 대응시키게 되었고 이로 인해


CPU가 보내주는 전기 신호의 결과 값을 2진수로 바꿀 수 있게되었습니다.


또한 2진수를 전기신호로 만드는 것 또한 가능하다는 사실을 알게 되었습니다.


물론 아직까진 여전히 CPU는 전기 신호만 처리할 줄 알지만


최초로 컴퓨터와 대화할 수 있는 방법이 발견된 겁니다!


또한 시대가 흐르면서


10진수를 2진수로 바꾸는 방법이 발견되고


또한 2진수를 10진수로 바꾸는 방법이 발견되어


이것으로 통상의 계산기도 만들 수 있게 되었습니다.


또한 문자 하나 하나에 번호를 붙여서 (이것을 문자 코드라 한다.)


문자를 숫자에 대응 시키는 것으로 문자도 전기 신호로 교환할 수 있게


되어 CPU에 문장 처리를 시키는 것도 가능하게 되었습니다.


이후에도 이러한 방식으로


그림이나 음악등을 전기 신호에 대응 시키는 방법(약속)을 찾아내었고


심지어는 CPU에 명령도 전기 신호로 보내는 방법도 발견해내어


점점 CPU의 이용범위가 넓어진 겁니다.



요약

1. 컴퓨터의 뇌와 같은 핵심 부품 CPU

2. CPU는 전기신호 ON/OFF 밖에 모른다.

3. ON/OFF를 이진수로 바꾸는 방법이 발명됨

4. 이진수를 전시신호로 바꿔서 보내는 방법도 발명됨

5. 이진수로 컴퓨터와 대화가 가능해짐 오오미!! 지리것소!!!

6. 혁명!! 시간이 흘러 숫자,문자,그림,음악등을 전기신호로 바꾸는 방법들도 발견됨!!

6. 심지어 명령까지 전기신호로 보내는 방법도 발견됨!!!



(전기신호를 알아들일 뿐이지 이 데이터가 그림의 일부인지

음파의 일부인지 문장의 일부인지 게임데이터의 일부인지 그건것은 전혀 모르고

그런 개념조차 이해 불가하다)



여기서 궁금증!


전기신호만 알아듣던 시절의 컴퓨터들은 과연 사람과 어떤식으로 프로그래밍했을까요?



케이블을 연결하다.


약 반세기 전,


1946년에 ENIAC(electronic numerical integrator and computer)이 발명되었습니다.






이 컴퓨터는 '무엇을 계산할지', 즉 목적에 따라 프로그램을 변경할 수 있었습니다.

지금으로 말하면 '프로그래밍'이 가능한 컴퓨터였습니다.

그러나 그 방법은 지금으로써는 상상조차 힘들 정도의 엄청난 중노동이였습니다.


ENIAC은 17,486개의 진공관이란 거대한 부품을 사용해 제작한 아주 아주 거대한 컴퓨터로,  그 폭은 24 미터나 됐습니다.


쉽게 말해서 25 미터 수영장 만한 길이의 커다란 기계가 줄서 있는 상황을 상상해 봅시다.


그리고 이 컴퓨터의 수많은 단자에 케이블을 여기저기 연결하는 것이 프로그래밍이였습니다.

(케이블이 꽂혀 있으면 1 아니면 0)



프로그램을 변경할 때마다 케이블의 연결을 바꾸는 것은 매우 힘든 일이였습니다.

어떻게 해서든 좀 더 편하게 할 수는 없었을까요?






프로그램 내장 방식으로


그러던 어느날 해성처럼 등장한
천재 수학자 폰 노이만은 프로그래밍의 중노동을 없애기 위해서

새로운 컴퓨터를 구조를 설계합니다.

이름하여 폰 노이만 구조!!! 


폰노이만 구조 이전의 컴퓨터들은 프로그램을 컴퓨터 밖에 두었습니다.

하지만 이 폰노이만 구조는 프로그램을 컴퓨터 내부에 두는 방식이였죠

프로그램을 내부에 두는걸로 어떻게 더 편해졌냐구요?



1949년 폰 노이만 구조를 채용한 최초의 컴퓨터

EDSAC (Electronic Delay Storage Automatic Calculator)이 개발되었습니다.

이것은 테이프에 구멍을 뚫어서 데이터를 표현하고. 컴퓨터가 이를 읽어 들이도록

한 구조입니다. 

(뚤려있으면 1 아니면 0)



물리적 케이블을 교환하는 대신, 종이 테이프의 데이터를 읽어 들여서

프로그램을 변경할 수 있었습니다. 이것으로 프로그램의 변경 작업이 한결 수월해 졌습니다.

작업이 수월해졌다고는 하지만, 사람이 프로그램을 읽거나 쓰는 것은 여전히 어려웠습니다.


어디까지나 기계가 읽기 위한 언어, 즉 0과 1 '기계어'였던 것이기 때문이죠



그러던 어느날 폰 노이만의 제자가 도저히 1과 0으로 된 기계어 코드가

너무 읽기 힘들어서 몰래 기계어 코드와 1:1로 대응하는

일종의 니모닉(mnemonic) 심볼 테이블표를 작성하였습니다.



그러나 천재 노이만씨는

도대체, 명령어 그게 몇 개나 된다고 그걸 기억 못해서, 바보 같이 이런 표를 만들어 놓고

그걸 하나씩 변환하는 멍정한 작업을 하냐며

이렇게 은혜로운 기계를 가지고 연구는 안하고 잔머리를 굴린다며

이 위대한 발명을 한 훌륭한 제자를 나무랐다고 합니다.

(이것이 최초의 어셈블리어의 시초였다고 카더라...)


고작 그런 거로 컴퓨터님(…)의 성능을 낭비하려 한다나 뭐라나.

물론 이 당시 컴퓨터의 위상은 집채만한 크기면서 계산능력은 지금

계산기보다 딸리고 비싸기는 오라지게 비싸서 국가 단위로 한두 개 있는 정도여서 인간

프로그래머는 컴퓨터에게 계산할 자료를 드리는

대컴퓨터콘택트용휴머노이드인터페이스에 불과했기 때문에 일어난 일.

(물론 폰 노이만은 기계어로 자유자재로 코딩이 가능한 굇수였다는 점도 있다)



http://tech.chosun.com/archives/16390 참고


그러다가...

1952년 전설적인 여성 프로그래머인 그레이스 호퍼가 등장합니다.

이분도 기계어가 무척 싫었습니다.

잃기도 힘들고 쓰기도 힘들고 그렇기 때문에 일반인들이 컴퓨터를 접하기 어려웠기 때문이죠

그래서 단어를 가지고 프로그램을 만드는 방법을 고안하다


특정한 구조와 규칙을 가진 영어 단어들을 컴퓨터가 이해할 수 있는

기계적 언어로 번역해주는 방법을 개발합니다.

이 혁명적인 번역기를 컴파일러라 부릅니다.


그리고 그녀가 개발한 컴파일러 flow-matics로 인해 전설적인 프로그래밍언어

코볼이 탄생하고 이때부터 대 문자 프로그래밍 시대가 열리게 됩니다!!



요약

1. 과거에는 케이블을 꼈다가 빼는게 프로그래밍이였다. (엄청난 중노동)

2. 프로그래밍의 엄첨난 중노동 작업을 편리하게 하기위해 프로그램 내장방식이 고안됨

3. 프로그래밍 작업은 한결 편해졌다.

4. 하지만 여전히 기계어! 사람이 프로그램을 읽거나 쓰는 것은 여전히 어려웠다!!!

5. 그러던 어느날 천재 여성 프로그래머 그레이스  호퍼가 사람이 이해하기 쉬운 문자로 프로그래밍 할 수 없는지 골똘히 연구함

6. 그레이스 호퍼의 연구결과 특정한 구조와 규칙을 가진 영어 단어들을 기계어로 번역해주 번역기를 개발함 이 번역기를 컴파일러라 부름

7. 컴파일러의 등장으로 수 많은 문자 프로그래밍 언어들이 탄생되기 시작함




컴퓨터는 프로그래밍 언어를 이해할까요? 아니요!


컴파일러는 프로그래밍 언어를 이해합니다!


프로그래밍 언어는 컴파일러와 대화하기 위한 언어입니다!!!




FORTRAN의 등장 (고급 언어의 등장)


1954년, 드디어 지금 현대에 사용되고 있는 것과 비슷한 프로그래밍 언어가

고안되었습니다. 바로 FORTRAN 입니다. FORTRAN이란 이름은

Formula Translating System(수식 변환 시스템)을 의미합니다.


지금은 프로그래밍 언어로 'x 곱하기 y더하기 z'를 x * y + z 라고 표현할 수 있는 것을

너무나 당연히 여기지만, 이것을 최초로 표현한 것이 FORTRAN입니다.

명칭이 의미하듯 '수식을 기계어로 변환하는 것'이 FORTRAN의 특징중 하나였습니다.


이 때는 효율이 높은 프로그램을 위해서는 사람이 기계어를 쓰는 수 밖에

없다고 생각했습니다. 실제로 최 FORTRAN 컴파일러가 출력하는 기계어는

능숙한 프로그래머가 짠 기계어에 비하면 효율이 매우 떨어졌다.

그러나 코드량이 눈에 띄게 줄었고, 코드를 읽기 쉬워짐에 따라 많은 사용자층을

얻을 수 있었다.


1979년에 FORTRAN 설계자인 John Backus는 다음과 같이 말했다.

'내가 이룬 성과의 대부분은 나태함에서 오고 있다. 나는 프로그램을 짜는 것을

좋아하지 않았다. 그래서 프로그램을 쉽게 짤 수 있는 시스템을 만들었다.




http://linuxism.tistory.com/1941


- 컴퓨터는 고급언어를 어떻게 이해하는가? 컴파일러와 인터프리터 -


<<컴파일 방식과 인터프리트 방식의 차이점>>
* 컴파일 방식
- 기계어 파일(실행 파일) 생성
- 빠른 실행 속도
- 낮은 이식성: 기계어 체계(ISA)가 다른 컴퓨터에서는 컴파일을 다시 해야 함.
- 대표적 언어: C, C++ 

* 인터프리트 방식
- 실행파일 없이 소스코드로 실행
- 느린 실행 속도
- 높은 이식성: 인터프리터만 있으면 어떤 컴퓨터에서도 실행가능
- 대표적 언어: Java, Basic


'프로그래밍은 늘 당신 곁에' 카테고리의 다른 글

프로그래밍 언어란?  (4) 2015.11.24
프로그래밍을 배워서 어디에 쓸까?  (2) 2015.11.20
프로그램이란?  (0) 2015.11.20
프로그래밍이란?  (0) 2015.11.19
4 Comments
댓글쓰기 폼