강의 내용 및 방법

38
강강 강강 강 강강 접접접접 Proof of Correctness 접 접접 Lambda Calculus: Python 접 접접접접 접접 접접 접접접 2 접접접 접접접접 1 접 접접 , term project 접 접접 , 접 접접 접접접접 접 접접 접접 접접 접접 접접 , 접접 접 1~2 접 접접접 접접접접 접접접 75 접 (14:30-15:45), 접접 접접접접 접접

Upload: harper-richardson

Post on 02-Jan-2016

172 views

Category:

Documents


0 download

DESCRIPTION

강의 내용 및 방법. 접근방법 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 년 강의 내용 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 강의 내용 및 방법

강의 내용 및 방법

접근방법– Proof of Correctness 는 제외– Lambda Calculus: Python 과 관련하여 조금 설명 – 리포트 2 주일에 프로그램 1 개 정도 , term project

는 없음 , 각 장의 문제풀기 및 다른 문제 제공 시험

– 중간 , 기말 및 1~2 회 정도의 쪽지시험 수업은 75 분 (14:30-15:45), 혹시 부족하면 보강

Page 2: 강의 내용 및 방법

참고자료 Http://borame.cs.pusan.ac.kr/lecture

– 강의참고자료 ( 한글 )– 2002 년 강의 내용– 2002 년 리포트 , 기타 참고사항– 2003, 2004, 2005, 2006, 2007, 2008,

2009 년 , 2010, 2011, 2012 년 강의노트– 다른 대학교 , 자료 , 우균 교수 자료 ( 한글 )

참고 강의 중에 이해가 안 되는 부분은 언제나

홈페이지의 묻고 답하기에 질문할 수 있음

Page 3: 강의 내용 및 방법

프로그램 개발

어떻게 하면 프로그램 개발과 유지보수 비용을 줄이느냐 ?– 프로그램에서 재사용할 수 있는 부분과 아닌 부분을

나누어서 개발하고 , 재사용을 극대화 ( 개인별 라이브러리 보관 )

– 많은 라이브러리를 보유하고 활용– high-level data types built in, such as flexible

arrays and dictionaries 그러면서 어떻게 하면 메모리 사용량을 줄이고 ,

속도를 높이느냐 ?– Runtime checking 을 최소화

Page 4: 강의 내용 및 방법

프로그래밍 언어 , 어떤 것을 쓰나 ?

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

Page 5: 강의 내용 및 방법

프로그래밍 언어 사용 빈도 (Script 언어 제외 )

Tiobe.com (Skilled Engineer)

1. Java – 19.1%2. C – 15.2%3. C++ – 10.1%4. PHP – 8.7%5. Visual Basic – 8.4%6. Perl – 6.2%7. Python – 3.8%8. C# – 3.7%9. JavaScript – 3.1%10. Ruby – 2.6%11. Delphi – 2.1%

Dice.com (2006 년 ) 1. Java – 35.7%2. C, C++ – 15.3%3. C# – 12.7%4. Perl – 11.9%5. JavaScript – 10.9%6. Visual Basic .NET –

5.2%7. PHP – 2.9%8. Ajax – 2.7%9. Python – 2.0%10. Ruby – 0.7%

Page 6: 강의 내용 및 방법

왜 프로그래밍 언어론을 배우나 ?

수많은 프로그래밍 언어 중 필요에 따라 적합한 것을 골라 쓸 수 있는 능력

사용하는 프로그래밍 언어의 특성을 파악하여 가장 효과적으로 사용할 수 있게 함

사용하는 프로그래밍 언어에 없지만 유용한 개념을 도입하여 활용

프로그래밍 언어 그 자체로도 의미가 있음

Page 7: 강의 내용 및 방법

언어란 ?

생각을 표현하는 도구 !! 정보를 교환하는 도구 !!– 개념화 : 물체 (Object), 물체와 관계 , 추상화

• 중력의 법칙 , 예측– 인간은 전체를 듣지 않고도 부분을 이해함 , 스스로 보완하여

인식함– 불완전하며 모호함

프로그래밍언어 !!– 우리의 생각을 컴퓨터가 처리할 수 있게 표현하는 도구– 조금만 틀려도 이해 못함 ( 수학적 명확성 필요 )– 오류가 없는 프로그램은 만들 수 없으며 , 인간이 1,000 만 줄 이상

프로그램은 만들 수 없다 . ( 조던 폴락 ) – 기계와 인간 간의 간격을 줄일수록 바람직함

• 추상화 단계가 높아져야 짧은 프로그램을 명확한 프로그래밍이 가능

– 기계뿐 아니라 인간도 이해해야 함 ( 쉽게 프로그램할 수 있어야 )

Page 8: 강의 내용 및 방법

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

Page 9: 강의 내용 및 방법

프로그래밍 언어의 모형

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

Page 10: 강의 내용 및 방법

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

Page 11: 강의 내용 및 방법

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.

Page 12: 강의 내용 및 방법

Era Application Majorlanguages

Otherlanguages

Business COBOL AssemblerScientific FORTRAN Algol, BASIC,

APLSystem Assembler JOVIAL, Forth

1960s

Artificialintelligence

LISP SNOBOL

Business COBOL, C++,Java, spreadsheet

C, PL/I, 4GLs

Scientific FORTRAN, C,C++, Java

BASIC

System C, C++, Java Ada, BASIC,Modula

Artificialintelligence

LISP, Prolog

Publishing TeX, Postscript,word processing

Process UNIX shell, TCL,Perl, Javascript

AWK, Marvel,SED

Today

New paradigms ML, Smalltalk Eiffel

Page 13: 강의 내용 및 방법

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

Page 14: 강의 내용 및 방법

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

Page 15: 강의 내용 및 방법

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 의 덧셈의 속도차이를 초래하는 언어개념 및 구현의 차이

Page 16: 강의 내용 및 방법

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 …

Page 17: 강의 내용 및 방법

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

Page 18: 강의 내용 및 방법
Page 19: 강의 내용 및 방법
Page 20: 강의 내용 및 방법

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

Page 21: 강의 내용 및 방법

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

Page 22: 강의 내용 및 방법

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

Page 23: 강의 내용 및 방법

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

Page 24: 강의 내용 및 방법
Page 25: 강의 내용 및 방법

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')

Non

execu

tab

le

Sequential (by default)

Changing to REAL

Page 26: 강의 내용 및 방법

example1.f 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) 3 FORMAT(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

runtimes.dataDAY DATE MIN SEC

MON 01072002 -9.99 -9.99TUE 02072002 -9.99 -9.99

WED 03072002 19.00 43.00THU 04072002 19.00 33.00FRI 05072002 19.00 33.00

SAT 06072002 19.00 27.00SUN 07072002 -9.99 -9.99

MON 08072002 19.00 46.00 . . .

TUE 15102002 29.00 7.00WED 16102002 -9.99 -9.99

THU 17102002FRI 18102002

SAT 19102002SUN 20102002MON 21102002TUE 22102002

WED 23102002THU 24102002FRI 25102002

SAT 26102002SUN 27102002

Undefined value

No value

Page 27: 강의 내용 및 방법

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

Page 28: 강의 내용 및 방법

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

Page 29: 강의 내용 및 방법

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.

Page 30: 강의 내용 및 방법

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

Page 31: 강의 내용 및 방법

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

Page 32: 강의 내용 및 방법

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.

Page 33: 강의 내용 및 방법
Page 34: 강의 내용 및 방법
Page 35: 강의 내용 및 방법

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)

Page 36: 강의 내용 및 방법
Page 37: 강의 내용 및 방법

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 다양한 플래트폼 , 응용시스템과 환경을 결합하여 사용자에

최적화한 느낌과 경험을 제공하는 통합된 응용시스템을 개발하는 환경

Page 38: 강의 내용 및 방법

다음을 조사하라 !!

(1) Orthogonality 가 C 언어에서 발생시킬 수 있는 오류의 예를 들어라 !

(2) 우리가 사용하는 언어는 왜 프로그래밍 언어로 부적합한가 ? (3) 스마트폰이 일반화하면서 ‘ Platform’이란 말이 일반화하고

있다 . ‘Platform’이란 무엇이며 , 일반 응용프로그램과 어떤 차이가 나는가 ? 현재 널리 쓰이는 smartphone platform 을 조사하고 , 이 platform 을 만드는 데 사용한 프로그래밍언어와 응용소프트웨어 ( 앱 ) 과 연결 가능한 언어 및 연결 방법을 조사하라 .