Python - 파이썬 코딩 독학하기

글을 작성한 이유

최근 코딩, 특히 파이썬에 대해 물어보는 사람이 많아졌다. 다양한 이유가 있겠지만 인공지능의 영향이 크지 않을까 싶다.

다들 같은 생각인 거 같다...

그래서 파이썬 독학에 대한 모든 내용을 담으려 한다. 

필자는 고등학교때 문과를 나와서 현재 공대를 다니고 있다. 수능을 마치고 독학으로 코딩을 공부했다. 직접 독학으로 깨져봤기 때문에 독학러의 마음을 잘 안다. 현재는 전공생으로 파이썬(Python)을 깊이 있게 공부하고 있다. 이 글이 정답은 아니다. 하지만 분명 도움이 될 거라고 생각한다. 


프로그래밍 언어

파이썬(Python)프로그래밍 언어다. 프로그래밍 언어는 사람과 컴퓨터가 소통하는 수단이다. 말 그대로 언어다.

  • 한국어: 'Hello world!'라고 출력해 줘.
  • 영어: Print 'Hello world!'.
  • 파이썬: print('Hello world!')

인간의 언어와 동일하게 문법(syntax)이 있고, 단어(keyword)가 있다. 파이썬은 언어라는 점을 꼭 기억하자.


사용 분야

주로 인공지능(AI), 백엔드, 데이터 분석, 업무 자동화, 크롤링 또는 다른 언어를 배우기 위한 디딤돌로 사용한다. 최근 핫한 인공지능/ 데이터 분야에서 파이썬은 필수다. 또 백엔드(Backend)에도 쓰이는데, 쉽게 말해 서버(컴퓨터)를 굴리는 데 쓰인다. 쉬운 난이도 덕분에 입문용 언어로도 주목받고 있다. 

각 언어는 장단점이 있고, 현업에서 사용하는 분야가 정해져 있다. 만약 학습 목표가 위 분야와 다르다면 고민해 봐야 한다. 예를 들어, 예쁘장한 앱이 만들고 싶다면 나가서 다른 글(Swift, Kotlin, Flutter 등)을 찾는 게 나을지도 모른다. 


특징 (장단점)

철학: Zen-of-Python

파이썬은 단순한 코드를 추구한다. 갑자기 뭔 철학인가 싶겠지만 진정하고 읽어보자.

Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts.
... (생략) ...
- Zen of Python

PEP20에 적힌 내용이다. 해석하면 이쁘고, 명확하고, 심플하고, 단순하고, 짧고, 읽기 좋게 적으란 말이다. 파이썬은 애초에 간단하고 쉬운 코드를 지향한다. 코드를 보면 다른 언어에 비해 훨씬 읽기 편하다.

# 파이썬
print("Hello World")
// Go
package main

import "fmt"

func main() {
	fmt.Println("Hello World")
}
// C++
#include <iostream> 
using namespace std;
 
int main(void)
{
	cout << "Hello World" << endl;
	return 0;
}

Python, Go, C++ 3 종류의 언어로 "Hello World"를 출력하는 코드다. 누가 봐도 파이썬이 제일 단순하다.

쉬운 난이도

난이도가 아주 낮다. 고도로 발전한 파이썬 코드는 영어와 구분할 수 없다. 아래 코드는 성적을 입력하면 특정 대학 점수로 환산한다. 그리고 합격 여부를 웹사이트(HTML)로 보여준다. 실제 코드다.

from function import Simulator, HTMLContent
# function으로부터 Simulator, HTMLContent를 불러와라

simulator = Simulator()
# Simulator를 이제 simulator(시뮬레이터)라고 부르겠다.
grade = simulator.get_grades()
# 시뮬레이터에서 grades(성적)을 가져와 grade에 넣어라.

html = HTMLContent(grade)
# grade(성적)을 HTML 컨텐츠로 바꾸고 html에 저장해라.
html.open()
# html을 열어라.

#으로 된 한글 해석을 보면 쉽게 이해할 수 있다. 5줄의 코드로 성적 시뮬레이션을 돌릴 수 있다. 

안 좋은 소식은 사실 뒤에 많은 코드들이 숨겨져 있다는 거다. 좋은 소식은 우리가 그걸 다 알 필요 없다는 거다. 다음 챕터인 라이브러리 부분에서 자세히 이야기하겠다.

다양한 라이브러리

라이브러리(library)로 모든 게 가능하다. 라이브러리는 이미 누군가가 만들어 놓은 밀키트라고 생각하면 된다. 우리는 도서관에서(?) 밀키트를 빌려와 입맛대로 조리하면 끝. 몇 가지 예시를 적어보았다.

  • Pytube: 유튜브에서 영상, 음원을 다운로드한다.
  • Pytorch: 인공지능 개발에 사용된다.
  • Pygame: 간단한 미니게임을 만들 수 있다.

그 외에도 수많은 라이브러리가 만들어지고 있다. 물론 공짜다. 고급지게 오픈 소r스(Open-Source)라고 부른다.

느린 실행 속도

실행 속도는 다른 언어보다 느리다. 하지만 입문 수준에서 체감할 정도는 아니다. 노트북(intel i5-10)으로 더하기(+)를 1억 번 하는데 6초 걸린다. 속도를 보완해 줄 여러 기법도 있으니 걱정할 필요 없다. 

여담으로 입문자 기준 파이썬이 제일 빠를지도 모른다. 진심으로. 1~N까지 숫자를 출력하는 문제가 있다. 언어별 실행 시간이다. 

언어 실행 시간
숙련된 C++ 4ms
숙련된 Python 52ms
Python 초보 96ms
C++ 초보 시간초과

실행 시간이 1초를 넘어가면 "시간초과"로 통과하지 못한다. 실제 C++을 공부할 때 일어난 일이다. 그러니까 속도 걱정 말고 일단 해보자.


독학 방법 

파이썬은 충분히 독학할 수 있다. 필자는 오히려 독학을 추천한다. 

프로그래밍은 원래 깨지고 구르면서 배우는 과목이다. 1차 목표는 강의 하나를 끝까지 듣는 거다. 그리고 강의에서 배운 걸 적용해봐야 한다. 응용하는 과정에서 구글링(구글 검색) 실력을 키워야 한다. 모르면 찾고 이해하고 적용하고 또 틀리고...이게 정상이다. 많이 틀릴수록 잘하고 있는 거다. 모를 땐 구글에 영어로 검색하는 게 가장 좋고, 안 되면 한국어도 괜찮다. 진짜 모르겠으면 ChatGPT한테라도 물어보자. 

제일 나쁜 경우는 책과 펜으로 공부하는 사람이다. 코딩은 암기과목이 아니다. 파이썬은 언어라고 얘기했다. 수능 영어 열심히 했지만 스피킹 안 되는 사람 많지 않은가? 파이썬도 다를 거 없다. 안 쓰면 안 는다. 부딪히면서 배우는 게 가장 확실한 방법이다.

가장 좋은 건 직접 만들어보는 거다. 허접한 거라도 괜찮다. 원래 모두가 그렇게 시작한다. 만드는 과정에서 배우고 성장하면 그게 좋은 프로젝트다. 여러분의 자신감을 위해 썰 하나 풀어보겠다. 파이썬 한 지 1년 정도 되는 시점에 가계부 프로그램을 만든 적이 있다. 당시에는 정말 엄청난 걸 만들었다고 생각했다. 주변 친구들에게 자랑하고 메일도 뿌렸다. 그래서 어떻게 됐을까? 아무도 안 쓴다. 나도 안 쓴다. 지금 보면 조잡하기 그지없다. 그런데 그 가계부를 통해 많은 걸 배웠다. 그렇게 2번째에 만든 프로그램이 Palette 2이다.

Palette 2

화려하진 않지만 나름 구색을 갖추기 시작했다. 만약 그 허접한 가계부를 만들지 않았다면 이 프로젝트도 없었다. 그러니까 두려워하지 말고 일단 만들자. 그게 실력을 키우는 방법이다.


학습 자료

강의: 나도코딩

나도코딩: 파이썬 강의

가장 기초적인 파이썬 강의다. 주변에서 "뭘로 공부할까?" 물어보면 항상 나도코딩님 강의를 추천하다. 무료 강의지만 구성과 퀄리티가 상당히 좋다. 

파이썬 소개: 코딩하는거니

코딩하는거니: 파이썬(Python) 언어소개!  탄생배경 그리고 특징

파이썬 탄생 신화다. 입문할 때 재미로 보면 좋다. 

PEP8

 

PEP 8 – Style Guide for Python Code | peps.python.org

PEP 8 – Style Guide for Python Code Author: Guido van Rossum , Barry Warsaw , Alyssa Coghlan Status: Active Type: Process Created: 05-Jul-2001 Post-History: 05-Jul-2001, 01-Aug-2013 Table of Contents This document gives coding conventions for the Python

peps.python.org

PEP8은 파이썬 공식 코드 스타일이 적힌 가이드다. 파이썬에서 사용하는 모든 개념을 훑어볼 수 있는 자료다. 읽으면서 모르는 개념이 계속 등장할 거다. 그럼 찾아보고 정리하면서 지식을 넓힐 수 있다.  가장 좋은 건 원문으로 읽는 거지만, 한국어 버전도 좋다. PEP8을 추천하는 사람은 흔치 않다. 심지어 존재를 모르는 전공생도 꽤 있다. 그러니 이 문서를 다 이해하면 어디 가서 파이썬 좀 친다고 말할 수 있다. 참고로 내용이 쉽지는 않으니 기초를 배우고 읽는 게 좋다.


파이썬 버전

(23.10.23 기준) 3.10.x 버전 이상을 추천한다. 우선 크게 Python2와 Python3가 있다. 우리가 말하는 '파이썬'은 Python3이다.  Python3도 3.1, 3.2 ... 등 다양한 버전이 있다. 그중 3.10.x 이상이면 큰 문제없이 쓸 수 있다. 모르겠으면 그냥 최신 버전(latest version)이라고 적힌 거 쓰면 된다.

입문자에게 중요한 건 "내 코드가 잘 돌아가는가"이다. 코드를 정상적으로 썼는데 버전이 맞지 않아 안 돌아갈 수 있다. 그럼 사람도 함께 돌아버린다. 입문자라면 원인을 찾기도 쉽지 않다. 따라서 알맞은 버전을 사용하는 게 중요하다. 왜 하필 3.10인지 알 필요 없지만, 궁금한 사람을 위해 짧게 남겨두겠다.

Python 3.6에서 F-string이 추가됐다. 그리고 Numeric Literals에 Underscores가 가능해졌다. 따라서 안정적으로 사용하려면 최소 3.6 버전을 사용해야 된다. 3.10에서는 Structural Pattern Matching을 처음 도입했고, context managers를 묶어 하나의 with 구문에서 사용할 수 있다. 그리고 3.10부터 에러 메시지가 개선되기 시작했다. 파이썬이 친절하게 어디서 어떻게 틀렸는지 알려준다. 그래서 3.10을 권장한다. 그 이상은 당연히 문제없이 사용 가능하다.

로드맵

기초적인 내용은 강의/ 책 목차를 따르면 된다. 보통 class랑 package 다룰 정도까지 배운다.

더 공부해보고 싶다면 아래 키워드 중 모르는 개념을 찾아보자.

f-String, 깊은 복사/ 얕은 복사, Packing/ Unpacking, Generator/ Iterator, comprehension, 내장함수, Errors, Magic-methods, Private-method, Decorator, Type-hint, 가상 환경, Jupyter-notebook, match-case(3.10), Docstring, list.append 시간 복잡도, Formatter(black)...

추천 프로젝트

난이도는 주관적인 지표다. 참고용으로만 보자.

tkinter로 계산기 만들기

(난이도 하) tkinter로 계산기, 가계부 등 다양한 프로그램을 만들 수 있다. 

  • 라이브러리 import 해보기
  • 함수 만들어 사용해 보기
  • 객체로 만들어보기 (심화)

망한 가계부 썰 풀 때 보여준 그림이 tkinter 결과물이다. tkinter는 GUI(화면)를 만드는 라이브러리다. 계산기는 예시일 뿐, 다양한 아이디어를 결합해 나만의 프로그램을 만들 수 있다.

날씨 크롤링하기

(난이도 중) 웹 크롤링은 파이썬 입문서에서 자주 다루는 내용이다.

  • 가상환경 생성 및 사용
  • pip로 외부라이브러리 받기
  • DOM 분석하기 (심화)
기상청: https://www.weather.go.kr/weather/observation/currentweather.jsp

날씨 말고 주식 정보, 의류 이미지, 댓글 등 다양한 크롤링을 시도해 볼 수 있다.

데이터 시각화

(난이도 상) 데이터나 인공지능에 관심 있다면 데이터 시각화에 도전해 보자.

시각화 예시

  • numpy, pandas로 데이터 처리
  • matplotlib로 데이터 시각화
  • scipy로 데이터 분석 (심화)

데이터를 가공하고 시각화하는 작업이다. 이곳을 참고해도 된다.


질문

자주 받았던 질문 목록이다. 만약 다른 질문 있다면 댓글 부탁드립니다.

책 사야 돼?

일단 강의로 해보고 필요하겠다 싶으면 그때 사도 늦지 않다. 생각보다 책이 중요하지 않다.

C 언어 해야 돼?

도망갈 수 없는 사람은 C, 아니면 파이썬(Python)하면 된다. C는 어렵다. 하다가 도망치고 싶을 수 있다. 그래서 컴공 새내기처럼 도망갈 곳이 없는 사람은 C부터 해보는 것도 나쁘지 않다. 그게 아니라면 파이썬으로 충분하다. C는 나중에 필요할 때 해도 된다. 

코딩은 재능인가?

코딩은 재능보다 적성이다. 파이썬 잘하는 사람은 천재보다 씹덕에 가깝다. 그냥 내 생각이다. 해보고 재밌다 싶으면 그게 타고난 거라고 생각한다.

영어 중요해?

잘하면 잘할수록 편하다. 심화 단계로 갈수록 영어가 필요해진다. 나중에는 영어 강의, 영어 블로그, 영어 논문 밖에 안 남는다. 프로그래밍을 깊이 있게 배울 생각이라면 영어 공부도 필요하다. 

수학 잘해야 돼?

사칙연산 알면 된다. $5 + 2^3 \times \cfrac{7}{4}$ 풀 수 있으면 문제없다. 참고로 답은 19다. 대신 인공지능 같이 특수한 분야라면 수학이 중요하다. 이 글에서 적기에는 내용이 많으니 따로 다루겠다. 궁금하면 여기(블로그) 한번 구경해 보자. 

에디터 뭐 써?

"보고서 쓸 건데 메모장, 한글, 워드 중에 뭐 써야 돼?"랑 같은 질문이다. 결론만 말하면 Visual Studio Code(VSCode)가 짱이다. 반박시 님말이 맞음. 사실 그냥 취향 차이다. 대표적으로 VSCode, Pycharm, Spider가 있다. 필자는 다 써봤지만 역시 근본 VSCode가 가장 잘 맞았다. Pycharm도 좋은 에디터지만 유료다. 취향이 독특하면 윈도우 메모장 써도 된다. 진짜 된다.

파이썬 꼭 설치해야 돼?

만약 설치할 수 없는 상황이라면, 온라인 IDE를 써도 된다. 코드를 저장하고 싶다면 구름 IDE가 있다. 만약 저장 안 하고, 짤막한 코드를 돌린다면 One Compiler 써도 된다.

그래도 제일 좋은 건 직접 설치해서 쓰는 거다. 온라인 환경은 한계가 있다.


마무리하며

파이썬이 쉽다고는 하지만 프로그래밍 자체가 취향을 많이 타는 일이다. 누군가는 좋아서 환장하고, 누군가는 짜증 나서 못해먹겠다고 한다. 당연히 재밌어하는 사람이 살아남는다. 실력도 빨리 늘고, 결과물도 좋다. 그러니 너무 압박을 가지고 공부할 필요 없다. 이것저것 만지면서 터트려 보고 즐기는 게 중요하다. 쉽지 않은 여행이 되겠지만 꼭 성공하길 바란다. 

👏 짤 출처: @waterglasstoon (데브 경수님)