티스토리 뷰
제가 오늘 프로그래밍언어론을 공부하면서 정리한 내용입니다.
1.일반적으로 언어와 사고는 밀접한 관게를 가진다
ex)
에스키모 쓰는 눈에 대한 단어
1.하늘에서 내려오고 있는 눈 (gana)
2.땅에 내려앉아 쌓여있는 눈 (aput)
3.바람에 이리저리 휘날리는 눈 (pigsirpog)
4.바람에 휘날려 무더기로 쌓여있는 눈 (gimugsug)
프로그래밍 언어 = 사고에 영향을 미치는 도구
사용하는 프로그래밍 언어에 따라 문제를 보는 시각이 달라진다. -> (유연한 사고를 해야된다.)
프로그래밍 언어 = 추상화의 도구
2.추상화란(abstract):
사전적 의미
1)existing as a quality or concept rather than as something real or sold
2) to make a shortened form of a thing by separating out what is important ->(우리의 추상화랑 가깝다) 중요한것을 분리하는 방법을 사용하여 어떤것을 짧은것으로 만든다.
결론:중요한 부분만을 추출하고, 관심 없는 부분은 무시
3.컴퓨터는 고수준의 추상화 기계이다
-컴퓨터의 내부:0과1
0과1로 여러가지를 만들수있다! 아래의것(복잡한것)들을 0과1을 이용한 추상화를 통해 만든다.
-겉으로 보는컴퓨터: 계산기,문서작성기,자동차,비행기,세상,....
4.프로그래밍 언어에서 추상화의 예
-타입(type):int,float
int타입의 1 이나 -1은 어떻게 컴퓨터에서 작동하는지 안다 (2진수 사용,보수) 하지만 float타입은 복잡하다. 하지만 프로그래밍 할때 float형 타입을 붙혀준다면 알아서 실수형이라고 정의한다 -> 추상화개념
-계산:1+2,sprt(2) : 루트2를 구하는함수
1+2 와 1.0+2.0은 같은 같으나 컴퓨터속에서는 전혀다르게 계산을 한다! 즉 1.0+2.0이 훨씬 복잡한 계산이다. 프로그래밍할때 그대로사용해도 컴퓨터가 알아서 계산을 해준다.->추상화개념
ex) 만약 데이터가 1000개를 정렬하라는 과제가나온다!
1. 인덱스가 1000인 배열을 생성해서 데이터를 집어넣고 정렬 알고리즘을 돌린다. (일반적인 생각)
2. 정렬 알고리즘을 만들지 않고 라이브러리에 있는 정렬함수를 사용한다 -> 어떤 알고리즘을 사용할것인가를 생각안해도 된다! (추상화)
5.프로그래밍언어가 많은이유?
why? 추상화의 단계를 어떻게 두냐에 따라서 언어가 달라진다!
6.프로그래밍 언어의 정의
정의:기계와 인간이 판독 가능한 형태로 계산을 서술하는 표기 체계
계산 = 컴퓨터가 실행할 수 있는 어떤 과정
==> 튜링 기계(turing machine)가 할 수 있는 일
기계 판독성 = 효율적인 번역이 가능
==> 모호성이 없고, 빠른 시간 내에 번역
인간 판독성 = 프로그램 하나를 전체로 이해하기 위한 세부사항의 양을 줄임
==>추상화 메커니즘의 개발
7.프로그래밍 언어의 역사(범용 언어를 중심으로)
1950년대:초기의 프로그래밍 언어
FORTRAN(FORmula TRANslation): 과학계산용,john Backus, 효율적인 코드를 생성
COBOL(COmmon Business-Oriented Language): 상업응용분야,영어단어를 많이 사용
Algol60(ALgorithmic Language): 알고리즘을 기술,대부분의 언어에 영향
LISP(LISt Processor):인공지능 응용분야
APL(A Programming Language):수학적 계산을 위한 언어
1960년대: 언어의 범람
몇 개의 프로그래밍 언어가 성공
=>수백 개의 프로그래밍 언어가 만들어짐
PL/I (programming language one):일반적이고 보편적인 언어
Algol68:표현력 있고,이론적으로 완전히 일관성 있는 구조 (직교성 언어)
SNOBOL(string oriented symbolic language):스트링 처리언어
Simula67:시뮬레이션 언어,클래스의 개념을 도입(최초의 객체지향 언어)
Basic(beginner all-purpose symbolic instruction code)
1970년대: 단순성의 추구
pascal: n.wirth,작고 단순하고 효율적인 구조화된 언어
c:dennis ritchie,식 지향으로 단순성 유지
clu:추상와 매커니즘에 대한 일관성 있는 접근
1980년대:
ada:80년대의 pl/l,미 정부의 지원, 설계의 세밀함과 주도 면밀함
scheme,ml,common lisp,miranda:함수형 언어에 대한 새로운 관심
prolog:수학적 논리를 직접 사용
smalltalk:완전히 일관적인 객체지향을 추구 (순수 객체지향 언어)
1990년대
visual basic:비쥬얼 인터페이스 작성을 용이하게 함
java:인터넷 언어
후 여기까지가 오늘 프로그래밍 언어를 공부한내용입니다. ㅎㅎ