380 likes | 728 Views
강의 내용 및 방법. 접근방법 Proof of Correctness 는 제외 Lambda Calculus: Python 과 관련하여 조금 설명 리포트 2 주일에 프로그램 1 개 정도 , term project 는 없음 , 각 장의 문제풀기 및 다른 문제 제공 시험 중간 , 기말 및 1~2 회 정도의 쪽지시험 수업은 75 분 (14:30-15:45), 혹시 부족하면 보강. 참고자료. Http://borame.cs.pusan.ac.kr/lecture 강의참고자료 ( 한글 ) 2002 년 강의 내용
E N D
강의 내용 및 방법 • 접근방법 • Proof of Correctness는 제외 • Lambda Calculus: Python과 관련하여 조금 설명 • 리포트 2주일에 프로그램 1개 정도, term project는 없음, 각 장의 문제풀기 및 다른 문제 제공 • 시험 • 중간, 기말 및 1~2회 정도의 쪽지시험 • 수업은 75분(14:30-15:45), 혹시 부족하면 보강
참고자료 • Http://borame.cs.pusan.ac.kr/lecture • 강의참고자료 (한글) • 2002년 강의 내용 • 2002년 리포트, 기타 참고사항 • 2003, 2004, 2005, 2006, 2007, 2008, 2009년, 2010, 2011, 2012년 강의노트 • 다른 대학교, 자료, 우균 교수 자료(한글) 참고 • 강의 중에 이해가 안 되는 부분은 언제나 홈페이지의 묻고 답하기에 질문할 수 있음
프로그램 개발 • 어떻게 하면 프로그램 개발과 유지보수 비용을 줄이느냐? • 프로그램에서 재사용할 수 있는 부분과 아닌 부분을 나누어서 개발하고, 재사용을 극대화 (개인별 라이브러리 보관) • 많은 라이브러리를 보유하고 활용 • high-level data types built in, such as flexible arrays and dictionaries • 그러면서 어떻게 하면 메모리 사용량을 줄이고, 속도를 높이느냐? • Runtime checking을 최소화
프로그래밍 언어, 어떤 것을 쓰나? • Paul Graham은 "Revenge of the Nerds"와 "Beating for average"에서 언어의 관성을 언급하면서, 익숙해지면 그 언어의 틀 속에서 자신의 생각을 가두게 되어 편견에 사로잡혀 언어의 활용을 효과적이지 못하게 된다면서, 익숙한 언어보다는 적합한 프로그래밍 언어를 선택할 줄 알아야 한다고 했죠.즉, 최소한 몇 가지 언어를 알고 자신의 업무에 적합하게 사용할 줄 알아야 한다는 말입니다. • GitHub: JavaScript, Ruby, Python, PHP, Java, C#, C, Perl, C++, Objective C • StackOverflow: C#, Java, PHP, JavaScript, C++, Python, Objective-C, C, Ruby, Perl, Delphi
프로그래밍 언어 사용 빈도 (Script 언어 제외) • Dice.com (2006년) • Java – 35.7% • C, C++ – 15.3% • C# – 12.7% • Perl – 11.9% • JavaScript – 10.9% • Visual Basic .NET – 5.2% • PHP – 2.9% • Ajax – 2.7% • Python – 2.0% • Ruby – 0.7% Tiobe.com (Skilled Engineer) • Java – 19.1% • C – 15.2% • C++ – 10.1% • PHP – 8.7% • Visual Basic – 8.4% • Perl – 6.2% • Python – 3.8% • C# – 3.7% • JavaScript – 3.1% • Ruby – 2.6% • Delphi – 2.1%
왜 프로그래밍 언어론을 배우나? • 수많은 프로그래밍 언어 중 필요에 따라 적합한 것을 골라 쓸 수 있는 능력 • 사용하는 프로그래밍 언어의 특성을 파악하여 가장 효과적으로 사용할 수 있게 함 • 사용하는 프로그래밍 언어에 없지만 유용한 개념을 도입하여 활용 • 프로그래밍 언어 그 자체로도 의미가 있음
언어란? • 생각을 표현하는 도구!! 정보를 교환하는 도구!! • 개념화 : 물체(Object), 물체와 관계, 추상화 • 중력의 법칙, 예측 • 인간은 전체를 듣지 않고도 부분을 이해함, 스스로 보완하여 인식함 • 불완전하며 모호함 • 프로그래밍언어 !! • 우리의 생각을 컴퓨터가 처리할 수 있게 표현하는 도구 • 조금만 틀려도 이해 못함(수학적 명확성 필요) • 오류가 없는 프로그램은 만들 수 없으며, 인간이 1,000만 줄 이상 프로그램은 만들 수 없다. (조던 폴락) • 기계와 인간 간의 간격을 줄일수록 바람직함 • 추상화 단계가 높아져야 짧은 프로그램을 명확한 프로그래밍이 가능 • 기계뿐 아니라 인간도 이해해야 함 (쉽게 프로그램할 수 있어야)
Organization of Programming Languages • Understand how languages are designed and implemented • 구조 • Lexicon – What sorts of words are legal? • Syntax -- What a program looks like? • Semantics -- What a program means? • Pragmatics – 실행 과정에서 해석? C언어의 ‘int’형 • 가장 기본 단위 • 문법요소, 단어, 고유명사 등 명칭 • 문법요소, keywords, 명칭 • 기본요소가 결합하는 방법 • 결합한 요소의 뜻 파악 • Implementation -- How a program executes
프로그래밍 언어의 모형 • Understand most appropriate language for solving specific problems, For example: • Pascal, C, Perl -- procedural, statement oriented • C++, Java, Smalltalk -- Object oriented • ML, Lisp -- Functional • Prolog -- Rule-based • JavaScript, PHP, ASP.net, C# – Procedural, Event-driven accessing
Language Goals • During 1950s--1960s - Compile programs to execute efficiently. • There is a direct connection between language features and hardware - integers, reals, goto statements • Programmers cheap; Machines expensive; Keep the machine busy • But today • Compile programs that are built efficiently • CPU power and memory very cheap • Direct connection between language features and design concepts - encapsulation, records, inheritance, functionality, assertions • Event-driven programming, Service-oriented approach, Web-service, Very High-level Language
Python • Python is a general-purpose, high-level programming language. Its design philosophy emphasizes programmer productivity and code readability. Python's core syntax and semantics are minimalist, while the standard library is large and comprehensive. • Python supports multiple programming paradigms (primarily functional, object oriented and imperative), and features a fully dynamic type system and automatic memory management; it is thus similar to Perl, Ruby, Scheme, and Tcl. • Python was first released by Guido van Rossum in 1991.[3] The language has an open, community-based development model managed by the non-profit Python Software Foundation. While various parts of the language have formal specifications and standards, the language as a whole is not formally specified. The de facto standard for the language is the CPython implementation.
Why study programming languages? (1) • To improve your ability to develop effective algorithms • Improper use of recursion • Object-oriented programming, logic programming, concurrent programming • To improve your use of your existing programming language • Data structures for arrays, strings, lists, records, set, bag, table (associative array) • Malloc() garbage collection • Implementation details of recursion, object classes, subroutine calls, exception(event) handling … • Service-oriented developing • Web-service, Semantic web, Script language
Why study programming languages? (2) • To increase your vocabulary of useful programming constructs • Increase programming vocabulary and its implementation tech. • Coroutine, Semaphore, event-driven programming, associative array • Named parameter (keyword argument) (Ada, Python, Smalltalk, Common Lisp) • Name mangling (name decoration): _Z on C, C++ • Filename mangling : Unix file names can contain colons or backslashes • To allow a better choice of programming language • Numeric computation : C, FORTRAN, Ada • AI : LISP, Prolog • Internet applications : Perl, Java, HTML, XML, Web Service(SOAP), PHP, ASP.net, Python
Why study programming languages? (3) • To make it easier to learn a new language • Web programming (JavaScript, PHP), Semantic web • Python • To make it easier to design a new language • User interface design • *** C, COBOL, SMALLTALK의 덧셈의 속도차이를 초래하는 언어개념 및 구현의 차이
Evolution of software architecture • 1950s - Large expensive mainframe computers ran single programs (Batch processing) • 1960s - Interactive programming (time-sharing) on mainframes • 1970s - Development of Minicomputers and first microcomputers. Apple II. Early work on windows, icons, and PCs at XEROX PARC • 1980s - Personal computer - Microprocessor, IBM PC and Apple Macintosh. Use of windows, icons and mouse • 1990s - Client-server computing - Networking, The Internet, the World Wide Web • 2000s - P2P, Grid Computing, Web Service, Event-driven approach, Service-oriented programming, Script language, Cloud Computing …
Attributes of a good language (1) • Clarity, simplicity, and unity - provides both a framework for thinking about algorithms and a means of expressing those algorithms • Conceptual integrity • 나쁜 예: APL, SNOBOL4 • Orthogonality - every combination of features is meaningful • Fewer exceptions C언어에서 !!! • Logical errors and inefficiency
Attributes of a good language(2) • Naturalness for the application - program structure reflects the logical structure of algorithm • Sequential algorithm, concurrent algorithm, logic algorithm, non-deterministic algorithm • Appropriate data structures, operations, control structures, natural syntax • Support for abstraction - program data reflects problem being solved • Data abstraction <D,O,C> • Encapsulation
Attributes of a good language (3) • Ease of program verification - verifying that program correctly performs its required function • Verification/validation • standard, or specification requirements • the needs of the intended end-user or customer • Comments, assert() • Design specification • Programming environment - external support for the language • Debugger, syntax-directed editor • Supporting function, platforms • Smalltalk • Supporting all the software lifecycle phases
Attributes of a good language (continued) • Portability of programs - transportability of the resulting programs from the computer on which they are developed to other computer systems • Transportability • C, C++, Pascal Java (Byte-code) • ML : single source implementation • Cost of use - program execution, program translation, program creation, and program maintenance • Code optimization, (Smalltalk, Perl), lifecycle costs
Language paradigms • Imperative languages • Goal is to understand a machine state (set of memory locations, each containing a value) • Statement oriented languages that change machine state (C, Pascal, FORTRAN, COBOL, C++, Java) • Syntax: S1, S2, S3, ... • Applicative (functional) languages • Goal is to understand the function that produces the answer • Function composition is major operation (ML, LISP) • Syntax: P1(P2(P3(X))) • Programming consists of building the function that computes the answer
example1.f • *234567******************* example1.f ************************** • * A tiny program to plot my running times using GrADS * • **************************************************************** • * • PARAMETER(NDAYS=365, UNDEF=-9.99, EMPTY=0.00) • C • REAL MIN(NDAYS) • DIMENSION SEC(NDAYS) • C • CHARACTER*27 HEADER • CHARACTER*3 DAY • CHARACTER*28 PATH • C • PATH='/data/temp4/alfredo/fortran/' • C • OPEN(1,FILE=PATH//'runtimes.data',FORM='FORMATTED', • - STATUS=‘OLD') Changing to REAL Nonexecutable Sequential (by default)
Undefined value example1.f runtimes.data DAY DATE MIN SEC MON 01072002 -9.99 -9.99 TUE 02072002 -9.99 -9.99 WED 03072002 19.00 43.00 THU 04072002 19.00 33.00 FRI 05072002 19.00 33.00 SAT 06072002 19.00 27.00 SUN 07072002 -9.99 -9.99 MON 08072002 19.00 46.00 . . . TUE 15102002 29.00 7.00 WED 16102002 -9.99 -9.99 THU 17102002 FRI 18102002 SAT 19102002 SUN 20102002 MON 21102002 TUE 22102002 WED 23102002 THU 24102002 FRI 25102002 SAT 26102002 SUN 27102002 • READ (1,2) HEADER • WRITE(*,2) HEADER • WRITE(*,2) '----------------------------' • C • ND = 0 • 1 CONTINUE • ND = ND+1 • READ (1,3,END=4) DAY,DATE,MIN(ND),SEC(ND) • WRITE(*,3) DAY,DATE,MIN(ND),SEC(ND) • IF((MIN(ND).EQ.EMPTY).AND.(SEC(ND).EQ.EMPTY)) GO TO 4 • GO TO 1 • 4 CONTINUE • ND = ND - 1 !Taking away the last line because is blank • CLOSE(1) • 3FORMAT(A3,2X,I8,2X,F5.2,2X,F5.2) • WRITE(*,*)'-------------------------------------------' • WRITE(*,*)'I AM RUNNING SINCE JULY 1, 2002!!!!!' • WRITE(*,*)'THAT IS',ND,' DAYS AGO' • C No value
example1.f • OPEN(2,FILE=PATH//'runtimes_gr.data',ACCESS='DIRECT', • - STATUS='UNKNOWN',FORM='UNFORMATTED',RECL=1) • C • NDNOR = 0 • NDSIR = 0 • DO N = 1, ND • IF((MIN(N).EQ.UNDEF).OR.(SEC(N).EQ.UNDEF)) THEN • TIME = UNDEF • NDNOR = NDNOR + 1 • ELSE • TIME = MIN(N)+SEC(N)/60. • NDSIR = NDSIR + 1 • ENDIF • WRITE(2,REC=N) TIME • ENDDO
example1.f • WRITE(2,REC=ND+1) UNDEF !Just adding 1 and 2 extra • WRITE(2,REC=ND+2) UNDEF !blank lines for plotting purposes • CLOSE(2) • WRITE(*,*)'WELL,',NDSIR,' DAYS LEAVING FOR A RUN' • WRITE(*,*)'AND',NDNOR,' DAYS JUST BEING LAZY' • WRITE(*,*)'-------------------------------------------' • WRITE(*,*)'make ',ND+2,' days in the script file:' • WRITE(*,*)'grads -blc "run runtimes.gs"' • C • 2 FORMAT(A27) • C • C f77 example1.f • C ./a.out • END
COBOL II • 000010 IDENTIFICATION DIVISION. • 000020 PROGRAM-ID. SAMPLE. • 000030 AUTHOR. J.P.E. HODGSON. • 000040 DATE-WRITTEN. 4 February 2000 • 000041 • 000042* A sample program just to show the form. • 000043* The program copies its input to the output, • 000044* and counts the number of records. • 000045* At the end this number is printed. • 000046 • 000050 ENVIRONMENT DIVISION. • 000060 INPUT-OUTPUT SECTION. • 000070 FILE-CONTROL. • 000080 SELECT STUDENT-FILE ASSIGN TO SYSIN • 000090 ORGANIZATION IS LINE SEQUENTIAL. • 000100 SELECT PRINT-FILE ASSIGN TO SYSOUT • 000110 ORGANIZATION IS LINE SEQUENTIAL.
COBOL II • 000120 • 000130 DATA DIVISION. • 000140 FILE SECTION. • 000150 FD STUDENT-FILE • 000160 RECORD CONTAINS 43 CHARACTERS • 000170 DATA RECORD IS STUDENT-IN. • 000180 01 STUDENT-IN PIC X(43). • 000190 • 000200 FD PRINT-FILE • 000210 RECORD CONTAINS 80 CHARACTERS • 000220 DATA RECORD IS PRINT-LINE. • 000230 01 PRINT-LINE PIC X(80). • 000240 • 000250 WORKING-STORAGE SECTION. • 000260 01 DATA-REMAINS-SWITCH PIC X(2) VALUE SPACES. • 000261 01 RECORDS-WRITTEN PIC 99. • 000270
COBOL III • 000270 • 000280 01 DETAIL-LINE. • 000290 05 FILLER PIC X(7) VALUE SPACES. • 000300 05 RECORD-IMAGE PIC X(43). • 000310 05 FILLER PIC X(30) VALUE SPACES. • 000311 • 000312 01 SUMMARY-LINE. • 000313 05 FILLER PIC X(7) VALUE SPACES. • 000314 05 TOTAL-READ PIC 99. • 000315 05 FILLER PIC X VALUE SPACE. • 000316 05 FILLER PIC X(17) VALUE 'Records were read'. • 000318 05 FILLER PIC X(53) VALUE SPACES. • 000319
COBOL IV • 000320 PROCEDURE DIVISION. • 000330 PREPARE-SENIOR-REPORT. • 000340 OPEN INPUT STUDENT-FILE. • 000350 OUTPUT PRINT-FILE. • 000351 MOVE ZERO TO RECORDS-WRITTEN. • 000360 READ STUDENT-FILE • 000370 AT END MOVE 'NO' TO DATA-REMAINS-SWITCH. • 000380 END-READ.
Language paradigms (continued) • Rule-based languages • Specify rule that specifies problem solution (Prolog, BNF Parsing) • Other examples: Decision procedures, Grammar rules (BNF) • Syntax: Answer specification rule • Programming consists of specifying the attributes of the answer • Object-oriented languages • Imperative languages that merge applicative design with imperative statements (Java, C++, Smalltalk) • Syntax: Set of objects (classes) containing data (imperative concepts) and methods (applicative concepts)
New Paradigm • Internet, Home Computing, Ubiquitous Computing, Embedded Computing, etc • Languages and Compilers that are smart, small and safe • Moveable code agents • Independent from machines and programming environments • Supporting pragmatics or intelligence • Java, XML, Mobile computing. Mobile code • Event driven approach, Service-oriented Architecture, Web Service • Supports multiple paradigms : Python • 다양한플래트폼, 응용시스템과 환경을 결합하여 사용자에 최적화한 느낌과 경험을 제공하는 통합된 응용시스템을 개발하는 환경
다음을 조사하라!! (1) Orthogonality가 C언어에서 발생시킬 수 있는 오류의 예를 들어라! (2)우리가 사용하는 언어는 왜 프로그래밍 언어로 부적합한가? (3) 스마트폰이 일반화하면서 ‘Platform’이란 말이 일반화하고 있다. ‘Platform’이란 무엇이며, 일반 응용프로그램과 어떤 차이가 나는가? 현재 널리 쓰이는 smartphone platform을 조사하고, 이 platform을 만드는 데 사용한 프로그래밍언어와 응용소프트웨어(앱)과 연결 가능한 언어 및 연결 방법을 조사하라.