임베디드 SW 분야의 art(?)는 뭘까요?

b4dragon의 이미지

근래에 회사에서 살아남고(?) 싶다면 art를 하라는 글을 보았습니다.

남들이 하지 못하는 것을 해야 살아 남을 수 있다 하더군요.

일을 시작한지 얼마 안되는 사람이어서 그런지 이쪽 분야의 art가 무엇일까 하는 질문의 답이 생각나질 않았습니다.

그래서 이야기를 해보고자 합니다.

임베디드 SW 분야의 ART가 무엇일까요?

일단 저는 임베드디 라면 hw와 맞물려 돌아가는 부분에 능해야 된다고 생각합니다.

예를 들면

1. 하드웨어 구성 부분에 있어서 hw 담당자와 비슷하게 알아야 하며
2. sw 담당자이니까, 아직까지는 c에 능해야 됩니다.
3. 단순 노가다 방지를 위해서 스크립트에도 능해야 된다.

라는 흔해빠진 추상적인 임시 결론을 내렸습니다.

목표가 명확해야 가는 길이 보일 텐데, 짧은 지식으로 그러지 못하고 있습니다.

이 글을 보시는 여러분의 생각은 어떠 신가요? 여유가 되신다면 자신의 생각 혹은 타인의 생각을 적어 주시면 방황하는 저 포함 여러 초심자에게 도움이 될것 같습니다.

mike1의 이미지

그 외에는 ....

b4dragon의 이미지

정답이네요. 어으썸.~

bus710의 이미지


임베디드라면 물리에도 일가견이 있어야 하지 않나... 하는 생각이 듭니다.
제가 그렇다는건 아닙니다.

life is only one time

b4dragon의 이미지

물리.. 엄... 애매하군요.

february28의 이미지

임베디드는 모르겠고...
임베디드 리눅스를 포함한 리눅스는 Open...더나아가 민주주의고 나눔,베품이라 봅니다.

--------------------------------------------------------------------------------
open source, open teaching, 천기누설이 꿈~ 은 개뿔...
--------------------------------------------------------------------------------

b4dragon의 이미지

나눔, 베품 어감이 참 좋은 말이네요.

asiawide의 이미지

원래 영화를 보면 히어로가 마지막에 아무도 못하는 일을 끝내면 사람들이 '우와와와와~' 환호를 해주는데 현실에서는 '아우 언제 끝나냐?' 라고 주변에서 뒷짐지고 쳐다보는 사람들에 둘러쌓이게 될 것입니다.

b4dragon의 이미지

한명이 삽질하고 나머지 사람들이 뒤에서 보고 있는 사진이 생각납니다.

kohyc의 이미지

이거 할줄 모르면 임베디드 SW엔지니어 아닙니다.

hb_kim의 이미지

가치지향적인 답변은 사실 있으나 마나합니다.

1. 하드웨어 구성 부분에 있어서 hw 담당자와 비슷하게 알아야 하며
2. sw 담당자이니까, 아직까지는 c에 능해야 됩니다.
3. 단순 노가다 방지를 위해서 스크립트에도 능해야 된다.

당연히 HW 도 잘알고 C 프로그래밍도 잘하고 스크립트도 잘하면 좋겠죠. 하지만 이런 답변이 도움이 된다고 보긴 어렵습니다. 이것은 마치 "취업을 잘하려면 어떻게 하죠" 라는 질문에 "명문대학 인기학과를 좋은 학점으로 졸업하면 취업이 잘되요~" 식의 답변이나 마찬가지 아닙니까?

같은 능력과 노력을 들인다는 가정을 기반으로 자신이 선택할수 있는 커리어 방향만을 바꿈으로써 더 좋은 결과가 나오는 것이 필요하지 않겠습니까?

사실 회사를 오래 다닐수 있는 방법은 근속연수에 따라 올라가는 급여를 상회하는 이익을 지속적으로 회사에 제공하는 것입니다. 좀더 정확히 말하자면 본인이 이러한 이익을 회사에 제공하고 있다는 인상을 경영진에게 주는 것입니다. art 를 하느니, 남이 못하는 일을 하느니 하는것은 이를 보다 모호한 다른 말로 표현한 것입니다. 회사에서 살아 남기위해 남이 못하는 일을 할 필요는 없죠. 다만 학교를 갓 졸업하고 들어오는 체력좋고 의욕있고 주위에 신경쓸것은 적고 일할 시간은 많고 임금은 상대적으로 싼 젊은 사원들과 경쟁해서 급여 차이 이상의 실적을 낼수 있어야 하죠.

원글님이 비교적 경력이 적으시다니, 반대의 입장에서 보면 됩니다.

본인은 학교에서 배운 지식과 위에 언급한 모든 장점을 가지고 선배들과 경쟁하려 하는데 상대적으로 업무를 파악하기 쉽고, 학교에서 배운 지식과 그동안 쌓아온 프로그래밍 실력으로도 충분히 업무를 감당하기 쉬운 분야가 있습니까? 이런 분야에서 업무를 계속하다 보면 몇년뒤에는 신입사원들과 경쟁해야 할때 신입 사원들에 비해 월등히 높은 실적을 내기가 어려운 경우도 있을수 있겠죠.

반면, 현재 보시기에 저 선배는 중요한 일을 하고 있기는 한것 같은데, 정확히 어떻게 뭘하고 있는지 도대체 모르겠고 일을 배우려해도 잘 정리되어 있는것도 없고, 체계적으로 배우기도 힘든데다가, 풀기 어려운 복잡한 문제가 끊임없이 나오는것 같다 싶으면 아마 그런일이 나중에 경력이 쌓이면 상대적으로 회사에서 살아남기에 좋은 직무일 가능성이 높습니다.

예로 제가 했던 일 몇개를 듭니다.

ARM 계열 임베디드 보드에서 모바일 스토리지 인터페이스 디바이스 드라이버 개발
- 모바일 스토리지 인터페이스 라는 것이 단순할 뿐더러, 디바이스 드라이버는 상당히 정형화된 소프트웨어 모듈이라 갓 대학 졸업한 신입사원이 자신이 할수 있다고 주장해도 그다지 이상하지 않을 정도의 수준 -> 직업 안정성 = 하

SAN 스토리지 시스템의 SCSI 디바이스 드라이버 개발
- 디바이스 드라이버가 상당히 정형화된 소프트웨어 모듈이라 프로그래밍은 어렵지 않으나, SCSI 를 제대로 알고 있으며 엔터프라이즈 스토리지의 고성능 고안정성 요구를 맞출수 있는 프로그래머 인력이 그다지 많지 않은듯? -> 직업 안정성 = 중하

ARM SMP 커널 개발
- SMP 커널이라는것이 학교에서 OS 개론 시간에 배우는것의 연장선에 있어서 상당히 쉬울것 같지만, 의외로 ARM 어셈블리를 쓰는 인력들이 많이 없는데다가 커널 개발후 이전 펌웨어를 SMP 로 포팅하는 과정에서 많은 비공개된 지식을 필요 -> 직업 안정성 = 중

SATA SSD FW 개발
- 매뉴얼이 수십개에 달하는 엄청나게 복잡한 ASIC 과, 얼토당토 않은 사제 커널, 항상 2% 부족한 디버깅 환경, 2년째 부족한 코드 메모리 공간, 데이터 메모리 공간과 싸우며 프로그래밍을 하지만, SATA 가 워낙 널리 퍼져있는 인터페이스라 오만가지 호환성 문제가 끊임없이 생김. SATA 를 진짜로 뿌리깊게 이해하고 있는 사람은 정말 유명한 IT 대기업(예로 CPU 만드는 I사, OS 만드는 M사, 웹 광고 회사인 G사 등)의 큰 부서라 해도 그 부서에 한 두명 있으면 다행이랄까... -> 직업 안정성 = 최상. 그러나 항상 위장병에 시달리며 꼭 먹고 살기위해 이런 짓을 해야하는지 회의가 종종 듬.

태훈의 이미지

hb_kim wrote:

ARM SMP 커널 개발
- SMP 커널이라는것이 학교에서 OS 개론 시간에 배우는것의 연장선에 있어서 상당히 쉬울것 같지만, 의외로 ARM 어셈블리를 쓰는 인력들이 많이 없는데다가 커널 개발후 이전 펌웨어를 SMP 로 포팅하는 과정에서 많은 비공개된 지식을 필요 -> 직업 안정성 = 중

한국에 잘나가는 ARM SoC 칩을 만드는 회사(S모사)가 있어서 ARM 어셈블리를 쓰시는 분들이 생각보다 많습니다. 'SMP 로 포팅하는 과정에서 많은 비공개된 지식'이 무엇을 의미하는지 모르겠네요.
리눅스 커널등의 오픈 소스 커널에서 사용되는 기법들과 논문등에서 다루는 SMP 최적화 기술 이외에 비공개 기술이 있다고 생각하지 않습니다.

hb_kim wrote:

SATA SSD FW 개발
- 매뉴얼이 수십개에 달하는 엄청나게 복잡한 ASIC 과, 얼토당토 않은 사제 커널, 항상 2% 부족한 디버깅 환경, 2년째 부족한 코드 메모리 공간, 데이터 메모리 공간과 싸우며 프로그래밍을 하지만, SATA 가 워낙 널리 퍼져있는 인터페이스라 오만가지 호환성 문제가 끊임없이 생김. SATA 를 진짜로 뿌리깊게 이해하고 있는 사람은 정말 유명한 IT 대기업(예로 CPU 만드는 I사, OS 만드는 M사, 웹 광고 회사인 G사 등)의 큰 부서라 해도 그 부서에 한 두명 있으면 다행이랄까... -> 직업 안정성 = 최상. 그러나 항상 위장병에 시달리며 꼭 먹고 살기위해 이런 짓을 해야하는지 회의가 종종 듬.

개인적인 호기심 입니다만, '매뉴얼이 수십개에 달하는 엄청나게 복잡한 ASIC' 칩이 무엇인가요?
하드웨어 스팩이 떨어지는 열악한 환경에서 프로그래밍은 말씀하신대로 때때로 바이너리를 분석해야 할 정도로 디버깅이 힘들지만 코드 라인이 얼마되지 않아서 결과적으로 고만고만 했습니다.
SATA 스팩은 말씀하신대로 매우 복잡하겠지만, 어차피 임베디드 시스템 프로그래머는 필요에 따라 USB, PCI등 스팩과 개발하는 제품에 사용되는 칩등을 항상 학습하면서 개발해야 하므로 fast learner가 되지 못하면 살아남지 못합니다.

Just do it!

hb_kim의 이미지

주제에 너무 벗어나지 않는 한도내에서만 사족을 답니다.

제가 ARM SMP 커널을 개발한것은 마벨이라는 반도체 회사에서 스토리지 디바이스 콘트롤러를 시작으로 기존의 커스텀 RTOS 커널을 수정해서 만들었습니다.

보통 geek 프로그래머의 입장에서 볼때 어떤 모듈을 개발한다고 하면 기존의 API 에 맞추어서 모듈을 설계 구현하면, 그외의 부분들은 수정없이도 잘 동작할수 있는 성격의 일을 선호하게 됩니다. 이를테면 리눅스 커널에서 ARM SMP 를 구현했다 치면 원래 리눅스가 범용 CPU 의 SMP 를 지원하고 있었으니까 핵심만 잘 바꾸면 일이 깔끔하게 마무리되는 것이죠.

하지만 스토리지 디바이스 펌웨어의 경우 SMP 라는 개념이 없었고 한개의 CPU에 시분할로, 혹은 두개의 CPU를 사용해서 서보 제어와 그외 다른 모든 태스크를 분할해서 쓰고 있었는데 이렇게 명확하게 API로 각 모듈간에 파티션이 나뉘어지지 않은 펌웨어의 경우 기존의 펌웨어를 수정하기 위해서는 그 펌웨어가 어떻게 설계 되었는지의 이해가 필요합니다. 또 고객에 따라 요구사항이 다른데 단지 명확한 API 를 제공하는 것만으로 지원이 끝나지 않는 경우가 있습니다. 고객들도 마찬가지로 SMP 라는 개념에 대한 이해가 없으니까, 단순히 API 의 스펙을 보는것으로 자신들이 원하는 기능을 어떻게 구현할지 감을 못잡는거죠. 게다가 고객들은 얼핏 생각하기에는 SMP 디자인 원칙에 맞지않는 얼토당토 않은 구현을 원할수도 있습니다. geek 프로그래머의 입장에서 볼때는 이 모든 것들이 매우 성가시고 귀챦은 일이죠.

하지만 이런 일 같은 경우 고객과 같이 일하면서 API 나 스펙에 적혀져 있지않은, 따라서 본인이 아니면 다른 누구도 알수 없는 고유의 지식을 얻게 됩니다.

리눅스 SMP 를 개발한 커널 프로그래머가 하는 일은 비슷한 지식과 능력을 가진 다른 커널 프로그래머가 비교적 쉽게 대신 할수 있습니다. 하지만 범용적이지 않은 플랫폼에서 SMP 커널을 개발한 개발자를 대체하려면 그 플랫폼에 대한 고유 지식과, 고객들의 요구를 이해하면서 비슷한 지식과 능력을 가진 다른 개발자를 찾아야 합니다. 아니면 새로온 개발자와 고객, 회사 모두가 어느정도 고통스런 적응과정을 거쳐야 겠지요.

위 문구에는 리눅스 커널 프로그래머를 폄하하려는 의도도 없고, 그 반대로 범용적이지 않은 플랫폼에서 일하는 개발자를 고평가하려는 것도 아닙니다. 그 둘이 같은 능력을 가진 사람일 수도 있고, 심지어는 동일인일 수도 있지요. 제가 말하고 싶은것은 업무의 특성에 따라 개발자와, 개발자의 위치간의 접착력이 클수도 있고 작을수도 있다는 것이지요.

태훈의 이미지

ARM 커널이 활용되는 도메인이 제가 생각하는 도메인과 다르군요.
저는 비교적 high-end를 타겟으로 생각하였다면, hb_kim님께서는 low-end를 타겟으로 ARM 커널 작업을 하셨군요.
같은 ARM 커널이라도 도메인에 따라 요구사항이 달라질테니, 하셨던 분야의 특성을 고려하면 어느정도 공감이 갑니다.

참고로 OSDI 2010에서 나왔던 Many Core 환경에서 리눅스 확장성을 분석한 논문이 있으니 관심있으신 분은 한번 보시길 바랍니다.

Just do it!

hb_kim의 이미지

이번엔 SATA 이야기를 하겠습니다.

가장 대표적인 스토리지 프로토콜에는 SCSI 와 ATA 가 있습니다. SCSI 는 앞서간 기술과 명확하게 정의된 스펙을 장점으로, ATA 는 가격이 싸다는 장점으로 공존해 왔습니다. 최근에 SATA 는 SCSI 의 장점을 많이 훔쳐와서 기술적으로는 상당히 큰 발전이 있었지만, 스펙 자체는 절대로 SCSI 의 명확성을 따라잡지 못하고, 아직도 모호하거나 바보같은 점이 많습니다.

SATA 스펙은 매우 복잡하다고까지는 할수 없을것 같습니다. 더 큰 문제는 스펙의 모호함과 이에 따라 가지각색의 규격을 가지고 있는 실제의 구현물입니다. 이를테면 칩셋업체 모사의 BIOS 나 OS 업체인 모사 디바이스 드라이버, 혹은 대형 PC 업체 모사의 테스트 소프트웨어, 장비업체 모사의 테스트 시스템 등등...

SCSI 에서 나온 문제는 버스 트레이스를 보면 대부분의 경우 어떤 문제인지 알수 있습니다. SATA 의 경우 버스 트레이스를 보고도 왜 시스템에서 문제를 발생했는지 알수 없는 경우가 훨씬 빈번합니다. 이를테면 특정 시스템은 SATA 링크가 올라간 후에 처음 FIS 가 10msec 내에 전송되지 않으면 문제가 발생합니다. 이런 동작 양상은 대부분의 경우 SATA 스펙 어디를 보더라도 그 기반을 찾을수 없고, 시스템의 스펙따위는 존재하지 않고, 설계 구현한 사람은 이미 회사를 그만둔 경우가 태반입니다.

따라서 업계에서 오래 있으면서 많은 문제를 보고 분석한 후에 각 장비/시스템마다 대강의 특성을 파악하고 있지 않으면 문제를 풀기가 까다로운 경우가 많습니다. 따라서 업무를 하는 동안은 상당히 비효율적인 디버깅으로 시간을 많이 소모하며 괴롭지만, 상대적으로 경력에 따라 몸값이 올라가는 것이 정당화 되는 경우입니다.

상대적으로 SCSI 는 이론적으로는 짧은 기간안에 스펙을 보기를 마치고 실제 문제를 풀수 있는 능력을 가지게 될수도 있습니다. (어디까지나 이론입니다. 실제로 실리콘 밸리에서 SCSI 전문가를 구인하려 하면 거의 찾을수 없습니다)

태훈의 이미지

단순한 수요와 공급 법칙인대요.
물론 이미 시장과 업계의 요구가 충분하고 그 분야에서 인정받고 있는 전문가분에게는 해당되지 않습니다.
특정한 기술을 잘아는 전문가는 그에 걸맞는 대우를 받는 것은 당연합니다. 하지만, 한가지 기술을 깊게 공부해서 그 분야의 전문가가 되더라도 수요가 없으면 말짱꽝이죠.
남주려고 공부하는데 필요한 사람이 없으면 쓸쓸하죠. 그래서 많은 수요가 있는 분야에서 전문성을 키워나가는 분들을 보면 부럽습니다. :)

Just do it!

shint의 이미지

//임베디드에서의 아트'
임베디드'에서 sw는 hw를 보조하기 위한 수단'일 수 도 있고. hw를 리드해줄 수 있는 멋진 기술이기도 해보입니다.

sw건 hw건 임베디드'건...
이 제품이 소비자에게 안전하고. 도움이 되는지. 개발자와 생산자가 공들여 작품으로 제작할만가'로 여겨집니다.

//개발자는 인건비로 산정되는가?
사람들이 좀 더 높은 스펙을 위해서. 잘못된 선택과 시스템으로 기술적. 지식적. 권위적.인것에 노력하게 되면.
잘못된 사회와 사람. 만들기를 도와주게 되니 위험합니다. 그것들은 계급과 계층. 이익의 담합을 위해 살아가게 만듭니다.

지금 우리 사회에 필요한건. 생산 < 안전 < 정화 청소. 입니다.
생활과 사회. 법. 문화를 안전하고. 건전하며. 깨끗하게 만들 수 있게 된다면.

예술을 넘는 아름다움으로 살아갈 수 있게 된다고 생각됩니다.
인위적이고. 조잡하게. 만들어진 예술이 아니라. 사람들의 노력과 정성.이 만들어가는 사회라는 예술이겠죠.

지금의 교육과 교통. 통신.에 필요한 기술. 환경. 디자인. 사람. 문화. 아름답게 만들기 위해서. 필요한건
돈'이 아니라. 그것에 대한 사랑과 정성입니다. 그게 모든것을 아름답게 만들고. 감동으로 만들며. 존경(동경)하게 만드는거죠.

이런데. 무슨 기술이 기능의 정도로 사람의 가치'가 평가될 수 있을까요...
사람의 가치와 의미라는 허상'은 단순합니다.

피카소의 작품은 몇백억.
박지성의 주급은 몇천만원.
배우가 씹던 껌이 몇백만원.
우리 조상님의 가치는 몇 백만원... 나의 가치는 몇 백만원.
시대를 만들어 가려는 마음. 의지가 그 시대를 만들게 됩니다.
우리가 돈'으로 얻은 모든것들이. 우리가 살아오던 시대와 사람을 버리고. 죽였습니다.

---------------------------------------------------------------------------------

하튼. 덧붙여서. 저는 소프트웨어 패키지'가 개인적으로 생산되서 거래되기를 바랍니다.
한글. 나모. V3.
정품 한번 제대로 사본적이 드문 저지만 말입니다. ㅠ_ㅠ...

//
소프트웨어 소스 공개와 저렴한 소스 거래. 저렴한 개발가격으로 개발 인력으로 팔려다니며.
개발자들의 개발 단가와 IT환경. 출판 시장을 죽이고.
P2P와 MP3. MP4. CD. DVD. PS. 핸드폰. 스마트폰.
무료 음악. 애니. 게임. 만화.로 자영업.과 예술인들이 모두 떠나게 된 지금 입니다.

그나마 살아남은 사이트는 대형 뿐인데. 네이버. 다음. 포털의 메인은 언론'으로 가득하고.
방송과 대학. 기업은 공정성을 잃고. 공포와 선정성. 상업성으로 치우쳐 버렸습니다.

//
지식이 권력이 되고. 차별과 계급을 만드는 시대가 되었습니다.
인정'많고 서로를 도와주던 시대가 바로 10년전 입니다.
전화 번호부에는 모든 주민의 전화번호가 적혀 있었습니다. 보안이 왜 필요합니까. 모두가 아는데
돈'과 관리' 감시가' 전부인줄 잘못 가르친겁니다. 근면. 자조. 협동. 이런말이 그냥 나온게 아닙니다.

제가 기술을 독점하게되고.
자동화와 관리 통제 시스템으로 모든 인력을 로봇으로 대체하게 된다면.
각종 수도. 전력. 가슴 검침원도 필요 없게 될지 모릅니다. - 물론. 둘다 고용하는 공생의 방안도 있어 보입니다.

지금의 기술로도. 모든 교통시스템을 자동화 할 수 있게 되니.
버스 안내양이 사라졌듯이. 버스 기사가 사라지게 될런지도 모릅니다.

----------------------------------------------------------------------------------------------------------

그럼에도. 저는 사실. 모든것이 완벽하게 자동화되고. 사람들은 자신들의 꿈을 위해 살아가기를 소망하기도 합니다.
누구나 우주로도 날아가보고. 저 깊은 해저에도 가보며. 이 시대와 우주를 만드는 그런 삶을 살기를 바랍니다.

그것을 위해서. 사람들이 희생되지 않기를 바라구요...

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com