2010년 9월 25일 토요일

02. Binary Values and Number Systems

그레이스 호퍼, COBOL의 어머니, 여성 해군 제독

그레이스 호퍼(Grace Hopper)는 1906.12월 미국 뉴욕에서 태어났다. 병 때문에 다리를 모두 잘라낸 장애인이었으나, 여자도 남자와 마찬가지로 교육을 받고 신식 여성으로 살아야 한다는 아버지의 진취적인 가르침에 따라, 1928년 여자들의 대학 진학이 흔하지 않던 시절 바사르 칼리지(Vassar College)에서 수학과 물리학을 전공하였고, 1934년 예일대(Yale University)에서 수학으로 박사 학위를 받았다. 그리고 바사르 칼리지에서 수학을 가르치기 시작했다.

2차대전에서 일본이 진주만을 폭격하자, 1943년 애국심과 사명감으로 해군 소위로 자원 입대, Mark I을 만든 하워드 에이컨(Howard Aiken)과 함께 프로그램 개발을 시작하였다. 이후 Mark II, Mark III 개발에도 참여했다. Mark II로 프로그래밍을 하던 중 갑자기 컴퓨터 내부로 날아든 나방 때문에 컴퓨터가 작동을 멈춘 사건이 발생했는데, 이때부터 버그(bug)와 디버깅(debugging)이라는 용어를 사용하게 되었다.
  
1949년 Eckert-Mauchly Computer Corporation에 입사 UNIVAC I 개발에 참여하였으며, A 컴파일러를 개발하였다. A 컴파일러는 상용 버전인 ARITH-MATIC, MATH-MATIC 그리고 FLOW-MATIC 로 업그레이드 되었다.

1959년 CODASYL 위원회는 FLOW-MATIC과 IBM COMTRAN을 기반으로 COBOL(Common Business Oriented Language) 언어를 만들었다. COBOL의 기본 사상은 기계어나 어셈블리어가 아니라, 사람들이 쉽게 이해할 수 있는 자연어(영어)로 프로그램을 작성하려고 했던 그녀의 철학에 근거했다. COBOL의 주목적은 컴퓨터의 상업적인 이용도를 높이는 것이었으므로 누구나 쉽게 배우고 이해할 수 있고, 어떤 종류의 컴퓨터에서도 작동되도록 하는 것이었다.

1970년대에 그녀는 COBOL, FORTRAN 등의 언어들을 위한 테스팅 표준화를 개척하였으며, 그것은 지금의 National Institute of Standards and Technology (NIST)가 되었다.

1983년 컴퓨터 기술 발전에 이바지한 공로와 군에 대한 충성심을 높이 평가하여 대통령 특별지시로 그녀는 미 해군 최초의 여성 제독이 되었다. 1986년 80세의 나이로 전역하였는데, 이 또한 미 해군 역사상 가장 많은 나이에 전역한 기록이 되었다.

1992년 Digital Equipment Corporation의 선임 컨설턴트로 일하던 중 85세의 일기로 사망했다. 특별한 배경도 없었고, 비범한 천재도 아니었으며, 출중한 외모도 갖추지 못했던 그녀가 컴퓨터 역사에 큰 획을 그은 인물이 되었던 것은 오로지 자신의 의지와 노력 때문이었다.

출처 : http://www.acronet.kr/board/view.php?id=story&page=6&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=34&PHPSESSID=d6e5c9cc4e2fb3203cad71dd0df15072

코볼(COBOL : Common Business Oriented Language)

코볼(COBOL : Common Business Oriented Language)은 사무처리를 위한 프로그래밍 언어로서 가장 널리 사용되고 있다.
코볼은 1960년 컴퓨터 사용자와 제조업자의 그룹에 의해 사무처리에 적용될 수 있는 고급언어로 개발, 공표되었다. 코볼언어의 특징은 기계와 독립적으로 설계되어 컴퓨터 제조회사가 다르고 기종이 다르더라도 큰 변화없이 프로그램을 작성 및 수행할 수 있다는 점이다. 또한 일상에서 사용하는 영어와 같은 표현으로 기술하도록 설계되어 있다.
거의 모든 컴퓨터제조회사들이 코볼을 적용하기 시작했는데 코볼이 각광받기 시작한 것은 두 가지 이유에서이다.
첫째, 당시 저급언어를 이용하여 프로그램을 하는 것은 어렵고 에러가 많았으며, 포트란은 사무처리 업무에는 거의 부적합했기 때문에 사무처리에 편리한 프로그래밍 언어가 많이 필요하게 되었다. 둘째, 당시 컴퓨터제조회사의 가장 큰 고객이었던 미국 연방정부로부터 여러 기종에 공통적으로 사용할 수 있는 프로그래밍 언어의 필요성과 함께 당시 미국 연방정부에 컴퓨터를 팔고자 할 경우, 코볼프로그램이 처리될 수 있어야 한다고 했기 때문이다.
수차례의 수정 및 보완을 거쳐 1968년 코볼은 미국에서 사무처리 언어의 표준이 되었으며, 계속적인 보완으로 1974년 미국표준 코볼(ANSI cobol)이 완성되어 현재 거의 모든 컴퓨터에서 이용되고 있다. 또한 미국표준 코볼을 모델로 하여 소형 컴퓨터에서 사용하기 위한 RM-COBOL 85가 개발되어 마이크로컴퓨터개인용 컴퓨터에서 널리 사용되고 있다.
코볼은 사무처리 언어로서 몇 가지 중요한 장점을 가지고 있다.
둘째는 컴퓨터의 내부적인 특성과 별개로 설계된 것이다. 코볼컴파일러만 있다면 어떠한 컴퓨터이건 기종에 관계없이 코볼프로그램을 작성, 처리할 수 있다. 코볼은 파일처리 면에서 순차적인 처리, 비순차적인 처리 등으로 다른 언어에 비해 강력한 장점을 지니고 있으며, 누구나 쉽게 작성하고 또한 프로그램이 다른 프로그래머에 의해서도 쉽게 이해될 수 있다.
코볼 원시프로그램을 기계어로 번역하기 위한 번역프로그램, 즉 코볼컴파일러에는 이의 번역을 위한 많은 항목이 포함되어 있기 때문에 코볼프로그램 수행하기 위해서는 컴퓨터의 기억용량이 커야만 된다. 따라서 주기억용량이 적은 소형 컴퓨터에서는 코볼프로그램의 처리를 위해 RM-COBOL이 사용된다. 또한 코볼은 다른 언어에 비하여 프로그램 작성량이 많고 길어 전체적인 구성이 간결하지 못하다.


출처 : http://jus1170.tistory.com/1071

버그(Bug)

컴퓨터 기술 분야에서 "버그"란 컴퓨터 프로그램의 코딩 오류를 의미하는 용어이다. 프로그램 사용자가 이러한 버그를 발견하기 전에 찾아 수정하는 것을 "디버깅"(debugging)이라 하며, 디버깅은 프로그램의 개발 시작 단계부터 완료될 때까지 계속해서 이루어진다. 하지만 제품이 출시된 후나 베타 테스트 기간 중에도 버그는 여전히 남아있을 수 있다. 그러나 일반적으로 프로그램 개발 절차가 잘 확립되어 있고 프로그램의 설계를 잘하면, 그것이 비록 수천, 수만 개의 명령문이 조합된 대형 프로그램이라 해도, 버그를 최소한으로 줄일 수 있다.
버그의 어원은 1944년 하버드에서 MarkⅠ 컴퓨터로 프로그램을 개발했던 최초의 프로그래머인 그레이스 호퍼에 의해 비롯되었다. 젊은 해군장교였던 호퍼는 기술자들이 MarkⅡ 컴퓨터에서 오동작을 일으킨 벌레(모기)를 꺼낸 사건을 서술했다. 에릭 레이몬드는 그의 저서인 The New Hacker's Dictionary 에서 '그 벌레(모기)가 해군에 여러 해동안 전시되었고, 지금은 스미스쏘니언 박물관에 소장되어 있다'고 하였다. 이와 같이 버그라는 용어는, 현대의 컴퓨터 이전의 진공관 컴퓨터 시대부터 산업적 또는 전기적 오동작을 의미하는데 사용되었고, 때로는 컴퓨터 하드웨어 문제를 지칭하는 것으로 사용되기도 한다.

출처 : http://www.terms.co.kr/bug.htm

2010년 9월 14일 화요일

1. Big Picture - Java에 관하여

자바(Java, 문화어: 쟈바)는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이며, 썬 마이크로시스템즈에서 무료로 제공하고 있다. 1991년 그린 프로젝트(Green Project)라는 이름으로 시작해 1995년에 발표했다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹 어플리케이션 개발에 가장 많이 사용하는 언어 가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있다. 현재 버전 6까지 출시했다.
자바의 개발자들은 UNIX 기반의 배경을 가지고 있었기 때문에 문법적인 특성은 파스칼이 아닌 C++의 조상인 C 언어와 비슷하다.[1] 자바를 다른 컴파일언어와 구분짓는 가장 큰 특징은 컴파일된 코드가 플랫폼 독립적이라는 점이다. 자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트코드라는 특수한 바이너리 형태로 변환한다. 바이트코드를 실행하기 위해서는 JVM(자바 가상 머신, Java Virtual Machine)이라는 특수한 가상 머신이 필요한데, 이 가상 머신은 자바 바이트코드를 어느 플랫폼에서나 동일한 형태로 실행시킨다. 때문에 자바로 개발된 프로그램은 CPU운영체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템에서는 어디서나 실행할 수 있으며, 이 점이 웹 애플리케이션의 특성과 맞아떨어져 폭발적인 인기를 끌게 되었다.


역사
자바 언어는 1991년 6월 셋톱 프로젝트를 위해 제임스 고슬링(James Gosling)이 만들었다. 이 언어는 원래 제임스 고슬링의 오피스 밖에 있던 오크 나무를 따라 오크(Oak), 혹은 그린(Green) 이라고도 불렀으나 단어 리스트 중 무작위로 뽑은 자바(Java)를 선택했다. 고슬링의 목표는 C/C++ 스타일의 언어와 가상 머신을 구현하는 것이었다. 첫 공개 자바 버전은 1995년의 자바 1.0 이었다. 한번 쓰고 어느 곳에도 실행 "Write Once, Run Anywhere" 하는 것을 약속하였고 인기 플렛폼에 무료 런타임을 제공하였다. 이 플랫폼은 꽤 안정성을 지녔고 보안 시스템은 여러 설정을 통해 네트워크 및 파일 접근을 통제할 수 있었다. 대부분의 브라우져들은 곧 자바 애플릿(Java Applet) 을 웹 페이지 안에서 실행 할 수 있었고 자바의 인기는 급상승했다. 자바 2 (JDK 1.2 ~ 1.4) 의 출현으로 여러 다양한 플렛폼에서 사용 할 수 있는 설정(Configuration) 들을 만들었다. 예를 들어 J2EE 는 엔터프라이즈 애플리케이션을 실행할 수 있고 J2ME 는 모바일 애플리케이션을 실행할 수 있다. J2SE는 스탠다드 에디션 으로 지정되었다. 2006년에 마케팅 용으로 Java EE, Java ME, Java SE 순서대로 명칭을 바꾸었다.
썬사 (Sun Microsystems) 는 1997년 ISO/IEC JTC1 표준화 그룹, 그리고 나중에는 ECMA International 그룹과 접촉하여 정식 승인 받으려 했으나 곧 이 프로세스에서 철수 했다. 자바는 사실상 (de facto) 의 표준이며 자바 커뮤니티 프로세스(Java Community Process) 를 통해 관리가 된다. 썬사는 자바의 대부분을 무료로 배포하였으나 오픈이 아닌 Proprietary 소프트웨어였다. 썬사는 자바 엔터프라이즈 시스템같은 특정 라이선스를 팔아서 수입을 올렸다. 썬사는 자사의 개발용(Software Development Kit (SDK))과 개발용의 일부인 실행용 (Runtime Environment (JRE)) 을 구분한다. 실행용에는 컴파일러, 유틸리티 및 여러 개발용 헤더 파일이 포함되어 있지 않다.
2006년 11월 13일 썬사는 대부분은 자바를 GPL 라이선스로 소스를 오픈하였으며 2007년 5월 8일 이 과정을 마쳤다. 썬사가 권한을 가지고 있지 않은 대부분의 코어 부분을 오픈하였다.


핵심목표
자바 언어는 다음 5가지의 핵심 목표를 지니고 있다.
  1. 객체 지향 방법론을 사용해야 한다.
  2. 같은 프로그램이 여러 운영 체제에서 실행될 수 있어야 한다.
  3. 컴퓨터 네트워크 접근 기능이 기본으로 탑재 되어 있어야 한다.
  4. 원격 코드를 안전하게 실행할 수 있어야 한다.
  5. 다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.

버전
자바의 버전은 보통 자바SE(JDK/JRE)의 버전으로 말한다. JDK는 표준 라이브러리를 포함하며, JDK 버전이 바뀜에 따라 이 라이브러리가 확대되고 인터페이스(API)가 바뀐다.
초기 1.0/1.1 버전에서 JDK/JRE의 명칭을 사용하다가 Java 1.2가 발표되면서 J2SDK/J2RE라고 개명하여 사용했으나 기존의 명칭으로 사용하는 사람들이 많아 현재는 다시 JDK/JRE의 명칭으로 돌아왔다. 또한 J2SE(Java2 Standard Edition)라는 명칭 또한 Java SE(Java Standard Edition)으로 변경하였다. [2][3]

또한 버전체계의 메이저 버전(소숫점 위)이 계속 1.x로 고정되어 마이너 업데이트로 여기는 경우들이 있어 1.5 버전부터 5.0(1.5), 6.0(1.6)의 형태로 제품 버전을 코드버전과 별개로 발표하고 있다. [4]

언어 자체는 자바언어명세(JLS)에서 정의되며 판(edition)으로 구분한다. JDK가 확장되는 동안 언어는 2판에서 거의 변화가 없었으나, JDK 5와 함께 바뀐 JLS 3판에서 제네릭(generic) 타입, 애너테이션(annotation) 같은 기능이 도입되면서 상당히 바뀌었다. JDK 7에서도 클로저(closure) 등이 도입될 것으로 알려져 있다.
현재 자바언어는 JLS 3판, JDK는 버전 6이다.
  • JLS 1판
  • JLS 2판
    • JDK 1.4: assertion 기능 추가
  • JLS 3판(JDK 5)

출처 : http://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)

2010년 9월 4일 토요일

컴퓨터과학개론과 컴퓨터교육과수업사이의 연관성 찾기

1.The big pictures : 이 단원은 프로그래밍 시스템의 전반적인 것에 대해 설명해주는 단원 같다. 그래서 어떤 전공과 관련 있다기 보다는 프로그래밍을 하는데 있어서 컴퓨터시스템의 대략적인 구조에 대해 말해주고 있다고 생각한다.

2.Binary values and number systems : 컴퓨터는 2진법으로 돌아간다. 이러한 체계에 대해서 설명해주는 단원이다. 그리고 컴퓨터에서 수체계의 쓰임에 대해 말하고 있다. 1학기때 C언어를 배울 때도 2진법에 관해서 들었다. 잘 생각은 안나지만 True - 0 False - 1이었던거로 기억한다.

3.Data representation : 여기서는 데이타를 표현하는 방법에 관해서 말하고 있는 것 같다. C언어를 배울때 봤던 아스키 코드?도 보이고 실수 음수 이런것들도 나오는 것 같다.

4.Gates and circuits : C언어로 코딩을 할때 자주 사용했던 and, or 이게 보인다. 또한 어떤 순환체계? 이런것들에 대해서 배우는 것 같다. C언어에서의 while for 문과 연관이 있지 않을까싶다.

5.Computing components : 프로그래밍을 하는데 있어서의 구성요소?에 관해 말해주고 있는 듯 싶다. 실행구조나 저장장치 실행써킷 평행컴퓨팅 등의 단어가 보이는데 자바에서 배우지 않을까 생각해본다. 또한 Data Sturucture라는 강의와도 꽤나 연관이 있어보인다.

6.Low-level programming languages and pseudocode : 여기서는 기계어와 알고리즘 표현등에 관해 배우는 것같다. 단원제목에 pseudocode가 있는 것으로보아 Data Structures 단원과 깊은 연관이 있을 것으로 보인다.

7.Problem solving and algorithms : 여기서는 문제를 해결하는 법과 알고리즘에 관한 내용이 나올 것 같다. 알고리즘은 2학년쯤에 배우는 과목으로 알고 있다. 알고리즘을 잘하려면 data structure란 과목을 잘 해야 한다고 들었다. 그래서 연관이 있을 것 같다. 또한 소단원에서 array가 보인다. C언어에서 배운 배열이 생각난다.

8.Abstract data types and subprograms : 여기서 약간은 새로운 개념인 추상적 데이타 타입에 대해 배우는 것 같다. Dats structures 시간에 추상적 데이타 타입에 대해 들어본 것같다. 추상적 데이타 타입과 반대 개념의 예로써 int, float, double 등이 있다. 기존에 존재하는 데이타 타입을 말하는 것이고 추상적 데이타 타입은 사용자가 데이타타입을 만드는 것이다. 이는 C언어에서 structure를 배울 때 배웠던 기억이 난다.

9.Object-oriented design and high-level programming languages : 이 단원에서는 컴파일러가 가장 눈에 띈다. C언어에서 컴파일링할때 'gcc 파일명.c -o 파일명' 이렇게 한다. 최근 배운 자바에서는 'javac 파일명.java' 이렇게 하면 된다.

10.Operating systems : 여기서는 OS 즉 운영체제에 대해서 배우는 것 같다. 내가 배운 운영체제로는 저번 1학기에 배운 리눅스가 있다.

11.File systems and directories : 파일과 디렉토리를 다루고 처리하고 어떤 유형이 있는지에 관해서 배우는 것 같다. 리눅스에서 파일과 디렉토리를 다루는 걸 배웠던 거로 기억한다. 기억나는 명령어가 몇개 없다. mkdir, rm.. Data structures 강의에서도 이 부분에 대해서 약간은 다룰 것 같다.

12.Information systems : 여기서는 정보를 다루고 정보체계가 어떻게 구성되어 있는지 배우는 것 같다. 또한 컴퓨터의 안전성, 정보의 안전성에 대해서도 배우는 것 같다. 전공과목에서는 다뤄보지않은 부분이라 생각된다. 관심이 생기는 단원이다.

13.Artificial intelligence : 이 단원에서는 인공지능이라는 흥미로운 주제를 다루는 것같다. 컴퓨터가 사람처럼 생각하고 행동하게 하는 것은 놀랍고 신기하다고 생각한다. 기계는 정해진 대로만 반응하지만 인공지능이 생기면 사람처럼 상황에 따라 대처방법이 달라진다. 이런 것을 C언어를 공부하면서 해본 것같다. 앞으로 배울 java에서도 여러 상황에 맞게 대처하는 프로그램을 만들게 될 거라 생각한다.

14.Simulation, graphics, gaming, and other applications : 여기서는 익숙한 단어들이 많이 보인다. 시뮬레이션, 그래픽, 게임, 그리고 어플리케이션. 특히 흥미로운 부분은 게임이다. 게임 그래픽을 디자인하고 게임을 프로그래밍하는 부분은 아주 흥미롭다. 이런 부분들이 모두 컴퓨터 언어를 이용해서 프로그래밍을 한다고 들은 것 같다. 즉 C언어, java등이 게임을 만드는 중요한 요소라는 것이 흥미로운 점이다.

15.Networks : 여기서는 네트워크, 프로토콜, 이런 단어들이 보인다. 인터넷과 관련된 단원이라고 생각된다. 이 부분은 중학교 혹은 고등학교때 컴퓨터 시간에 배웠던 것들로 기억한다.

16.The world wide web : 여기서는 인터넷할때 자주 보는 www에 관해 배우는 것 같다. 검색엔진, 블로그, 쿠키, HTML등과 같은 단어들은 자주 접하지만 정확히는 모르는 용어들이다. 배우고 싶은 단원이다. 어떤 전공과목과 관련이 있는지는 모르겠다.

17.Limitations of computing : 프로그래밍의 한계에 대해서 말하고 있는 것 같다. 기껏 열심히 배우고 있는 프로그래밍인데 한계라니 힘이 좀 빠진다. 이 단원에서 C언어라든지 java등과 같은 기계어의 한계에 대해서도 배울 것 같다.