문학을 좋아하는 분들이라면,
Colorless green ideas sleep furiously
- Avram Noam Chomsky
위의 문장을 언젠간 한 번 보았을 것이다. 무슨 말일까?
무색의 초록 개념들이 격렬하게 잔다.
=> 무색의 초록? 이미 초록인데 무색이라, 전문가들은 색을 바라보는게 좀 특이하다.
("The Expert"라는 단편영화에서 보면, 빨간선을 투명잉크와 녹색잉크로 그려달라는 내용이 있었다.)
뭐 일단 잡설은 넘어가고, 위의 문장이 뜻하는 것은
문법에는 맞아도 의미상으로는 통하지 않는 말이 있다는 것을 보여주기 위해 예로 든 문장이다.
개발자들은 작업을 어떻게 하는가?
문제 -> 해결 방안 -> 코드 : 아마도 간단하게 설명하면 이런 순으로 진행을 하지 않을까 생각한다.
커먼한 프로그램을 만드는 경우, 개발자들이 마주할 문제, 해결 방안들은 어느정도 유사한 경우가 많다.
=> 만약에 게시판을 만든다고 하면, 필연적으로 글쓰기, 댓글 개발, 추가적으로 카테고리화 파일 업로드 기능 등등.... 예상 가능한 기능들이 있지 않은가?
하지만 코드의 영역으로 가면 어떤가? 서버 사양은 어떻고, 사용자들이 사용할 클라이언트는 어떻고, 이는 크게 서버 버전이나 프로그래밍 언어를 제약사항까지 추가 될 수 있다.
하나의 기능을 만들더라도, 누가 언제 어디서 만드는 지에 따라 코드가 달라질 수 있다. 이런 특성 때문에, 대학교수님은 언젠가 프로그래머는 작가와 같이, 문장 하나하나에 의미를 담을 수 있기 때문에, 예술가 같기도 한다고 하였다.
자 일단 잘못 작성한 코드를 보자.
function isNumber() {
const number = 'number'
const hasTarget = arguments[0]
return Object.is(number * number, hasTarget)
}
자 위의 코드는 대체 무엇일까? 위의 함수는 첫 번째 인자가 NaN인지 여부를 판단을 하는 함수 이다.
isNumber(NaN) // true
isNumber(1) // false
isNumber('NaN') // false
과연 위의 코드가 정상적인 코드라고 볼 수 있을까? 일단 자바스크립트의 문법이며, 기능상으로 NaN여부를 확인해주는 코드이다.
우리는 기계어를 왜 사용하지 않을까? 기계어를 사용하기 위해서는 CPU에서 해석 되어야 하기 때문에, 엄청나게 기계에 의존적이며, 배우고, 쓰는 것이 엄청 오래걸리며, 1/0으로만 존재하여, 오타가 나는 경우, 찾기 힘들다.
어셈블리어는? 그나마 사용하기 수월하다 웬만하면 하드웨어 특성을 덜 타고, 커먼한 명령은 기본적으로 공통이다. 또한 MOV, ADD와 같이 오타가 웬만하면 안 나긴 할 것이다. 언어에 한해서는 러닝커브가 그렇게 높진 않다.
두 개와 고급언어의 가장 큰 차이는 코드에 의미를 포함할 수 있는가의 여부가 아닌가 한다. 우리는 코드에 의미를 담아 다른 개발자에게 의미를 쉽게 전달함으로써, 같은 코드를 작성할 의무가 사라졌고, 이는 개발 속도에 어마어마한 영향을 주었다.
결론을 지어보자면, 기능이 돌아간다고 해서 내가 제대로 된 코드를 짠 게 아닐 수 있다는 것을 생각하자.
댓글
댓글 쓰기