2011. 4. 5. 09:09

컴퓨터 소프트웨어와 프로그램 개발

컴퓨터는 크게 하드웨어와 소프트웨어로 나누어지고, 하드웨어 쪽은 엔지니어라든가 아키텍트라는 용어가 적용되기에 적합한 뉘앙스가 있다. 소설가 이외수씨가 그래듯이 모든 것이 경지에 이르면 그것이 바로 예술이라고 했듯이 하드웨어도 요즘 나오는 제품들을 보면 공학 분야에도 예술이 녹아있다는 생각이 들기도 한다.

그래도 이런 예술이 진정으로 구현된다는 생각이 드는데 하드웨어보다 소프트웨어 쪽이 더 크게 와닿는 건 개발자라는 사람들에게서 떠오르는 특유의 느낌때문에 그럴 수도 있다. 주로 커피나 담배꽁초, 외국에서는 초콜릿이지만 우리는 컵라면 용기랑 친숙하면서 코딩을 하고, 디버깅을 하고 코드 최적화를 하기 위해 머리를 싸매는 모습이 뒤에서 보면 글을 쓰는 사람들 못지 않아 보인다.

하지만 개인적으로는 프로그래머, 코더, 개발자보다는 '소프트웨어 디자이너' 라는 용어가 좋아보이는데, 영어를 선호해서가 아니라 단어가 내포하고 있는 의미를 음미할 수 있다고 보기 때문이다. 소프트웨어는 아주 포괄적이기 때문에 특정 용어를 적용할 수는 있겠지만 자칫 그 틀에 고착화될 소지도 있다.

이 분야는 하나를 습득해 그것만 계속 고집할 수만은 없으므로, 항상 공부하는 자세와 새로운 것을 받아들이는데 거부감이 없어야 한다. 그러면서 지속적인 관심으로 새로운 기술들의 융합과 업그레이드를 하는 것이 필요하다. 그래도 거기에는 일정한 방향과 관련 분야에 대한 적절하고도 장기적인 안목이 있어야 한다.

모든 분야가 그렇듯이 이 프로그래밍도 계속 진화를 해서 많이 발전해오고 있다. 소프트웨어 개발은 방법론에서 크게 보자면 어떤 자료들이 있고, 그것을 처리할 방법을 적절하게 구현하여 결과값을 내는 것이다. 따라서 자료에 대한 처리를 어떤 식으로 할 것이냐가 관건이 된다.

프로그래밍 방법론을 살펴보면 그간은 주로 '절차지향'의 관점에서 개발이 이루어졌다. 이는 자료보다는 그것이 처리되는 방식에 주안점을 둔 형태라고 할 수 있다. 그러다가 최근에는 90년대 후반에 자바열풍을 일으키며 등장한 '객체지향' 방식이 대세를 이루게 되었다. 이는 자료와 처리절차를 하나로 묶어 재사용성에 대한 효율을 높이는데 큰 기여를 해 주어, 이전 절차지향이 가졌던 소프트웨어 개발의 고비용 저효율 문제에 대한 해결방안으로 떠올랐다.

소프트웨어와 관련산업의 규모가 커진 만큼 개인보다는 팀 단위의 작업이 주를 이룬 상황에서 객체지향 방식은 그만큼 더 큰 위력을 가진다. 따라서 개발자도 이런 추세에 맞춘 소양을 가지는 것이 요구된다. 그것은 단순히 기술력만이 아니라 위에서도 업급했듯이 꾸준한 학습력에 실제로 산업에 투입되었을 때의 협동과 인내, 인간성을 바탕으로 한 대인관계, 팀워크 등을 모두 포함하고 있다.

그럼에도 가장 기본이 되는 핵심은 기술이다. 이 분야는 굳이 전공과 비전공을 구분하는 것이 별로 의미가 없다고 여겨지기도 하고, 이론이나 자격증이 그렇게 반드시 필수적인 요구사항도 아니다. 과학적인 분야라기 보다는 실용적이고 정해진 답을 내기보단 만들어가는 업무형태라서 실제 아주 다양한 모습으로 변형될 수 있는 점이 장점이면서 접근하기가 어려운 점으로도 비치는 면이 있다.

그러나 꼭 개발자라고 해서 밤낮없이 코딩에만 얽매일 필요는 없는 것이 모든 것은 끊임없이 변하고 그건 이 분야도 예외가 아니기에 개발 업무에도 다양한 직업군이 있음을 아는게 중요하다. 왜냐하면 이쪽 일에 발을 들여놓기 전에 몰랐던 자기의 적성이나 업무 적합도가 관련 분야에서도 다른 형태로 꽃을 피울 수 있기 때문이다.

그렇더라도 일단 개발자의 대열에 발을 들여놓고, 명함이라도 한 장 돌리려면 역시 개인적인 생각이지만 그룹웨어나 ERP, 업무용 소프트웨어 개발을 필두로 웹과 연동된 실시간 처리분야나 DB 등의 트랜잭션 처리를 담당하는 미들웨어를 같이 공부하는게 좋지 않을까 싶다.