메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

컬럼/인터뷰 >

프로그래머 커리어를 성장시키는 4가지 방법

한빛미디어

|

2015-12-04

|

by 한빛

14,690

제공 : 한빛 네트워크
저자 : Rachel Roumeliotis
역자 : 김준호
원문 : Software engineers must continuously learn and integrate



오라일리(O’Reilly)가 프로그래밍 정보 생태계를 만들면서, (이제 거의 30년이 되어가는군요.) 몇 가지의 중요한 언어, 운영체제, 그리고 1980년대의 많은 편집자들을 흥분시켰던 다양한 토픽의 개념들을 다루었습니다. 그러나 우리의 목표는 아직 바뀌지 않았습니다. 전문가들의 일을 돕기 위한 실용적인 내용을 제공하는 것이죠. 곧 이슈화가 될 만한 주제를 지속적으로 알려주는 것이 중요한 목표 중 하나입니다. 내용을 제공한 후에는 곧 이어서 우리가 주목 할 만한 중요한 몇 가지 테마가 생겨나게 됩니다. 그리고 이런 핵심 주제가 혁신의 속도와 함께 진화하고 변화할 것입니다.

여러분은 최근의 분석과 발전 과정을 우리의 주간 Programming newsletter를 통해서 접할 수 있습니다.

실제로 소프트웨어 엔지니어가 된다는 것

"풀 스택"이라는 용어는 2008년 한 블로그 포스트를 통해서 처음 등장했습니다(현재는 이 포스트는 더 이상 접근 할 수 없습니다). 이 용어는 아마 페이스북 엔지니어인 Carlos Bueno에 의해 정의된 표준단어라고 추정할 수 있습니다.

   

"’풀 스택 프로그래머’는 다방면에 걸쳐서 자신의 능력을 특정 애플리케이션에 국한시키지 않은 사람을 칭합니다. 광범위하고, 서로 다른 시스템 환경에서도 훌륭하게 동작할 수 있는 기술을 활용할 수 있는 능력을 갖춘 사람을 말합니다."

 

여러분이 풀 스택 프로그래머, T 자형 엔지니어, 혹은 이런 용어와 전혀 관련이 있던지 없던지 "풀 스택 개발자"의 정의는 모호합니다.

Matt Makai는 풀 스택 개발자의 수요가 급증 할 무렵인 2014년 초반에 2013년 구글 트렌드에서 성장하기 시작한 용어라는 사실을 주목했습니다. 그러나 더 중요한 사실은 그가 커리어 선택에 관련해서 관련 용어를 사용했다는 사실입니다.

 

"풀 스택 개발자는 특정 소프트웨어 전반적인 모든 레이어에 걸쳐서 생산적인 커리어를 꾸릴 수 있는 소프트웨어 개발자를 말합니다. (중략) 풀 스택 개발자는 소프트웨어 레이어 간의 부족한 지식을 파악하고, 이미 잘 알고 있는 지식에 깊이 파고드는 대신, 이 약점들을 보완하는 활동에 시간을 투자하는 사람들입니다. 예를 들어, 대부분의 시간을 데이터베이스 관련 업무를 하는 개발자가 대부분의 시간을 CSS, HTML, 그리고 웹 페이지 디자인을 배우는 식입니다."

 

Simon St. Laurent가 작성한 글인 "Web by default"는 오늘날 개발자에게 요구되는 기술들이 확장되고 있다고 언급했습니다.

엔지니어링(engineering)을 위키피디아에서 어떻게 정의하고 있는지 살펴보죠.

 

"엔지니어링(‘영리함’이라는 뜻을 가진 라틴어 ingenium와 "고안하다"라는 의미의 ingeniare에서 유래한 단어)은 과학적, 경제학적, 사회학적, 그리고 실용적인 지식으로서 발명, 설계, 건설, 유지, 연구, 그리고 구조, 기계, 장치, 시스템, 물질, 프로세스 등을 향상시키는 목표를 가지고 있다."

 

그리고 위키피디아가 엔지니어에 대한 정의를 다음과 같이 하고 있습니다:

 

"(중략) 공학 전문직 종사자로서 과학적 지식과 수학, 독창적인 방법을 적용하여, 기술적이고 사회적이고, 상업적인 문제를 해결하는 것을 다룬다."

 

distributedMEAN, 또는 ELK 스택 등 여러 분야에 걸친 지식을 가진다는 사실은 간단히 훌륭한 소프트웨어 엔지니어가 되는 측면 중 하나입니다. 오늘날 엔지니어는 어떤 기술이 문제를 잘 풀 수 있을까에 대한 지식을 알아야 하며, 프로젝트나 회사, 커뮤니티 등의 큰 그림을 보고 결정해야 합니다. 회사의 업무를 훨씬 더 큰 기술 스택에 맞추어가는 작업도 중요합니다. 엔지니어 자체가 풀 스택이나, T 자형이나, 고립되거나, 하나의 기술을 숭배하거나, 오픈소스에 대한 모든 것만을 아는 사람이 되어서도 안됩니다. 엔지니어는 아이디어와 제품, 목표를 도달할 수 있는 실용적인 지식과 함께 비즈니스적인 부분을 담당해야만 합니다.

문제를 이해하고, 문제를 해결하기

소프트웨어 엔지니어가 되는 것을 고려하지 말라는 말은 아닙니다. 만약 여러분이 비즈니스적인 측면에서 중요한 역할을 담당하고 있다면, 소프트웨어 아키텍트가 되는 것을 고려해볼 수도 있습니다. 문제를 풀려고 하지 말고, 어떻게 문제를 풀어야 하는지를 배우세요. 실제로 어떻게 동작하는지를 안다면, 해당문제를 다루고, 분명하게 하고, 새로운 작업대로 옮겨갈 수 있는 개연성을 가질 수 있습니다. 

 

성공적으로 프로젝트를 완수해도, 이 기술에서 왜, 그리고 어떻게 적용되는지를 배우는 작업은 현재 상황을 넘어서 새로운 영향을 받을 수 있습니다.

 

기술을 성공적으로 활용하면 프로젝트는 진행할 수 있지만, 시간을 내서 왜, 그리고 어떻게 기술이 프로젝트에 적용되는지를 배운다면, 현재 상황을 뛰어 넘는 영향을 받을 수 있습니다. 기능적 접근이 객체지향적 접근보다 더 나을지도 모른다든지, 왜 소프트웨어 아키텍트가 반응형 아키텍처를 비 반응형 아키텍처를 선택했는지 등은 현재 어떻게 이 문제를 해결했는지 뿐만 아니라, 일반적으로 문제를 어떻게 해결하는지의 통찰력을 얻을 수 있습니다.

물론 코드수준에서 끝나는 것은 아닙니다. 팀으로 일하고, 개개인을 관리하고, 예산과 스케줄을 따라서 업무를 수행하는 모든 일이 한 사람 이상의 전문 지식을 요구합니다. 서로 다른 관점에서 문제를 바라볼 수 있는 능력은 상당히 중요합니다(설계 관점에서 문제를 고려해보셨나요? 훨씬 더 좋을 겁니다). 그리고 다른 이들에게부터 의견을 받는 것 또한 중요합니다. 다양한 팀 멤버와 함께 요구사항, 시간, 예산 그리고 언어 제약사항을 다루면서 문제에 대한 해답을 얻기는 어렵지만, 반드시 얻을 수 있습니다.

오픈소스 문화와 코드를 통합하기

오픈소스를 사용하면 기술적으로, 그리고 문화적으로 둘 다 PayPal, IBM, Microsoft와 같이 혁신적으로 각성할 수 있는 기회가 될 수 있습니다. 일반적으로 오픈소스는 강하고, 열정있고, 소프트웨어 프로젝트를 양육시킬 수 있는 커뮤니티입니다. 오픈소스 소프트웨어를 상업적인 방법이라고 말하기에는 잘못된 방법일 수도 있습니다. 그러나, 오픈소스 문화는 이제 막 발전하기 시작한 단계일 뿐입니다. 상업적인 용도의 오픈소스는 지속적으로 통합되고 있고, 내부적으로 소스작업이 이루어지고, 인큐베이팅 프로젝트가 전부입니다.

이 오픈소스를 조금 더 자세히 살펴봅시다. 그 어떤 이익을 내기 위한 소프트웨어팀도 프로젝트가 모든 기능이 완벽하게 구현될 때까지 더 이상 기다리지 않습니다. 프로젝트를 더 좋게 하는 작업은 즉각적으로 이루어지고, 피드백 또한 내/외부적으로 수집됩니다. 이너 소싱(Inner-sourcing)이라는 말(Tim O’Reilly에 의해 유명해진 단어)는 엔터프라이즈 상의 협동적인 오픈소스 개발기술을 칭합니다. 그리고 이제는 산업계의 표준이 되어가고 있습니다. 마이크로소프트는 ASP.NET과 같이 그들의 핵심 프로젝트를 오픈소스화하였습니다. 산업계에서 영향력 있는 프로젝트들은 이제 비교적 적은 인원의 팀으로 개발되고 있습니다. 스타트업 뿐만 아니라 일반 기업에도 해당이 됩니다. 이 프로젝트들은 모두 인큐베이팅 프로젝트로 실제 수익 측면에서는 멀지만, 예산에 많은 제한을 즉각적으로 받지는 않습니다. 그리고 이 프로젝트들은 투자대비 수익을 기대하기보다 회사의 미래를 책임지는 의무를 부여하는 셈입니다. 구글은 구글 글래스와 무인자동차 프로젝트를 포함하는 구글 X(Google X)라는 프로젝트를 운영하고 있습니다. 이 두 개의 프로젝트가 성공적이지는 않고, 시장에 영향력을 생성하지는 않더라도, 우리는 이 기술들이 미래 구글에 성공적인 수익을 가져다 줄 프로젝트라고 확신할 수 있습니다. 사실 구글 글래스 2.0은 이제 인텔 칩으로 동작합니다. 이런 종류의 변화를 여러분의 업계에서 발견할 수 없다면, 여러분이 이 역할을 해야 합니다. 이런 방식이 우리가 지금까지 보아온 기술 산업계에서 변화의 새로운 표준입니다.

모바일에 대한 인식을 확장하기

모바일 디바이스는 지속적으로 증가하고 있습니다. 스마트폰과 태블릿은 이제 상상할 수 있는 모든 크기가 되었습니다. 웨어러블은 어느 장소에나 가능합니다. 시계에서부터 혈당 모니터 기기까지, 그리고 Nest와 같은 사물 인터넷 디바이스가 집안 곳곳에 존재합니다. 이런 기기들은 결제, 위치기반, 실시간 분석, 증강현실 등의 기능과 방대한 양의 인터넷 네트워크 서비스를 위한 하드웨어 인터페이스라고 볼 수도 있습니다.

프로그래밍 세계상에서 이 부분에 ‘모바일’이라는 이름을 붙이는 행위 자체가 문법적으로는 옳을 수도 있습니다. 하지만 지나치게 제한적인 작업이 되어버릴 수도 있습니다. 이 분야에서는 하드웨어, 웹, 데이터, 클라우드 컴퓨팅 모든 분야가 포함되어 있기 때문입니다(Jon Bruner의 포스팅인 convergence of hardware and software와, Ben Lorica의 data trends를 확인해보세요). 혁신은 바로 이곳에서 이루어지고 있습니다. 음성 인식 분야는 새로운 커맨드 라인이 되었고, (구글 Now 와 시리(Siri)는 음성 인식뿐 아니라, 예측 분석을 제공합니다.) 근거리 통신(NFC)는 결제 문화에 혁명을 가능하게 하고 있습니다. 이 혁신은 서비스 제공자, API 라이브러리 프레임워크에 새로운 생태계를 가져오고 있습니다. 이 분야의 기술 커뮤니티의 혁신 속도는 너무나 빠르고, 흥미로워서 지속적으로 어떤 변화가 일어나는지 주시하고 있지 않으면, 따라잡기 어려울 정도입니다.

이것은 단지 시작점에 불과하다

오늘날 우리는 하루하루가 바쁜 가운데 있고, 혁신도 매 순간순간 있지도 않지만, 혁신이 어디 있는지 알 수 있는 사람들에게는 항상 존재합니다. 우리는 이런 기회들을 더 잘 찾아낼 수 있도록 관점을 제공할 것입니다. 그렇게 되면, 여러분은 우리의 전문가 튜토리얼, 잘 정의된 프레임워크, 문제 해결 기술, 그리고 핵심 기반을 지속적으로 볼 수 있습니다.

 

 

댓글 입력
자료실