- 파이썬으로 코딩(프로그래밍)에 입문하시고자 하는 분들에게, 같은 초보의 입장에서 같이 공부하고, 지식과 정보 공유
- 파이썬의 기초 문법부터 실제 프로젝트까지 전반적으로 이해하고 익힐 수 있도록 중장기적인 파이썬 강의 콘텐츠 구성
파이썬 강의를 시작하면서
사람은 죽을 때까지 공부해야 한다는 말이 있다.
취미로, 취업을 위해, 직무를 위해서이거나 또는 무언가에 집중하기 위해서 등 공부하고 배움에도 다양한 이유가 있겠지만, 근본적으로는 사람의 존재 가치를 높이고 자아실현을 위해서 일 것이다.
나는 컴퓨터 설계 분야에서 지금까지 활동하면서 많은 경험과 실력을 쌓았지만, 새로운 분야에 대한 도전 해보고자 하는 생각을 항상 가지고 있었고, 그중에 파이썬이라는 프로그래밍 언어를 알았지만, 몇 번 도전과 시도에서도 제대로 공부하지도 못하고 번번이 실패로 끝났다.
이제 더는 미룰 수 없다는 생각에 이 블로그를 통해, 그때그때 공부한 내용을 강의 형식으로 포스팅하면서, 나와 같은 심정으로 공부하는 분들과 정보를 공유하고, 서로 발전할 수 있는 계기가 되었으면 하고 첫 글을 작성해 본다.
파이썬을 배워야 하는 이유?
이미 C/C++, C#, Java, .NET, Visual Basic, PHP, APS, JavaScript 등 다양한 개발 언어들은 파이썬 이전에 많이 있었고, 또 많은 개발자와 사용자 층을 가지고 있는데, 꼭 파이썬을 공부하고 배워야 하는 이유는 무엇일까?
ChatGPT에 물어보면, 간결한 문법과 높은 생성성, 광범위한 응용 가능성, 빠른 개발 속도, 데이터 과학 및 인공지능(AI)과 머신러닝(ML) 분야에서의 강력한 도구, 커뮤니티와 생태계의 방대함, 다른 개발 언어와의 통합성, 자동화 및 스크립팅의 강점, 다양한 플랫폼에서의 범용성, 미래지향적인 언어라고 이유를 설명한다.
파이썬은 다른 개발 언어보다 훨씬 수월하게(?) 배우기 쉽고, 다양한 분야를 지원하는 개발 워크프레임을 제공하여, 개발자가 사용 및 활용하기 쉽도록 하고, 대부분 오픈소스로 큰 비용을 들이지 않고도 충분히 활용성 높은 고수준의 개발 환경을 제공하는 인터프리터 기반 개발 언어라는 것이다.
물론, 파이썬 자체가 만능은 아니기 때문에, 임베디드/IoT, 게임 개발, 고성능/대규모 어플케이션이나 모바일 앱, 정교한 웹 개발 등 관련해서는 접합하지 않거나 약한 모습을 가지고 있지만, 앞에서 언급한 각종 지원 도구들을 이용해서 어느 정도 구현하고, 다른 개발 언어와 결합해서 활용할 수 있을 정도로 제공하고 있다.
중요한 것은 파이썬은 다른 개발 언어보다 진화의 속도가 굉장히 빠르다는 것이다.
파이썬 자체가 오픈소스이고, C언어를 기반으로 만들어진 언어체계이기 때문에, 전 세계의 다양한 개발자들이 파이썬에서 사용할 수 있는 각종 플랫폼과 프레임워크를 지속적으로 개발하고, 보완된 내용의 라이브러리들을 제공하고 있기 때문에, 한번 잘 익혀두면 두고두고 활용할 수 있는 분야가 많기 때문일 수 있다.
파이썬은 인터프리터 체계의 프로그래밍 언어로 컴파일이 필요한 다른 개발언어와는 다르게 직관적으로 코드를 들여다볼 수 있다는 점도 장점이다.
인터프리터 란?
소스 코드를 한 줄씩 일고, 그때그때 실행하는 프로그램 언어를 말하는 것으로, 소스 코드 읽기 -> 구문 분석 -> 실행 -> 반복 형식으로 인터프리터로 작성한 소스 코드가 동작한다.
인터프리터는 소스 코드를 한 줄씩 즉시 실행하기 때문에 실행 속도가 빠르고, 디버깅(오류 및 문제점 해결)이 편리하고, 개발 과정에서 즉각적인 테스트와 피드백을 얻을 수 있어 개발 과정에서의 속도가 빠르고, 다양한 운영체제에서도 동작할 있는 장점이 있지만, 컴파일된 코드와는 달리 매번 소스 코드를 해석하고 실행하기 때문에 반복적인 코드나 복잡한 연산등 컴파일러 기반의 언어보다 느리고 성능 저하라는 한계도 있고, 코드를 한 줄씩 동작되는 관계로 해당 코드가 실행될 때 오류를 감지할 수 있어 사전에 발생하는 오류를 찾아내는 것이 상대적으로 어렵다는 단점이 있다.
성능을 중요시하는 시스템이나 애플케이션 개발에서는 인터프리터보다는 컴파일러 방식의 개발 언어가 적합하다고 볼 수 있다.
컴파일러 란?
작성된 소스 코드를 한 번에 읽어 들여, 실행 가능하도록 바이너리 코드로 변환하는 별도의 프로그램을 말하는 것으로, 대부분 고수준의 개발 언어를 사람은 알아볼 수 없는 저수준 기계어로 변환하여 컴퓨터가 직접 실행시킬 수 있도록 만들어 주는 것이다.
대표적으로는 C/C++, JAVA, GO, Rust와 같은 개발 언어에서 작성된 코드를 사용하기 위해서 컴파일러로 컴파일함으로써 우리가 사용하는 실행 파일이 만들어진다.
컴파일러는 소스 코드를 한 번에 모두 분석하고 변환하기 때문에 컴파일이 완료되면 빠른 실행이 가능하고, 컴파일 과정에서 코드의 문법이나 논리 구조의 오류들을 사전에 모두 잡아낼 수 있는 장점이 있지만, 컴파일 과정이 생각보다 시간을 많이 잡아먹는다는 단점도 있다.
컴파일과 인터프리터의 차이
컴파일러 | 인터프리터 |
소스 코드를 한 번에 전체를 기계어로 변환 | 소스 코드를 한 줄씩 읽어 그때그때 실행 |
실행 파일을 생성하여 빠르게 실행 가능 | 매번 실행할 때마다 소스 코드를 해석 |
실행 전에 오류를 모드 잡아낼 수 있음 | 코드 실행 중에 오류가 발견됨 |
컴파일 과정이 오래 걸릴 수 있음 | 즉시 실행할 수 있지만, 속도가 느릴 수 있음 |
성능이 높은 프로그램 개발에 적합 | 코드 이해가 쉬워 개발 및 디버깅에 유리 |
파이썬 기초를 넘기 위해서 필요한 것?
새로운 분야에 도전하시고자 하시는 분들이 계시다면, 아래 몇몇 가지의 사항들은 항상 염두에 두고 시작하자.
그리고, 절대 포기하지 않겠다는 마음가짐으로 하루하루 새롭게 마음을 다잡을 수 있도록 하자.
정확하고 분명한 목적과 목표를 설정해 둔다.
이것은 새로운 분야에 도전함에 있어서 정말 중요한 설정이다.
나는 파이썬을 배워서, "AI프로그램을 만들 것이다", "빅데이터 처리 프로그램을 만들 것이다", "웹 어플케이션을 만들어 볼 것이다", "각종 자동 프로그램을 만들 것이다" 등과 같이 거창하고, 최종적인 목표를 우선 설정해 두고, 입문부터 최종 목표치까지의 단계별로 세세한 목적과 목표를 새워두고 실현해 나갈 수 있어야, 재미도 있고 성취에 대한 만족과 자신감이 생기고 계속하고 싶다는 의욕도 더 생긴다.
취업이나 직무를 위해서 공부하는 것은 그 자체가 목적이 있지만, "남들이 하니까 한번 해보고 싶다"라는 생각으로 무작정 입문했지만, 목적과 목표가 없으면 금방 싫증 나고, 재미도 없어지기 때문에 대부분은 쉽게 포기하게 된다.
당신은 성격 급한 대한민국 사람?
다른 분야도 마찬가지겠지만, 프로그래밍 분야는 오로지 자기 자신과의 싸움이고, 많은 시간과 노력이 동반돼야 하는 분야이고, 일명 장비빨이 통하지 않는 분야이다.
코딩에 있어서 문법은 영어단어 공부하듯이 하나하나 정성 들여 기초문법을 외워서 공부하는 분야는 아니지만, 해당 문법체계의 흐름을 이해하고, 분석하기 위해서는 계속되는 복습과 반복연습, 그리고 수시로 발생하는 각종 오류를 해결하는 과정은 필수적으로 따라오는 것이기 때문에, 지겨워하거나 답답하다고 해서 등한시해서는 안된다고 생각한다.
앞에 재미없는 부분은 구렁이 담 넘듯이 넘어가고, 재미있어 보이는 부분만 찾아간다면 순간의 재미는 있겠지만, 그것으로 끝이 되어 버리는 경우를 많이 봤고, 일회용으로 한번 결과를 만들고 그만두겠다면 시작도 할 필요 없이, 유명한 ChatGPT의 도움을 받으면 금방 하나의 프로그램을 완성할 수 있을 것이다.^^
복붙과 코드를 따라 하되, 내 것으로 만들어야 한다.
코딩을 처음 접하거나, 혼자 스스로 코딩할 능력이 되지 못하시는 분들은 대부분 제공되는 코드를 따라 입력하거나, 드래그 후, 복사/붙여 넣기(일명 복붙)을 많이 할 것이며, 특히 복사/붙여 넣기 같은 경우는 입문자뿐만 아니라, 실무에서도 필수적으로 사용하고 있기 때문에, 나도 적극적으로 추천하지만, 단순히 타이핑과 복사/붙여 넣기를 해서 결과물만 보면서 공부하는 방법은 솔직히 말해, 코딩 공부에 전혀 도움이 되지도 않고, 자칫 흥미도 잃어버리거나, 이게 무슨 짓일까 하는 현타가 오기도 한다.
하지만, 남의 것을 내 것으로 만든다는 것은 단순히, 복사/붙여 넣기나 책이나 블로그의 내용을 따라서 입력만으로 끝내는 것이 아니라, 이것들의 흐름을 이해하고 분석하는 것이 중요한 부분인데, 복붙 또는 따라한 코드를 전문가처럼 코드의 흐름이나 순서를 변경하라는 것이 아니라, 코드에 사용된 각종 사용자 이름(특히 변수명)을 직접 변경해서 바꿔보는 것이다.
참고한 코드의 변수명만 변경해 보기 시작하더라도, 해당 코드의 흐름이 눈에 보이기 시작하고, 어떻게 흘러가는지 느껴지게 되며, 가장 중요한 것은 비록 남의 것을 참고했지만, 변수, 클래스명, 사용자 함수명 등 이름을 바꾸는 순간 내가 작성한 코드가 되어 버리는 마법이 발생하는 것을 느낄 수 있지만, 아무 의미 없는 이름이 아닌 해당 코드나 흐름에 맞는 이름을 정하여 변경하는 연습을 많이 하는 것을 추천한다.
이는, 가장 중요한 것은 모든 프로그래머의 공통적인 어려워하는 이름 정하는 능력을 향상할 수 있다.
그리고, 입문 단계에서는 복사/붙여 넣기보다는 직접 따라서 타이핑해 보는 것을 적극적으로 추천한다.
복붙보다는 타이핑?
코드를 하나씩 타이핑하면, 자연스럽게 문법이 하는 동작이나 작동이 보이기 시작하고, 전반적인 코드의 흐름도 눈에 보이기 때문에 처음 접할 때부터 타이핑이 귀찮다고, 복사/붙여 넣기 하는 공부 방법은 절대 추천하지 않는다.
앞에서도 언급했지만, 복붙 하거나 코드(함수) 자동완성 기능 사용은, 코딩을 공부하면 할수록 사용량이 많아지고 자주 접하게 된다. 하지만, 그것은 프로그래밍을 조금 더 수월하게 해주는 역할을 하는 것이지, 그 자체로만 가지고 프로그램을 완성할 수 없기 때문이기도 하고, 무조건(?) 코드는 내가 행하는 타이핑으로 끝난다라고 생각하는 것이 좋을 것이다.
이참에 영어 공부와 타이핑 연습하다고 생각하면서 코딩 연습하면, 1석 3조의 효과를 가져갈 수도 있다. ㅎㅎㅎ
뭐, 그렇다고 영화나 드라마처럼 프로그램 코딩을 문서작성 하듯이 치듯이 키보드 워리어하는 개발자는 찾아보기 어렵겠지만 말이다. 또가닥.... 또가닥.... 찰칵.ㅋ
오류에 익숙하고, 해결하고자 하는 의지?
코딩에서 절대 빼놓을 수 없는 것이, 시도 때도 없이 발생하는 빨간색 글자들, 바로 오류 코드의 메세지들일 것이다.
코드 오류(문법 오류, 오탈자 오류, 구조 오류 등)는 코딩하는 사람이라면 당연히 받아들여야 하는 부분이고, 오로지 코딩한 당사자만이(?) 해결할 수 있는 부분이기 때문에 공부하면서 발생하는 오류에 너무 겁먹지 말고, 적극적으로 해결할 수 있는 방법과 방향(각종 개발자 포럼, ChatGPT, 구글 검색 포함)을 모색하고 찾아 해결하는 경험을 무조건 많이 해봐야 할 것이다.
특히, 각종 개발자 포럼이나 요즘 잘 알려주는 ChatGPT, 구글 검색등에 최대한 활용할 수 있도록 스스로가 오류를 만들어보고 해결할 수 있도록 노력하면, 자신이 작성한 코드를 다시 분석할 수 있는 기회와 체계적인 코드 작성이 가능할 수 있도록 만들어 주는 기회가 될 것이다.
가능하다면 오류 노트 같은 것을 만들어 무엇 때문에 오류가 발생하는지, 어떤 오류들이 많은지 분석해 놓으면 코딩 실력이 높아지는 것만큼 오류 해결 능력도 높아지게 될 것이다.
눈에 보이는 오류는 쉽게 해결하지만, 눈에 보이지 않는 오류, 오늘 안되다가 다음날 되는 경우, 애매하게 왔다 갔다 하는 경우의 오류는 밤샘은 물론이고, 머리털 빠지고, 눈알 빠지는 고통을 선사할 수 있겠지만, 이것은 아주 먼 훗날의 이야기.ㅋ
포기하지 않겠다는 마음가짐으로
무엇을 배우거나, 무언가를 하거나 할 때, 가장 중요한 것일 것이다.
우리가 흔히, 매년 새해가 되면 하는 다짐들이 대부분 작심 3일이 되어버리는 경우를 자주(?) 아니, 매년, 매월, 매주, 매일 경험하고 있을 것이다.
의지가 약해서, 주의환경이 바쳐주지 않아서, 바빠서, 힘들어서 기타 등등 다양한 이유가 있고, 사유가 있는 우리의 다짐들은 이렇게 흩어지고, 사라지는 아까운 시간들을 다시 부여잡고 이겨내고자 하는 신념과 의지를 다시 한번 더 불태워 보고자 노력하는 것이다.
먼저 이 블로그에 글을 쓰는 나 자신부터 포기하지 않고 끝을 보겠다는 다짐을 다시 한번 해보고, 50이 넘은 나이에 개발자는 꿈꿀 수 없는 입장이지만, "내가 만들어보고자 하는 프로젝트를 최대한 내 손으로 해결하고 싶다"라는 신념으로 과감하게 덤벼들어 본다.
뭐, 60대 70대 늦은 나이도 채용해 줄 수 있는 회사가 있다면, 좋겠지만..ㅋㅋㅋㅋ
우리 같이 열심히 공부해 봅시다.
죽이 되는 것보다 밥이 되는 것을 목표로~~^^