펌웨어 개발자가 알아야할 내용
펌웨어 개발자가 알아야할 내용
본인은 컴퓨터공학과를 졸업하고, 윈도우프로그램을 오랫동안 했다.
물론 펌웨어 프로그램도 한다.
컴퓨터공학과에서는 소프트웨어공학관련 과목을 몇개를 이수하게되어있다.
그런데, 전자과에서는 없거나, 수박 겉핧기식으로만 한다.
문제는 펌웨어 프로그램을 하는 사람들이 대부분 전자과 출신이다.
소프트웨어 공학에 대한 지식이 전무한 상태로, 인터넷 소스코드를 보고 배우기도하고, 선임자에게 배우기도 한다.
당연히 프로그램 작성에 대한 전문성이 많이 떨어진다.
문제는 그러한 펌웨어가 들어있는 전자제품이 우리 생활에 널리 사용된다는 것이다.
대표적인것이 자동차, 냉장고, 밥솥, 세탁기, 산업용장비들...
자동차 급발진 사고가 종종 발생하는데, 본인이 보기에는 펌웨어 버그일 가능성도 상당히 높아보인다.
물론 센서문제일 수 도 있다.
많은 사람들을 만나보지는 못했으나, 대부분의 업체에서는 적당한 급여의 사람을 뽑아서 만들어야하기때문에, 적당히 사고만 안나면 된다는 식이 되기 쉽다.
이는 약 20년간 관찰한 결과이다.
최근에 본 펌웨어 프로그래머는 2년차였는대, 기존 소스코드 짜집기(편집)를 주로했고,
그전 소스코드의 주인은 업체임원이다.
업체임원의 소스코드도 정리는 잘되어있으나, 기본적인 구조상 문제를 가지고 있어, 특정상황에서는 데이터를 잃어버리거나, 오동작할 가능성이 컸다.
아니나 다를까, 수정사항 하나 처리하려고하니, 3개의 데이터를 처리해야 하는데, 여기서 데이터를 분실하고있다.
그래서 면접시 버그수정에 대해 골머리를 썩고있다는 식의 말이 나오기도 했다.
나는 어쩔 수없이 데이터 수신부를 거의 다 뜯어고쳐야 했다.
문제는 우리나라뿐만 아니라, 거의 모든 나라의 공통된 문제점이라는것이다.
(사람 하는 일이 다 그렇지...)
어째든, 이전 직장에서도, 이런 버그문제로 골머리를 썩었다.
내가 만든 프로그램이면, 내가 수정하겠지만, 근무중인 동료직원이 만든 펌웨어를 내가 수정하는것은 매우 어려운 일이다.
잘못하면, 남에 밥그릇 뺏는 일이 될 수도 있기때문이다.
또한, 내가 수정하다고해서, 크게 좋아지지 않는, 사소하지만 귀찮은 버그도 있고, 아주 드물게 나타나는 중대한 버그일 수 도 있다.
이런것들은 수정해줘봐야 잘했다는 소리보다는, 왜 바꾸었냐는 비난이 더 많은 경우가 더 많다.
어쨌든, 직장생활하면서, 남에 코드 수정해야한다고 이야기하는것 자체가 생각보다 어려운일이라는 것이다.
어쨌든, 이런일이 생각보다 흔하다는 것이다.
전자과 나온 사람들을 비하하는것이 목적이 아니다.
전공이 아니니, 서툴 수 있다는건 당연하다.
그러나, 우리생활에 사용되는 중요 전자제품이 오동작해서, 큰 피해를 입는 경우도 종종 있다.
군수품에 들어가는 전자회로의 종류와 양도 엄청나다.
사람을 죽일 수 있는 무기가 오동작하면, 생각만해도 끔찍한일이 벌어질 수 있다.
물론, 그런 사고는 잘 나지 않는다. 다만, 감추어지는 경우가 많을 뿐.
그러면, 어떻게 해야할까?
아주 쉬운 펌웨어라고해도 전문코스를 졸업하거나, 동등 학력/능력을 보유한 전문 프로그래머가 소스코드를 작성하도록 법으로 제도화 시켜야한다.
또한 전자과라고해도 펌웨어에 대한 전문성있는 교육이 포함되어야한다.
인터넷에 떠돌고있는 펌웨어 소스코드중에서 제대로 잘 작성된 코드는 많지 않다.(사실 한번도 못봤다)
심지어, mcu/cpu/반도체 생산업체에서 제공하는 샘플코드도 샘플 수준인 경우가 많다.
반도체칩 하나를 제대로 동작시키려면, 생각보다 많은 노력이 필요하다.
물론 샘플코드를 복사해서 써도 동작은 잘된다.
그러나 약간 복잡한 기능의 칩들은 잘 동작하는것이 쉽지 않은 경우도 종종있다.
이런 사소한 또는 중대한 버그로인해 낭비되는 돈은 생각보다 많다.
예를 들어 1대에 100만원짜리 전자제품을 만들었는데, 버그로인해, 다시 설계를 하거나, 단종시키는 경우도 상당히 많다.
제품 하나 개발하는데 드는 비용은 수백~수천만원이 든다.
어떤 제품들은 수억원 이상의 개발비가 들어가기도한다.
이런 제품들이 사소한 또는 중대한 버그들로인해 자주 출장 A/S를 오고가면, A/S비용만해도 어마어마하게 지출될 수 도 있다.
심한 경우, 제품 잘못만들어서, 회사가 망하는 경우도 종종있다.
가장 큰 문제는 소비자들의 안전에 문제가 발생할 수도 있다는 것이다.
대표적인것이 자동차 급발진같은 경우라고 할 수도 있다.(물론 자동차 급발진의 원인은 아무도 모른다)
어쨌거나, 펌웨어 개발하려는 분들은 시간이 없거나, 힘들어도 소프트웨어공학, 자료구조 2가지는 꼭 읽어봐야한다.
소프트웨어공학, 자료구조를 이해하면 소프트웨어 개발에 달인이 될 자격이 주어진다.
무엇을 개발해도 물흐르듯 자연스럽고, 부드럽고, 작고, 빠르고, 버그에 강하고, 확장이 쉽고, 효율적인 프로그램개발이 가능해진다.
현재 펌웨어 소스들의 대부분은 상당히 많은 문제를 가지고있다.
물론, 펌웨어만 그런것은 아니다.
PC프로그램도 마찬가지이다.
어쨌거나, 현재 돌아다니는 펌웨어 소스는 제대로된 소스가 거의 없다는게 문제이다.
물론 동작은 잘 될거다.
프로그램 20년한 본인도, 프로그램이 쉽지 않다.
알면 알 수 록 어려운게 프로그램이다.
운전초보자들이 가장 사고가 잘나는때는 "난 운전 잘해"라고 생각할때이다.
프로그램 배울 생각 있는, 또는 직업으로 하고계신분들은 제발 소프트웨어공학, 자료구조론 공부좀 하시길 바라겠습니다.
물론, 책2권으로 버그를 없앨 수 있다는건 아니지만, 많이 줄일 수는 있다.
버그의 대부분은 잘못된 프로그램구조, 잘못된 데이터구조때문에 발생하기때문이다.
요약 : 프로그램작성하려면, 소프트웨어공학, 자료구조론을 꼭, 공부하는것이 좋다.