음... 보통 웹을 만들 때 html, javascript, css를 이야기하잖아요? 그리고 html은 보통 컴퓨터 언어가 아니라고 하면서 '코딩' 이라는 표현을 쓰지 않는다고 알고 있어요... 그래서 그런 웹관련 언어들은 전부 그런건지.. 잘 몰라서 그런 표현을 썼던 거 같습니다
여러 개념이 혼재되어 있군요;;;
1. html은 튜링 완전하지 않기 때문에 프로그래밍 언어라고 부르지 않습니다.
2.하지만 html코드도 코드이므로 html코드를 작성하는 행위 또한 엄연히 코딩이라고 부릅니다.
3. javascript는 프로그래밍 언어가 맞습니다. 튜링 완전합니다.
4. 튜링 완전하지 않은 언어(xml, json, yml 등)의 코드를 작성하는 행위는 프로그래밍이라 할 순 없지만, 코딩이라 할 수는 있습니다.
5. 웹 환경에서 구동되는 언어와 java/c 등 네이티브 환경의 언어를 구분하신 것 같습니다. 크게 봐서는 고수준 제어-저수준 제어라는 차이가 있긴 합니다. 다만 최근으로 올 수록 electron등 고수준 언어로 네이티브 환경에 대한 기능성을 제어하는 것이 가능해지기도 했고, 저수준 언어들이 고수준 제어를 기본으로 하는 환경에 많이 진출하기도 했기 때문에 다음부터는 기계어 수준/바이트코드 수준/코드간 컴파일(트랜스파일) 수준의 빌드를 진행하는지, 주 구동 환경이 어디인지 등 보다 명확한 기준으로 언어들을 구분해 주시기 바랍니다
6. 윗댓님도 명확하지 않은 기준으로 언어를 구분하셔서 이해를 하기 힘들어 당황하신 거 같습니다.
7. javascript로는 웹뷰 렌더링을 통해 네이티브 클라를 구현하는 electron과 같은 방법론, 네이티브 api에 대한 js 채널을 사용하는 react native와 같은 방법론으로 네이티브 클라이언트 코드를 작성할 수 있습니다.
튜링 완전하지 않은 언어라도 해당 언어가 정의하는, 완결된 소프트웨어의 일부를 부호로 작성하는 행위 또한 코딩이라고 부른다고 알고 있습니다. 물론 다른 의미로 프로그래밍 과정의 일부로서, 동작 가능한 논리를 부호로 작성하는 행위 또한 프로그래밍의 일부로서 코딩이라고 부른다고 알고 있구요. 후자의 의미라면 물론 불가능하겠지만, 전자의 의미라면 가능하지 않을까요? 물론 전자의 의미가 존재하지 않는다면 제 말은 완전 틀린 문장이 되고, 수정해야겠지요.
HTML이 튜링 완전하지 않음에는 이미 동의했습니다. 하지만 앞에서 말씀드렸듯, ‘완결된 소프트웨어의 일부를 (상태 변화 불가의 의미를 포함하여 튜링 완전하지 않은 언어라 할지라도)동작가능한 전체 응용의 일부로서 선행하여 정의된 문법에 따라 부호로 작성하는 행위’도 코딩 이라고 부르는 의미가 있는 걸로 알아서 그렇습니다. 이 의미가 존재하는지 여부가 중요하겠군요. HTML또한 선행하여 정의된 (매우 간결한) 문법에 따라 부호로 작성할 수 있는 언어인 것이 사실이니까요
다시 생각해보면 소프트웨어의 일부가 될 수 있다는 부분에 대해서는 동의합니다. 가령 XML을 레이아웃에 사용하는 것처럼요.
하지만 XML이 단순히 정보의 교환에 사용되는 것처럼 HTML 역시 단순히 문서를 표출하는 기능으로만 사용되는 경우가 있고, 사실 이것이 HTML이 만들어진 주 목적이기 때문에 여전히 코딩이라고 부르는 것에 대해서는 반대합니다.
웹앱은 프로그램이고, HTML 코드 또한 웹앱 코드베이스의 일부이지 않습니까? 물론 HTML을 코드베이스에 포함하지 않고도 브라우저의 DOM노드들을 모두 생성하는 것도 가능하긴 하겠지만요. HTML만 사용해서 작성한 코드베이스는 물론 프로그램이라 보기는 힘들겠지만… 코드의 정의를 저는 ‘미리 정의된 규칙에 따라 정상적 동작 가능여부가 결정되는, 해석기(컴파일러/프로레서/인터프리터를 망라하는 개념)가 동작시킬 수 있는 부호 또는 그 집합’으로 알고 있고, 코딩은 이 정의에 따른 코드를 작성하는 행위 전체를 총칭한다고 알고 있습니다. HTML문서 작성도 미리 정의된 규칙에 따라, HTML 해석기에 의해 정상적 동작 가능여부(정상적 문서 렌더링)가 결정되니 상태 변화 및 튜링 완전성 여부와 무관하게 코딩이라고 부른 것이구요. 코딩이 반드시 튜링 완전성 및 상태 변화를 포함하는 언어에만 적용되는 행위는 아니라고 알고 있습니다.
사실 json쪽도 할 말이 조금 있는데, 저는 json도 소프트웨어의 일부라고 하는것이 조금 의문입니다. json이 js의 subset으로 출발한 것은 맞으나, 어디까지나 json은 데이터 아닐까요? 레이아웃이 아닌 정보 교환으로서의 xml, 그리고 json. 이것이 소프트웨어의 일부라고 한다면, 포토샵 등의 소프트웨어가 처리하는 jpg 이미지도 소프트웨어의 일부이고 규칙이 있다고 봐야하는지가 의문입니다.
JSON으로 작성된 내용은 물론 말 그대로 자료라는데 동의합니다. 말씀하신 대로 소프트웨어에서 일반적으로 이미지나 사운드와 같이 에셋이라고 흔히들 부르는 거지요. JSON은 자바스크립트의 객체(일반적으로 맵-딕셔너리/배열-리스트 형태를 띠는)를 부호로 표현하는 양식일 뿐이구요. 중요한 차이는 코드로 작성하는 대상이라는 것입니다. 촘스키 계층의 모든 층위에서 정의 가능한 문법으로 작동되는 모든 코드베이스를 작성하는 행위는 코딩이라 지칭한다고 알고 있습니다. 그렇기 떄문에 JSON으로 문서를 작성하는 행위도 코딩이 맞다고 알고 있습니다(소프트웨어 환경 설정을 하는 yml등의 문서를 작성하는 행위도 포함해서). 물론 이미지의 바이너리를 텍스트로 표현한 다음 이미지로 저장한다면 이 정의에 따라서는 이미지 작성 행위는 코딩이 맞겠지만, 글쎄요… 그런 행위를 잘 하지는 않으니 해당 행위를 주로 코딩이라고 부를 일은 없겠지요. 반대의 경우로 스크래치로 프로그램을 작성하는 행위는 프로그래밍은 맞지만, 코딩은 아닌 것 처럼요. 가장 중요한 것은 ‘텍스트로 해석기가 해석 가능한 대상을 작성하는 행위인가’ 여부로 알고 있습니다. 그래서 HTML문서 작성은 코딩은 맞지만, 프로그래밍은 아니라고 배운 것 같습니다.
답변 달아주신 분들 모두 감사드립니다! 사실 제 친구가 게임개발을 생각하는데 제가 공부하는 언어로도 가능하냐, 라는 질문때문에 'javascript는 브라우저에서만 작동되는 구조의 언어 아닌가? javascript로 컴파일을 하고 실제 .exe 프로그램을 만들어 내는게 되는건가? 게임은 만들기 힘들지 않을까?(브라우저기반으로 돌아가는 게임을 제외한다고 가정할 경우입니다!)' 라는 생각을 하면서 작성했던 질문글이었는데
가벼운 생각으로 질문하다보니 오히려 정의가 제대로 되어있지 않아 답변에 어려움을 드렸던 것 같습니다. 사실 제가 자세히 파고들다보면 다 알게될 내용이겠죠! 지금 배우는 것부터 차근차근 해봐야될 것 같습니다. 답변 수준이 너무 높아서 오히려 질문드린게 죄송할 정도네요. ㅎㅎ