"프로그래머는 컴퓨터 프로그램의 논리나 알고리즘을 설계하고, 원시 코드를 작성하여 테스트하는 사람을 말한다. 프로그래머는 시스템 분석자(systems analyst)가 설계한 내용을 알고리즘을 통해 프로그램으로 구현하는 사람으로서, 시스템 분석자·데이터베이스 관리자(DBA : database administrator) 등과 함께 한 팀이 되어 과업을 수행하는 경우가 많다.
프로그래머로서 일을 하기 위해서는 적어도 컴퓨터에 대한 충분한 지식이 필요하며, 프로그램 언어·오퍼레이팅 시스템의 명령·파일링 시스템의 운용법·화면설정·기타 작업도구 사용법 등을 숙지해야 한다.
최근에는 컴퓨터 기종과 기능의 확대에 따라 화면응답·온라인·마이크로컴퓨터에 의한 제어·컴퓨터 네트워크 등의 다방면에 걸친 응용이 보급되어 프로그래머에게 요구되는 지식도 광범위해져 가고 있다. 프로그래머가 되기 위해서는 세심한 주의력을 가질 것, 실수가 적을 것, 깊은 추리력이 있을 것 등이 기본적 소질로 요구된다.
사실 프로그래밍은 컴퓨터 응용프로그램을 개발하는 중추적인 입장에 있는 중요한 작업이지만, 프로그래머들은 프로그램을 작성하는데 그들이 초기에 예상했던 것보다 더 오랜 시간을 소모한다는 점에 대해서 많은 비난을 받기도 한다."
본론 들어가기 전부터 너무 진빠지게 해버렸나? 아무튼
프로그래머의 분야는 일반인이 생각하는 것처럼 간단하지 않다.
매우 다양한 분야가 존재하고 그 분야 만큼이나 하는 일도 천차 만별인데.. 어떻게 설명하는게 좋을까?
작가라는 일에 비유한다면. 드라마작가도 있고 소설을 쓰는 사람도 있고, 동화를 쓰는사람, 희곡을 쓰는사람, 방송 대본을 쓰는 사람, 영화대본을 쓰는 사람등 다양한 분야가 있을 것이다.
그리고 큰 작품을 혼자 쓰기보다는 나눠서 작업을 할때 스토리 라인만 만드는 사람이 있고, 스토리 라인에 에피소드들을 더해 재미를 붙이는 사람이 있고, 글을 정리하고 마무리 하는 사람이 있을테고.. 하여튼 다양한 분야가 존재 할것이다.
프로그램을 짜는 사람들도 다양하다. 하드웨어 장비(보통 사용자들이 만지는 물리적인 본체들)간에 의사소통을 하도록 하는 사람(디바이스 드라이버 개발자) 사용자가 입력한 자료들을 정확히 저장하고 보여지도록 하는 사람(데이터 베이스 설계 또는 개발자) 사용자에게 보다 보기 좋게 기능을 사용하는데 편리하도록 개발하는 사람(UI 설계 또는 개발자등).
비유를 하다보니 (이런 말도 않되는 비유를 쓰다니..)프로그래밍을 하는 사람들이 이걸 보면 이걸 비유라고 했냐며 나에게 돌을 날릴지도 모르겠다.
일반적으로 임베디드쪽 업무들은 여러가지 다양한 장비에 들어가는 프로그램을 만드는 사람을 통칭해서 임베디드 프로그래머라고 한다.
여기서 다양한 장비라 함은 핸드폰, 디지털 카메라, MP3, Settop Box, 게임기, PDA, 인터폰 등등..
요즘은 대부분 하나의 장비에서 원래 하나의 기능만 하는 경우는 거의 없다.
뭔가 복잡하고 다양한 기능들이 있다. 왜? 사는 사람이 그런걸 좋아하니까.
(대표적으로 핸드폰에 카메라를 달고, 음악을 듣고, 영화도 볼수 있다, PDA에서도 전화가 되야 한다.
그리고 여기에 요즘은 일반 컴퓨터(PC)와 연결해서 보다 다양한 기능들을 할 수 있게 제공된다.
전화번호부등의 주소록관리, 사진이나 벨소리를 PC로 옮기거서 PC에서 핸폰으로 옮기는 기능들.. 이런 다양한 기능을 하는 프로그램들 하나하나를 담당하는 사람들이 전부 나눠서 만든다고 보면 된다.
뭐 사실 분야를 복잡하게 나눠서 그렇지 기본적으로 하는 일은 거의 다 비슷하다. 하루종일 컴퓨터 앞에 앉아서 자신이 맡은 분야에 맞는 프로그램을 개발한다.
업무적 특성상 우리쪽 일을 하는 사람들을 농담처럼 ET형 인간이라 자조섞어 부른다.
하루종일 앉아서 일하다 보니 다리는 약해지고 배만 나오고 키보드를 향에 뻗은 팔에 손가락만 움직여서 가늘고 길게 나오고 머리는 모니터를 향해 앞으로 쭉 내밀고 보다 잘 보기 위해 눈은 돌출된 모습에 ET. ㅠ.ㅠ
지금 이 글을 쓰는 나도 저런 모습을 갖지 않기위해 등산도다니고 수영도 하고 인라인도 타고 다양한 운동들을 즐기려고 노력한다. (시간이 허락하는한..) 원래 운동을 좋아하기 때문에..
기본적으로 프로그램은 장비들이 사용자가 원하는 기능을 버튼등을 조작하였을때 원하는 데로 반응하고 결과를 보여주도록 만드는 것이다.
하지만 만드는 사람 역시 신은 아닌지라 실수가 따른다.
우리는 그것을 버그(bug)라 부른다. 단어뜻 그대로 벌래다..
이런 벌래들이 프로그램 코드안에 많이 있을때 그것들을 잡으러 프로그래머들은 밤낮을 안가리고 노력한다. 그래야 재대로 동작하는 프로그램이 될테니까..
일반인들의 경우 프로그래머들은 낮밤을 바꿔가며 생활하기를 즐기는 특이한 인간들로 알고 있다.
하지만 이들도 사람인지라 업무시간에만 일하고 나머지 여가 생활을 하며 놀기를 좋아 한다.
그러나 현실은 언제나 짧은 개발 일정에 말도 않되는 무리한 기능들을 넣고 적은 개발비를 제공하는 것이 일반적인 업체들의 현실인지라 시간에 몰려 개발을 하다보니 밤을 새는 것 또한 많은 것이 사실이다.
우리나라가 IT강국이라고 큰 소리 치는 부분 중 하나는 이런 현실들 속에서 묵묵히 맡은바 일을 다하는 프로그램머들이 개인을 희생하며 개발하는 것들이 빛을 보는 경우가 그나마 많았기 때문이다.
개발에 참여하는 한 사람으로서 정말 좋은 프로그램들을 만들고 싶다 하지만.. 우리나라에서는 1년짜리 프로젝트를 하면 2달간 설계하고 5개월동안 구현해서 3개월간 수정하고 나머지 2개월간 테스트와 Debugging이라는 버그 잡는 일들을 한다.
하지만 외국에서는 6개월간 설계하고 3개월간 구현해서 3개월간 테스트와 Debugging으로 끝을 낸다.
언듯 들으면 이해가 되지 않겠지만.. 설계란 사용자의 요구를 분석하고 개발 장비에 넣어야 하는 기능들을 나누고 그 기능을 수행하는데 사용자가 반응하거나 요구하고 보여주고 처리되어야 하는 사용자 시나리오를 짜서 하나하나 검증하고 확인해서 필요로 하는 기능을 사용자가 보다 쉽게 사용할 수 있고 정확한 기능을 수행하도록 내용을 정리하는 과정을 말한다.
하지만 우리나라는 대강의 기능만 정리해서 정확한 사용자 시나리오 없이 프로그램을 구현하길 바라고 구현된 내용을 보고 나서야 다시 기능을 수정하는 식으로 만든다.
따라서 원하는 기능이란 항상 바뀐다. 사람이란 참으로 간사해서 눈으로 뭔가를 보고 나면 보다 좋게 되길 바라기 때문에 처음 고려되지 않은 수많은 기능들을 다 넣어주길 바란다. 기능들을 넣다보면 사용자가 1년에 한번 쓸까 말까 하는 기능들도 있다.
아무튼 일의 순서가 뒤죽박죽 되기도 하고 처음부터 다시 만드는게 수정하는 것보다 빠른 경우도 있다. 하지만 만약 2달걸려 만든걸 수정하면 1달이 걸리고 새로 만드는게 1달 반이 걸린다면.. 역시 새로만들기 보다는 1달동안 수정한다. 여러가지 꽁수들을 동원해서..
왜? 기간에 맞춰야 하니까.. 따라서 문제도 많이 발생한다. a라는 기능과 b의 기능을 더해서 a와 b가 모두 잘 되면 좋겠지만..
음식에 비유해서 찌게 끓일때 한번에 간을 맞추면 맛있는 음식이 되겠지만 간이 않맞아서 소금넣었다가 다시 너무 짜서 물을 더넣구 다시 싱거워져서 소금을 더 넣구 맛이 더 있어야 겠지 않겠냐고 된장도 좀더 풀고 파, 마늘 다시더 넣어보고 이렇게 몇번 반복해보면 과연 이 찌게는 무슨 맛일까?
프로그래머의 역할이 주방장 처럼 모든걸 혼자 알아서 한다면 어찌될지 모르겠지만 대부분의 경우 중간자 입장에서 구현한다 마치
사람으로 비유한다면 소개팅의 주선자 처럼.. 사람끼리도 만나서 연인이나 친구가 되려면 여러가지 일들을 겪고, 싸우기도 하고 화해도 해야 하니까.. 프로그래머들은 두 기능을 서로 소개팅해주고 싸우면 달래서 화해시키고 둘 사이를 가깝게 하는 궂은 일 들은 도맡아 처리해 줘야 한다..
참으로 열악하고 힘든 상황에서 항상 모자라는 인력으로 일을 한다. 마치 모두 강철같은 체력과 명석한 두뇌를 가진 사람들인 양.. 하긴 어디나 힘들지 않은 일이 어디 있겠는가 마는......
개인적으로 이 글을 읽은 사람들이 나처럼 프로그래밍 하는 사람들에 대해 조금은 이해가 되었으면 좋겠다는 생각으로 쓰기 시작 했는데 쓰다보니 개인적인 푸념에 가까운 이야기들이 많아져 버렸다. 조금이나마 프로그래밍을 하는 사람들을 이해하는데 도움이 되었기를 바랍니다.
임베디드 프로그래머에 대해 아시나요?
내가 하는 일은 프로그래머다..
더 구체적으로 말하면 임베디드(embedded) 프로그래머(programmer)다.
이런 쪽 일(프로그래밍)을 하고 있지 않는 대부분의 사람들이 나에게
"무슨일 하세요?"라고 물을때 내 일에 대해 있는 그대로 임베디드 프로그래머(embedded programmer)라 이야기하면 정확히 이해하는 사람은 거의 없다.
사실 프로그래머라고 하면 게임프로그램과 웹쪽말고 다른 분야를 떠올리는 사람이
전체의 10%미만으로 보면 되니까.
Embedded + Programmer 는 사전적인 의미로
em
bed [imbed, em-] vt. (~
ded; ~
ding)
수학】 끼워넣다
vi. 끼워넣어지다 ((in))
ment n.
1 깊숙이 박다, 파묻다
2 (마음 속 등에) 깊이 간직하다 ((in))
3 【언어
~
pro
gram
(m)er [prougræm
, -gr
m-|-græm-]n.
TV】 프로 작성자
교육】 프로그램 작성자
1 《미》 【라디오
2 【컴퓨터
라고 정의 된다.
위의 뜻 만으로 보면 뭔가 끼워넣어서 만드는거 같긴 할꺼다.
백과 사전에서 프로그래머는 다음과 같이 정의한다.
"프로그래머는 컴퓨터 프로그램의 논리나 알고리즘을 설계하고, 원시 코드를 작성하여 테스트하는 사람을 말한다. 프로그래머는 시스템 분석자(systems analyst)가 설계한 내용을 알고리즘을 통해 프로그램으로 구현하는 사람으로서, 시스템 분석자·데이터베이스 관리자(DBA : database administrator) 등과 함께 한 팀이 되어 과업을 수행하는 경우가 많다.
프로그래머로서 일을 하기 위해서는 적어도 컴퓨터에 대한 충분한 지식이 필요하며, 프로그램 언어·오퍼레이팅 시스템의 명령·파일링 시스템의 운용법·화면설정·기타 작업도구 사용법 등을 숙지해야 한다.
최근에는 컴퓨터 기종과 기능의 확대에 따라 화면응답·온라인·마이크로컴퓨터에 의한 제어·컴퓨터 네트워크 등의 다방면에 걸친 응용이 보급되어 프로그래머에게 요구되는 지식도 광범위해져 가고 있다. 프로그래머가 되기 위해서는 세심한 주의력을 가질 것, 실수가 적을 것, 깊은 추리력이 있을 것 등이 기본적 소질로 요구된다.
사실 프로그래밍은 컴퓨터 응용프로그램을 개발하는 중추적인 입장에 있는 중요한 작업이지만, 프로그래머들은 프로그램을 작성하는데 그들이 초기에 예상했던 것보다 더 오랜 시간을 소모한다는 점에 대해서 많은 비난을 받기도 한다."
본론 들어가기 전부터 너무 진빠지게 해버렸나? 아무튼
프로그래머의 분야는 일반인이 생각하는 것처럼 간단하지 않다.
매우 다양한 분야가 존재하고 그 분야 만큼이나 하는 일도 천차 만별인데.. 어떻게 설명하는게 좋을까?
작가라는 일에 비유한다면. 드라마작가도 있고 소설을 쓰는 사람도 있고, 동화를 쓰는사람, 희곡을 쓰는사람, 방송 대본을 쓰는 사람, 영화대본을 쓰는 사람등 다양한 분야가 있을 것이다.
그리고 큰 작품을 혼자 쓰기보다는 나눠서 작업을 할때 스토리 라인만 만드는 사람이 있고, 스토리 라인에 에피소드들을 더해 재미를 붙이는 사람이 있고, 글을 정리하고 마무리 하는 사람이 있을테고.. 하여튼 다양한 분야가 존재 할것이다.
프로그램을 짜는 사람들도 다양하다. 하드웨어 장비(보통 사용자들이 만지는 물리적인 본체들)간에 의사소통을 하도록 하는 사람(디바이스 드라이버 개발자) 사용자가 입력한 자료들을 정확히 저장하고 보여지도록 하는 사람(데이터 베이스 설계 또는 개발자) 사용자에게 보다 보기 좋게 기능을 사용하는데 편리하도록 개발하는 사람(UI 설계 또는 개발자등).
비유를 하다보니 (이런 말도 않되는 비유를 쓰다니..)프로그래밍을 하는 사람들이 이걸 보면 이걸 비유라고 했냐며 나에게 돌을 날릴지도 모르겠다.
일반적으로 임베디드쪽 업무들은 여러가지 다양한 장비에 들어가는 프로그램을 만드는 사람을 통칭해서 임베디드 프로그래머라고 한다.
여기서 다양한 장비라 함은 핸드폰, 디지털 카메라, MP3, Settop Box, 게임기, PDA, 인터폰 등등..
요즘은 대부분 하나의 장비에서 원래 하나의 기능만 하는 경우는 거의 없다.
뭔가 복잡하고 다양한 기능들이 있다. 왜? 사는 사람이 그런걸 좋아하니까.
(대표적으로 핸드폰에 카메라를 달고, 음악을 듣고, 영화도 볼수 있다, PDA에서도 전화가 되야 한다.
요즘은 PDA에도 카메라랑 전화를 달아서 사용하도록 한다. 그리고 이런걸 비싸게 팔아도
잘 팔린다.) 우린 이런 장비를 복합단말이라고 부른다.
이런 복합단말에는 다양한 기능을 갖다보니 그 기능을 위한 프로그램도 다양하게 있다.
예를 들어 핸드폰의 경우 핸드폰에는 다양한 프로그램들이 있다.
전화번호부, 전자수첩, 제어판, 사진촬영, 앨범관리, 음악플레이어, 동영상 플레이어, 인터넷접속, 다이얼링 프로그램등..
그리고 여기에 요즘은 일반 컴퓨터(PC)와 연결해서 보다 다양한 기능들을 할 수 있게 제공된다.
전화번호부등의 주소록관리, 사진이나 벨소리를 PC로 옮기거서 PC에서 핸폰으로 옮기는 기능들.. 이런 다양한 기능을 하는 프로그램들 하나하나를 담당하는 사람들이 전부 나눠서 만든다고 보면 된다.
뭐 사실 분야를 복잡하게 나눠서 그렇지 기본적으로 하는 일은 거의 다 비슷하다. 하루종일 컴퓨터 앞에 앉아서 자신이 맡은 분야에 맞는 프로그램을 개발한다.
업무적 특성상 우리쪽 일을 하는 사람들을 농담처럼 ET형 인간이라 자조섞어 부른다.
하루종일 앉아서 일하다 보니 다리는 약해지고 배만 나오고 키보드를 향에 뻗은 팔에 손가락만 움직여서 가늘고 길게 나오고 머리는 모니터를 향해 앞으로 쭉 내밀고 보다 잘 보기 위해 눈은 돌출된 모습에 ET. ㅠ.ㅠ
지금 이 글을 쓰는 나도 저런 모습을 갖지 않기위해 등산도다니고 수영도 하고 인라인도 타고 다양한 운동들을 즐기려고 노력한다. (시간이 허락하는한..) 원래 운동을 좋아하기 때문에..
기본적으로 프로그램은 장비들이 사용자가 원하는 기능을 버튼등을 조작하였을때 원하는 데로 반응하고 결과를 보여주도록 만드는 것이다.
하지만 만드는 사람 역시 신은 아닌지라 실수가 따른다.
우리는 그것을 버그(bug)라 부른다. 단어뜻 그대로 벌래다..
이런 벌래들이 프로그램 코드안에 많이 있을때 그것들을 잡으러 프로그래머들은 밤낮을 안가리고 노력한다. 그래야 재대로 동작하는 프로그램이 될테니까..
일반인들의 경우 프로그래머들은 낮밤을 바꿔가며 생활하기를 즐기는 특이한 인간들로 알고 있다.
하지만 이들도 사람인지라 업무시간에만 일하고 나머지 여가 생활을 하며 놀기를 좋아 한다.
그러나 현실은 언제나 짧은 개발 일정에 말도 않되는 무리한 기능들을 넣고 적은 개발비를 제공하는 것이 일반적인 업체들의 현실인지라 시간에 몰려 개발을 하다보니 밤을 새는 것 또한 많은 것이 사실이다.
우리나라가 IT강국이라고 큰 소리 치는 부분 중 하나는 이런 현실들 속에서 묵묵히 맡은바 일을 다하는 프로그램머들이 개인을 희생하며 개발하는 것들이 빛을 보는 경우가 그나마 많았기 때문이다.
개발에 참여하는 한 사람으로서 정말 좋은 프로그램들을 만들고 싶다 하지만.. 우리나라에서는 1년짜리 프로젝트를 하면 2달간 설계하고 5개월동안 구현해서 3개월간 수정하고 나머지 2개월간 테스트와 Debugging이라는 버그 잡는 일들을 한다.
하지만 외국에서는 6개월간 설계하고 3개월간 구현해서 3개월간 테스트와 Debugging으로 끝을 낸다.
언듯 들으면 이해가 되지 않겠지만.. 설계란 사용자의 요구를 분석하고 개발 장비에 넣어야 하는 기능들을 나누고 그 기능을 수행하는데 사용자가 반응하거나 요구하고 보여주고 처리되어야 하는 사용자 시나리오를 짜서 하나하나 검증하고 확인해서 필요로 하는 기능을 사용자가 보다 쉽게 사용할 수 있고 정확한 기능을 수행하도록 내용을 정리하는 과정을 말한다.
하지만 우리나라는 대강의 기능만 정리해서 정확한 사용자 시나리오 없이 프로그램을 구현하길 바라고 구현된 내용을 보고 나서야 다시 기능을 수정하는 식으로 만든다.
따라서 원하는 기능이란 항상 바뀐다. 사람이란 참으로 간사해서 눈으로 뭔가를 보고 나면 보다 좋게 되길 바라기 때문에 처음 고려되지 않은 수많은 기능들을 다 넣어주길 바란다. 기능들을 넣다보면 사용자가 1년에 한번 쓸까 말까 하는 기능들도 있다.
아무튼 일의 순서가 뒤죽박죽 되기도 하고 처음부터 다시 만드는게 수정하는 것보다 빠른 경우도 있다. 하지만 만약 2달걸려 만든걸 수정하면 1달이 걸리고 새로 만드는게 1달 반이 걸린다면.. 역시 새로만들기 보다는 1달동안 수정한다. 여러가지 꽁수들을 동원해서..
왜? 기간에 맞춰야 하니까.. 따라서 문제도 많이 발생한다. a라는 기능과 b의 기능을 더해서 a와 b가 모두 잘 되면 좋겠지만..
음식에 비유해서 찌게 끓일때 한번에 간을 맞추면 맛있는 음식이 되겠지만 간이 않맞아서 소금넣었다가 다시 너무 짜서 물을 더넣구 다시 싱거워져서 소금을 더 넣구 맛이 더 있어야 겠지 않겠냐고 된장도 좀더 풀고 파, 마늘 다시더 넣어보고 이렇게 몇번 반복해보면 과연 이 찌게는 무슨 맛일까?
프로그래머의 역할이 주방장 처럼 모든걸 혼자 알아서 한다면 어찌될지 모르겠지만 대부분의 경우 중간자 입장에서 구현한다 마치
사람으로 비유한다면 소개팅의 주선자 처럼.. 사람끼리도 만나서 연인이나 친구가 되려면 여러가지 일들을 겪고, 싸우기도 하고 화해도 해야 하니까.. 프로그래머들은 두 기능을 서로 소개팅해주고 싸우면 달래서 화해시키고 둘 사이를 가깝게 하는 궂은 일 들은 도맡아 처리해 줘야 한다..
참으로 열악하고 힘든 상황에서 항상 모자라는 인력으로 일을 한다. 마치 모두 강철같은 체력과 명석한 두뇌를 가진 사람들인 양.. 하긴 어디나 힘들지 않은 일이 어디 있겠는가 마는......
개인적으로 이 글을 읽은 사람들이 나처럼 프로그래밍 하는 사람들에 대해 조금은 이해가 되었으면 좋겠다는 생각으로 쓰기 시작 했는데 쓰다보니 개인적인 푸념에 가까운 이야기들이 많아져 버렸다. 조금이나마 프로그래밍을 하는 사람들을 이해하는데 도움이 되었기를 바랍니다.