본문 바로가기
데이터과학 기초/Python배우기

파이썬 쉽게 배우기 (1) - 프로그래밍 기초 용어 이해하기

by eigenvector 2022. 9. 10.
반응형

파이썬을 배워 봅시다. 그전에...

저는 R과 Python을 사용하는 연구자입니다.

 

제가 처음 두 언어를 배웠을 때만 하더라도, 주변 사람들은 대부분 SPSS나 STATA를 사용했습니다.

(굳이 더 들어가자면 R은 조금 전문적인 영역 Python은 미지의 영역(?)에 가까웠습니다)

 

그러나, 요즘은 굳이 연구자나 프로그래밍 관련 분야가 아닐지라도 파이썬 정도는 들어본 사람이 많아졌습니다.

 

그만큼 코딩 교육이 보편화됐다는 의미라고 생각합니다.

 

비전공자도 배워야 할 만큼 코딩이 중요한 이유는 무엇일까요? 어떤 언어를 배우는 것이 좋을까요?

 

몇 가지 중요한 키워드를 중심으로 이 문제를 풀어보겠습니다.

 


왜 프로그래밍을 배워야 하는가?

프로그래밍을 배우는 목적에 대해서는 여러 가지 설명이 존재합니다.

 

저처럼 연구 데이터를 분석하고 과학적 통찰력을 얻기 위한 목적이 있을 수 있고, 고객의 행동 데이터를 분석해서 이익을 극대화시키거나 수요/공급의 예측을 통해 차익을 노리는 경우도 있습니다.

 

제가 생각하는 프로그래밍을 배워야 하는 목적은 "기계가 할 수 있는 일을 아는 것"과 "제대로 일을 시키는 것"에 있다고 생각합니다.

 

"아는 만큼 보인다!"라는 말처럼 아예 모르면 컴퓨터/기계라는 훌륭한 도구를 사용할 수 없게 됩니다.

 


알고리즘?

이런 배경에서 최근에 말하는 알고리즘이라는 말의 범람화(?)는 애매한 면이 있습니다.

 

알고리즘이라는 개념은 우리가 생각하는 첨단 과학보다는 "합리적인 방법론"의 측면이 강하기 때문입니다.

 

어떤 일을 한다고 할 때, "주어진 조건을 만족하는 가장 효율적인 방식"을 찾는 일이 알고리즘의 본질이라고 볼 수 있습니다.

 

("큐브를 맞추는 공식"이나 "무작위로 나열된 수를 순서대로 정렬하는 가장 빠른 방법"이 예시가 될 수 있습니다)

 

기계는 심리적/사회적인 면과 상관없이 반복 작업을 하는데 최적화됐기 때문에 알고리즘과 합이 잘 맞습니다.

 

그러나, 사람은 "조건에 따라 합리적이지 않게 행동"하기 때문에 오히려 알고리즘에 맞지 않는 행동을 더 편안하게 느낄 수 있습니다.

(길을 찾는다고 할 때, 가장 빠르게 지나가는 길보다는 큰길로 쭉 가는 것을 선호하는 것을 생각해 봅시다)

 

결과적으로, 인간과 기계 사이 분명한 장/단점이 존재하고 기계에 효율적으로 명령을 내리기 위해 알고리즘이 중요해졌다고 볼 수 있습니다.

 


저수준/고수준 언어?

인간-기계간의 차이는 "언어"의 차이와도 관계가 깊습니다.

 

기계에게 합리적인 방식(알고리즘)에 따라 일을 전달한다고 할 때 알고리즘 구성 다음의 문제는 "어떻게 전달"하는가에 있기 때문입니다.

 

기계가 사용하는 언어(0과 1로 구성된 언어)에 가까울수록 중간 번역 과정이 없어지기에 빠르고 효율적으로 작동합니다.

 

반대로 인간이 이해하기 전달 언어를 구성할수록 언어를 해석해서 기계에게 전달하는 과정은 느리고 자원을 많이 사용합니다.

 

이를 쉽게 풀어서 저수준(기계에 가깝고 규칙이 엄격함), 고수준(인간에 가깝고 규칙이 유연함) 언어로 이야기합니다.

 

천공카드(종이에 구멍을 뚫어서 0과 1을 표현한 프로그래밍 도구) 시대와 달리 최근에는 컴퓨터 성능이 높아졌기 때문에, 고수준 언어의 수요가 많아졌지만 여전히 효율성의 문제로 저수준 언어를 요구하는 분야가 존재합니다.

 

본인이 원하는 작업이 간단한 데이터 처리 수준이라면 굳이 저수준 언어 대신 고수준 언어를 익히는 것이 맞겠습니다.

 


컴파일러/인터프리터?

위와 같이 "기계"와 "인간"의 연결을 위해서는 또 하나의 고민거리가 해결되어야 합니다.

 

"명령을 한 번에 전달하는 것 vs 단계별로 전달하는 것"입니다.

 

간단히 이해하지면 "완제품 vs 조립품"으로 볼 수 있습니다.

 

어렴풋이 짐작되겠지만 전자의 경우 수정이 어려운 대신 빠른 속도를 자랑하고, 후자의 경우 수정이 손쉽지만 속도가 느린 편입니다.

 

더 나아가면 어떻게 작동하는지 뜯어본다고 할 때, 전자는 난이도가 있고 후자가 손쉬운 편입니다.

 

최근 컴퓨터 성능의 향상으로 일반적인 데이터 처리를 수행한다면 인터프리터 언어도 체감되는 속도 차이가 크게 없어진 편입니다.

 

(다만, 어디까지나 속도는 상대적이기 때문에 몇 %의 차이가 중요하다면 전자의 방법론이 필요합니다)


파이썬과 라이브러리

이제 파이썬에 대해 이야기해 봅시다.

 

파이썬의 장점을 이야기할 때, 항상 나오는 말은 "배우기 쉽다!", "여러 작업이 가능하다!"입니다.

 

이는 파이썬이 고수준/인터프리터 언어이기 때문입니다.

 

"속도"나 "효율성"의 문제가 있지 않나요?"

 

라고 질문이 나온다면, "최근의 컴퓨터 성능 증가" & "일반적인 데이터 작업 용도"로는 속도 문제를 체감하기 어렵다고 답할 수 있습니다.

 

오히려 약간의 손해를 감수한 편리함으로 인해 엄청난 확장성을 가지고 있습니다.

 

왜냐면 "내가 가진 문제를 해결하기 위한 파이썬에 적합한 방법론"이 이미 웹상에 많이 공개됐기 때문입니다.

 

이를 라이브러리(Library)라고 부릅니다. 그리고 파이썬은 생각할 수 있는 거의 모든 분야에서 라이브러리를 찾을 수 있습니다.

(오디오, 이미지, 통계... 등등 엄청나게 많은 분야에서 라이브러리가 계속 개발되고 있습니다)

 

즉, "내가 하는 일은 이미 누가 해본 일"이며 "다른 사람의 방법론을 가져다 쓰는 것"에 적합한 언어라는 점이 파이썬이 가진 큰 장점이라고 볼 수 있습니다

(좀 더 깊게 들어가면 "객체 지향"이라는 용어가 나옵니다만.... 파이썬을 본격적으로 배우면서 설명하겠습니다)

 

일반적으로 라이벌(?)로 제시되는 R의 공개 방법론(패키지)이 통계에 집중됐다면, 파이썬은 통계 부분은 부족하지만 범용성이 큰 편인 셈입니다.

(사실 R은 일반적인 프로그래밍 언어라기보다는 통계 전문 언어라고 보는 게 더 적합합니다만 넘어가도록 하겠습니다)

 

앞으로 컴퓨터 성능이 끊임없이 증가하고 "일반적인 반복 작업"의 대체 수요가 늘어난다고 할 때, 파이썬은 괜찮은 선택지 중 하나라고 볼 수 있습니다.

 


정리

오늘은 파이썬을 배우기 위해 배경이 되는 여러 키워드를 기초적인 설명과 함께 살펴봤습니다.

다음 시간에는 구체적으로 파이썬을 사용하기 위한 방법론을 중심으로 여러 키워드를 추가로 설명하겠습니다.

반응형