728x90

소프트웨어와 프로그래머

이 글과 이어진 글 보러 가기


2017/10/05 - [Guid/Tips] - [Tips] 프로그래밍과 관련된 글들 모음


소개


다른 대부분의 학습과 마찬가지로 프로그래밍의 학습은 다음과 같은 많은 의문을 남기곤 합니다. 배우면 좋다고들 하지만, 왜 배워야 하는지 궁금합니다. 실용적인 기술을 배우고 싶지만, 유행에 따라서 잠시 뜨고 있는 기술을 배우기는 싫습니다. 이런 생각이 들었다면 이 글을 가볍게 훑어봅시다. 그리고 나중에 기술적 세부 사항이 실전에서 중요한 이유를 되새기고 싶다면 이 글을 다시 읽어보시기 바랍니다.

이 글에서는 프로그래밍이 흥미롭고 중요한 기술인 이유, 즉 프로그래밍이라는 분야가 수십 년 동안 계속해서 발전하는 이유가 무엇인지 설명합니다. 이 글의 내용을 바탕으로 프로그래머는 어떤 사람인지를 알 수 있습니다. 우리는 이 강의에서 다음과 같은 내용을 배울 것입니다.

  • 우리의 삶에서 프로그래밍이 차지하는 역할은 무엇인지.
  • 프로그래머가 자부심을 느끼고 기여할 수 있는 분야는 어떤 것인지.
  • 소프트웨어 개발과 배포, 유지 보수 관점에서 프로그래밍은 어느 부분에 속하는지.
  • 사람들이 말하는 컴퓨터 과학과 소프트웨어 공학, 정보 기술 등의 큰 그림에서 프로그래밍은 어떤 위치에 있는지.
  • 프로그래머가 하는 일과 함께 좋은 프로그래머가 되려면 지녀야 할 프로그래밍 기술
우리들의 삶은 소프트웨어를 기반으로 움직입니다. 따라서 소프트웨어를 개선하고 새로운 활용 분야를 찾아낸다면 단 한 사람이 많은 사람의 삶을 향상할 수 있습니다. 프로그래밍은 그 과정에서 필수적인 역할을 합니다.

소프트웨어


소프트웨어는 눈에 보이지 않습니다. 그 이유는 컴퓨터에서 동작하는 프로그램의 모음이기 때문입니다. 하지만 소프트웨어와는 달리 컴퓨터는 우리 눈에 보입니다. 물론 전화기, 카메라, 제빵기 등의 전자제품 내부에 들어있어서 컴퓨터가 직접 보이지는 않을 수도 있습니다. 소프트웨어 자체는 눈에 보이지 않지만, 소프트웨어가 하는 일은 쉽게 알 수 있습니다. 또한, 소프트웨어가 원래 의도대로 동작하지 않는다면 우리를 다치게 할 수도 있습니다.

그렇다면 얼마나 많은 컴퓨터가 존재할까요? 정확한 수치는 모르지만, 아마도 전 세계의 인구보다 많을 것입니다. 컴퓨터의 개수를 세려면 서버와 데스크톱, 노트북, 태블릿, 스마트폰, 전자장치에 내장된 컴퓨터까지 모두 포함해야 하기 때문입니다.

거의 모든 컴퓨터는 소프트웨어로 구동됩니다. 소프트웨어가 없는 컴퓨터는 단순한 플라스틱 덩어리에 지나지 않습니다. 또한, 우리가 사용하는 소프트웨어는 누군가가 한 줄 한 줄 작성해서 만들어진 것입니다.


사람


컴퓨터는 사람이 만들어서 사람이 사용하고 있습니다. 컴퓨터는 우리 생활에서 매우 다양한 분야에 활용됩니다. 컴퓨터가 이렇게 유용하게 쓰이기 위해서는 프로그램이 필요합니다. 즉, 프로그래머가 프로그램을 만들지 않는다면 컴퓨터는 단순한 하드웨어에 지나지 않습니다.

영화나 만화 등에서는 프로그래머는 외톨이에 뚱뚱하고 못생겼으며, 게임에 중독되거나 다른 사람의 컴퓨터를 해킹하는 사회성이 없는 부정적인 이미지로 표현됩니다. 그는 자신이 원하는 것을 이루기 위해 컴퓨터를 이용해서 범죄를 저지릅니다. 물론 이런 사람들이 존재하기는 합니다만, 소프트웨어 개발자만이 이런 모습을 가지고 있는 것은 아닙니다.

삶 속에서 컴퓨터가 활용되는 분야를 생각해보면, 그 일들이 방 안에서 홀로 외롭게 하는 일들만 있는 것은 아닙니다. 게임 하나를 만드는 일에도 여러 사람이 필요합니다. 예를 들어 프로그래머와 디자이너, 테스터, 기획자, 사용자 인터페이스 디자이너, 시스템 관리자, 프로젝트 관리자, 영업 지원 직원, 문제 해결사 등이 필요합니다. 이처럼 역할 영역도 방대하고, 같은 역할도 조직에 따라 이름이 달라서 직책명을 무엇이라 정의하기도 힘듭니다.

프로그래머는 고립된 채로 살지 않습니다. 혼자서 일하기를 좋아하는 사람은 그런 방식에 가장 적합한 분야를 선택하기 마련인데, 대부분은 방해를 받거나, 회의하는 것조차 싫어합니다. 하지만 최근의 소프트웨어 개발은 팀이 함께하는 활동이라서 다른 사람들과의 의사소통이 매우 중요합니다. 즉, 사회성과 의사소통 능력도 갖춰져야 합니다. 프로그래머를 어떻게 생각하는지는 사람마다 다르겠지만, 프로그래머에게 요구되는 능력을 몇 가지 꼽아본다면 비공식적인 자리에서, 회의에서, 문서에서, 보고하는 상황에서 다양한 사람들과 효과적으로 소통하는 능력을 들 수 있습니다. 프로그래밍하면서 좋은 점 중 한 가지는 직업적인 삶 속에서 훌륭하고 흥미로운 사람들을 만나고 다양한 곳을 방문할 수 있다는 점입니다.

이런 사실이 의미하는 것은 하나의 프로그램이 만들어지려면 다양한 기술과 흥미, 업무 습관을 지닌 사람들이 모여서 일을 한다는 것입니다. 어떤 사람도 앞에서 언급한 모든 일을 혼자서 다 할 수는 없으며, 모든 일을 다 하는 것을 원하지도 않습니다. 중요한 것은 우리가 생각하는 것보다 넓은 선택권이 있으며, 굳이 그중 하나만을 선택할 필요도 없다는 것입니다. 다양한 역할을 직접 경험해보면서 자신에게 맞는 기술과 소질, 흥미에 맞는 업무 영역을 찾는 것입니다.


프로그래밍을 활용하는 방법


프로그래밍을 어떤 목적으로 활용하고 싶나요? 전문적인 프로그래머가 되지 않더라도 연구를 수행하기 위한 도구로 사용할 수 있습니다. 그리고 디자이너와 작가, 관리자, 과학자 등과 직업적으로나 개인적으로 교류할 때 프로그래밍 지식이 도움될 수도 있습니다. 하지만 여러분이 전문적인 프로그래머가 되더라도 다른 일을 하지 않고 프로그래밍만 하는 것은 어렵습니다. 프로그래밍은 해법을 표현하고 문제 해결에 도움을 주는 방법의 하나로, 해결할 만한 문제나 시도해볼 해법이 없다면 프로그래밍은 아무 쓸모 없는 시간 낭비일 뿐입니다.

훌륭한 프로그래머 중 많은 사람이 컴퓨터 과학과는 관련 없는 분야를 전공했습니다. 만약 유전자 연구용 소프트웨어를 만든다면 생물학을 전공하는 것이 더 효과적일 것입니다. 또한, 중세 문학을 분석하는 프로그램을 개발한다면 그러한 문학 작품을 조금이라도 더 읽고 관련된 언어를 알아두는 편이 훨씬 효과적일 것입니다. 결국 "나는 프로그래밍만 할 거야"라고 생각하는 사람은 프로그래머가 아닌 동료와는 의사소통할 수 없고 좋은 소프트웨어 개발자가 될 수도 없습니다. 


글을 마무리하며


프로그래머는 프로그램만 잘 짜면 되는데 왜 프로그래밍 외적인 주제와 프로그래밍이 아닌 다른 역할의 중요성을 강조하는 이유가 무엇일까요? 훌륭한 프로그래머는 그가 작성한 코드와 프로그래밍 기술이 프로젝트에서 차지하는 역할을 잘 이해해야 하기 때문입니다. 좋은 프로그래머는 항상 코드와 결과물이 전체 프로젝트에 어떻게 도움을 줄지 생각해야 합니다. 최악의 프로그래머를 묘사해본다면 사용자의 요구 사항과 코드 구현에 따른 제약 사항을 잘 이해하지도 못하는 데다가 세부 사항에 집착해서 일을 늦게 마치는 성향과 대충 테스트한 코드의 정확성에 대해 지나친 자신감만 있는 사람입니다. 이 강좌는 여러분이 좋은 소프트웨어를 만드는 데 어떤 것이 필요한지 넓은 시야로 살필 수 있는 훌륭한 프로그래머가 되는 것을 돕고자 하는 것이 목표입니다.


728x90
728x90