Пример здесь:
Какие языки мне следует знать, если я заинтересован в создании веб-приложений?
Да, я понимаю, что HTML и CSS не являются тьюрингово-полными. Да, я понимаю, что это декларативные, а не императивные языки. Но почему люди всегда бьют по голове этим педантичным (и, возможно, очевидным) фактом, когда они задают вопрос об этих языках?
terminology
Роберт Харви
источник
источник
Ответы:
Какая разница, правда?
Реальное и важное различие между языком программирования и этими другими языками заключается в следующем:
Я намерен проиллюстрировать, почему это различие имеет значение, но педантизм в этом вопросе иногда неуместен.
Реальная история :
Однажды я потратил несколько месяцев на разработку сложной системы управления производительностью с использованием «правильного» языка программирования. Он автоматизировал процесс сбора данных из различных других систем, выполнил различные манипуляции с этими данными, а затем представил результаты в простой таблице.
Когда он появился, старший менеджер увидел инструмент, написанный для аналогичного бизнеса, и спросил, можем ли мы заменить то, что я написал, используя их альтернативу. Кроме того, он был расстроен тем, что я потратил недели на разработку своего решения, где это новое приложение было написано за считанные дни.
Дальнейшее расследование показало, что предпочтительным вариантом менеджера была вся презентация без содержания: было много цветов, значков и графиков, но за ними не было абсолютно никакой логики . Все данные должны были быть собраны и обработаны вручную. Несмотря на симпатичный интерфейс, приложение было практически бесполезным.
Я рад сообщить, что рассматриваемого менеджера убедили, что мой подход соответствовал его реальным потребностям бизнеса.
Важность презентации :
Часто подразумевается, что навыки в HTML, CSS и т. Д. Так или иначе уступают навыкам в «реальных» языках программирования. Это серьезная ошибка.
В моей истории старший менеджер чувствовал, что дизайн очень важен для него, поскольку он изначально был готов игнорировать функции в его пользу. Теперь, если бы это был единичный инцидент, я мог бы предположить, что менеджер был просто глупым. Но это не так. Снова и снова я встречал пользователей, которые впечатлены яркой графикой и фантастическими виджетами, но не впечатлены сырой функциональностью и моими техническими достижениями. Я думаю, что здесь есть несколько уроков:
Таким образом, ориентированные на представление языки (HTML, CSS) важны. Не следует недооценивать ценность, добавленную теми, кто может эффективно использовать эти инструменты.
Важность реальных языков программирования
Как указала ОП, «настоящими» языками программирования являются Turing Complete. Как настоящий печальный гик, я нахожу это восхитительно захватывающим. Это означает, что для любой программы, написанной на языке TC, функционально эквивалентная программа может быть написана на любом другом языке TC. Конечно, это не значит, что все языки одинаковы. У каждого из них есть свои сильные и слабые стороны, которые делают их более или менее подходящими для определенных задач. Однако, если не считать ввода-вывода, это означает, что все программы могут быть написаны на всех настоящих языках программирования.
(Между прочим, важная вещь - это TC. Декларативная или императивная здесь - это «красная сельдь». Например, SQL является декларативным, но также является подходящим языком программирования, потому что это TC.)
Конечно, то же самое нельзя сказать о языке разметки, таком как HTML или CSS. Фактически, существуют целые классы проблем, которые эти языки просто не могут решить . Там, где я могу программировать все, что захочу, на настоящем языке программирования - включая механизмы компоновки - просто невозможно достичь того же с языками, которые не являются TC.
Как подчеркивалось в моей истории, HTML и его аналог используются для создания презентации. Реальные языки программирования используются для создания функциональности.
Почему программисты педантично относятся ко всему этому?
Всегда ли уместно быть педантичным?
Посмотрим правде в глаза, как программисты, мы, естественно, педантичные . Это идет с территорией. Это не помогает, что многие из нас сгорели, когда непрограммисты не смогли понять, что мы делаем.
Тем не менее (и, честно говоря, это идет вразрез с моими естественными инстинктами), я не думаю, что нам нужно вызывать людей всякий раз, когда они пропускают все мелкие различия .
Мне говорят, что с точки зрения биолога помидор - это фрукт. Но когда я покупаю их в супермаркете, я ищу их среди овощей. Почему? Потому что техническое различие не имеет значения в этом конкретном контексте. Кроме того, различие будет на самом деле получить в пути их полезности: если бы я был достаточно глуп , чтобы включать помидоры в фруктовый салат, например.
То же самое с компьютерными языками. Есть моменты, когда разница между языками программирования и другими языками действительно имеет значение . Однако довольно часто мы все можем общаться совершенно эффективно, просто смешивая их вместе. В случае вопроса, связанного с ОП, действительно не имело значения, какие языки являются настоящими языками программирования, а какие нет. Выделение различия никоим образом не способствовало обсуждению. К счастью, помимо добавления небольшого шума (и становления стимулом для интересного обсуждения!), Педантизм, связанный с ОП, не имел большого значения. В худшем, однако, педантизм может вызвать негативные чувства и испортить отношения ... по крайней мере, по мнению моей жены.
:-)
Как бороться с педантизмом среди программистов
Однажды мой друг-проповедник произнес проповедь под названием:
Он имел в виду генералов, которые дают стратегическую оценку, за какие сражения стоит сражаться: стоит ли завоевания затрат?
Конечно, бывают моменты, когда необходимо проводить различия. Моя цель заключается в том, чтобы, когда я внесу свой вклад, это добавило ценности нашим коллективным усилиям.
В конце концов, это работа каждого настоящего программиста.
источник
Скажите инженеру-строителю или инженеру-механику, что вы изучали «Программирование», и они скажут вам, что «Разработка программного обеспечения» не является настоящей разработкой.
Скажите пилоту F-16, что вы летите на Cessnas для удовольствия, и он скажет, что вы не настоящий пилот.
Скажи доктору, что ты мануальный терапевт, и он скажет тебе ... ну, давай не будем идти туда :-)
Я думаю, что в основном людям не нравится идея, что их профессия проникается притворщиками или людьми, которые на самом деле не «достойны».
Теперь, если честно, совершенно очевидно, что HTML и CSS не являются языками программирования . Они больше не являются языками программирования, так как формат .docx является языком программирования, и заявлять, что вы программист, если все, что вы знаете, это HTML и CSS, безусловно, неточно. Но я думаю, что некоторую страсть в ответе можно отнести к тому, что я сказал выше.
Кроме того, в вопросе, который вы связали, спрашивающий назвал HTML и CSS «языком», а не «языком программирования». HTML - это язык разметки, а CSS - тоже язык (я не знаю, какой «тип» языка вы бы назвали CSS?), Поэтому я думаю, что было бы немного несправедливо называть его «называть их» языками »...
источник
Это не так важно для меня.
Но я предполагаю, что для тех, кому это нужно, различие между HTML, CSS, XML и т. Д. И Real Programming Languages ™ отчасти похоже на различие между деревом и краской как строительными материалами. Вы не можете создавать вещи с помощью краски, как вы можете из дерева, а также вы не можете программировать с помощью HTML, как вы можете с помощью RPL.
Я допускаю, что для некоторых разговоров такое различие может быть неуместным, а потому педантичным и раздражающим.
источник
Это не может быть «важным» различием, поскольку, возможно, в части html / css некоторых веб-сайтов идет столько же работы, сколько в части программирования.
Но это существенное различие, так как кто -то, что не знает , что это значит не имеет никакого места в команде , которая делает веб - разработку.
Если дизайнер полагает, что HTML - это программирование, пусть он продолжает проектировать с помощью инструментов Adobe и занимается дизайном, связанным с печатью; но не верьте тому, что он может сказать о веб-приложениях.
Если разработчик считает, что он выше дизайнеров, потому что «его» языки полны по Тьюрингу, не ожидайте, что он будет хорошо работать с дизайнером, или что его код может быть «предварительно протестирован» после того, как он будет сделан.
источник
if ... then
конструкции времени выполнения и способа повторять что-то ранее неизвестное количество раз, я склонен сказать, что это не язык программирования. Конечно, есть некоторые дополнительные языки, которые усложняют определение; но HTML / CSS далеки от этого.Вы ударили его по голове, когда сказали «декларативный, а не императивный». Разметка (будь то HTML, CSS или что-то еще) описывает вещи. Весь смысл программирования - делать вещи.
Набор навыков, необходимый для использования разметки, полностью отличается от набора навыков, необходимого для программирования.
Типы задач, решаемых с помощью написания разметки, полностью отличаются от типов задач, решаемых с помощью программирования.
источник
Это имеет значение для некоторых людей, потому что ни одна из ракетостроений не существует на поверхности, но их окружает множество тайн из-за того, что они реализуются по-разному, как правило, в 5 - десятках различных сред, которые вас действительно волнуют. Такая непредсказуемость и внимание к ремеслу пугает определенное разнообразие технических специалистов, которые в ужасе от не поддающихся количественной оценке рисков и еще больше ужаса, узнавая что-то большее, чем им абсолютно необходимо после получения степени.
Если бы кто-то спросил меня, какие языки я знаю, и я добавил туда CSS, и они ответили: «Но это не НАСТОЯЩИЙ язык», я бы спросил их, как они справятся с вертикальным центрированием div в IE 5, IE 6-8 и IE9 +. Тогда мы могли бы перейти к закругленным углам, проблемам альфа-прозрачности, РЕАЛЬНО виновнику всех этих нелепых аргументов «таблицы как макет», которые только сейчас начинают становиться действительно неуместными и десятками других тем для упомянутого убер-кодера, который, вероятно, знает один язык и утверждает один или два, что он едва ли функционально грамотен из-за классов, которые он был вынужден посещать в колледже 10 лет назад.
Они определенно являются «языками». Я бы не назвал их «языками программирования». Мне было бы удобно описывать процесс написания на этих языках «кодирования».
Однако, насколько я понимаю, любой, кто сумел освоить CSS, имеет наглость и трудовую этику, чтобы стать отличным программистом, уже имеет некоторый опыт объектно-ориентированного мышления и, несомненно, научился думать о том, как он пишет сейчас может повлиять на его работу 25 проектов в будущем.
источник
HTML и CSS не являются языками программирования. Преодолей это.
Однако: JavaScript - это язык программирования. Машина является браузером. PHP - это язык программирования. Машина виртуальная на сервере.
Поэтому, если вы делаете только с использованием HTML и CSS, вы не занимаетесь программированием (хотя, возможно, вы занимаетесь какой-то разработкой).
Но если вы используете JavaScript, PHP или другой язык сценариев. Вы занимаетесь программированием.
Что касается РЕАЛЬНЫХ языков программирования. Если вы работаете на машине (реальной или виртуальной). И используете свои собственные алгоритмы, чтобы заставить машину что-то делать. Тогда вы используете РЕАЛЬНЫЙ язык программирования.
источник
Язык программирования - это немного неточный термин, потому что это общий термин, который используется практикующими и непрофессионалами. У практикующих есть тонкое значение этого термина, в отличие от мирян. Обычно их определение таково: если в нем есть забавные слова / синтаксис, которые я не сразу понимаю, и программисты используют его, то это должен быть язык программирования. Не совсем неправильно, но мы можем согласиться, что это неточно.
Такие слова, как декларативный, императивный и полный тьюринг, являются более точными терминами с очень конкретными значениями. Когда вы задаете вопрос, например, почему HTML / CSS не является языком программирования, вы запрашиваете более точное определение того, чем в действительности является язык программирования. Мы не педантичны, а пытаемся ответить на ваш вопрос. Являются ли они лучшими терминами для использования, когда даже если вы гуглите их, трудно понять, что они имеют в виду? Зависит. Вы хотели короткий или длинный ответ. :-)
Языки программирования обычно считаются программистами готовыми к завершению, но что это значит? Это означает, что язык может описывать поведение или как делать вещи. Мы формально называем это логикой. HTML / CSS может описать, что есть кнопка, расположенная в верхнем правом углу, или есть таблица с 4 столбцами 5 строк, первые две строки желтые, а нижняя строка имеет зеленый текст, и каждая ячейка в таблице имеет 5 пикселей пустого пространства вокруг содержимого.
Что HTML / CSS не может сделать, так это выразить поведение или логику того, что происходит, когда вы нажимаете кнопку. Невозможно сказать, когда я нажимаю эту кнопку, получаю значения из этой таблицы, складываю их и записываю это значение в новую строку в нижней части таблицы. Описание поведения примерно эквивалентно завершению поворота без чрезмерной педантичности.
Точнее, Turing-complete означает, что вы можете реализовать язык сам по себе. Это означало бы, что я мог бы написать программу на javascript, которая принимает строку javascript и могла бы выполнять ее (и не используя функцию eval ()). Фактически, я могу написать программу на javascript, которая может взять программу, написанную на любом полном языке Тьюринга, и оценить ее. Вот что значит быть завершенным по Тьюрингу. Все языки, которые становятся завершенными, эквивалентны в том, что программы могут быть выражены. Довольно удивительное откровение, если подумать.
источник
Вот мои два цента. HTML и CSS явно не являются языками программирования. По этой причине, когда я вижу HTML или CSS в чьем-то резюме в разделе «Языки программирования», это просто говорит мне, что этот человек не знает, о чем говорит.
Кроме этого, нет, это не имеет значения.
Кстати, программисты обычно склонны быть педантичными. Это просто приходит с работой.
источник
Это не важно И это также вопрос определения. Что такое язык программирования? Некоторые означают, что оно должно быть полным по Тьюрингу. Другие имеют другие определения, которые делают HTML языком программирования. (И в вашем примере их даже не называли языками программирования, а просто языками, которыми они, очевидно, являются).
Моя рекомендация: старайтесь игнорировать людей, которые указывают на подобные бессмысленные и во многих смыслах даже неправильные заявления. Это просто разновидность грамматики нацизма. Называть HTML языком программирования не является неправильным в любом значимом смысле.
источник
Я думаю, что это сводится к тому, что 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?»
Отличный вопрос!
источник