소프트웨어도 사람처럼 태어나고 죽습니다. 언제냐고요?
신입 개발자들이나 테스트엔지니어들에게 소프트웨어가 뭐에요? 라고 물어보면 선뜻 설명하지 못합니다. 굳이 묻거나 되물어볼 필요없이 소프트웨어란 단어를 쓰고 있어서일겁니다. 상대방도 어느정도 이해하고 있겠거니 하는거죠. 그걸 설명해보라고 하면 '프로그램', '앱', 'iOS' 등 이런 말들을 내놓습니다. 틀린 말은 아니지만 좀 더 생각해볼 필요가 있습니다.
개발자들은 SW를 만든다는 것을 그니까, 개발한다고 하는 것을 코딩하는 것과 동일시 합니다. 코딩을 한다고요? 네. 코딩을 한다는 것은 컴퓨터의 언어로 컴퓨터상의 어떤 기능이나 표현을 구현하기 위해 작성하는 행동 그 자체입니다. 즉 구현한다는 말로도 쓰입니다. 다른 것과 비교해보면 글쓰기와 다름 없습니다. 그래서 저는 글을 잘 쓰는 사람은 코딩도 잘 할 수 있다고 가끔 얘기를 하죠.
생각해 보세요. 한국 사람들끼리 소통하고 이해하기 위해 한글이라는 언어를 쓰는 것처럼 컴퓨터와 소통하고 컴퓨터가 뭔가 일을 할 수 있도록 만들려면 우리는 컴퓨터 언어라는 것을 씁니다. 물론 컴퓨터 언어 안에서도 고등언어니 하등언어니 구분하지만 일단 컴퓨터 언어라고 포괄적인 단어를 쓰겠습니다. 따라서 언어만 다를 뿐 작성하는 것은 비슷합니다. 약간의 장르는 다를 수 있겠지만요.
"프로그래머의 작업은 시인과 마찬가지로 순수한 사고의 산물에 가깝다. 허공에 공기로 성을 쌓고 상상력을 동원하여 자신의 성을 창조해 나간다. 이토록 유연하고 다듬기 쉽고, 웅장한 개념적 구조를 손쉽게 실현할 수 있는 표현 수단은 찾아보기 힘들다. " - 프레더릭 브룩스
특히, 컴퓨터 언어로 코딩한다고 하면 논리적인 글쓰기가 코딩입니다. 기능을 구현하기 위해 입력에 어떤 데이터가 들어와야 하는지, 들어온 데이터가 어떤 논리적인 과정을 거쳐 우리가 원하는 출력을 내줄 수 있는지 따져보면서 작성을 해야합니다. 또한 누군가가 나중에 결함이나 사용자의 요청으로 변경이 필요하면 쉽게 변경할 수 있도록 간결하고 친절하게 써야합니다. 이래저래 우리가 쓰는 글쓰기와 비슷합니다. 그래서 컴퓨터공학 등의 SW개발 관련 학과 커리큘럼에 글쓰기 과목이 있었으면 좋겠습니다.
이렇게 해서 만들어진 것을 우리는 프로그램이라고 하지만 소프트웨어라 하기에는 아직 부족합니다. 네, 바로 요구사항이 빠졌습니다. 누군가가 이랬으면 좋겠어라고 말로 몸짓으로 아니면 문서 등으로 알려주는 것 즉, 요구사항을 통해서 만들어진 프로그램(컴퓨터 언어로 생각을 표현)을 우리는 소프트웨어라고 합니다. 그럼 누군가는 '누구'일까요? 네. 사업 형태나 유형에 따라 다르겠지만, 결국 사용자입니다. 사용자의 요구사항이 반영이 되어야 합니다. 사용자에게 유용한 가치가 생성이 되고 그것이 만족할 만하면, 사용자는 그 가치를 획득하기 위해 기꺼이 비용을 지불합니다. 여기서 사용자는 우리같은 일반인이 될 수 있고, 정부나 기업 담당자가 될 수도 있습니다. 각기 목적과 상황이 다르기 때문에 세상에는 정말 많은 소프트웨어가 존재합니다. 여러분이 쓰시는 스마트폰의 앱만 봐도 데스크탑이나 노트북의 프로그램들을 보세요. 정말 많은 소프트웨어(애플리케이션)를 사용하고 있습니다.
그럼 소프트웨어는 언제 태어나는 걸까요? 그리고 소프트웨어는 언제 죽는 걸까요? 사람과 거의 동일합니다. 사람이 엄마뱃속에서 나와 세상에 울음을 터트리는 그날! 우리가 생일이라고 하는 그 날. 이날이 소프트웨어의 탄생입니다. 비즈니스전문가, 기획자, 디자이너, 개발자, 품질관리자 등이 모여 개발한 프로그램을 시장에 내어놓는 순간 소프트웨어는 탄생합니다. 전문적인 용어로 '릴리즈'한다고 하죠. 릴리즈된 소프트웨어는 서비스나 솔루션이라는 말로 많은 사람들에게 쓰이다가(쓰이지 않을 수도 있겠죠)어느 순간 삶을 마감해야할 때가 옵니다. 사람도 마찬가지지요. 그 때가 바로 소프트웨어에 결함이 있는데 못 고치는 날입니다. 그것을 죽음이라고 합니다. 사람도 병이 걸려 낫지 않으면 살아갈 수 없듯이 소프트웨어도 결함이 있어 장애가 생기면 고쳐야 하는데 고칠 수가 없다면 그 생을 마감합니다. 물론 예외는 있습니다. 기업 내외부 사정으로 EOS(End Of Service)하자 할 때도 있습니다.
여하튼 건강하고 가치있는 소프트웨어를 만들기 위해 많은 분들이 애를 쓰고 있습니다. 예전에는 정말 밤낮을 가리지 않았어요. 기획자는 시장의 요구나 트렌트를 리서치하거나 일을 진척시키기위해 머리를 굴리고 소통하고 대화하고 연구하죠. 개발자는 쉽고 간결하고 로직처리를 하며 친절하게 주석을 달려고 합니다. 또한 디자이너는 사용자 경험을 높이기 위해 사용자 테스트니 A/B 테스트니 하면서 끊임없이 고민을 합니다. 이들의 노고로 우리는 스마트폰에서 쉽고 편리하게 송금도 하고 대화도 하고 쇼핑도 하는 것이겠죠.
마지막으로 정리해볼까요? 소프트웨어는 프로그램 더하기 요구사항이다. 아셨죠!
FYI.
- 추천도서: 1일 1로그 100일 완성 IT지식 / 브라이언W.커티핸 지음
- ISO 12207은 ISO에서 정한 표준 소프트웨어 라이프 사이클(생명주기, SDLC, Software Development Lifecycle) 프로세스