강의 내용 및 방법 - 부산대학교 인공지능

Download Report

Transcript 강의 내용 및 방법 - 부산대학교 인공지능

강의 내용 및 방법
 접근방법
– 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년 강의노트
– 다른 대학교, 자료, 우균 교수 자료(한글) 참고
 강의 중에 이해가 안 되는 부분은 언제나 홈페
이지의 묻고 답하기에 질문할 수 있음
프로그램 개발
 어떻게 하면 프로그램 개발과 유지보수 비용을 줄이
느냐?
– 프로그램에서 재사용할 수 있는 부분과 아닌 부분을 나
누어서 개발하고, 재사용을 극대화 (개인별 라이브러리
보관)
– 많은 라이브러리를 보유하고 활용
– high-level data types built in, such as flexible
arrays and dictionaries
 그러면서 어떻게 하면 메모리 사용량을 줄이고, 속도
를 높이느냐?
– Runtime checking을 최소화
왜 프로그래밍 언어론을 배우나?
 수많은 프로그래밍 언어 중 필요에 따라 적합
한 것을 골라 쓸 수 있는 능력
 사용하는 프로그래밍 언어의 특성을 파악하여
가장 효과적으로 사용할 수 있게 함
 사용하는 프로그래밍 언어에 없지만 유용한
개념을 도입하여 활용
 프로그래밍 언어 그 자체로도 의미가 있음
 구체적인 내용은 다음에 설명
언어란?

생각을 표현하는 도구!! 정보를 교환하는 도구!!
– 개념화 : 물체(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’형
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, Eventdriven 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.
Era
Application
Major
languages
Other
languages
1960s
Business
Scientific
COBOL
FORTRAN
System
Artificial
intelligence
Business
Assembler
LISP
Assembler
Algol,
BASIC,
APL
JOVIAL, Forth
SNOBOL
Today
Scientific
System
Artificial
intelligence
Publishing
Process
New paradigms
COBOL,
C++, C, PL/I, 4GLs
Java, spreadsheet
FORTRAN,
C, BASIC
C++, Java
C, C++, Java
Ada,
BASIC,
Modula
LISP, Prolog
TeX,
Postscript,
word processing
UNIX shell, TCL, AWK,
Perl, Javascript
SED
ML, Smalltalk
Eiffel
Marvel,
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, Eventdriven approach, Service-oriented programming, Script
language, …
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
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 paradigm : Python
다음을 조사하라!!
(1) 왜 ActiveX가 새로운 Windows(비스타)에서 문제를 발생하는
가? 왜 우리나라에서 유달리 ActiveX를 많이 쓰는가?
– ActiveX란 무엇인가?
– ActiveX 대신 문제를 해결하는 방법은?
• 크롬과 Firefox에서는 보안 문제 따위를 어떻게 해결하는가?
– Wikipedia를 참고하라!!!
(2) Orthogonality가 C언어에서 발생시킬 수 있는 오류의 예를 들
어라!
(3)우리가 사용하는 언어는 왜 프로그래밍 언어로 부적합한가?
(4) 스마트폰이 일반화하면서 ‘Platform’이란 말이 일반화하고 있
다. ‘Platform’이란 무엇이며, 일반 응용프로그램과 어떤 차이가
나는가?