# data[].attributes.body
기계어만을 이해하는 컴퓨터와 자연어를 구사하는 인간 사이의 의사소통 수단이다. 프로그래밍언어는 프로그래밍의 방법에 큰 영향을 주며, 컴퓨터에 대한 이해와 활용에 매우 큰 영향을 끼쳐 왔으며, 컴퓨터 하드웨어의 발전과 더불어 계속하여 발전하여 왔다. 컴퓨터가 탄생한 이래 언어의 설계와 사용법에 대한 경험이 축적되어 오고 있지만, 언어 설계와 구현과 사용면에 있어 더욱 연구되어야 할 부분들이 많다.

# data[].attributes.body
이 책을 읽음으로써 빅데이터가 정확히 무엇인지 우리가 이것을 어떻게 활용할 수 있고 어떻게 발전해 나갈수 있을지 그리고 현재 우리 삶에 어떤 영향을 미치고 있는지 등에 관해 알아보고 싶었다.

# data[].attributes.body
이 책은 “빅데이터란 무엇인가?”, “빅데이터의 사용법”, “빅데이터의 가치”, “미래에 사용될 빅데이터” 이렇게 총 4가지로 나누어 설명한다. 빅데이터는 이름 그대로 데이터의 양이 많고, 다양하다. 사실상 오늘날에는 인간의 거의 모든 활동들이 데이터로 남아 빅데이터를 이루는데 일상생활에서 보면 네비게이션 내역, SNS, 카드내역 등이 있다. 빅데이터를 무조건 많이 보유하고 있는것은 의미가 없다. 이 데이터들을 분석하고 목적에 맞게 계획해야 빅데이터의 가치가 생긴다. 빅데이터는 이미 다양한 부분에 사용되고 있다. 플랫폼 사업에서는 소비자가 원하는 정보를

정리해 제공하고, 마케팅, 영업관련으로 보면 시장 세분화가 가능하다. 빅데이터는 인공지능의 중요한 부분이다. 인공지능의 컴퓨터가 빅데이터를 학습하여 지능적으로 행동하는 것이기 때문이다. 빅데이터는 유용하지만 개인정보 등 문제가 아직 해결되지 않은 부분도 있다.

# data[].attributes.body
빅데이터가 현재에도 많이 활용되고 있고 미래에도 유용하게 사용될 것이다. 그렇다면 빅데이터와 관련된 법이 강화되고, 사람들의 인식도 개선되어야 된다고 생각한다. 빅데이터는 사람들의 정보를 저장하는 것이라 자신도 모르는 사이에 내 얼굴이 들어간사진, 개인정보 등이 공개될 수 있다. 데이터가 큰 자산이 되가고 있는 만큼 자신의 데이터는 자신이 관리하는(기부, 또는 기업이나 개인에게 판매, 공유) 습관이 필요할 것 같다.

# data[].attributes.headline
세상을 읽는 새로운 언어, 

# data[].attributes.subject
세상을 읽는 새로운 언어, 

# data[].attributes.body
도서명 : 한 권으로 그리는 컴퓨터 과학 로드맵
저자 : 블라드스톤 페헤이라 필루
출판사 및 전체 쪽수 : 인사이트 / p.272

# data[].attributes.body
◾ 파이썬(Python)
머신러닝, 개발, 해킹, 데이터사이언스, 수학자, 금융 전 분야에 활용이 가능한 만능언어이다. 특히 교육부분에서 국내외 대학들에서도 다양한 프로그래밍 언어들 사이에서 입문언어로 채택된다.

◾ C언어
벨 연구소에서 1971년경부터 리치 등에 의해서 설계 개발된 시스템 기술용의 프로그래밍 언어이다. UNIX 오퍼레이팅 시스템의 기술에 사용할 것을 목적으로 설계한 언어로 UNIX OS의 대부분이 이 언어로 개발되었다. 컴퓨터의 구조에 밀착한 기초 기술이 가능한 것과 간결한 표기가 될 수 있는 것 등을 특징이다. C 언어는 프로그램 오류를 쉽게 발견하기 위한 기능은 부족하지만, 고수준 언어에서 자주 볼 수 있는 기술상의 제약이 적기 때문에 오히려 프로그래밍하기 쉬운 편리한 언어로 평가되며, 프로그램을 간결하게 쓰기 위하여 많은 연구를 한 언어이다.

◾ 자바(JAVA)
① 자바는 간단하다 (simple)

자바 언어는 C++를 기반으로 개발되었음에도 C++에서 혼란을 일으키는 부분을 제거했다. 예를 들면 연산자 오버로딩, 다중 상속 같은 것들이다. 그리고 C++에서 문제가 되는 기억 장소 경영 문제를 자동 쓰레기 회수와 할당으로서 극복했다. 그러므로 프로그래머는 이것에 더이상 신경을 쓸 필요가 없다.

② 자바는 객체 지향 언어이다 (object-oriented)

③ 자바는 보안에 강하다 (secure)
자바는 원래부터 네트워크 분산 처리 환경에서 사용하기 위해 디자인된 언어이다. 네트워크 환경은 다른 환경보다 보안의 측면이 강조되는 환경인 만큼 자바는 보안에 중점을 두고 있다. 자바는 바이러스가 침투하지 못하는 구조를 가지고 메모리에서 데이터 접근을 제한할 수 있다. 접근을 허용하지 않으면, 애플리케이션의 데이터 구조 또는 데이터에 대한 접근은 불가능하다.

④ 자바 아키텍처는 중립적이다 (architecture neutral)
네트워크는 다양한 기종의 컴퓨터와 다양한 플랫폼과 다양한 하드웨어로 이루어져 있다. 자바는 자바 코드 소스를 컴파일하여 바이트 코드를 만들어내며 이 바이트 코드는 다양한 플랫폼에 설치된 자바 인터프리터에 의해 해석되기 때문에 어떠한 플랫폼에서도 실행 가능하다. 따라서 새로운 기계라도 자바 인터프리터만 설치되어 있으면 바이트 코드를 해석할 수 있다.

⑤ 자바는 이식성이 높다 (portable)

기존의 언어는 각각의 플랫폼마다 수치 연산 문제 등으로 인하여 약간씩 다른 코드를 사용한다. 그러나 자바는 이식성이 강하여 다른 운영 체제, 다른 CPU에서도 같은 코드를 사용할 수 있다. 이식성이 높을 때의 단점은 각각의 시스템의 특성을 고려하지 않기 때문에 최적의 성능을 얻어낼 수 없는데, 자바는 이러한 것을 극복한 언어이다.

# data[].attributes.body
◾ 1세대 언어
1세대 언어는 컴퓨터가 인식할 수 있는 기계어를 말한다. 즉, 0과 1로 구성된 언어로 기계어는 컴퓨터가 사용하는 언어로 이해하면 된다.

◾ 2세대 언어
2세대 언어는 첫 번째 프로그래밍 언어라고 할 수 있지만, 기계어에 가까운 언어이다. 0과 1로 구성된 기계어의 불편함을 개선하기 위해 기계어를 일부 기호화한 언어라 볼 수 있다. 그러나 현재는 특수한 분야를 제외하고는 거의 사용되지 않고 있다.

◾ 3세대 언어
3세대 언어는 본격적인 프로그래밍언어라 할 수 있으며 주로 절차지향 중심의 언어들이 개발되었다. C, 포트란, 코볼, 베이식 언어 등이 개발되었으며, C 언어는 현재까지도 광범위한 응용 분야에서 많이 사용되고 있다.

◾ 4세대 언어
4세대 언어는 대용량 데이터를 처리하기 위한 데이터베이스 관련 프로그램을개발할 수 있는 언어이다. 이 언어들은 주로 윈도우에서 쉽게 프로그램을 개발할 수 있는 환경을 제공하고 있다. 현재 4세대 언어의 사용은 5세대 언어의 등장으로 점차 사용이 줄어들고 있는 추세이다.

◾ 5세대 언어
5세대 언어는 본격적인 객체지향 언어라고 할 수 있는데 네트워크 관련 기능이 강화된 언어이다. 대표적인 언어로 Java 언어와 C++, C# 등이 있다. 또한 웹의 등장으로 인해 웹과 데이터베이스를 쉽게 연결하여 프로그램을 개발할 수 있는 ASP, JSP, PHP 등의 언어들이 있다.

절차지향 언어란? 절차지향 프로그래밍은 물이 위에서 아래로 흐르는 것처럼 ‘순차적인 처리’가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 대표적인 절차지향 언어에는 C언어가 있다. 이는 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체 지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리하다.

객체 지향언어란? 객제 지향 프로그래밍은 개발하려는 것을 기능별로 묶어 모듈화를 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용하기 때문에 하드웨어의 처리량을 획기적으로 줄여준다.

# data[].attributes.body
◾ 객체 지향 언어
객체 지향 언어는 프로그래밍을 함에 있어서 데이터와 그 데이터를 처리할 메소드를 한데 묶어 객체를 만들고 객체들을 조립하는 것을 목표로 한 언어들을 말한다. 객체 지향 언어의 특징은 추상화, 캡슐화, 상속성, 다형성이 있다. 추상화는 외부 인터페이스만 제공하고 객체 내부를 숨겨서 어떻게 일을 하는지 몰라도 결과를 내보낸다. 캡슐화는 객체 내부에 필요한 데이터등을 묶어서 한번에 관리 할 수 있게 해준다. 상속은 모객체를 상속받아 추가 기능을 더 붙이거나 약간의 수정을 가한 객체를 만들 수 있다. 다형성은 메소드 이름은 같더라도 매개변수의 유무, 매개변수의 개수, 매개변수의 자료형, 반환하는 값의 자료형에 따라 다른 메소드가 실행될 수 있다는 것이다. 즉, 메소드명이 같아도 실제 행위는 타입에 따라 다를 수 있다는 것이며, 상향 형변환 및 동적 바인딩이라는 개념과 관련이 있는 특성이다.

◾ 선언형 언어
선언형 언어는 명령형 언어와 대비되는 개념으로, 함수형 언어와 논리 프로그래밍등이 여기에 속한다. 현재 학계를 떠나 슬슬 업계 전반으로 확산되고 있다. 특히 신기술의 도입이 빠른 웹 앱 계열에서 선언형 스타일의 프로그램이 선호되고 있는데 자바스크립트 코드의 코딩 스타일이 점점 선언형으로 변화하고 있다. 선언형으로 기술하는 가장 유명한 라이브러리로는 제이쿼리가 있으며 앵귤러JS는 선언형 언어의 가장 최신 트렌드인 반응형 프로그래밍 개념을 도입하고 있다.
선언형 언어에는 '지연 평가' 이라는 강력한 특징이 있다. 계산을 필요한 그 순간이 올 때까지 미룬다는 개념인데, 이 개념은 선언형 언어에만 있다.

◾ 명령형 언어
명령형가 튜링머신에 기반하고 있다면, 함수형 언어는 람다 칼큘러스에 기반하고 있는 언어에 대한 총칭이다. 현업에서 많이 쓰이는 명령형 언어와는 대조적으로 몇가지 특징이 있다.

순수 함수형 언어는 변수가 없다.                                               순수 함수형 언어에는 변수와 변수를 바꾸는 대입 연산자(C 언어를 예로 들면 =)가 없다. 명령형 언어에서 a=3 이 a 에 3 을 대입하라는 명령인 반면, 순수 함수형 언어에서는 a=3 을 수학에서 let a be 3. 같이 a 를 3 으로 '정의'하는 것으로 본다. 즉 한번 a를 뭐라고 정의했으면 그 정의는 유효 범위 내에서 값이 바뀌지 않는다. 이게 불러오는 가장 큰 차이가 명령의 '순서'가 의미없다는 점이다. 이런 특징에서 나오는 장점으로 표현식의 의미가 명료해진다는 것이 있다. 또, 제어 흐름을 생각하지 않고 프로그래밍 할 수 있다는 장점이 있다.

destructive update                              예를 들어 일반적인 명령형 언어에서 a=a+1는 a라는 변수에 a를 1만큼 증가시킨 값을 대입하라는 의미를 가지며 이 명령을 시행하는 시점에서 변수 a의 값이 바뀌게 된다.

하지만 순수 함수형 언어인 하스켈의 경우 a=a+1는 a라는 변수를 정의하는 것이 아니라 a라는 함수를 정의한다. 출력하게 하면 a=a+1=(a+1)+1=((a+1)+1)+1=(((a+1)+1)+1)+1=... 이런 식으로 무한 루프에 빠져서 영원히 a의 값을 출력하지 못하다. 이것은 lazy evaluation 때문이 아닌, 함수형 언어의 특징이다. 타 언어에 익숙하다면 저 a가 변수처럼 보일 수 있으나 함수를 정의하는 문법이다. f(x,y) 를 이변수함수로, f(x) 를 일변수함수로 보듯이, a 역시 f(void) 같은 파라메터가 0 개인 함수이다. 함수형 언어에서의 a=3 은 그냥 C 언어에서의 int a(void) { return 3; } 으로 보면 된다.

◾ 논리 프로그래밍
명령형 언어가 튜링머신에, 함수형 언어가 람다 칼큘러스에 기반하고 있다면, 논리 프로그래밍은 수리논리학의 First order logic(1차언어)를 모델로 사용하는 프로그래밍 언어의 총칭이다.
사실, 이바닥의 알파와 오메가인 Prolog 이 1차언어에 기반하고 있기때문에 이런식의 정의가 많이 쓰이지만, 실제론 Higher order logic, F-logic, linear logic 등 여러가지 다른 논리를 사용하는 언어도 있고, 이것들도 대부분 Prolog 에 기반하고 있는 경우가 많아서 다 논리 프로그래밍 언어라 한다.
Clause의 집합이 곧 프로그램이 되며, Clause는 이쪽에서 가장 유명한 Prolog 언어를 예로 들면, Head :- Body 형식으로 정의된다. 이것은 If Body, then Head 즉, To solve Head, solve Body 식으로 해석할 수 있다. 함수형 언어에서 프로그램을 함수들의 집합으로 보고 있다면, 논리 프로그래밍에서는 프로그램을 공리들의 집합으로 보고 있다고 이해하면 된다.

# data[].attributes.body
BCI(Brain Computer Interface) 기술은 뇌파를 이용해 컴퓨터를 사용할 수 있는 인터페이스를 뜻한다. 두뇌의 정보 처리 결과인 의사결정을 언어나 신체 동작을 거치지 않고, 사용자가 생각하고 결정한 특정 뇌파를 시스템의 센서로 전달하여 컴퓨터에서 해당 명령을 실행하게 된다.

# data[].attributes.body
- 2012년 팔다리가 마비된 환진의 뇌와 컴퓨터를 연결해 로봇팔을 움직였다.

- 2019년 사지마비장애인이 뇌파를 이용해 외골격 로봇을 입고 걷는데 성공했다.

- 생각만으로 분당 8단어(40개 글자)를 타이핑 하는것이 가능하다.

- 뉴러블은 스페인 가상현실 그래픽 업체 이스튜디오와 협력해 BCI기반 VR게임을 개발했다. 이 기술을 채택한 헤드마운트를 착용하면 가상현실 게임 속에서 게임 컨트롤러 없이 생각만으로 가상 현실 캐릭터와 싸움을 벌일 수 있다.

# data[].attributes.body
- 인간의 정신적 정보가 보안상 위험에 노출될 수 있다는 윤리적 문제가 있다.

- 뇌파를 측정하는 방식은 침습형 방식, 비침습형 방식 두가지가 있다.
침습형 방식_ 뇌에 직접 접근해 정확한 측정이 가능하지만 외과적 부작용을 동반할 수 있음
비침습형 방식_ 뇌파측정이 간편하지만 결과가 부정확할 수 있음

# data[].attributes.body
뇌파 측정방식에는 침습형과 비침습형 두가지가 있는데 나는 침습형이 더 좋은 방법이라 생각한다. 침습형은 비록 현재는 외과적 부작용을 초래할 수 있지만 점점 더 기술이 발전하고 나면 가장 정확한 방법이 되겠지만 비침습형 방식은 측정이 부정확할 수 있기 때문이다.