needmoreeasy EN 한국어
배우기

NME 학습 가이드

짧은 가이드 90편입니다. 앞에서부터 순서대로 읽도록 만들었고, 여덟 부로 나뉩니다. 각 편은 한 가지를 가르치고, 마지막에 직접 해 볼 것과 배운 것을 정리합니다.

설치는 필요하지 않습니다. 코드 덩이마다 「실행해 보기」가 있어서 needmoreeasy.com의 쓰는 칸으로 그대로 옮겨 갑니다. 휴대폰에서도 됩니다. 여기 실린 프로그램은 전부 진짜 컴파일러로 확인한 것입니다.

난이도

  • ★☆☆☆☆ (1/5) — 첫날. 문장 몇 줄이면 끝납니다.
  • ★★☆☆☆ (2/5) — 조건과 반복이 섞입니다. 아직 문장형만으로 됩니다.
  • ★★★☆☆ (3/5) — 프로그램 하나를 통째로 만듭니다.
  • ★★★★☆ (4/5) — 초급 문법이나 Python이 섞입니다.
  • ★★★★★ (5/5) — 거의 Python입니다.

별은 얼마나 어려운가이지 번호 순서가 아닙니다. 부가 바뀌면 그 주제에서 가장 쉬운 편부터 다시 시작하고, 같은 부 안에서도 문장형으로 다시 쓴 편은 그만큼 쉬워집니다.

문장형만으로 쓰인 편이 어디까지인지는 언제든 재 볼 수 있습니다:

python3 scripts/report-guide-tier.py --guides

순서대로 배우기

1부 — 문장으로 시작하기

프로그램을 한 번도 써 본 적 없는 사람을 위한 부분입니다. 문장만 쓰고, 한 편에 새로운 것 하나만 나옵니다.

  1. 01 — 인사: 첫 문장 말하기
  2. 02 — 이야기: 줄마다 말해줘를 쓰지 않기
  3. 03 — 이야기: 글자가 하나씩 나오게 하기
  4. 04 — 물어보기: 대화 나누기
  5. 05 — 저장: 값 넣어 두기
  6. 06 — 변경: 값 바꾸기
  7. 07 — 반복: 여러 번 반복하기
  8. 08 — 조건: 갈림길 선택
  9. 09 — 그리고/또는: 조건 합치기
  10. 10 — 동안: 조건이 참인 동안 반복
  11. 11 — 멈춤: 반복 멈추기
  12. 12 — 랜덤: 주사위와 선택
  13. 13 — 확률: 백 번에 몇 번
  14. 14 — 화면: 지우고, 줄 긋고, 상자에 담기
  15. 15 — 시간: 재기와 쿨타임
  16. 16 — 확인과 빌드: Python 보기

2부 — 만들어 보는 작은 프로그램들

1부를 끝낸 사람을 위한 부분입니다. 게임과 메뉴, 남겨 둘 만한 작은 프로젝트를 만듭니다. 스무 편 가운데 열여덟 편이 문장문법만으로 쓰여 있습니다 — 따옴표도 괄호도 등호도 나오지 않습니다. 남은 두 편은 목록의 목록이 필요한 26편과 날짜를 따옴표 안에 손으로 적는 36편입니다. 문장문법만으로 쓴 프로그램은 1부에 있습니다 — 1부의 코드에는 따옴표도 괄호도 등호도 한 번 나오지 않습니다(scripts/report-guide-tier.py로 재어 볼 수 있습니다).

  1. 17 — 단어 맞히기: 숨은 단어 게임
  2. 18 — 모험 — 작은 텍스트 게임
  3. 19 — 게임: 반응 속도 측정
  4. 20 — 아스키 아트 — 문자로 그리기
  5. 21 — 진행 — 얼마나 왔는지 보여 주기
  6. 22 — 터미널 메뉴 — 작은 TUI
  7. 23 — 최고 점수: 작은 프로젝트
  8. 24 — 퀴즈: 문제를 내고 채점하기
  9. 25 — 계산기: 물어보고 셈하기
  10. 26 — 게임: 틱택토
  11. 27 — 게임: 숨은 색 알아맞히기
  12. 28 — 게임: 규칙을 아는 상대
  13. 29 — 플레이리스트: 순서를 섞어서 듣기
  14. 30 — 상점: 재고와 잔액
  15. 31 — 은행: 넣고 빼고 내역 남기기
  16. 32 — 성적부: 이름마다 점수, 그리고 평균
  17. 33 — 습관 기록: 날짜마다 했는지 남기기
  18. 34 — 차트: 숫자를 막대로 보기
  19. 35 — 할 일 목록: 넣고 지우고 보기
  20. 36 — 일기: 오늘 날짜와 함께 남기기

3부 — 파일과 자료

프로그램이 끝난 뒤에도 내용이 남기를 바라는 사람을 위한 부분입니다. 파일·JSON·CSV·보고서를 다룹니다. 37·38·40·42·43번은 문장문법으로 쓰여 있습니다 — 다만 파일 이름에는 따옴표를 씁니다. 문장문법에서 따옴표를 쓰는 유일한 자리이고, 그 이유는 37번에 적어 두었습니다.

⚠ 이 부에서부터는 사이트에서 돌아가지 않습니다. 브라우저 안에는 파일을 둘 곳이 없습니다. 본인 컴퓨터에 설치하고 해 보세요.

  1. 37 — 파일: 저장하고 다시 읽기
  2. 38 — 이름 목록: 파일에서 줄 단위로 읽기
  3. 39 — JSON: 데이터 저장하고 불러오기
  4. 40 — CSV: 줄마다 칸이 여럿
  5. 41 — 표: 작은 주소록
  6. 42 — 단어 세기: 어느 말이 몇 번 나왔나
  7. 43 — 글 통계: 글자 수, 낱말 수, 가장 긴 낱말
  8. 44 — 기록: 사건 기록
  9. 45 — 묶기: 범주별 데이터
  10. 46 — 상위 열: 기록 순위
  11. 47 — 검색 — JSON에서 찾기
  12. 48 — 파일: 여러 파일 처리
  13. 49 — 보고서 — 요약 파일 쓰기
  14. 50 — 편집기 — 아주 작은 텍스트 에디터

4부 — 목록과 글자를 더 다루기

더 긴 목록과 더 긴 글을 다루려는 사람을 위한 부분입니다. 정렬·집합·격자·찾는 순서를 배웁니다.

  1. 51 — 글자: 세고, 나누고, 다시 잇기
  2. 52 — 정렬 — 목록을 순서대로
  3. 53 — 집합: 중복 없는 값
  4. 54 — 병합: 두 목록 합치기
  5. 55 — 격자: 목록의 판
  6. 56 — 버블 정렬 — 첫 알고리즘
  7. 57 — 이진 탐색 — 절반씩 찾기
  8. 58 — 데이터: 목록 통계

5부 — 프로그램이 커질 때: 오류·시험·파일 나누기

같은 일을 더 짧게 쓰고 더 큰 프로그램을 만들려는 사람을 위한 부분입니다. 초급 문법과 고급 문법, 모듈과 도구를 다룹니다.

  1. 59 — 예외: 문제 다루기
  2. 60 — 테스트: 내가 쓴 함수 확인하기
  3. 61 — 모듈: 프로그램을 여러 파일로 나누기
  4. 62 — 모듈: 여러 파일 프로젝트
  5. 63 — 도구: 명령 줄에서 말 받기
  6. 64 — Python 패키지: 표준 라이브러리와 설치된 라이브러리
  7. 65 — 변환: Python을 NME로
  8. 66 — 네이티브: 기계어로 컴파일하기

6부 — 자료 분석과 인터넷

이해해야 할 자료가 있거나 서버에 물어볼 일이 있는 사람을 위한 부분입니다. 통계·패턴·네트워크를 다룹니다.

  1. 67 — 통계: 데이터 이해
  2. 68 — 비교: 두 숫자 묶음
  3. 69 — 데이터: 한 달 온도 분석하기
  4. 70 — 정규식: 패턴 찾기
  5. 71 — HTTP — 웹 서버에 물어보기
  6. 72 — 날씨: 웹에서 JSON 읽기
  7. 73 — 네트워크: 서버 폴링
  8. 74 — 네트워크: 파일 받아 저장하기
  9. 75 — 웹: 페이지에서 링크 뽑아내기
  10. 76 — 네트워크: 미니 채팅

7부 — 언어를 직접 만들어 보기

언어가 어떻게 만들어지는지 알고 싶은 사람을 위한 부분입니다. 컴파일러를 한 단계씩 직접 만듭니다.

  1. 77 — 첫 컴파일러 — 아주 작은 언어
  2. 78 — 컴파일러: 표현식 언어
  3. 79 — 컴파일러: 토큰 읽기
  4. 80 — 컴파일러: 식을 트리로 만들기
  5. 81 — 컴파일러: 미니 언어에 함수 넣기
  6. 82 — 컴파일러: 작은 바이트코드 실행기
  7. 83 — 컴파일러: 트리에서 바이트코드로
  8. 84 — 부트스트랩: NME가 아주 작은 언어를 컴파일
  9. 85 — 셀프호스트: NME가 NME를 실행
  10. 86 — 캡스톤: Python으로 컴파일하는 언어

8부 — 암호화폐

암호화폐가 실제로 무엇인지 보려는 사람을 위한 부분입니다. 장부를 직접 만들고 직접 검증합니다.

  1. 87 — 암호화폐 장부 — 상태와 거래
  2. 88 — 작업증명 — 거래를 블록으로 채굴하기
  3. 89 — 거래 증명 — 지갑 소유와 재전송 방지
  4. 90 — 전체 사슬 검증 — 처음부터 다시 계산하기

주제별 찾아보기

전체 목록

#난이도주제제목결과물
01★☆☆☆☆첫걸음인사: 첫 문장 말하기적은 말을 그대로 화면에 내보내는 프로그램
02★☆☆☆☆첫걸음이야기: 줄마다 말해줘를 쓰지 않기여러 줄짜리 이야기를 한 묶음으로 쓴 프로그램
03★☆☆☆☆첫걸음이야기: 글자가 하나씩 나오게 하기소설처럼 글자가 하나씩 나타나는 프로그램
04★☆☆☆☆첫걸음물어보기: 대화 나누기이름을 물어보고 문장으로 인사하는 프로그램
05★☆☆☆☆첫걸음저장: 값 넣어 두기글자·숫자·목록을 이름 붙여 저장하는 프로그램
06★☆☆☆☆첫걸음변경: 값 바꾸기점수에 더하고 빼는 프로그램
07★★☆☆☆첫걸음반복: 여러 번 반복하기줄을 여러 번 실행하고, 목록을 하나씩 지나가고, 잠깐 쉬는 프로그램
08★★☆☆☆고르기와 반복조건: 갈림길 선택조건에 따라 다른 줄을 실행하는 프로그램
09★★☆☆☆고르기와 반복그리고/또는: 조건 합치기조건을 합쳐 판단하는 프로그램
10★★☆☆☆고르기와 반복동안: 조건이 참인 동안 반복조건이 참인 동안 반복하는 블록
11★★☆☆☆고르기와 반복멈춤: 반복 멈추기반복을 일찍 끝내는 프로그램
12★★☆☆☆무작위와 확률랜덤: 주사위와 선택주사위를 굴리고 색을 고르는 프로그램
13★★☆☆☆무작위와 확률확률: 백 번에 몇 번정해 둔 확률로만 일어나는 일이 있는 프로그램
14★★☆☆☆화면과 시간화면: 지우고, 줄 긋고, 상자에 담기화면을 지우고, 제목을 가운데에 놓고, 상자로 감싸는 프로그램
15★★☆☆☆도구 다루기시간: 재기와 쿨타임걸린 시간을 재고, 정해진 시간 동안 다시 못 하게 막는 프로그램
16★★☆☆☆도구 다루기확인과 빌드: Python 보기자기가 쓴 문장이 어떤 Python이 되는지 읽는 습관
17★★★☆☆게임단어 맞히기: 숨은 단어 게임숨은 단어를 한 글자씩 맞히는 게임
18★★★★☆프로젝트모험 — 작은 텍스트 게임방을 이동하며 고르는 텍스트 모험
19★★★☆☆게임게임: 반응 속도 측정얼마나 빨리 반응하는지 재는 프로그램
20★★★☆☆화면과 시간아스키 아트 — 문자로 그리기글자를 이어 붙여 모양을 그리는 프로그램
21★★★☆☆화면과 시간진행 — 얼마나 왔는지 보여 주기할 일을 하나씩 해 나가며 자라나는 막대를 보여 주는 프로그램
22★★★★☆프로젝트터미널 메뉴 — 작은 TUI화면을 지우고 다시 그리는 차림표 프로그램
23★★★☆☆프로젝트최고 점수: 작은 프로젝트세 판을 하고 가장 좋은 기록을 알려 주는 주사위 게임
24★★★☆☆게임퀴즈: 문제를 내고 채점하기문제를 차례로 내고 맞았는지 세어 점수를 알려 주는 퀴즈
25★★★☆☆프로젝트계산기: 물어보고 셈하기숫자 두 개와 셈 종류를 물어보고 답을 알려 주는 계산기
26★★★★☆게임게임: 틱택토승리 확인이 있는 두 명이 하는 틱택토
27★★★☆☆게임게임: 숨은 색 알아맞히기컴퓨터가 숨긴 색 세 개를 다섯 번 안에 알아맞히는 게임
28★★★★☆게임게임: 규칙을 아는 상대이기는 규칙을 따라 두는 상대와 겨루는 게임
29★★★☆☆무작위와 확률플레이리스트: 순서를 섞어서 듣기노래 목록을 섞어 한 곡씩 순서대로 재생하는 프로그램
30★★★★☆프로젝트상점: 재고와 잔액물건을 팔 때마다 재고가 줄고 잔액이 늘어나는 작은 상점
31★★★☆☆프로젝트은행: 넣고 빼고 내역 남기기돈을 넣고 빼며 잔액을 지키고 한 일을 내역에 남기는 계좌
32★★★★☆프로젝트성적부: 이름마다 점수, 그리고 평균이름마다 점수를 담고 평균과 최고점을 알려 주는 성적부
33★★★★☆프로젝트습관 기록: 날짜마다 했는지 남기기날짜마다 했는지 안 했는지를 남기고 며칠 했는지 세는 기록
34★★★☆☆화면과 시간차트: 숫자를 막대로 보기요일마다 읽은 쪽수를 막대 길이로 그려 한눈에 비교하기
35★★★★☆프로젝트할 일 목록: 넣고 지우고 보기명령을 계속 받으며 할 일을 넣고 지우고 보여 주는 목록
36★★★☆☆파일일기: 오늘 날짜와 함께 남기기오늘 날짜와 요일을 붙여 한 줄짜리 일기를 저장하고 다시 읽는 프로그램
37★★★☆☆파일파일: 저장하고 다시 읽기글을 파일에 저장하고 다시 읽는 프로그램
38★★★☆☆파일이름 목록: 파일에서 줄 단위로 읽기이름을 파일에 줄줄이 저장하고 다시 목록으로 읽는 프로그램
39★★★☆☆파일JSON: 데이터 저장하고 불러오기이름과 점수를 저장하고 불러오는 프로그램
40★★★☆☆파일CSV: 줄마다 칸이 여럿한 줄에 칸이 여럿인 파일을 읽어 칸별로 꺼내는 프로그램
41★★★☆☆자료 다루기표: 작은 주소록이름으로 사는 곳을 찾는 주소록
42★★★★☆목록과 글단어 세기: 어느 말이 몇 번 나왔나글을 낱말로 나누고 낱말마다 몇 번 나왔는지 세는 프로그램
43★★★☆☆목록과 글글 통계: 글자 수, 낱말 수, 가장 긴 낱말파일에 저장한 글을 다시 읽어 글자 수·낱말 수·가장 긴 낱말을 알려 주는 프로그램
44★★★★★파일기록: 사건 기록프로그램이 실행될 때마다 datetime과 file_write로 로그 파일에 날짜 줄을 덧붙이기
45★★★★★자료 다루기묶기: 범주별 데이터범주 키로 dict 목록을 목록들의 dict로 묶고, 범주별 개수를 보고하기
46★★★★★자료 다루기상위 열: 기록 순위JSON 기록을 불러와 숫자 점수 기준으로 정렬하고 상위 열 개를 보여 주는 프로그램
47★★★★★자료 다루기검색 — JSON에서 찾기로컬 서버나 파일에서 JSON 목록을 불러와 대소문자 구분 없이 검색하기
48★★★★★파일파일: 여러 파일 처리폴더의 파일을 나열해 각각 읽고 전체 단어·글자 수를 보고하는 프로그램
49★★★★★프로젝트보고서 — 요약 파일 쓰기JSON 데이터 파일 몇 개를 읽어 file_write로 요약 보고서 하나를 쓰는 프로그램
50★★★★★프로젝트편집기 — 아주 작은 텍스트 에디터버퍼를 두고 줄을 추가·삭제·목록·저장하는 줄 단위 에디터
51★★★☆☆목록과 글글자: 세고, 나누고, 다시 잇기한 문장의 글자 수를 세고, 낱말로 나누고, 다시 한 줄로 잇는 프로그램
52★★★☆☆목록과 글정렬 — 목록을 순서대로목록을 작은 것부터·큰 것부터 두 방향으로 세워 보는 프로그램
53★★★★★목록과 글집합: 중복 없는 값Python 집합으로 텍스트 파일의 고유 단어와 문장의 고유 글자 찾기
54★★★★★자료 다루기병합: 두 목록 합치기두 JSON 목록을 이름 키로 합쳐 결합 보고서 만들기
55★★★★★목록과 글격자: 목록의 판목록의 목록으로 만든 3x3 판, board[row][col]로 칸 읽고 쓰기
56★★★★★목록과 글버블 정렬 — 첫 알고리즘중첩 반복과 맞바꿈으로 버블 정렬을 직접 구현하고 Python 내장 정렬과 결과를 비교하는 프로그램
57★★★★★목록과 글이진 탐색 — 절반씩 찾기정렬된 목록에서 목표 숫자를 매 단계 탐색 범위를 절반으로 줄이며 찾고, 단계 수까지 보여 주는 프로그램
58★★★★★자료 다루기데이터: 목록 통계JSON 파일에서 숫자를 불러와 표준 라이브러리 statistics로 평균·중앙값·최댓값 구하기
59★★★★☆프로그램이 커질 때예외: 문제 다루기없는 파일을 읽거나 숫자가 아닌 입력을 바꿔도 멈추지 않는 프로그램
60★★★★☆프로그램이 커질 때테스트: 내가 쓴 함수 확인하기자기 함수를 예상값과 비교해 통과·실패를 보고하는 작은 테스트 실행기
61★★★★☆프로그램이 커질 때모듈: 프로그램을 여러 파일로 나누기프로그램을 여러 .nme 파일로 나누기
62★★★★☆프로그램이 커질 때모듈: 여러 파일 프로젝트fetch·analyze·report 세 .nme 모듈로 나누고 주 프로그램이 가져오는 작은 날씨 보고서 프로젝트
63★★★★☆도구 다루기도구: 명령 줄에서 말 받기nme 실행 todo add "buy milk"처럼 명령 줄에서 말을 받아 동작하는 할 일 도구
64★★★★☆프로그램이 커질 때Python 패키지: 표준 라이브러리와 설치된 라이브러리표준 라이브러리와 설치된 라이브러리 사용하기
65★★★★☆도구 다루기변환: Python을 NME로작은 Python 파일을 NME로 변환하기
66★★★★☆도구 다루기네이티브: 기계어로 컴파일하기CPython 없이 기계어로 실행하기
67★★★★★자료 다루기통계: 데이터 이해JSON 숫자 목록에서 count·평균·중앙값·최빈값·최소·최대·범위 보고하기
68★★★★★자료 다루기비교: 두 숫자 묶음두 JSON 숫자 목록을 불러와 평균과 최댓값을 비교하는 프로그램
69★★★★★자료 다루기데이터: 한 달 온도 분석하기한 달치 온도를 읽어 통계와 히스토그램을 계산하고 보고서 파일로 저장하기
70★★★★★인터넷정규식: 패턴 찾기텍스트 파일에서 전화번호와 이메일을 찾는 프로그램
71★★★★★인터넷HTTP — 웹 서버에 물어보기로컬 서버에서 페이지를 가져오기
72★★★★★인터넷날씨: 웹에서 JSON 읽기로컬 HTTP 서버의 JSON을 가져와 미니 날씨 보고서 출력하기
73★★★★★인터넷네트워크: 서버 폴링로컬 서버의 status.json을 몇 초마다 다시 받아 변화를 보고하기
74★★★★★인터넷네트워크: 파일 받아 저장하기로컬 HTTP 서버에서 파일을 받아 진행 상황을 보여 주며 저장하기
75★★★★★인터넷웹: 페이지에서 링크 뽑아내기로컬 서버의 HTML 페이지를 받아 그 안의 링크를 모두 찾아 절대 주소로 보여 주기
76★★★★★인터넷네트워크: 미니 채팅로컬 HTTP 서버에서 메시지를 받아 미니 채팅처럼 보여 주기
77★★★★☆언어 만들기첫 컴파일러 — 아주 작은 언어add 2 3 같은 줄을 읽고 답을 출력하는 아주 작은 언어
78★★★★☆언어 만들기컴파일러: 표현식 언어2 + 3 * 4를 연산자 우선순위에 맞게 계산하는 아주 작은 계산기
79★★★★☆언어 만들기컴파일러: 토큰 읽기명령 줄을 토큰으로 나누고 실행을 보내는 프로그램
80★★★★★언어 만들기컴파일러: 식을 트리로 만들기식을 트리로 파싱하고 재귀로 평가해 우선순위를 지키는 계산기
81★★★★★언어 만들기컴파일러: 미니 언어에 함수 넣기def/return/호출을 가진 미니 언어를 Python으로 컴파일하고 실행하는 컴파일러
82★★★★★언어 만들기컴파일러: 작은 바이트코드 실행기간단한 명령을 단계 목록으로 컴파일하고 가상 머신처럼 한 단계씩 실행하기
83★★★★★언어 만들기컴파일러: 트리에서 바이트코드로식 트리를 납작한 명령 목록으로 컴파일하고 스택 가상 머신으로 실행하는 컴파일러
84★★★★★언어 만들기부트스트랩: NME가 아주 작은 언어를 컴파일NME로 쓴 미니 컴파일러
85★★★★★언어 만들기셀프호스트: NME가 NME를 실행say/set/while로 된 아주 작은 NME형 부분집합을 Python으로 컴파일하는 NME 프로그램
86★★★★★언어 만들기캡스톤: Python으로 컴파일하는 언어아주 작은 언어(say/set/add/while/end)를 읽어 Python 소스로 컴파일하고 파일로 저장한 뒤 실행하는 NME 프로그램
87★★★☆☆암호화폐암호화폐 장부 — 상태와 거래잔액·거래번호·수수료·발행량을 검증하는 작은 암호화폐 상태 장부
88★★★☆☆암호화폐작업증명 — 거래를 블록으로 채굴하기이전 블록 해시와 거래를 묶어 SHA-256 작업증명 블록 만들기
89★★★☆☆암호화폐거래 증명 — 지갑 소유와 재전송 방지공개값으로 거래 승인자를 검증하고 같은 거래의 재사용을 거부하기
90★★★☆☆암호화폐전체 사슬 검증 — 처음부터 다시 계산하기창세 상태부터 모든 거래와 블록을 재실행하는 단일 노드 검증기

다음 단계

  • 시작하기: 인사부터 숫자 게임까지 5분 길
  • 학습 과정: Hello World부터 컴파일러까지 일곱 프로젝트
  • 문법 안내: 세 단계의 정확한 규칙
  • 문법 목록: 쓸 수 있는 모든 표기를 한 표에 모은 목록
  • AI에게 건네는 프롬프트: 대화창에 붙여넣으면 AI가 NME를 쓸 수 있게 되는 글
  • 설치가 어렵다면 needmoreeasy.com 에서 바로 써 볼 수 있습니다. 휴대폰에서도 됩니다.

가이드 90편 전체

가이드 90편