티스토리 뷰


프로그래밍이란 무엇인가

프로그래밍이란 컴퓨터를 이용하여 창의적으로 문제를 해결하는 과정이야. 그렇다면 프로그램은 뭘까?

사실 정의에 대해서는 사람마다 다 말이 조금씩 달라. 가장 무난한 정의를 말하자면 '명령어의 집합' 이라고 말할 수 있을거야.


프로그램은 모두 인터넷 브라우저, 여러분이 하는 게임처럼 거창하지는 않아. 기본적으로 컴퓨터가 인식하는 명령은 입력(읽기), 출력(쓰기), 덧셈, 뺄셈, 곱샘, 나눗셈 정도야. 즉, '명령어의 집합' 이라는 정의에 따르면 1 + 1 의 결과를 출력해주는 명령어 집합도 프로그램이라고 말해. 만약, 프로그래밍을 배운다면 이런 덧셈 뺄셈 하는 프로그램을 만드는것에서 출발하게 될거야.


1. 프로그래밍으로 무엇을 할 수 있는가.

사실 입출력을 제외하면 할 수 있는건 산술밖에 없어. 사칙연산으로 무엇이든 하는거야. 취미로 배우게 되어 무언가를 만들지 않는 이상 용도는 단순해. 계산기로 쓰는거지. 


>>> print(10+3*2)

16


이런 단순한 연산부터, 토끼 수를 세는데도 이용할 수 있어.

첫 달에는 새로 태어난 토끼 한 쌍만이 존재한다.

두 달 이상이 된 토끼는 번식 가능하다.

번식 가능한 토끼 한 쌍은 매달 새끼 한 쌍을 낳는다.

토끼는 죽지 않는다.

그렇다면 30개월차의 토끼는 모두 몇마리일까? 


>>> def fibonachi(n):

...     if n is 0:

...         return 0

...     if n is 1:

...         return 1

...     else:

...         return fibonachi(n-1) + fibonachi(n-2)

...

>>> print( fibonachi(30) )

832040


정답은 832040 마리야



많은 사람들이 알고있거나 눈치챘겠지만 이건 피보나치 수열을 이용한 문제야. 위키백과에서 수열의 점화식을 보고 프로그램으로 옮겨 결과를 얻는데 모두 3분정도 걸렸어. 여러분은 영어를 잘하니 if, is 같은 단어는 알거라고 생각해. return 은 결과값을 돌려주라는 의미야. 정말 점화식 그대로의 명령어 집합이니 이해했을거라고 생각할게.


프로그래밍은 컴퓨터의 능력, 흔히 컴퓨팅 파워라고 말하는 계산능력을 이용해 복잡하거나 노가다성 문제를 빠르게 해결하는데 매우 탁월해. 그러니깐, 프로그래밍을 배우면 무엇을 할 수 있는가에 대한 답은


직접 하자니 골때리는 문제를 빠르고, 쉽게 해결할 수 있다.


라고 말할 수 있을거야. 그렇다면 직접 하자니 골때리는 문제를 한번 생각해보자.



문제1. 편집

영어로 된 책을 편집하는데 어떤 미친놈이 is 뒤에오는 단수명사에 모두 s, 혹은 es를 붙여버렸다. 책은 384 페이지고 텍스트 파일로 주어져 있다. 여러분은 다시 is 뒤에오는 복수명사를 모두 단수명사로 변경해야 한다.


이 문제를 해결하기 위한 방법은 무엇이 있을까?

삽질한 놈에게 다시 변경토록 지시한다.

스크롤을 내리며 일일이 찾아 변경한다.

Ctrl + F를 눌러 is를 검색, 뒤에오는 단어를 변경한다.

프로그래밍을 한다.


책임을 져야하는 입장인데 아래서 똥을 싸버리면 그만큼 골때리는 일도 없을거야. 그럴땐 무엇보다 직접 해결하는게 가장 속 편하지. 2번은 확실히 아니야. 손가락도 아프고 눈도 빠지고 실수로 놓치고 넘어갈 여지도 너무 커. 3번은 확실하지만 좀 노가다 작업이지? 4번은 직접 타이핑 하는게 아니니 찝찝하지만 가장 빠르게 해결할 수 있는 방법이기도 해.


텍스트를 다루는건 프로그래밍을 이용해도 까다로운 문제야. 하지만, 요즘은 정규표현식이라는 기똥찬 놈이 이런 문제를 해결해 줄 수 있어. 정규표현식, Regular Expression 이라고 말하고 줄여서 Regex, Regexp 라고 쓰는 놈인디 텍스트를 표현하고 다루는데 있어 아주 능력있는 친구야.


>>> import re

>>> print( re.sub("(?P<word>is\s(an?\s)?\w+e?)s", "\g<word>", "Hello, It is a cars. That is pies") )

Hello, It is a car. That is pie.


원문은 "Hello, It is a cars. That is pies", 결과는 Hello, It is a car. That is pie. 제대로 고쳐진걸 확인할 수 있어. 원래는 파일을 읽어와서 바꾸어주는 코드를 짜야겠지만 예제니깐 임의의 문자열을 고쳐주는 코드를 짜봤어. 이상한 기호 범벅인 두 번째 줄이 무슨 의미인지는 굳이 알려고 안해도 돼. 정규표현식이란 놈을 이용하면 단 한줄 만으로도 이런게 가능하다 정도로만 생각해줘.


요즘은 다양한 프로그램에서 문자열 검색, 변경 기능에 정규표현식을 지원하는 경우도 많으니 굳이 C같은 언어가 아닌, 정규표현식만 공부해도 유용할거라고 생각해.



2. 프로그래밍 시작하기

왜 프로그래밍 언어를 배우려고 하는가, 배워서 어디다 쓰려고 하는가

라는 질문에 답을 할 수 없다면 프로그래밍 언어를 공부하지 않는걸 권유하고 싶어. 프로그래밍은 기술이야. 그리고 기술은 쓰지 않으면 늘기는 커녕 오히려 퇴보하고. 프로그래밍을 배우는걸 권장하는 사람은 다음과 같아.


컴퓨터를 이용한 작업 중에 귀찮은 문제를 자주 당면하는 사람

굳이 배워야 할 필요는 없지만, 할 줄 알면 좋은 환경에 있는 사람

웹 사이트, 어플리케이션, 게임 등을 만들고자 하는 사람

수학적 문제를 프로그래밍으로 해결하고자 하는 사람

당장 사용할 생각이 없고, 사용할 일도 없을것 같지만 학문적 호기심에 꾸준히 해보고자 하는 사람


중요한건 꾸준하게 프로그램을 만드는게 가장 중요해. 그렇지 않다면 공부한것도 까먹고 괜한 시간낭비만 할 가능성이 매우 커. 적어도 꾸준히만 한다면 까먹어도 조금 보면 금방 다시 할 수 있으니깐.


여튼간 필요성을 느끼지 못한다면 그냥 하지 마. 그리고 처음 언어를 접한다면 구글에 "[언어이름] 강좌" 혹은 "[언어이름] 문법" 이런식으로 치면 기초적인 내용이 나올거임.


만약 정말 배우고자 마음먹었다면 언어를 선택할 차례야. 유명한 프로그래밍 언어만 꼽아도 10종은 넘어갈거야. 당연한 말이지만 이왕 시작하는거 자신의 필요, 환경에 맞는 언어를 선택하는게 좋겠지?

댓글