오늘 수업이 2과목 있었습니다. 그 수업 중 하나는 2학년 과목인데, 이 과목이 작년에 개설된 과목이다 보니 제가 이번 기회를 통해 듣게 되었습니다. 이러다 보니 오늘 같은 교수님을 2번 보는 현상이 나타났습니다. 두 과목이 컴퓨터 관련 과목이다 보니 처음 개론 부분이 너무 유사하여 같은 이야기를 2번 씩 듣는 현상이 나타나서 정말 지루했습니다.
어째든 그 수업시간 중 한 과목 시간에 아주 좋은 이야기 하나를 듣었습니다.
"떨어뜨려서 깨지면 그 것은 하드웨어이고 안 깨지면 소프트웨어이다. 그 이외의 차이는 전혀없다. (다시 말해 소프트웨어와 하드웨어의 차이는 없다.)"
소프트웨어 개발자와 하드웨어 개발자 책상에 가보면 똑 같이 책상이 있고 그 위에 컴퓨터가 있다. 그리고 그 컴퓨터 안에 소프트웨어 개발자는 컴파일러가 있고, 하드웨어 개발자는 캐드 툴이 있다. 소프트웨어 개발자는 C, C++, Java 같은 프로그래밍 언어를 사용하고 하드웨어 개발자는 VHDL 이라는 언어를 사용한다. 그 개발원리는 모두 상위 개념에서 하위개념으로 접근하든지 하위 개념에서 상위 개념으로 접근하는 형태를 취한다. 또, 기능을 나누어서 모듈화를 하고 각각의 모듈은 인터페이스를 통해 결합된다. 결과물을 내기전, 똑같이 디벙깅을 하며, 시뮬레이션한다.
결론적으로 최종 결과물의 형태가 다르다.
제가 듣었던 내용대로 적을려고 노력했는데, 약간은 제 생각도 포함되어 있는 것 같습니다.
얼마전 스승의 날에 한 교수님을 찾아간적이 있습니다. 그 교수님도 비슷한 말씀을 했습니다. (이 교수님은 아날로그 쪽에 가깝습니다.) 자신은 하드웨어와 소프트웨어를 왜, 구별하는지 모르겠다. 같이 프로그래밍 해서 칩으로 구으면 하드웨어이고 컴파일 하면 소프트웨어 아니냐고 하셨습니다.
저는 그 동안 소프트웨어, 아날로그 하드웨어, 디지털 하드웨어를 철저히 구별해 왔는데 이 경계가 하물어 지고 있는 것 같습니다. System On Chip 으로 이 영역이 합쳐지고, 임베디드 시스템이 많아지면서 동시에 하드웨어와 소프트웨어를 알아야 할 필요성이 많아지고 있습니다.
마지막에 교수님이 결국, 지식과 지혜를 배운다는 점에서 같다고 했는데, 이 말이 정답인 것 같습니다.