AI 개발 · 기본
AI 시대의 개발 공부 - 무엇을 배우고 어떻게 익힐까
컴퓨터공학 교육과정이 바뀌는 방향 - 지식 목록에서 역량으로
교육과정이 '무엇을 아는가'에서 '무엇을 할 수 있는가'로 옮겨 가는 흐름, 국제 표준 교육과정 권고안이 AI 를 핵심 영역으로 넓히고 생성형 AI 의 영향을 따로 다룬 점(실명 없이), 검증의 스펙트럼(리뷰·테스트→정적 분석→형식 검증)이라는 새 졸업 역량, 국내외 대학이 AI 활용 과목·특강을 늘리고 평가를 결과물에서 과정으로 바꾸는 경향, 예시 프로그램은 전통 과목 목록과 새 역량(명세·검증·리뷰·시스템 사고·윤리)을 연결한 대응표를 출력한다
개발자KR · 원고 갱신
이 장에서 배우는 것
앞 장에서 AI가 코드를 쓰면 개발자의 하루에서 어떤 일이 달라지는지 살펴보았다. 코드를 입력하는 시간이 줄어도 문제를 정리하고, 결과를 확인하고, 동료에게 판단의 이유를 설명하는 일은 남는다. 교육과정이 달라지는 방향도 이 변화와 연결된다. 과목 이름을 얼마나 많이 아는지에 더해, 배운 지식을 실제 상황에서 어떻게 쓰는지를 묻게 되는 것이다.
이 장에서는 교육과정을 과목 목록과 수행 능력이라는 두 관점으로 읽는다. 전통 과목이 사라지고 AI 과목으로 모두 바뀐다는 이야기가 아니다. 같은 과목을 배우더라도 무엇을 해 보아야 배웠다고 말할 수 있는지, 그 기준을 더 분명하게 만드는 흐름을 살펴본다. 마지막에는 과목과 역량을 연결한 작은 학습 점검 도구를 실행한다.
- 지식과 역량의 차이를 자신의 학습 경험으로 설명한다.
- AI가 교육과정의 핵심 영역으로 넓어지는 이유와 생성형 AI의 별도 영향을 구분한다.
- 리뷰·테스트·정적 분석·형식 검증이 확인하는 범위를 구분한다.
- 과목과 역량의 대응표를 읽고, 자신에게 필요한 수행 경험을 찾는다.
- 프로그램의 출력이 입력 자료와 계산 과정에 맞는지 확인한다.
문제 상황
개발 공부를 시작한 학생이 작은 학습 기록 도구를 만드는 팀에 참여했다고 하자. 도구는 날짜와 학습 내용을 받아 기록을 저장한다. 학생은 프로그래밍 입문 수업을 들었고, 조건과 반복을 설명할 수 있다. AI의 도움으로 입력 화면과 저장 기능도 만들었다. 화면에는 기록이 잘 나타난다.
그런데 팀원이 묻는다. “같은 날짜에 두 번 입력하면 어떻게 되나”, “학습 내용을 비워 두어도 저장되나”, “다른 사람의 기록을 볼 수 있나”. 학생은 아직 답하지 못한다. 화면이 작동한다는 사실만 확인했기 때문이다. 이 상황에서는 문법을 아는 것과 요구에 맞는 도구를 만드는 것 사이에 간격이 드러난다.
업무를 맡긴 사람은 과목 이수 여부만으로 이 간격이 메워졌다고 판단하기 어렵다. 학생이 입력 조건을 정리할 수 있는지, 잘못된 입력을 넣어 확인할 수 있는지, 다른 사람의 의견을 받아 수정할 수 있는지 보고 싶어 한다. 이러한 질문에 답할 수 있는 능력이 역량이다.
학생도 자신의 학습을 같은 방식으로 점검할 수 있다. “프로그래밍을 배웠다”라는 기록 옆에 “빈 입력의 처리 규칙을 정하고 확인했다”라는 수행 기록을 붙이는 것이다. 이번 예시 프로그램은 이 관점 전환을 돕는다. 과목 목록을 없애지 않고, 각 과목에서 연습할 역량을 연결해 보여 준다.
지식 목록에서 수행 가능한 역량으로
지식은 설명하거나 떠올릴 수 있는 내용이다. 변수가 값을 가리킨다는 설명, 데이터를 정렬하는 방법, 운영체제가 프로그램의 실행을 관리한다는 설명이 여기에 속한다. 역량은 지식과 기술을 상황에 맞게 사용하여 일을 수행하는 능력이다. 제한된 조건에서 방법을 선택하고, 결과를 확인하고, 선택의 이유를 설명하는 것까지 포함한다.
지식과 역량은 서로 대체하는 관계가 아니다. 아는 내용이 부족하면 판단의 근거가 약해진다. 반대로 설명을 외우기만 하고 사용해 보지 않으면 새로운 상황에서 그 지식을 꺼내 쓰기 어렵다. 교육과정을 역량 중심으로 읽는다는 것은 지식마다 “이것으로 어떤 일을 해 볼 수 있는가”라는 질문을 붙이는 것이다.
예를 들어 알고리즘은 문제를 해결하는 절차다. 알고리즘을 배웠다는 사실은 여러 절차의 이름을 알고 있다는 뜻에 머물 수 있다. 역량으로 표현하면 “입력의 크기와 제약을 보고 절차를 선택하고, 선택한 이유와 한계를 설명한다”가 된다. 같은 내용이지만 학습자가 해야 할 행동이 보인다.
| 학습 주제 | 지식의 표현 | 역량의 표현 |
|---|---|---|
| 프로그래밍 | 조건과 반복을 설명한다 | 입력 조건에 맞게 처리하고 결과를 확인한다 |
| 자료구조·알고리즘 | 자료를 담고 탐색하는 방법을 안다 | 제약에 맞는 방법을 선택하고 이유를 설명한다 |
| 소프트웨어공학 | 개발 절차와 문서의 종류를 안다 | 요구를 정리하고 변경 사항을 동료와 검토한다 |
| 운영체제·네트워크 | 실행과 통신의 원리를 안다 | 여러 부분을 잇는 흐름에서 실패 지점을 찾는다 |
ACM·IEEE-CS·AAAI가 마련한 대학 컴퓨터과학 교육과정 지침인 CS2023은 지식 영역을 설명하는 모델과 학습자의 수행 능력을 다루는 역량 프레임워크를 함께 제시한다. 여기서 권고안은 여러 교육기관이 교육과정을 설계할 때 참고하는 지침이다. 모든 학교가 그대로 따라야 하는 하나의 시간표를 뜻하지 않는다. 학교의 목적과 학생의 배경에 따라 구성은 달라질 수 있다.
이러한 권고안은 AI를 핵심 지식 영역으로 확대해 다루고, 생성형 AI가 교육에 미치는 영향도 별도로 논의한다. 생성형 AI는 학습한 패턴을 바탕으로 글이나 코드 같은 내용을 만들어 내는 기술이다. AI의 원리를 배우는 문제와, AI가 만들어 준 코드를 사용하며 배우는 문제는 서로 연결되지만 구별해서 살펴볼 필요가 있다.
AI의 원리를 배우는 수업에서는 데이터를 어떻게 다루고 결과를 어떻게 평가하는지가 학습 대상이 될 수 있다. 생성형 AI를 활용하는 수업에서는 학생이 직접 판단한 부분이 무엇인지, 생성된 결과를 어떻게 확인했는지가 추가로 중요해진다. 도구를 잘 호출했다는 사실만으로 해당 분야의 내용을 이해했다고 볼 수는 없기 때문이다.
이 장은 2026년 10월 기준 예시로 이러한 방향을 설명한다. 특정 제품의 기능이나 특정 학교의 운영 방식은 기준으로 삼지 않는다. 교육과정 권고안의 적용 범위와 개정 시점은 서로 다를 수 있으므로, 실제 진학이나 수강을 결정할 때는 해당 과정의 최신 안내를 확인해야 한다.
확인을 여러 층으로 배우는 이유
AI가 제안한 결과를 확인하는 일은 실행 버튼을 한 번 누르는 것으로 끝나지 않는다. 검증은 결과가 요구한 조건을 만족하는지 근거를 모아 확인하는 일이다. 교육과정에서 새롭게 강조되는 졸업 역량의 한 축은 상황에 맞는 확인 방법을 선택하고, 그 방법으로 확인하지 못한 부분도 설명하는 능력이다.
가장 가까운 출발점은 리뷰와 테스트다. 리뷰(review)는 사람의 눈으로 코드나 문서를 읽으며 요구와 어긋난 부분, 이해하기 어려운 부분을 검토하는 일이다. 테스트(test)는 정한 입력을 실제로 넣고 결과를 예상과 비교하는 일이다. 리뷰는 실행하지 않고도 누락된 규칙을 발견할 수 있고, 테스트는 실행 중 나타나는 결과를 확인할 수 있다.
다음으로 정적 분석(static analysis)이 있다. 프로그램을 실제 입력으로 실행하지 않고 코드의 구조나 규칙을 분석하는 방법이다. 쓰이지 않는 이름이나 특정 오류 가능성 등을 도구로 찾을 수 있다. 어떤 문제를 찾는지는 사용하는 분석 방법에 따라 다르며, 경고가 없다는 사실이 모든 요구를 만족한다는 뜻은 아니다.
형식 검증(formal verification)은 요구하는 성질과 프로그램의 동작을 수학적으로 표현하고, 정한 가정 아래에서 그 성질이 성립하는지 따지는 방법이다. 예를 들어 어떤 상태에서도 특정 금지 상태에 도달하지 않는다는 성질을 다룰 수 있다. 다만 표현한 조건이 실제 요구와 맞는지, 가정이 현실에 맞는지는 별도로 확인해야 한다.
이 흐름을 검증의 스펙트럼이라고 부를 수 있다. 사람의 읽기와 구체적인 실행 사례에서 출발해, 코드 구조의 자동 분석과 수학적 성질의 확인으로 범위가 넓어진다. 그렇다고 오른쪽 방법이 왼쪽 방법을 모두 대신하는 것은 아니다. 형식 검증을 했더라도 요구를 잘못 적었다면 사용자가 원한 결과와 다를 수 있다. 테스트를 통과했더라도 넣어 보지 않은 입력에서 문제가 생길 수 있다.
| 방법 | 주로 확인하는 것 | 남는 질문 |
|---|---|---|
| 리뷰·테스트 | 사람이 읽은 내용과 실행한 사례 | 놓친 규칙이나 실행하지 않은 사례가 있는가 |
| 정적 분석 | 분석 규칙으로 찾을 수 있는 코드의 성질 | 도구가 다루지 않는 동작은 무엇인가 |
| 형식 검증 | 표현한 가정과 성질 사이의 관계 | 가정과 성질이 실제 요구를 담고 있는가 |
처음 공부하는 독자가 지금 형식 검증 도구를 배워야 한다는 뜻은 아니다. 우선 자신이 어떤 근거로 “맞다”고 말하는지 구분하면 된다. “화면이 열렸다”, “정한 입력에서 예상과 같았다”, “코드를 읽어 조건을 확인했다”는 서로 다른 근거다. 근거를 구분하는 습관이 생기면 이후 더 정교한 방법을 배울 때도 쓰임을 이해하기 쉽다.
이번 프로그램에서도 실행 결과만 보지 않는다. 과목마다 연결한 역량이 실제로 존재하는지 먼저 검사한다. 이어서 대응표를 출력하고, 역량이 몇 과목에 등장하는지 센다. 실행한 뒤에는 원래 목록을 읽고 수가 맞는지 직접 비교한다. 이 작은 과정만으로도 입력 확인, 실행 확인, 읽기 확인의 역할을 나누어 볼 수 있다.
수업과 평가에서 과정이 보이는 방향
국내외 대학에서는 AI 활용을 다루는 과목이나 특강을 마련하고, 기존 수업에도 AI를 활용하는 활동을 포함하는 사례가 나타난다. 다만 모든 학교와 과목이 같은 방식으로 바뀌는 것은 아니다. AI 사용을 허용하는 범위, 학생이 밝혀야 하는 내용, 평가에 반영하는 방식은 수업마다 다르다.
평가에서도 결과물에 더해 과정을 살피는 경향이 있다. 생성된 코드만 제출받으면 학생이 무엇을 이해했고 어떤 판단을 했는지 구분하기 어렵기 때문이다. 따라서 요구를 정리한 메모, 실행 결과, 수정 이유, 구두 설명 등을 함께 살피는 방식이 의미를 갖는다. 결과물의 품질도 중요하지만, 그 결과에 이른 판단을 확인할 자료가 더해지는 것이다.
한 대학의 수업을 가정해 보자. 학생은 학습 기록 도구와 함께 “빈 내용은 저장하지 않는다”라는 규칙을 제출한다. 이어서 빈 내용을 넣었을 때의 실행 결과와, AI의 처음 제안에서 무엇을 고쳤는지 설명한다. 교사는 도구가 작동하는지뿐 아니라 학생이 규칙을 이해하고 확인했는지도 평가할 수 있다. 이는 설명을 위한 가상 수업 사례다.
여기서 명세(specification)는 프로그램이 받아야 할 입력과 내놓아야 할 결과, 지켜야 할 조건을 적은 약속이다. 시스템 사고(systems thinking)는 하나의 함수만 보지 않고 입력부터 저장과 출력까지 이어지는 흐름과 부분 사이의 관계를 보는 관점이다. 윤리는 이 과정에서 타인의 권리, 정보의 취급, 자신의 기여를 정직하게 설명하는 책임과 연결된다.
이번 대응표는 명세·검증·리뷰·시스템 사고·윤리를 사용한다. 이 다섯 항목이 교육과정의 모든 역량이라는 뜻은 아니다. 학습자가 과목과 수행 능력의 연결을 읽어 보도록 고른 예시다. 하나의 과목에서 여러 역량을 연습할 수 있고, 하나의 역량을 여러 과목에서 반복해 사용할 수 있다.
AI로 수행 기록의 초안을 만들었다면 그 문장을 그대로 자신의 경험으로 제출해서는 안 된다. 실제로 실행한 내용과 읽어 확인한 내용을 맞춰야 한다. “검증했다”라고 적기 전에 무엇을 넣었고 무엇을 예상했으며 어떤 결과를 보았는지 말할 수 있어야 한다. 직업이 사라진다고 단정하기보다, 이런 판단과 설명의 비중이 커지는 방향으로 학습을 준비할 수 있다.
완성 코드
다음 내용을 main.py 파일에 저장한다. 프로그램은 외부 자료를 가져오지 않고, 파일 안에 적힌 대응표만 사용한다. 과목 배치와 연결 관계는 설명을 위해 만든 가상 예시다. 출력되는 과목 수는 이 예시 자료에서 계산한 값이며, 대학의 실제 교육과정이나 학생의 능력 점수가 아니다.
대응표에 적힌 역량 이름을 먼저 검사하고, 문제가 없으면 과목별 연결과 역량별 등장 횟수를 출력한다. 마지막에는 모든 역량이 적어도 한 과목에 연결되어 있는지 보여 준다. 전체 프로그램은 44줄이며 입력을 기다리지 않고 종료한다.
subjects = [
("프로그래밍", ["명세", "검증"]),
("자료구조·알고리즘", ["검증", "시스템 사고"]),
("소프트웨어공학", ["명세", "리뷰"]),
("운영체제·네트워크", ["시스템 사고", "윤리"]),
("팀 프로젝트", ["리뷰", "윤리"]),
]
competencies = [
"명세",
"검증",
"리뷰",
"시스템 사고",
"윤리",
]
def main():
for subject, links in subjects:
if len(links) != len(set(links)):
print(f"자료 오류: {subject}에 중복 연결이 있다.")
return
for competency in links:
if competency not in competencies:
print(f"자료 오류: {subject}의 {competency}을 확인한다.")
return
counts = {}
for competency in competencies:
counts[competency] = 0
print("과목 → 연습할 역량")
for subject, links in subjects:
print(f"{subject} → {', '.join(links)}")
for competency in links:
counts[competency] += 1
print("\n역량별 연결 과목 수")
for competency in competencies:
print(f"{competency}: {counts[competency]}개")
covered = all(counts[competency] > 0 for competency in competencies)
print(f"\n모든 역량 연결: {covered}")
if __name__ == "__main__":
main()
줄별 해설
빈 줄도 줄 번호에 포함한다. 괄호 안의 두 항목은 과목 이름과 연결된 역량 목록을 한 묶음으로 저장한다. 대괄호로 만든 목록은 여러 값을 순서대로 담는다. 코드를 읽을 때는 먼저 자료를 보고, 그다음 검사와 출력의 순서를 따라가면 된다.
- 1줄은 subjects라는 이름에 과목 목록을 저장하기 시작한다.
- 2줄은 프로그래밍을 명세와 검증에 연결한다.
- 3줄은 자료구조·알고리즘을 검증과 시스템 사고에 연결한다.
- 4줄은 소프트웨어공학을 명세와 리뷰에 연결한다.
- 5줄은 운영체제·네트워크를 시스템 사고와 윤리에 연결한다.
- 6줄은 팀 프로젝트를 리뷰와 윤리에 연결한다.
- 7줄은 과목 목록을 닫는다.
- 8줄은 자료의 두 부분을 읽기 쉽게 나누는 빈 줄이다.
- 9줄은 허용할 역량 이름의 목록을 시작한다.
- 10줄은 명세를 첫 역량으로 넣는다.
- 11줄은 검증을 넣는다.
- 12줄은 리뷰를 넣는다.
- 13줄은 시스템 사고를 넣는다.
- 14줄은 윤리를 넣는다.
- 15줄은 역량 목록을 닫는다.
- 16줄은 자료와 처리 부분을 나누는 빈 줄이다.
- 17줄은 main이라는 함수를 정의한다. 함수는 이름을 붙여 다시 실행할 수 있게 묶은 작업이다.
- 18줄은 과목 목록에서 한 묶음씩 꺼내 이름을 subject에, 역량 목록을 links에 넣는다.
- 19줄은 연결 개수와 중복을 제거한 개수를 비교한다. len은 개수를 구하고, set은 같은 값을 하나로 모은다.
- 20줄은 중복이 있을 때 해당 과목 이름을 포함한 안내를 출력한다. f로 시작하는 문자열은 중괄호 자리에 값을 넣는다.
- 21줄은 함수 실행을 끝낸다. 잘못된 자료로 대응표를 만들지 않게 한다.
- 22줄은 해당 과목의 연결 목록에서 역량을 하나씩 꺼낸다.
- 23줄은 꺼낸 이름이 허용한 역량 목록에 없는지 확인한다.
- 24줄은 알 수 없는 역량이 있으면 과목과 역량 이름을 출력한다.
- 25줄은 그 경우에도 함수 실행을 끝낸다.
- 26줄은 자료 검사와 집계를 나누는 빈 줄이다.
- 27줄은 counts라는 빈 사전을 만든다. 사전은 이름에 대응하는 값을 저장하는 자료 형태다.
- 28줄은 허용한 역량을 순서대로 꺼낸다.
- 29줄은 각 역량의 등장 횟수를 0으로 준비한다.
- 30줄은 준비와 출력을 나누는 빈 줄이다.
- 31줄은 대응표의 제목을 출력한다.
- 32줄은 과목과 연결 목록을 다시 순서대로 꺼낸다.
- 33줄은 join으로 역량 이름 사이에 쉼표와 공백을 넣어 한 줄로 출력한다.
- 34줄은 출력한 과목의 역량을 하나씩 꺼낸다.
- 35줄은 그 역량의 횟수에 1을 더한다. += 1은 기존 값을 하나 늘린다는 뜻이다.
- 36줄은 두 출력 부분을 나누는 빈 줄이다.
- 37줄은 줄바꿈을 나타내는 \n과 함께 집계 제목을 출력한다.
- 38줄은 역량 목록의 순서대로 결과를 꺼낼 준비를 한다.
- 39줄은 역량 이름과 계산한 과목 수를 출력한다.
- 40줄은 모든 횟수가 0보다 큰지 확인한다. all은 검사 결과가 모두 참일 때 True를 돌려준다. 괄호 안 표현은 역량마다 같은 비교를 적용한다.
- 41줄은 그 결과를 출력한다. True는 참, False는 거짓을 뜻한다.
- 42줄은 함수와 실행 시작 부분을 나누는 빈 줄이다.
- 43줄은 이 파일을 직접 실행했는지 확인하는 시작 조건이다.
- 44줄은 조건이 맞으면 main 함수를 실행한다.
들여쓰기도 흐름을 보여 준다. 19줄부터 25줄까지는 각 과목을 검사하는 반복 안에 있다. 27줄부터는 모든 과목의 검사가 끝난 뒤 실행된다. 따라서 오류 안내가 나오면 집계 제목이나 대응표는 나오지 않는다. return이 어디에서 실행되는지 읽으면 이러한 차이를 확인할 수 있다.
40줄의 짧은 표현이 낯설다면 “역량 하나를 고른다, 연결 횟수가 0보다 큰지 본다, 모든 역량에 대해 같은 확인을 한다”로 나누어 읽으면 된다. 여기서는 새 문법을 외우는 것보다 검사 질문을 이해하는 것이 중요하다. 이 검사는 연결의 존재만 확인하며 연결 내용의 교육적 적절성까지 판단하지 않는다.
실행 결과
main.py가 있는 폴더에서 다음 명령을 실행한다.
python3 main.py
예상 출력은 다음과 같다. 실행할 때마다 같은 자료를 같은 순서로 처리하므로 출력도 같다.
과목 → 연습할 역량
프로그래밍 → 명세, 검증
자료구조·알고리즘 → 검증, 시스템 사고
소프트웨어공학 → 명세, 리뷰
운영체제·네트워크 → 시스템 사고, 윤리
팀 프로젝트 → 리뷰, 윤리
역량별 연결 과목 수
명세: 2개
검증: 2개
리뷰: 2개
시스템 사고: 2개
윤리: 2개
모든 역량 연결: True
출력을 확인할 때는 “오류 없이 끝났다”에서 한 걸음 더 나아간다. 명세는 프로그래밍과 소프트웨어공학에 한 번씩 있다. 검증은 프로그래밍과 자료구조·알고리즘에 있다. 나머지 역량도 원래 목록에서 찾아 집계와 비교한다. 모든 역량의 횟수를 더하면 각 과목에 적힌 연결의 전체 개수와 같아야 한다.
마지막 True는 이 가상 대응표에서 빠진 역량이 없다는 뜻이다. 학습자가 다섯 역량을 이미 갖췄다는 뜻은 아니다. 그 판단에는 실제 수행의 증거가 필요하다. 프로그램의 문구와 계산의 범위를 구분해 읽는 일도 AI가 만든 결과를 확인하는 연습이 된다.
실무에서 자주 틀리는 것
대응표에 등장하면 역량을 갖췄다고 판단한다
다음 코드는 연결 횟수를 사람의 능력 판정으로 바꾼다. 계산한 자료에는 실제 수행의 증거가 없으므로 이러한 해석을 뒷받침하지 못한다. 두 예시는 각각 따로 실행할 수 있다.
count = 2
if count > 0:
print("검증 역량을 갖췄다")
고친 코드는 계산이 말해 주는 범위만 표현한다.
count = 2
if count > 0:
print("검증을 연습할 연결 과목이 있다")
같은 역량을 두 번 적어 연결 횟수를 늘린다
한 과목의 목록에 검증을 두 번 적으면 단순 집계는 이를 두 연결로 센다. “연결 과목 수”라는 제목과 맞지 않는 자료가 된다.
links = ["명세", "검증", "검증"]
print(len(links))
고친 자료는 한 과목 안의 같은 연결을 한 번만 적는다. 완성 코드의 중복 검사도 이 규칙을 확인한다.
links = ["명세", "검증"]
print(len(links))
허용 목록과 다른 이름을 검사 없이 사용한다
아래 코드는 “검증”과 “검사”를 같은 이름으로 취급한다. 사전에는 “검사”가 없으므로 실행하면 오류로 끝난다.
counts = {"검증": 0}
competency = "검사"
counts[competency] += 1
print(counts)
고친 코드는 이름이 있는지 먼저 확인한다. 이 검사는 용어의 교육적 의미를 판단하지는 않지만, 잘못된 이름으로 집계하는 일을 막는다.
counts = {"검증": 0}
competency = "검사"
if competency not in counts:
print("역량 이름을 확인한다.")
else:
counts[competency] += 1
print(counts)
프로그램이 끝나면 요구도 확인했다고 생각한다
완료 문구만 출력하는 코드는 집계 결과가 요구를 만족하는지 확인하지 않는다.
counts = {"명세": 1, "검증": 0}
print("모든 역량 연결 확인 완료")
고친 코드는 연결 횟수가 없는 역량을 드러낸다. 실행했다는 사실과 조건을 만족했다는 사실을 구분할 수 있다.
counts = {"명세": 1, "검증": 0}
for competency, count in counts.items():
if count == 0:
print(f"연결이 없는 역량: {competency}")
한눈에 보기
| 관점 | 살펴볼 내용 | 자기 점검 질문 |
|---|---|---|
| 지식 | 원리와 개념을 이해한다 | 이 내용이 무엇인지 내 말로 설명하는가 |
| 역량 | 상황에 맞게 지식을 사용한다 | 조건이 주어지면 무엇을 수행할 수 있는가 |
| AI 교육 | AI의 원리와 활용의 영향을 함께 다룬다 | 배우는 대상과 도움받는 도구를 구분하는가 |
| 검증 | 여러 확인 방법의 범위를 구분한다 | 맞다고 판단한 근거와 남은 질문은 무엇인가 |
| 과정 평가 | 결과와 판단의 흔적을 함께 본다 | 직접 확인하고 수정한 부분을 설명하는가 |
| 대응표 | 과목과 연습할 역량을 연결한다 | 연결 목록을 수행의 증거와 혼동하지 않는가 |
과목 이름은 학습의 출발점을 알려 준다. 역량은 그 내용을 어디에 어떻게 사용할지 묻게 한다. 둘을 함께 읽으면 “무엇을 공부할까”라는 질문에 “무엇을 해 보며 확인할까”라는 질문이 붙는다. 다음 장에서는 이러한 판단을 가능하게 하는 기초 지식의 역할을 살펴본다.
연습 문제
- 완성 코드를 실행하기 전에 명세가 연결된 과목을 찾아 적는다. 예상 횟수를 적은 뒤 출력과 비교한다.
- 팀 프로젝트의 연결 목록에서 윤리를 지운다고 가정한다. 윤리의 연결 과목 수와 마지막 참·거짓 결과가 어떻게 바뀌는지 설명한다.
- 소프트웨어공학의 연결 목록에 명세를 한 번 더 적는다고 가정한다. 어떤 안내가 나오는지, 대응표가 출력되는지 설명한다.
- “알고리즘의 이름을 설명할 수 있다”를 수행 가능한 역량 문장으로 바꾼다. 이어서 수행을 확인할 증거 하나와 그 증거만으로 확인하지 못하는 점 하나를 적는다.
정답과 해설
- 명세가 연결된 과목은 프로그래밍과 소프트웨어공학이다. 예상 횟수는 2개다. 출력의 “명세: 2개”와 비교하면 된다. 이는 출력 문장을 믿는 대신 원래 자료를 읽고 계산을 확인하는 연습이다.
- 윤리의 연결 과목 수는 1개가 된다. 운영체제·네트워크에 윤리가 남아 있으므로 마지막 결과는 True다. 완성 코드는 각 역량이 한 번 이상 연결되었는지 검사하며, 모두 두 번 연결되었는지 검사하지 않는다.
- “자료 오류: 소프트웨어공학에 중복 연결이 있다.”가 출력된다. 이후 return으로 함수가 끝나므로 대응표와 집계 결과는 출력되지 않는다. 중복 검사에서 원래 목록의 개수가 중복을 제거한 개수보다 커지는 것이 이유다.
- 예를 들어 “입력의 크기와 제약을 보고 탐색 방법을 선택하고 선택 이유를 설명한다”라고 쓸 수 있다. 서로 다른 입력 조건에서 실행한 결과와 선택 이유를 증거로 남길 수 있다. 다만 일부 입력에서 얻은 결과만으로 모든 입력에서 올바르게 동작한다고 판단할 수는 없다. 수행 내용, 확인 근거, 근거의 한계를 함께 적는 것이 핵심이다.
READER FEEDBACK
질문·의견
내용에 관한 질문이나 더 나은 설명을 위한 의견을 남겨 주세요. 오탈자는 위의 제보 양식이 더 빨리 반영됩니다. 이 댓글은 원래 게시글과 같은 자리에 쌓입니다.
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.