ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래밍 언어론(간단히 정리한 것임)과 언어 개발자들의 간단한 인터뷰
    컴퓨터 공부 ver 0.2/기타(책 등등) 2010. 8. 28. 12:18
    반응형

    참고한 책: [프로그래밍 언어론 - Robert W. Sebesta 지음/유원희, 하상호 옮김]
      간단히 스터디 준비를 위해 정리 한 것이라 빠진 부분이 상당히 많다. 언어의 역사는 우리가 많이 배운, 혹은 검색하면 왠만큼 나오는 자료에 대한 것을 뺐습니다. 프로그래밍 언어가 생기기 전의 자료만 간단히 있다고 보시면 됩니다. 그리고 프로그래밍 언어 개발자의 인터뷰는 C와 JAVA를 개발하신 분들에 대한 것은 아직 타이핑을 못했습니다. 빠른 시일 내에 수정해서 올려 놓겠습니다.
      학교 수업 교재로 사용을 안하더라도, 한번쯤 읽어보면 좋을 듯합니다. 거의 1년 계획으로 천천히 보고 있기는 한데 대부분 특히 프로그래밍 언어 개발의 방법론 같은건 정말 이해가 안됩니다. 하지만 프로그래밍 언어를 공부하고 있다면 C나 JAVA말고도 다양한 언어가 어떤 것이 있는지 알면 좋지 않을까요? 혹 자신만의 프로그래밍 언어를 개발하고 싶으신 천재적 마인드를 가지고 계신 분이라면 한번 읽어보세요. 전 그냥 누군가 만들어 놓은 언어를 사용하는 거에 만족하렵니다. 부디 개발자를 위한 그리고 쉽게(?) 사용할 수 있는 언어를 만들어 주세요. ^^

    1.      프로그래밍 언어

    A.     프로그래밍 언어의 개념 학습 이유

                    i.         생각을 표현할 수 있는 능력이 향상

                   ii.         적합한 언어를 선택할 수 있는 배경이 향상

                  iii.         새로운 언어를 배울 수 있는 능력이 향상

                  iv.         구현의 중요성에 대해서 보다 많이 이해

                   v.         이미 알고 있는 언어에 대한 더 나은 사용

                  vi.         전반적으로 전자계산 분야의 이해가 향상

    2.      언어를 평가하는 기준: 판독성, 작성력, 신뢰성, 전반적인 비용

    3.      프로그래밍 언어의 발전사

    A.     Zuse PlanKalkul

                    i.         구현되지 않았음. 1945년에 개발되었지만, 그 기술 사항은 1972년까지 출판되지 않았다. 이 언어의 몇 가지 기능은 개발된 지 15년이 지난 후에야 다른 언어에 나타남

                   ii.         특징

    1.      가장 단순한 데이터 타입은 단일 비트. 이 비트 타입으로부터 정수와 부동소수점의 수치 타입이 구성

    2.      배열과 레코드를 포함

    3.      명시적으로 goto를 포함하지 않았지만, Ada for문과 유사한 반복문을 포함

    4.      프로그램 변수 간의 관계를 보여주는 수학적 표현식의 포함. 이러한 표현식은 이것이 나타나는 코드 지점에서 실행 중에 무엇이 참이 될 것인지를 기술

    B.     1940년대 후반과 1950년대 초기에 사용되었던 의사 코드(우리가 아는 의사코드와는 의미가 다름)

                    i.         최소의 하드웨어 프로그래밍

                   ii.         기계 코드로 이루어짐. 이 기계 코드를 명세화하기 위해 수치 코드를 사용

    C.     Short Code

                    i.         BINAC 컴퓨터를 위해서 1949 John Mauchly에 의해서 개발

                   ii.         UNIVAC I 컴퓨터로 옮겨짐

                  iii.         기계 코드로 번역되지 않고, 순수 인터프리터로 구현

    D.     Speedcoding

                    i.         부동소수점 연산을 지원하기 위해서 기계 언어를 확장하는 해석 시스템

                   ii.         IBM 701을 위해서 John Backus에 의해서 개발

    E.      드디어 UNIVAC의 등장!! 그 후부터는 진정한 프로그래밍 언어의 시작이라 보시겠습니다.

    4.      구문과 의미론

    A.     프로그래밍 언어의 학습

                    i.         구문(syntax): 언어의 표현식, 문장 그리고 프로그램 단위의 형식

                   ii.         의미론(semantics): 표현식, 문장, 프로그램 단위에 대한 의미

                 iii.         잘 설계된 프로그래밍 언어에서, 의미는 구문으로부터 직접 파악되어야 한다. , 문장의 형태가 문장이 수행하고자 하는 의도를 강력하게 암시해야 한다.

    B.     구문 기술

                    i.         언어 인식기: 일반적으로 언어는 인식(Recognition)에 의한 방식과 생성(Generation)에 의한 방식으로 정의 됨

                   ii.         언어 생성기: 언어의 문장들을 생성하는 데 사용될 수 있는 장치

    C.     구문 기술의 형식적 방법

                    i.         Backus-Naur 형식과 문법자유 문법

    1.      문맥자유 문법: 1950년대 중반 언어학자 Chomsky가 정의한 네 가지의 언어 유형 중 [유형-문맥자유 문법(Context-free grammar)] [정규문법(Regular grammar)]이 프로그래밍 언어의 구문을 기술하는 데 유용한 것으로 판명

    2.      Backus-Naur 형식의 기원: ALGOL 58을 기술하는 획기적인 논문이 ACM-GAMM의 주요 회원인 John Backus에 의해서 발표. 이 논문은 프로그래밍 언어의 구문을 명세하는 새로운 형식적인 표기법을 도입. Peter Naur는 이 새로운 표기법을 ALGOL 60을 기술하기 위해서 약간 수정. 이 수정된 구문 기술 방법은 Backus-Naur 형식, 또는 BNF로 알려짐

    5.      인터뷰 최근에 많이 사용하는 언어를 개발하거나, 언어 개발에 많은 영향을 준 사람들의 인터뷰 내용 중 언어에 관한 부분만 추림

    A.     Alan Cooper
    사용자 인터페이스 설계에 가장 많은 관심을 갖는 언어로 고려될 수 있는 Visual Basic을 설계하는 데 커다란 영향을 줌.

                    i.         프로그램을 작성하다가 어떻게 해서 마이크로소프트사와 함께 일하게 되었는지.
     Tripod
    Ruby는 같은 것입니다. 빌 게이츠와 협약서에 서명한 후에, 나는 그 원형의 이름을 Tripod에서 Ruby로 변경하였습니다. 그 이후에 원형이 사용되어야 할 때는 Ruby 원형을 사용하였는데, 이 원형은 발표 버전의 성능 좋은 코드를 구성하기 위해 폐기 가능한 모델로서 사용되었습니다. MS Ruby의 발표 버전을 가져와서, 여기에 QuickBasic을 추가하여 VB를 생성하였습니다. 이러한 모든 초기의 혁신적인 사항이 Tripod/Ruby에 포함되어 있습니다.

                  ii.         Visual Basic의 인큐베이터로서 Ruby 초기 윈도우와 그 DLL 특징에 대한 당신의 관심으로 다시 돌아가서 계속 설명해주시기 바랍니다.
    DLL
    은 따로 존재하는 것이 아니고 윈도우 OS에 포함된 기능입니다. DLL은 단지 컴파일 시간에만 링크되는 것이 아니고, 실행 시간에도 링크될 수 있는 코드 객체를 프로그래머가 생성하는 것을 허용하였습니다. 이러한 사실이 내가 VB에서 동적으로 확장한 가능한 부분을 고안해내는 것을 허용하였습니다. VB의 컨트롤은 제 3의 회사에 의해서 추가될 수 있습니다.
     Ruby
    작품은 소프트웨어 설계에서 상당히 큰 진보를 여러 가지 포함하고 있습니다. 이들 중 2가지는 예외적일 정도로 성공적입니다. 이미 언급하였듯이, 윈도우의 동적 링킹 기능은 항상 나의 큰 관심이었습니다. 그러나 도구를 가지고 있는 것과 도구를 사용하여 무엇을 할 것인지를 아는 것은 2가지의 다른 일입니다. Ruby를 통하여 나는 마침내 동적 링킹에 대한 2가지의 실질적인 용도를 알아냈습니다. 첫째는 언어가 설치 가능하고 동적으로 확장될 수 있다는 것이고, 둘째는 일련의 코드(palette of gizmos)가 동적으로 추가될 수 있다는 것입니다.

    B.     Rasmus Lerdorf
    그의 온라인 이력서에 접근하는 방문객들을 추적하려는 노력의 결과로 PHP의 첫 번째 버전을 생성하였다. 소스 개방 운동에 대한 옹오자이며, 캘리포니아의 서니베일에 위치한 야후에서 일하고 있다.

                    i.         오늘날 PHP는 다른 스크립트 언어(Perl, Tcl, Python, Ruby)가 제공하지 않는 무엇을 제공하고 있습니까?
     PHP
    는 웹 문제에 특정적으로 목표되어 있습니다. 여러분이 PHP에 대해서 읽은 모든 것은 웹과 연동되었습니다. 따라서 여러분이 웹 문제를 해결하려고 할 경우에, 여러분이 PHP를 어떻게 적용할 것인지는 매우 분명합니다. 이것은 범용적인 다른 언어에 대해서는 분명하지 않습니다. 여러분은 먼저 그러한 언어를 선택하면, 그 특정 언어를 적용하기 위한 가장 좋은 방식을 찾으려고 힘써야 합니다.

                   ii.         PHP의 미래: PHP 코드의 다음 특성, 즉 당신이 동작되게 하거나 추가하고 싶은 다음 기능은 무엇입니까?
     PHP
    로 모든 것을 결합하려는 이전의 개발 방향은 잘 확장되지(scale) 않기 때문에, 여러분은 PHP 코드의 우수한 저장소(repository)와 확장(extensions)을 필요로 합니다.

    C.     Larry Wall
    유니시스, 제트 추진 연구소, 씨게이트에서 일했다. 언어 출판은 그에게 가장 많은 명성을 가져다 주었다. Perl 스크립트 언어의 저자

                    i.         Perl의 탄생 새로운 언어에 대한 생각은 어떻게 나왔습니까?
    우리는 저속이고 암호화된 네트워크로 전국적으로 사양 관리(configuration management)를 하려고 했었습니다. 이것은 유용한 정보가 거의 없는 많은 양의 텍스트 데이터를 생성하였습니다. 따라서 Perl은 초기에 텍스트를 포함하고 있는 흩어진 파일들을 상세히 조사하여 중요한 비트들을 찾고, 이에 대한 보고서를 출력하기 위해서 설계되었습니다. Perl에 대한 공식적인 다음 두 가지의 주석은 이러한 사실을 반영합니다. : “Practical Extraction and Report Language(실용적 추출 및 리포트 언어)” 그리고 “Pathologically Electric Rubbish Lister(병리학적인 전기 형편없는 Lister
    à 도대체 뭔소리야?)”

                  ii.         Perl이 다른 스크립트 언어와 어떻게 다릅니까?
    좋은 스크립트 언어는 여러분의 스크립트를 실제의 프로그램으로 변환되는 것을 지원해야 한다고 생각합니다. 이런 목적에 대해 Perl은 스크립트 지원을 보완하는 다중 패러다임 프로그래밍 지원을 완벽하게 제공합니다. 다시 말하면 Perl은 성숙된 컴퓨터 언어처럼 동작합니다(여러분이 그렇게 사용하려고 준비되었다면).
     
    스크립트는 고속도로의 램프와 유사합니다. 대부분의 프로그래밍 언어는 고속도로 없는 램프 또는 램프 없는 고속도로를 제공하려고 합니다. Perl은 일석이조 언어이기 때문에 두 가지를 다 제공하려고 합니다. Perl의 슬로건이 무엇인가를 하는 방법은 한 가지 이상 존재한다.” 라는 이유가 그것입니다. Perl은 특별한 스타일을 강요하려고 하지 않습니다. 어떤 문제는 파이프와 패턴 매칭에 의해서 잘 해결되고 다른 문제는 함수 프로그래밍, 이벤트 프로그래밍 또는 객체지향 프로그래밍에 의해서 잘 해결됩니다
    .
     
    반면에 다른 언어는 가끔 여러분의 사고의 특별한 틀에 묶어 놓거나 외부 세계에 인터페이스 하는 것을 어렵게 만들려고 합니다. Perl은 완벽한 언어를 추구하지 않지만 유용한 언어가 되기를 추구합니다. 따라서 가끔 단순한 방법으로 다른 언어나 시스템과 협력하는 것을 포함합니다. 자연 언어는 이상적인 언어도 아니고 여러분을 수도원에 감금하려고 하지 않습니다. 컴퓨터 언어도 마찬가지 입니다.

                  iii.         Perl을 설계할 때 현재 같이 될 거라고 생각하셨습니까? 인터넷에서 Perl을 그렇게 유용하게 만든 것은 무엇입니까? 그리고 마케팅이 매우 중요하기 때문에, 산업이나 컴퓨터 분야에서 Perl이 잘되는 것을 도와준 것이 어떤 일이라고 생각하십니까?
     
    . 나는 Perl이 클 것이라는 것을 알고 있었지만 이렇게 클 것이라는 것을 몰랐습니다. 나는 처음부터 Perl이 텍스트 처리 분야에 awk sed 를 쓸모 없게 만들고, 인터페이스를 연결하는 데 있어서 어느 정도 shell 프로그래밍을 쓸모 없게 만들 것이라는 것을 알았습니다. 모든 시스템 관리 연산을 첨가한 후, Perl이 대부분의 UNIX 시스템 관리자에게 선호하는 언어가 되었다는 것에 전혀 놀라지 않았습니다.
     
    내가 예상하지 못한 것은 웹이고 많은 웹이 Perl 로 프로토 타입화 될 것이라는 것을 예상하지 못했습니다. 그러나 HTTP가 텍스트-기반 프로토콜이고 웹 서버가 텍스트와 백 엔드 데이터베이스 서버 사이에서 변환하는 접합 코드(glue code)가 필요하다고 가정하면, Perl은 올바른 능력을 가지고 올바른 시간에 올바른 장소에 있는 것입니다
    .
     
    그러나 이것은 좋은 도구가 도구 고안자가 생각하지 못했던 목적에 어떻게 사용되는가를 보여준 단지 또 하나의 예제입니다. 그러나 이것은 완전히 우연이 아닙니다. 좋은 고안자는 기회가 왔을 때 은연중에 사용될 수 있는 능력을 만들도록 노력해야 합니다.

    D.     Niklaus Wirth
    IEEE
    로부터 컴퓨터 개척상과 ACM으로부터 일련의 혁신적인 컴퓨터 언어(EULER, ALGOL-W, PASCAL MODULA)를 개발한 공로로 튜링 상을 받았다.

                    i.         Pascal의 명료하고 획일적인 구조는 새로운 표준을 설정했습니다. Pascal에 있어서 이 도구들에 매우 의미 있게 개선된 것은 무엇입니까?
     
    주로 Pascal이 프로그래밍의 아주 기본적인 요소를 표현하고 이 요소들을 자유롭고 일반적인 방법으로 구성하고 결합한다는 사실입니다. Pascal은 문장과 데이터를 위한 구조화된 언어입니다.

                   ii.         당신은 하드웨어와 소프트웨어를 결합하는 해법(방법)을 생각하는 데 많은 시간을 소비했습니다. : Lilith 컴퓨터와 Oberon Modula. 해법을 설계할 때 하드웨어의 보다 큰 골격 구조 안에서 프로그래밍 도구 해법을 고려하는 것에 대해 무엇이 두 가지를 고려하게 했습니까?
     
    컴퓨터 구조와 소프트웨어가 올바르게 구성되고 조화롭게 결합된다면, 양 부분이 단순해지고 보다 더 경제적입니다. 아주 중요한 것은 이해하기가 더 쉬워질 수 있다는 것입니다.

    반응형

    댓글

Designed by Tistory.