요우의 데브톡

소프트웨어 개발과 프로그래밍, 코딩이 뭐가 다르죠?

Yowu 2016. 12. 1. 02:04
반응형
  • 이 포스트는 엄연히 개인의 주관이 담긴 글입니다. 의견은 환영하지만 불편러는 지양합니다.

소프트웨어 개발과 프로그래밍, 코딩이 뭐가 다르죠?

얼마 전 오랜만에 보는 지인을 만났습니다. 근황을 얘기하던 중 내가 소프트웨어 개발한다고 하니 개발이랑 코딩이랑 뭐가 다른 것이냐고 물어보더군요. 비전공자인 그에게 세세히 설명하자니 너무 귀찮아서 '응 비슷한 거야'라고 말하고 말았는데, 뜻밖에도 소프트웨어 개발(Software Development)과 프로그래밍(Programming), 코딩(Coding)의 차이에 관해 물어보는 사람이 많길래 언젠가 한 번 정리해서 포스팅해야겠다고 생각했습니다. 그게 바로 오늘이네요.

코딩이 뭐냐는?

사전에 따르면 코딩(Coding)은 '정보를 계산 조작에 편리한 부호로 바꾸기' 라고 합니다.

좀 더 옛날얘기를 해볼까요. 예전에 교수님들이 본인들 전산과 학부생 시절을 얘기하실 때, 천공 카드 라는 곳에 구멍을 뚫어 코딩을 했다고 합니다. 천공 카드를 사용하여 엄청 큰 프로그램을 만들 경우에는 천공 카드 몇백 장에 코딩을 한 뒤, 학교 컴파일실에 천공 카드 뭉터기를 제출하면 다음 날 프로그램의 실행 결과를 알 수 있었다. 뭐 이런 전설과 같은 얘기를 심심찮게 듣곤 했습니다.

이것이 천공카드. OMR이 천공 카드와 유사한 방식이다.

이때, 천공 카드에 구멍을 뚫어서 로직을 표현하는 것을 부호화(Coding, Encoding)라고 불렀고, 그 단어가 지금까지 이르러 우리가 프로그램의 코드를 짤 때 '코딩 한다'고 표현하게 되었습니다. 만약 당신이 Javascript를 사용하여 다음과 같은 한 줄 짜리 코드를 만들었다고 합시다.

console.log("Hello World");

비록 화면에 Hello World를 출력해주는 단 한 줄짜리 코드지만 훌륭한 코딩을 한 것입니다. 당신의 뜻을 컴퓨터가 이해했으니깐요!

코딩이랑 프로그래밍이랑 무슨 차이?

사전에 따르면 프로그래밍(Programming)은 '컴퓨터 프로그램을 작성하는 일. 일반적으로는 프로그램 작성 방법의 결정, 코딩(coding), 에러 수정 따위의 작업을 이르지만 특수하게 코딩만을 이를 때도 있다.' 라고 정의 되어 있습니다. 그렇다면 코딩(Coding)과 프로그래밍(Programming)은 무슨 차이일까요? (사실 사전적 정의도 그렇고 기타 많은 곳에서 프로그래밍과 코딩을 같은 뜻으로 쓰고는 합니다. 따라서 이 부분은 지극히 저의 주관적인 견해입니다.)

다음과 같은 두 개의 코드가 있습니다. 두 개 모두 같은 결과를 출력합니다. 코드도 에러 없이 잘 돌아가는 멋진 코드입니다. 하지만 누가 더 잘 만들었을까요?

//출력 결과 : 1 1 2 3 5 8 13 
var a = 0;
var b = 1;
var tmp;
console.log(b);
tmp = a + b;
= b;
= tmp;
//...생략 
console.log(b);
tmp = a + b;
= b;
= tmp;
console.log(b);
//출력 결과 : 1 1 2 3 5 8 13 
function fib(i, a, b) {
  if(== 0) return a;
  else {
    console.log(b);
    return fib(i-1, b, a+b);
  };
}
fib(7, 0, 1);

(굉장히 극단적인 예지만) 위의 코드 모두 피보나치 수열을 7항까지 계산하여 출력해주는 코드입니다. 첫 번째 코드, 두 번째 코드 모두 n=(n-2)+(n-1) 이라는 로직을 잘 지켰습니다. 하지만 누가 보더라도 첫 번째 코드 보다는 두 번째 코드를 보고 더 코딩을 잘 했다고 할 것입니다. 무슨 차이가 있는 걸까요?

개발 입문시 만나게 되는 첫번째 멘붕 코스. 재귀(Recursion)

첫 번째 코드는 단순히 로직을 나열했을 뿐이지만, 두 번째 코드는 프로그래밍 문법(function, if/else)과 코드 재사용성, 그리고 공학적 이론(Recursion) 등을 사용하여 효율적인 코드를 만들었습니다. 저는 여기에 프로그래밍(Programming)과 코딩(Coding)의 근본적인 차이가 있다고 생각합니다. 단순하게 코드를 에러 없이 잘 작성하는 것뿐 아니라 효율적인 로직 구성과 알고리즘 사용, 더 나아가 적절한 코드 분리와 파일 구조화 등 설계에 대한 고민이 이루어졌을 때, '프로그래밍을 했다'고 표현할 수 있을 것 같습니다.

제가 대학교 저학년이 때 농담같이 떠돌던 얘기가 있습니다. '코더(Coder)가 될 것 이냐 프로그래머(Programmer)가 될 것이냐'. 선배들이 공부 열심히 하라는 뜻에서 얘기한 것이겠지만 지금 생각해보면 사실 어떤 얘기를 하고 싶었는지 어렴풋이 알 것 같기도 합니다.

그럼 소프트웨어 개발은 뭔데여?

좀 더 복잡한 문제입니다. 소프트웨어 개발(Software Development)은 코딩이나 프로그래밍 외에 좀 더 많은 요소가 결합하여 있습니다 단지 코딩이나 프로그래밍을 잘한다고 뚝딱 나오는 것이 아니기 때문입니다. 뜻밖에 많은 사람이 소프트웨어 개발하면 코딩/프로그래밍만 잘하면 나온다고 생각합니다. 위키피디아에서는 소프트웨어 개발 항목의 첫 줄을 다음과 같이 정의합니다.

소프트웨어 개발은 시장 목표나 사용자의 요구를 소프트웨어 제품으로 만드는 과정이다.

물론 1인 개발이면 혼자서도 소프트웨어를 만들 수도 있습니다. 하지만 실제 소프트웨어 개발은 코딩이나 프로그래밍 스킬 보다는 개발자 간의 커뮤니케이션, 다른 팀과의 협업, 프로젝트 관리, 스케줄 관리 등 좀 더 개발 과정과 연관된 요소가 중요하게 생각됩니다. 물론 기본적인 코딩과 프로그래밍 스킬은 깔고 가지만 그래도 훨씬 어려운 영역입니다. 이게 얼마나 어려운 영역이냐면 이 문제를 해결하기 위해 지금까지도 수많은 방법론들이 난무하고 있지만 완벽하게 해결할 수 있는 Silver Bullet과 같은 방법론은 아직 없습니다. Agile이나 Waterfall, Prototype 뭐 그런 것들조차 말이죠.

실제 소프트웨어 개발 프로젝트는 커뮤니케이션의 연속이다.

정확히 감이 오지 않으신다면 대학교에서 하던 팀 프로젝트를 떠올리시면 될 것 같습니다. 정말 많은 사람이 팀 프로젝트를 싫어하지만 (물론 저같이 팀플을 좋아하던 변태도 있습니다만...) 팀 프로젝트를 진행하면서 발생한 이슈들은 실제 소프트웨어 개발 이슈와도 비슷한 점이 많은 것 같습니다. 예를 들어 팀원의 문제, 기한의 문제, 업무 분담의 문제 등등이 있습니다. 이러한 이슈들을 잘 풀고 대처하면 뭐가 되었든 간에 어느덧 팀 프로젝트의 결과물이 나왔던 것을 떠올려 보세요. 써놓고 보니 소프트웨어 개발이란 Project Management에 가까운 것 같습니다.

마무리

많은 개발자가 코딩이나 프로그래밍에서 그치지 않고 소프트웨어 개발을 잘하기 위해 노력하고 있습니다. 저 역시 마찬가지고요.

  • 3줄 요약
    1. 코딩 : 생각한 바를 코드로 옮길 수 있는 능력
    2. 프로그래밍 : 생각한 바를 공학적인 요소와 함께 사용하여 효율적인 코드로 작성할 수 있는 능력
    3. 소프트웨어 개발 : 코딩과 프로그래밍을 베이스로 깔고 실제 프로젝트 진행 시 발생할 수 있는 다양한 이슈를 처리할 수 있는 능력


반응형