예를 들면 다음과 같습니다.
웹 응용 프로그램 작성에 관심이있는 경우 어떤 언어를 알아야합니까?
예, HTML과 CSS가 Turing-complete가 아님을 이해합니다. 예, 나는 명령형 언어가 아니라 선언적이라는 것을 이해합니다. 그러나 사람들이 왜이 언어들에 대해 질문 할 때 이처럼 놀랍고 명백한 사실로 머리를 숙이고 있습니까?
예를 들면 다음과 같습니다.
웹 응용 프로그램 작성에 관심이있는 경우 어떤 언어를 알아야합니까?
예, HTML과 CSS가 Turing-complete가 아님을 이해합니다. 예, 나는 명령형 언어가 아니라 선언적이라는 것을 이해합니다. 그러나 사람들이 왜이 언어들에 대해 질문 할 때 이처럼 놀랍고 명백한 사실로 머리를 숙이고 있습니까?
답변:
실제로 차이점은 무엇입니까?
프로그래밍 언어와 다른 언어 간의 실제적이고 중요한 차이점은 다음과 같습니다.
HTML과 CSS는 프리젠 테이션을 설명 하지만 프로그래밍 언어는 함수를 설명 합니다
나는 왜이 차이가 중요한지 설명하려고하지만이 문제에 대한 논란은 때때로 잘못되었습니다.
실화 :
한 번은 "적절한"프로그래밍 언어를 사용하여 복잡한 성능 관리 시스템을 개발하는 데 몇 달을 보냈습니다. 다양한 다른 시스템에서 데이터를 수집하는 프로세스를 자동화하고 해당 데이터에 대한 다양한 조작을 수행 한 다음 결과를 간단한 테이블로 표시했습니다.
실무 관리자는 비슷한 비즈니스를 위해 작성된 도구를보고 대체 도구를 사용하여 작성한 것을 대체 할 수 있는지 물었습니다. 또한 그는 몇 주 동안이 새로운 앱이 작성된 솔루션을 개발하는 데 몇 주를 보냈다는 사실에 화를 냈습니다.
추가 조사에 따르면 관리자가 선호하는 옵션은 모두 물질이없는 프레젠테이션이었습니다. 색상과 아이콘 및 그래프가 많았지 만 그 뒤에는 논리 가 없었 습니다. 모든 데이터는 수동으로 수집하고 조작해야했습니다. 예쁜 인터페이스에도 불구하고 응용 프로그램은 본질적으로 쓸모가 없었습니다.
문제의 관리자가 본인의 접근 방식이 실제 비즈니스 요구를 충족시키는 방법이라고 설득했습니다.
프레젠테이션의 중요성 :
HTML, CSS 등의 기술이 "실제"프로그래밍 언어의 기술보다 열등하다는 의미가 종종 있습니다. 이것은 심각한 실수입니다.
필자의 이야기에서, 선임 관리자는 디자인이 그에게 유리한 기능을 간과 할 수있을 정도로 디자인이 그에게 매우 중요 하다고 느꼈다 . 만약 이것이 고립 된 사건이라면, 매니저가 어리석은 짓이라고 제안 할 수 있습니다. 그러나 그렇지 않았습니다. 화려한 그래픽과 엉뚱한 위젯에 감명을 받았지만 원시 기능과 기술적 성과에 감명을받지 않은 사용자를 계속해서 만났습니다. 나는 여기서 배울 몇 가지 교훈이 있다고 생각합니다.
따라서 프리젠 테이션 지향 언어 (HTML, CSS)가 중요합니다. 이러한 도구를 효과적으로 사용할 수있는 사람들이 추가 한 가치를 과소 평가해서는 안됩니다.
실제 프로그래밍 언어의 중요성
OP가 지적했듯이 "실제"프로그래밍 언어는 Turing Complete입니다. 적절한 슬픈 괴짜로서, 나는 이것이 굉장히 매력적이라고 생각합니다. 그것은 들어 있다는 것을 의미 어떤 최우수 언어로 작성된 프로그램, 기능적으로 상응하는 프로그램을 작성할 수 있습니다 다른 TC 언어입니다. 물론 모든 언어가 동일하다는 것은 아닙니다. 그들은 각각의 강점과 약점을 가지고있어 특정 작업에 다소 적합합니다. 그러나 I / O를 제외하고는 모든 프로그램이 모든 실제 프로그래밍 언어로 작성 될 수 있음을 의미합니다.
(우연히 중요한 것은 TC입니다. 선언적 대 명령형은 여기서 청어입니다. 예를 들어 SQL은 선언적이지만 TC이기 때문에 적절한 프로그래밍 언어입니다.)
물론 HTML이나 CSS와 같은 마크 업 언어도 마찬가지입니다. 실제로 이러한 언어로는 해결할 수없는 문제가 있습니다. 내가 프로그래밍 할 수 있습니다 어디에서 무엇이든 내가 원하는 레이아웃 엔진을 포함하여 - - 진정한 프로그래밍 언어로 그냥 TC하지 않은 언어와 같은 일을 달성 할 수 없습니다.
내 이야기에서 강조한 것처럼 HTML과 그 ilk는 프리젠 테이션을 생성하는 데 사용됩니다. 실제 프로그래밍 언어는 기능을 생성하는 데 사용됩니다.
프로그래머가 왜 모든 것에 대해 놀랄만합니까?
pedantic하는 것이 항상 적절합니까?
프로그래머로서 우리는 당연히 pedantic lot 입니다. 그것은 영토와 함께 간다. 프로그래머가 아닌 사람들이 우리가하는 일을 이해하지 못했을 때 많은 사람들이 화상을 입었다는 것은 도움이되지 않습니다.
그럼에도 불구하고 (그리고 솔직히 말하면, 이것은 내 본능에 위배됩니다), 사람들이 모든 작은 구별을 넘어 설 때마다 사람들을 불러야한다고 생각하지 않습니다 .
여기서 중요한 것은 맥락 과 관점 입니다.
생물학 자의 관점에서 토마토는 과일이라고 들었습니다. 하지만 슈퍼마켓에서 사면 야채 중에서 찾아요. 왜? 때문에 기술적 구분이 중요하지 않습니다 특정 상황에서. 더구나, 그 구별은 실제로 그들의 유용성을 방해 할 것입니다 : 예를 들어 과일 샐러드에 토마토를 담을만큼 멍청하다면.
컴퓨터 언어와 동일합니다. 프로그래밍 언어와 다른 언어의 차이가 실제로 중요한 경우가 있습니다. 그러나 종종 우리 모두가 함께 모일 때 완벽하게 효과적으로 의사 소통 할 수 있습니다. OP와 관련된 질문의 경우 실제로 어떤 언어가 진정한 프로그래밍 언어였으며 어떤 언어가 아닌지는 중요 하지 않았습니다. 구별을 지적해도 어떤 식 으로든 토론이 진행되지 않았습니다. 고맙게도, 약간의 소음을 추가하는 것 (그리고 흥미로운 토론을위한 자극이되는 것 외에) 외에 OP에 의해 연결된 페던 트리는 거의 영향을 미치지 않았다. 그러나 최악의 경우, 페 도리는 적어도 내 아내에 따르면 부정적인 감정을 불러 일으키고 관계를 손상시킬 수 있습니다.
:-)
프로그래머들 사이에서 pedantry를 다루는 방법
설교자 친구가 한 번 설교를했습니다 :
이것은 죽어 갈 가치가있는 언덕입니까?
그는 어떤 전투가 싸울 가치가 있는지에 대한 전략적 평가를하는 장군을 언급하고있었습니다.
물론, 구별해야 할 때가 있습니다. 저의 목표는 기부 할 때 우리의 공동 노력에 가치를 더할 것입니다.
결국, 모든 실제 프로그래머 의 직업입니다 .
토목 또는 기계 엔지니어에게 "소프트웨어 엔지니어링"을 공부했다고 말하면 "소프트웨어 엔지니어링"이 실제 엔지니어링 이 아니라고 말할 것입니다 .
F-16 조종사에게 Cessnas를 재미있게 보내라고 말하면 실제 조종사 가 아니라고 말할 것 입니다.
의사에게 당신이 척추 지압사라고 말하면 그는 당신에게 말할 것입니다 ... 글쎄, 가지 마라 :-)
나는 대부분 사람들이 자신의 직업이 미숙 한 사람이나 실제로 "가치가없는"사람들에게 침투하는 것을 좋아하지 않는다고 생각합니다.
이제는 HTML과 CSS가 프로그래밍 언어 가 아니라는 것이 분명합니다 . .docx 형식이 프로그래밍 언어 인 더 이상 프로그래밍 언어가 아니며 HTML과 CSS가 모두 정확하다고 생각하는 경우 프로그래머라고 주장 할 수 있습니다. 그러나 답장의 일부 맹목은 내가 위에서 말한 것에 기인한다고 생각합니다.
또한 연결 한 질문에서 질문자는 HTML과 CSS를 "프로그래밍 언어"가 아니라 "언어"라고했습니다. HTML은 마크 업 언어이고 CSS는 언어이기도합니다 (CSS라고 부르는 언어의 "종류"를 모르십니까?) "...
그것은 나에게별로 중요하지 않습니다.
그러나 HTML, CSS, XML 등과 Real Programming Languages ™ 의 차이는 건축 자재로서 나무와 페인트의 차이와 비슷 하다고 생각합니다. 나무로 할 수있는 것처럼 페인트로 물건을 만들 수 없으며 , 마찬가지로 RPL로 할 수있는 것처럼 HTML로 프로그래밍 할 수 없습니다 .
그러나 일부 대화의 경우 그러한 구별을 만드는 것은 관련이 없으므로 농담스럽고 성가신 일입니다.
프로그래밍 부분 에서처럼 일부 웹 사이트의 html / css 부분에서 많은 작업이 진행되기 때문에 "중요한"구분이 아닐 수도 있습니다.
그러나 그것은 이다 는 말은 무엇을 모르는 사람이 웹 개발을하는 팀에 자리가 없기 때문에, 상당한 차이.
디자이너가 HTML이 프로그래밍이라고 생각하면 Adobe 도구를 사용하여 디자인을 유지하고 인쇄 관련 디자인을 수행 할 수 있습니다. 그러나 그가 웹 앱에 대해 할 말을 믿지 마십시오.
개발자가 '자신의'언어가 Turing-complete이기 때문에 자신이 디자이너보다 높다고 생각하는 경우, 디자이너와 잘 어울리거나 코드가 완성 된 후 '예비'될 수 있다고 기대하지 마십시오.
if ... then
구성 이없고 이전에 알 수없는 횟수만큼 반복 할 수있는 방법이 있다면 프로그래밍 언어가 아니라고 생각합니다. 물론, 정의를 복잡하게하는 일부 언어가 있습니다. 그러나 HTML / CSS 와는 거리 가 멀다 .
"명령 적이 지 않고 선언적"이라고 말했을 때 머리에 닿았습니다. 마크 업 (HTML, CSS 등)이 설명합니다. 프로그래밍의 요점은 일 을 하는 것입니다.
마크 업을 사용하는 데 필요한 기술 세트는 프로그래밍하는 데 필요한 기술 세트와 완전히 다릅니다.
마크 업을 작성하여 해결되는 문제 유형은 프로그래밍으로 해결 된 문제 유형과 완전히 다릅니다.
표면에 로켓 과학이 없지만 실제로는 당신이 실제로 관심을 갖는 5 ~ 수십 개의 서로 다른 환경에서 다르게 구현되기 때문에 많은 사람들이 중요합니다. 이러한 종류의 예측 불가능 성과 공예에 대한 관심은 정량화 할 수없는 위험으로 인해 끔찍하고 학위를 확보 한 후 절대적으로해야 할 일을 배워서 더 끔찍한 특정 기술 전문가를 두려워합니다.
누군가 내가 알고있는 언어를 묻고 거기에서 CSS를 던지고 "실제 언어가 아닙니다"라고 말한 경우 IE 5, IE 6-8 및 IE9 +에서 div를 수직으로 중심으로 처리하는 방법을 묻습니다. 그런 다음 둥근 모서리, 알파 투명성 문제, REAL의 범인은 이제 막 진실한 관계가 없어지기 시작한이 엄청나게 많은 표-레이아웃 인수의 배후에있을 수 있습니다. 10 년 전에 대학에 진학해야했던 수업 때문에 거의 기능적으로 글을 읽지 못한다고 주장하는 언어.
그들은 분명히 '언어'입니다. 나는 그것들을 '프로그래밍 언어'라고 부르지 않을 것이다. 이 언어 '코딩'으로 작성하는 과정을 설명하는 것이 편합니다.
그러나 내가 걱정하는 한 CSS 마스터를 관리 한 사람은 chutzpa를 가지고 있으며 훌륭한 프로그래머가되기 위해 윤리적으로 일하고 있으며 이미 객체 지향적 사고에 대한 배경 지식을 가지고 있으며 그가 무엇을 어떻게 생각하는지 배우는 데 의심의 여지가 없습니다. 글은 이제 자신의 작업에 25 개의 프로젝트를 영향을 줄 수 있습니다.
HTML과 CSS는 프로그래밍 언어가 아닙니다. 극복 해
그러나 JavaScript는 프로그래밍 언어입니다. 기계는 브라우저입니다. PHP는 프로그래밍 언어입니다. 머신은 서버에서 가상 머신입니다.
따라서 HTML 및 CSS 만 사용하는 경우 프로그래밍을 수행하지 않습니다 (엔지니어링을 수행하는 경우도 있음).
그러나 JavaScript, PHP 또는 다른 스크립팅 언어를 사용하는 경우 프로그래밍 중입니다.
실제 프로그래밍 언어에 관해서는. 머신 (실제 머신 또는 가상 머신)에서 작업중인 경우. 그리고 자신의 알고리즘을 사용하여 머신에게 작업을 지시합니다. 그런 다음 REAL 프로그래밍 언어를 사용하고 있습니다.
프로그래밍 언어는 실무자와 일반인도 사용하는 일반적인 용어이므로 부정확 한 용어입니다. 개업의는 평신도가 아닌 그 용어의 미묘한 의미를 가지고 있습니다. 일반적으로 그들의 정의는 내가 즉시 이해하지 못하는 재미있는 단어 / 구문이 있고 프로그래머가 그것을 사용하는 경우 프로그래밍 언어 여야합니다. 마크에서 완전히 벗어난 것은 아니지만 정확하지 않다는 데 동의 할 수 있습니다.
선언적, 명령형 및 완전 완성과 같은 단어는 매우 구체적인 의미를 가진보다 정확한 용어입니다. HTML / CSS가 프로그래밍 언어가 아닌 이유와 같은 질문을 할 때 프로그래밍 언어가 실제로 무엇인지에 대한보다 정확한 정의를 요구합니다. 우리는 현혹 적이 지 않지만 귀하의 질문에 답변하려고합니다. 당신이 그들을 구글하더라도 그 단어의 의미를 이해하기 어려운 경우에 사용하기 가장 좋은 용어입니까? 다릅니다. 짧거나 긴 대답을 원하십니까? :-)
프로그래밍 언어는 일반적으로 프로그래머가 완전히 완성한 것으로 생각되지만 그 의미는 무엇입니까? 그것은 언어가 행동이나 행동을 설명 할 수 있다는 것을 의미합니다. 우리는 그것을 공식적으로 논리라고 부릅니다. HTML / CSS는 오른쪽 상단 모서리에 버튼이 있거나 4 행 5 행, 처음 2 행은 노란색, 하단 행은 녹색 텍스트, 테이블의 각 셀에 5 픽셀이있는 테이블이 있다고 설명 할 수 있습니다. 내용 주위에 빈 공간이 있습니다.
HTML / CSS가 할 수없는 것은 단추를 클릭 할 때 발생하는 동작 또는 논리를 표현하는 것입니다. 버튼을 클릭하면 해당 테이블에서 값을 가져 와서 합산하고 테이블 하단의 새 행에 값을 씁니다. 묘사 행동은 지나치게 페데 틱하지 않고 터닝 완료와 거의 같습니다.
보다 정확하게 Turing-complete는 언어 자체를 구현할 수 있음을 의미합니다. 그것은 내가 자바 스크립트 문자열을 취하는 자바 스크립트 프로그램을 작성할 수 있고 eval () 함수를 사용하지 않고 그것을 실행할 수 있음을 의미합니다. 실제로, 나는 Turing 완전한 언어로 작성된 프로그램을 가지고 그것을 평가할 수있는 자바 스크립트 프로그램을 작성할 수 있습니다. 그것이 튜링 완료라는 의미입니다. 터닝이 완료된 모든 언어는 어떤 프로그램을 표현할 수 있는지와 동일합니다. 당신이 그것에 대해 생각하면 아주 놀라운 계시.
여기 내 센트가 있습니다. HTML과 CSS는 분명히 프로그래밍 언어가 아닙니다. 이런 이유로 "프로그래밍 언어"에서 누군가의 이력서에 HTML 또는 CSS가 표시되면이 사람이 자신이 말하는 내용을 모른다는 것입니다.
그 외에는 실제로 중요하지 않습니다.
그건 그렇고, 프로그래머는 일반적으로 pedantic 경향이 있습니다. 그것은 단순히 직업과 함께 제공됩니다.
중요하지 않습니다. 또한 정의의 문제이기도합니다. 프로그래밍 언어 란 무엇입니까? 일부는 튜링이 완전해야 함을 의미합니다. 다른 것들은 HTML을 프로그래밍 언어로 만드는 다른 정의를 가지고 있습니다. (그리고 당신의 예에서, 그것들은 프로그래밍 언어 라 불리는 것이 아니라 단지 언어 일뿐입니다).
나의 추천 : 이런 종류의 무의미하고 많은 의미에서 잘못된 주장을 지적하는 사람들을 무시하려고 노력하십시오. 문법 나치즘의 변형 일뿐입니다. HTML을 프로그래밍 언어라고 부르는 것은 의미가 없습니다.
HTML과 CSS는 이것에 달려 있다고 생각합니다. HTML과 CSS는 약간의 정통성을 요구하기에 복잡하지만 프리젠 테이션 언어이며 생성 된 보고서의 형식에 가장 적합합니다. 따라서 이러한 작업 만 수행 할 수있는 사람은 코더로 간주되지 않습니다. 일부 코더는 평균 워드 프로세서가 HTML보다 텍스트 스타일을 지정하는 데 더 많은 명령 구문을 사용했을 때를 기억할만큼 오래 컴퓨팅에 참여해 왔다는 점을 염두에 두십시오.
'실제'언어라고하는 것은 보고서를 생성하기 위해 어떤 방식으로 데이터를 처리하는 것입니다. 또는 게임을 작성하는 데 사용될 수있는 것. HTML과 CSS를 안팎으로 아는 것은 귀중한 기술이지만 프론트 엔드에 대한 JS 지식과 백엔드에 Java, PHP, Perl, Ruby, Python, C / C ++ 또는 C #에 대한 지식과 훨씬 더 잘 결합되어 있습니다.
반대로 웹 프론트 엔드 기술이없는 '실제'언어 중 하나만 알고있는 사람은 코더로서의 유연성을 크게 제한하고 있습니다.
논리적 인 "왼쪽 두뇌"또는 창조적 인 "오른 두뇌"비둘기 구멍 / 입체형은 많은 사람들의 기술을 정확하게 설명합니다. 내 경험상 "HTML / CSS는 프로그래밍 언어이다"는 HTML / CSS에 능통 한 사람들이 다른 프로그래밍 작업에도 능숙 할 수 있는지에 대한 것입니다.
지난 13 년 동안 제가 웹 개발을 해왔 던 대부분의 웹 디자이너는 HTML과 CSS를 만들 수 있었지만보다 까다로운 프로그래밍 문제 (가장 간단한 잘라 내기 및 그 이상)를 처리 할 수 없었습니다. 붙여 넣은 JavaScript). 대부분의 핫 샷 프로그래머와 데이터베이스 디자이너는 HTML / CSS 또는 일반적으로 프레젠테이션을 잘 수행하기 위해 시각적 프레젠테이션에 관심이 없습니다. 대부분은 실제로 시도를 거부합니다.
HTML과 CSS는 실험, 문제 해결, 신중한 테스트, 상속에 대한 이해와 같은 프로그래밍 기술이 필요하지만 색상, 선, 간격, 균형에 대한 민감도와 같은 디자인 기술이 필요합니다. 좋은 사진을 만드는 시각적 구성 기술의 종류.
HTML / CSS는 레이아웃 또는 프리젠 테이션 언어이므로 데이터 플로우 다이어그램의 끝에 있습니다. 다운 스트림에 다른 코드는 없습니다. 좋은 API, 서비스 또는 데이터베이스 스키마를 디자인하기 위해 누군가가 필요로하는 더 큰 수준의 디자인 기술은 HTML 및 CSS에서 사용되지 않습니다. 일반적으로 HTML 또는 CSS와 관련된 것은 모듈화 할 필요가 없으며, 존재하는 경우 그래픽 디자이너가 할 필요가 없습니다. HTML / CSS로 모든 기능을 수행 하는 경우는 거의 없습니다 . 드롭 다운 메뉴는 가장 일반적인 예외 일 수 있지만 코드를 디자인하지 않고 웹에서 레시피를 잘라 붙여 넣을 수 있습니다.
프로그래머가 시각적 디자인이나 레이아웃 기술을 가지고 있거나 디자이너가 프로그래밍 기술을 갖고있는 것은 드문 일이지만 불가능하지는 않습니다. 이 사람들은 우리 대부분이 가진 격차를 해소하는 데 도움이되므로 웹 팀에서 특히 가치가 있습니다. 그러나 HTML / CSS를 할 수있는 것은 "실제 프로그래머"에게는 불가능하거나 그 반대의 경우도 종종 있습니다. 그러나이 기술 조합은 같은 프로그래머가 선원, 화가, 요리사 또는 여가 시간에 연습 할 다른 기술을 갖추는 것만 큼 불가능하지 않습니다.
다른 사람들이 말했듯이,이 구별은 고용 할 때 가장 집중됩니다. 크로스 오버 재능을 가진 사람들은 드물기 때문에 대부분의 구인 광고는 하나의 기술을 목표로해야합니다. 프로그래머가 "프로그래밍 언어"에 HTML / CSS를 표시하면 일반적인 프로그래밍 작업을 수행 할 수 없거나 프로그래밍 정의가 매우 좁다는 경고가 뜹니다. 어쩌면 그들은 할 수 있습니다, 그것은 단지 질문을 제기합니다. 디자이너가 HTML / CSS를 나열하면 포트폴리오를보고 원하는 시각 효과를 만들 수있는 예술적 능력이 있는지 확인해야합니다.
HTML / CSS는 실제 프로그래밍 언어가 아닌 것으로 반복해서 폐기 될 수 있습니다. HTML은 반구를 나누지 못하는 사람들을 폐기하는 것보다 안전하고 사회적으로 수용 가능하기 때문입니다. 물론 어떤 사람들은 그러한 억제가 없을 수도 있습니다. 실제로 한 관리자와 함께 일하면서 "그는 [백서 백본 기능 삽입]을 썼습니다. HTML을 방금 생각했다고 생각하십니까?"
좋은 질문입니다!