NME 학습 가이드
짧은 가이드 90편입니다. 앞에서부터 순서대로 읽도록 만들었고, 여덟 부로 나뉩니다. 각 편은 한 가지를 가르치고, 마지막에 직접 해 볼 것과 배운 것을 정리합니다.
설치는 필요하지 않습니다. 코드 덩이마다 「실행해 보기」가 있어서 needmoreeasy.com의 쓰는 칸으로 그대로 옮겨 갑니다. 휴대폰에서도 됩니다. 여기 실린 프로그램은 전부 진짜 컴파일러로 확인한 것입니다.
난이도
- ★☆☆☆☆ (1/5) — 첫날. 문장 몇 줄이면 끝납니다.
- ★★☆☆☆ (2/5) — 조건과 반복이 섞입니다. 아직 문장형만으로 됩니다.
- ★★★☆☆ (3/5) — 프로그램 하나를 통째로 만듭니다.
- ★★★★☆ (4/5) — 초급 문법이나 Python이 섞입니다.
- ★★★★★ (5/5) — 거의 Python입니다.
별은 얼마나 어려운가이지 번호 순서가 아닙니다. 부가 바뀌면 그 주제에서 가장 쉬운 편부터 다시 시작하고, 같은 부 안에서도 문장형으로 다시 쓴 편은 그만큼 쉬워집니다.
문장형만으로 쓰인 편이 어디까지인지는 언제든 재 볼 수 있습니다:
python3 scripts/report-guide-tier.py --guides
순서대로 배우기
1부 — 문장으로 시작하기
프로그램을 한 번도 써 본 적 없는 사람을 위한 부분입니다. 문장만 쓰고, 한 편에 새로운 것 하나만 나옵니다.
- 01 — 인사: 첫 문장 말하기
- 02 — 이야기: 줄마다
말해줘를 쓰지 않기 - 03 — 이야기: 글자가 하나씩 나오게 하기
- 04 — 물어보기: 대화 나누기
- 05 — 저장: 값 넣어 두기
- 06 — 변경: 값 바꾸기
- 07 — 반복: 여러 번 반복하기
- 08 — 조건: 갈림길 선택
- 09 — 그리고/또는: 조건 합치기
- 10 — 동안: 조건이 참인 동안 반복
- 11 — 멈춤: 반복 멈추기
- 12 — 랜덤: 주사위와 선택
- 13 — 확률: 백 번에 몇 번
- 14 — 화면: 지우고, 줄 긋고, 상자에 담기
- 15 — 시간: 재기와 쿨타임
- 16 — 확인과 빌드: Python 보기
2부 — 만들어 보는 작은 프로그램들
1부를 끝낸 사람을 위한 부분입니다. 게임과 메뉴, 남겨 둘 만한 작은
프로젝트를 만듭니다. 스무 편 가운데 열여덟 편이 문장문법만으로 쓰여 있습니다 —
따옴표도 괄호도 등호도 나오지 않습니다. 남은 두 편은 목록의 목록이 필요한 26편과
날짜를 따옴표 안에 손으로 적는 36편입니다.
문장문법만으로 쓴 프로그램은 1부에 있습니다 — 1부의 코드에는 따옴표도 괄호도
등호도 한 번 나오지 않습니다(scripts/report-guide-tier.py로 재어 볼 수 있습니다).
- 17 — 단어 맞히기: 숨은 단어 게임
- 18 — 모험 — 작은 텍스트 게임
- 19 — 게임: 반응 속도 측정
- 20 — 아스키 아트 — 문자로 그리기
- 21 — 진행 — 얼마나 왔는지 보여 주기
- 22 — 터미널 메뉴 — 작은 TUI
- 23 — 최고 점수: 작은 프로젝트
- 24 — 퀴즈: 문제를 내고 채점하기
- 25 — 계산기: 물어보고 셈하기
- 26 — 게임: 틱택토
- 27 — 게임: 숨은 색 알아맞히기
- 28 — 게임: 규칙을 아는 상대
- 29 — 플레이리스트: 순서를 섞어서 듣기
- 30 — 상점: 재고와 잔액
- 31 — 은행: 넣고 빼고 내역 남기기
- 32 — 성적부: 이름마다 점수, 그리고 평균
- 33 — 습관 기록: 날짜마다 했는지 남기기
- 34 — 차트: 숫자를 막대로 보기
- 35 — 할 일 목록: 넣고 지우고 보기
- 36 — 일기: 오늘 날짜와 함께 남기기
3부 — 파일과 자료
프로그램이 끝난 뒤에도 내용이 남기를 바라는 사람을 위한 부분입니다. 파일·JSON·CSV·보고서를 다룹니다. 37·38·40·42·43번은 문장문법으로 쓰여 있습니다 — 다만 파일 이름에는 따옴표를 씁니다. 문장문법에서 따옴표를 쓰는 유일한 자리이고, 그 이유는 37번에 적어 두었습니다.
⚠ 이 부에서부터는 사이트에서 돌아가지 않습니다. 브라우저 안에는 파일을 둘 곳이 없습니다. 본인 컴퓨터에 설치하고 해 보세요.
- 37 — 파일: 저장하고 다시 읽기
- 38 — 이름 목록: 파일에서 줄 단위로 읽기
- 39 — JSON: 데이터 저장하고 불러오기
- 40 — CSV: 줄마다 칸이 여럿
- 41 — 표: 작은 주소록
- 42 — 단어 세기: 어느 말이 몇 번 나왔나
- 43 — 글 통계: 글자 수, 낱말 수, 가장 긴 낱말
- 44 — 기록: 사건 기록
- 45 — 묶기: 범주별 데이터
- 46 — 상위 열: 기록 순위
- 47 — 검색 — JSON에서 찾기
- 48 — 파일: 여러 파일 처리
- 49 — 보고서 — 요약 파일 쓰기
- 50 — 편집기 — 아주 작은 텍스트 에디터
4부 — 목록과 글자를 더 다루기
더 긴 목록과 더 긴 글을 다루려는 사람을 위한 부분입니다. 정렬·집합·격자·찾는 순서를 배웁니다.
- 51 — 글자: 세고, 나누고, 다시 잇기
- 52 — 정렬 — 목록을 순서대로
- 53 — 집합: 중복 없는 값
- 54 — 병합: 두 목록 합치기
- 55 — 격자: 목록의 판
- 56 — 버블 정렬 — 첫 알고리즘
- 57 — 이진 탐색 — 절반씩 찾기
- 58 — 데이터: 목록 통계
5부 — 프로그램이 커질 때: 오류·시험·파일 나누기
같은 일을 더 짧게 쓰고 더 큰 프로그램을 만들려는 사람을 위한 부분입니다. 초급 문법과 고급 문법, 모듈과 도구를 다룹니다.
- 59 — 예외: 문제 다루기
- 60 — 테스트: 내가 쓴 함수 확인하기
- 61 — 모듈: 프로그램을 여러 파일로 나누기
- 62 — 모듈: 여러 파일 프로젝트
- 63 — 도구: 명령 줄에서 말 받기
- 64 — Python 패키지: 표준 라이브러리와 설치된 라이브러리
- 65 — 변환: Python을 NME로
- 66 — 네이티브: 기계어로 컴파일하기
6부 — 자료 분석과 인터넷
이해해야 할 자료가 있거나 서버에 물어볼 일이 있는 사람을 위한 부분입니다. 통계·패턴·네트워크를 다룹니다.
- 67 — 통계: 데이터 이해
- 68 — 비교: 두 숫자 묶음
- 69 — 데이터: 한 달 온도 분석하기
- 70 — 정규식: 패턴 찾기
- 71 — HTTP — 웹 서버에 물어보기
- 72 — 날씨: 웹에서 JSON 읽기
- 73 — 네트워크: 서버 폴링
- 74 — 네트워크: 파일 받아 저장하기
- 75 — 웹: 페이지에서 링크 뽑아내기
- 76 — 네트워크: 미니 채팅
7부 — 언어를 직접 만들어 보기
언어가 어떻게 만들어지는지 알고 싶은 사람을 위한 부분입니다. 컴파일러를 한 단계씩 직접 만듭니다.
- 77 — 첫 컴파일러 — 아주 작은 언어
- 78 — 컴파일러: 표현식 언어
- 79 — 컴파일러: 토큰 읽기
- 80 — 컴파일러: 식을 트리로 만들기
- 81 — 컴파일러: 미니 언어에 함수 넣기
- 82 — 컴파일러: 작은 바이트코드 실행기
- 83 — 컴파일러: 트리에서 바이트코드로
- 84 — 부트스트랩: NME가 아주 작은 언어를 컴파일
- 85 — 셀프호스트: NME가 NME를 실행
- 86 — 캡스톤: Python으로 컴파일하는 언어
8부 — 암호화폐
암호화폐가 실제로 무엇인지 보려는 사람을 위한 부분입니다. 장부를 직접 만들고 직접 검증합니다.
- 87 — 암호화폐 장부 — 상태와 거래
- 88 — 작업증명 — 거래를 블록으로 채굴하기
- 89 — 거래 증명 — 지갑 소유와 재전송 방지
- 90 — 전체 사슬 검증 — 처음부터 다시 계산하기
주제별 찾아보기
- 첫걸음:01020304050607
- 고르기와 반복:08091011
- 무작위와 확률: 12, 13, 29
- 화면과 시간:14202134
- 도구 다루기:1516636566
- 게임:171924262728
- 프로젝트:1822232530313233354950
- 파일:36373839404448
- 자료 다루기:414546475458676869
- 목록과 글:4243515253555657
- 프로그램이 커질 때:5960616264
- 인터넷:70717273747576
- 언어 만들기:77787980818283848586
- 암호화폐:87888990
전체 목록
| # | 난이도 | 주제 | 제목 | 결과물 |
|---|---|---|---|---|
| 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편 전체
- 01 — 인사: 첫 문장 말하기첫걸음★☆☆☆☆
- 02 — 이야기: 줄마다 말해줘를 쓰지 않기첫걸음★☆☆☆☆
- 03 — 이야기: 글자가 하나씩 나오게 하기첫걸음★☆☆☆☆
- 04 — 물어보기: 대화 나누기첫걸음★☆☆☆☆
- 05 — 저장: 값 넣어 두기첫걸음★☆☆☆☆
- 06 — 변경: 값 바꾸기첫걸음★☆☆☆☆
- 07 — 반복: 여러 번 반복하기첫걸음★★☆☆☆
- 08 — 조건: 갈림길 선택고르기와 반복★★☆☆☆
- 09 — 그리고/또는: 조건 합치기고르기와 반복★★☆☆☆
- 10 — 동안: 조건이 참인 동안 반복고르기와 반복★★☆☆☆
- 11 — 멈춤: 반복 멈추기고르기와 반복★★☆☆☆
- 12 — 랜덤: 주사위와 선택무작위와 확률★★☆☆☆
- 13 — 확률: 백 번에 몇 번무작위와 확률★★☆☆☆
- 14 — 화면: 지우고, 줄 긋고, 상자에 담기화면과 시간★★☆☆☆
- 15 — 시간: 재기와 쿨타임도구 다루기★★☆☆☆
- 16 — 확인과 빌드: 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 — 기록: 사건 기록파일★★★★★
- 45 — 묶기: 범주별 데이터자료 다루기★★★★★
- 46 — 상위 열: 기록 순위자료 다루기★★★★★
- 47 — 검색 — JSON에서 찾기자료 다루기★★★★★
- 48 — 파일: 여러 파일 처리파일★★★★★
- 49 — 보고서 — 요약 파일 쓰기프로젝트★★★★★
- 50 — 편집기 — 아주 작은 텍스트 에디터프로젝트★★★★★
- 51 — 글자: 세고, 나누고, 다시 잇기목록과 글★★★☆☆
- 52 — 정렬 — 목록을 순서대로목록과 글★★★☆☆
- 53 — 집합: 중복 없는 값목록과 글★★★★★
- 54 — 병합: 두 목록 합치기자료 다루기★★★★★
- 55 — 격자: 목록의 판목록과 글★★★★★
- 56 — 버블 정렬 — 첫 알고리즘목록과 글★★★★★
- 57 — 이진 탐색 — 절반씩 찾기목록과 글★★★★★
- 58 — 데이터: 목록 통계자료 다루기★★★★★
- 59 — 예외: 문제 다루기프로그램이 커질 때★★★★☆
- 60 — 테스트: 내가 쓴 함수 확인하기프로그램이 커질 때★★★★☆
- 61 — 모듈: 프로그램을 여러 파일로 나누기프로그램이 커질 때★★★★☆
- 62 — 모듈: 여러 파일 프로젝트프로그램이 커질 때★★★★☆
- 63 — 도구: 명령 줄에서 말 받기도구 다루기★★★★☆
- 64 — Python 패키지: 표준 라이브러리와 설치된 라이브러리프로그램이 커질 때★★★★☆
- 65 — 변환: Python을 NME로도구 다루기★★★★☆
- 66 — 네이티브: 기계어로 컴파일하기도구 다루기★★★★☆
- 67 — 통계: 데이터 이해자료 다루기★★★★★
- 68 — 비교: 두 숫자 묶음자료 다루기★★★★★
- 69 — 데이터: 한 달 온도 분석하기자료 다루기★★★★★
- 70 — 정규식: 패턴 찾기인터넷★★★★★
- 71 — HTTP — 웹 서버에 물어보기인터넷★★★★★
- 72 — 날씨: 웹에서 JSON 읽기인터넷★★★★★
- 73 — 네트워크: 서버 폴링인터넷★★★★★
- 74 — 네트워크: 파일 받아 저장하기인터넷★★★★★
- 75 — 웹: 페이지에서 링크 뽑아내기인터넷★★★★★
- 76 — 네트워크: 미니 채팅인터넷★★★★★
- 77 — 첫 컴파일러 — 아주 작은 언어언어 만들기★★★★☆
- 78 — 컴파일러: 표현식 언어언어 만들기★★★★☆
- 79 — 컴파일러: 토큰 읽기언어 만들기★★★★☆
- 80 — 컴파일러: 식을 트리로 만들기언어 만들기★★★★★
- 81 — 컴파일러: 미니 언어에 함수 넣기언어 만들기★★★★★
- 82 — 컴파일러: 작은 바이트코드 실행기언어 만들기★★★★★
- 83 — 컴파일러: 트리에서 바이트코드로언어 만들기★★★★★
- 84 — 부트스트랩: NME가 아주 작은 언어를 컴파일언어 만들기★★★★★
- 85 — 셀프호스트: NME가 NME를 실행언어 만들기★★★★★
- 86 — 캡스톤: Python으로 컴파일하는 언어언어 만들기★★★★★
- 87 — 암호화폐 장부 — 상태와 거래암호화폐★★★☆☆
- 88 — 작업증명 — 거래를 블록으로 채굴하기암호화폐★★★☆☆
- 89 — 거래 증명 — 지갑 소유와 재전송 방지암호화폐★★★☆☆
- 90 — 전체 사슬 검증 — 처음부터 다시 계산하기암호화폐★★★☆☆