프로그래밍과 문제해결
1 성격
영재학교 및 과학고등학교 학생들을 대상으로 대학 수준의 컴퓨터 기초
과목에 대한 지식을 습득할 수 있는 기회를 제공한다.
2 목표
1. 총괄목표
‣ 컴퓨터에 대한 기초를 소개하고, 문제 해결을 위해서 컴퓨터 프로그
램을 설계하고 구현하는 방법에 대해서 배운다.
2. 세부목표
‣ 컴퓨터 프로그램의 작성, 실행 및 디버깅을 통해서 주어진 계산 문제
를 해결하는 법을 배운다.
‣ 기본적인 알고리즘 및 자료구조를 구현하고 사용할 수 있다.
‣ 적절한 알고리즘 및 자료구조를 선택하고 구현하여 주어진 계산 문
제를 해결한다.
‣ 객체지향 프로그램을 능숙하게 작성할 수 있다.
3 내용 체계
Knowledge areas
Topics covered
Hours
(최소운영시간)
Programming
Design
- The concept and properties of
algorithms
- The role of algorithms in the
problem-solving process
- Problem-solving strategies
- Fundamental design concepts and
principles
4
Fundamental
Programming
Concepts
- Basic syntax and semantics of a
programming language
- Variables and primitive data types
- Expressions and assignments
- Simple I/O including file I/O
- Conditional and iterative control
structures
- Functions and parameter passing
8
Fundamental
Data Structures
- Arrays
- String and string processing
- Lists
Development
Methods
- Program correctness: Types of
errors (syntax, logic, run-time)
- Programming using library
components and their APIs
- Debugging strategies
2
Object-Oriented
Programming
- Object-oriented design
- Definition of classes: fields, methods,
and constructors
2
Basic Type
Systems
- Primitive types and Compound types
- Type safety and errors
2
Fundamental
Data Structures
and Algorithms
- Simple numerical algorithms
- Sequential and binary search
algorithms
-
Sorting
algorithms:
selection,
insertion and quicksort/mergesort
4 추천 교재
‣ Practical Programming: An Introduction to Computer Science Using
Python by Jennifer Campbell, Paul Gries, Jason Montojo, and Greg
Wilson. Pragmatic Programmers, 2009.
‣ Introduction to Programming Using Java Version 7.0, by David J.
Eck, 2014.
‣ C++ Primer by Stanley Lippman, 2012.
‣ The C Programming Language by Brian Kernighan and Dennis
Ritchie, 1988.
※ 위 교재의 판본 및 발행년도는 2014년을 기준으로 한 것이며, 실제 교육
학기 기준으로 최신 교재를 사용하는 것을 권장함. 내용이 동일할 경우
international version 사용 가능.
5 교수·학습 방법
‣ 프로그래밍 기초는 이론보다 실습을 통해 프로그램을 작성/실행/디버
그 하는 과정이 중요하므로, 실습에 많은 수업 시간 및 평가 비중을
반영해야 한다.
‣ 특정 프로그래밍 언어에만 특화된 내용에 치우지는 것을 지양하고,
알고리즘 및 프로그래밍을 통한 문제해결 능력을 학습시키는 데에
초점을 맞추는 것이 중요하다.
‣ 관련하여, 학생들이 프로그래밍에 쉽게 다가갈 수 있도록, 다루는 프
로그래밍 언어의 핵심적인 라이브러리를 제공하여 학생들이 스스로
문제를 해결할 수 있게 하는 것이 필요하다 예, 미국 AP Computer
Science Java Subset (Appendix C).
6 유의 사항
‣ 내용 체계 상의 시간은 해당 내용의 최소 수업운영시간을 의미함
‣ 본 교과는 연습시간을 포함해서 최소 4운영 시수로 운영되어야 함
(한 학기에 운영이 어려운 경우 2학점씩 2학기에 걸쳐 운영할 수도
있음)
‣ 본 교과는 연습시간을 포함해서 최소 4운영 시수로 운영되어야 함(한
학기에 운영이 어려운 경우 2학점씩 2학기에 걸쳐 운영할 수도 있
음)
‣ 평가 시 주요 용어는 영어로 사용 (과기대 입학 후 상위 교과목의 이
수에 무리가 없도록)
‣ 교재는 위의 추천 교재 외에, 한국어 교재나 학교 자체 제작 교재를
사용할 수 있음
‣ 학교 자체 제작 교재를 사용할 경우, 인증 검수 시 이 자료도 제출하
여 검토를 받아야 함
‣ 2개 이상의 교과목이 본 AP 교과목으로 대응될 경우, 상위 교과목
인증 검수시 이전 교과목의 강의계획서, 과제(내용 및 문제), 시험문
제, 실습운영계획을 같이 제출하여야 함.
‣ AP 교과목 평가 검수 시 대응교과목들의 강의계획서, 평가계획, 시
험문제, 과제로 낸 내용, 실습운영계획과 더불어 최종 이수교과목의
학생성적 분포도를 제출하여야 함. 대학학점인정 기준은 최종 이수교
과목의 학생성적 분포도를 검토한 후 대학학점인정 기준을 제시함.
‣ 교사는 관련 전공 석사 학위 이상 소지자를 원칙으로 하나, 과학고
의 경우 2018년까지는 60시간 이상의 연수를 이수한 경우, 학위에 의
한 제한을 받지 않음(교사 자격 기준은, 2개 이상의 교과목이 본 교
과목으로 대응될 경우, 최종 이수 교과목에만 적용됨)
7 Appendix
Appendix A - ACM/IEEE Computing Society, Computer
Science Curricula 2013.
This is an extracted summary of a computer science curricula guideline published by ACM/IEEE [1]. In this appendix, SDF, PL and AL respectively denote Software Development Fundamentals (SDF), Programming Languages (PL) and Algorithms and Complexity (AL).
Introduction to Computer Science
Knowledge areas Topics covered Hours
SDF/Algorithms and Design
- The concept and properties of algorithms - The role of algorithms in the problem-solving process
- Problem-solving strategies
- Fundamental design concepts and principles
4
SDF/Fundamental Programming Concepts
- Basic syntax and semantics of a programming language
- Variables and primitive data types - Expressions and assignments - Simple I/O including file I/O
- Conditional and iterative control structures - Functions and parameter passing
8
SDF/Fundamental Data Structures
- Arrays
- String and string processing - Lists
4
SDF/Development Methods
- Program correctness: Types of errors (syntax, logic, run-time)
- Programming using library components and
SDF/Algorithms and Design (4 hour)
Topics:
Ÿ The concept and properties of algorithms
Ÿ The role of algorithms in the problem-solving process
Ÿ Problem-solving strategies: Iterative and recursive mathematical functions; Divide-and-conquer strategies
Ÿ Fundamental design concepts and principles: Abstraction; Program decomposition; Encapsulation and information hiding
Learning Outcomes:
Ÿ Discuss the importance of algorithms in the problem-solving process.
Ÿ Discuss how a problem may be solved by multiple algorithms, each with different properties.
Ÿ Create algorithms for solving simple problems.
Ÿ Use a programming language to implement, test, and debug algorithms for solving simple problems.
Ÿ Implement, test, and debug simple recursive functions and procedures. Ÿ Implement a divide-and-conquer algorithm for solving a problem.
Ÿ Determine whether a recursive or iterative solution is most appropriate for a problem. their APIs - Debugging strategies PL/Object-Oriente d Programming - Object-oriented design
- Definition of classes: fields, methods, and constructors
2
PL/Basic Type Systems
- Primitive types and Compound types
- Type safety and errors 2
AL/Fundamental Data Structures and Algorithms
- Simple numerical algorithms
- Sequential and binary search algorithms
- Sorting algorithms: selection, insertion and quicksort/mergesort
SDF/Fundamental Programming Concepts (8 hour)
Topics:
Ÿ Basic syntax and semantics of a higher-level language
Ÿ Variables and primitive data types (e.g., numbers, characters, Booleans) Ÿ Expressions and assignments
Ÿ Simple I/O including file I/O
Ÿ Conditional and iterative control structures Ÿ Functions and parameter passing
Learning Outcomes:
Ÿ Analyze and explain the behavior of simple programs involving the fundamental programming constructs variables, expressions, assignments, I/O, control constructs, functions, parameter passing, and recursion.
Ÿ Identify and describe uses of primitive data types. Ÿ Write programs that use primitive data types.
Ÿ Modify and expand short programs that use standard conditional and iterative control structures and functions.
Ÿ Design, implement, test, and debug a program that uses each of the following fundamental programming constructs: basic computation, simple I/O, standard conditional and iterative structures, the definition of functions, and parameter passing.
Ÿ Write a program that uses file I/O to provide persistence across multiple executions.
Ÿ Choose appropriate conditional and iteration constructs for a given programming task.
SDF/Fundamental Data Structures (4 hour)
Topics: Ÿ Arrays
Ÿ String and string processing Ÿ Lists
Learning Outcomes:
Ÿ Discuss the appropriate use of built-in data structures.
Ÿ Write programs that use each of the following data structures: arrays, strings, lists.
SDF/Development Methods (2 hour)
Topics:
Ÿ Program correctness: Types of errors (syntax, logic, run-time); The concept of a specification
Ÿ Modern programming environments: Programming using library components and their APIs
Ÿ Debugging strategies Learning Outcomes:
Ÿ Explain why the creation of correct program components is important in the production of high-quality software.
Ÿ Identify common coding errors that lead to insecure programs (e.g., buffer overflows, memory leaks, malicious code) and apply strategies for avoiding such errors.
Ÿ Construct, execute and debug programs using a modern IDE and associated tools such as unit testing tools and visual debuggers.
Ÿ
Construct and debug programs using the standard libraries available with a chosen programming language.PL/Object-Oriented Programming (2 hour)
Topics:
Ÿ Object-oriented design: decomposition into objects carrying state and behavior, class-hierarchy design for modeling
Ÿ Definition of classes: fields, methods, and constructors
Learning outcomes:
Ÿ Design and implement a class
Ÿ Use subclassing to design simple class hierarchies that allow code to be reused for distinct subclasses
PL/Basic Type Systems (2 hour)
Topics:
Ÿ A type as a set of values together with a set of operations: primitive types (e.g., numbers, Booleans); Compound types built from other types (e.g., arrays, lists, functions)
Ÿ Type safety and errors caused by using values inconsistently given their intended types
Learning outcomes:
Ÿ For both a primitive and a compound type, informally describe the values that have that type
Ÿ For programming languages, identify program properties checked statistically and program properties checked dynamically
Ÿ Use types and type-error messages to write and debug programs.
AL/Fundamental Data Structures and Algorithms (4 hour)
Topics:
Ÿ Simple numerical algorithms, such as computing the average of a list of numbers, finding the min, max, and mode in a list, approximating the square root of a number, or finding the greatest common divisor
Ÿ Sequential and binary search algorithms
Learning Outcomes:
Ÿ Implement basic numerical algorithms.
Ÿ Implement simple search algorithms and explain the differences in their time complexities.
Appendix B - Python is Now the Most Popular Introductory
Teaching Language at Top U.S. Universities
A recent article reveals that Python is the most popular programming languages taught at top U.S. universities.