Какая разница, правда?
Реальное и важное различие между языком программирования и этими другими языками заключается в следующем:
HTML и CSS описывают представление , тогда как языки программирования описывают
функцию
Я намерен проиллюстрировать, почему это различие имеет значение, но педантизм в этом вопросе иногда неуместен.
Реальная история :
Однажды я потратил несколько месяцев на разработку сложной системы управления производительностью с использованием «правильного» языка программирования. Он автоматизировал процесс сбора данных из различных других систем, выполнил различные манипуляции с этими данными, а затем представил результаты в простой таблице.
Когда он появился, старший менеджер увидел инструмент, написанный для аналогичного бизнеса, и спросил, можем ли мы заменить то, что я написал, используя их альтернативу. Кроме того, он был расстроен тем, что я потратил недели на разработку своего решения, где это новое приложение было написано за считанные дни.
Дальнейшее расследование показало, что предпочтительным вариантом менеджера была вся презентация без содержания: было много цветов, значков и графиков, но за ними не было абсолютно никакой логики . Все данные должны были быть собраны и обработаны вручную. Несмотря на симпатичный интерфейс, приложение было практически бесполезным.
Я рад сообщить, что рассматриваемого менеджера убедили, что мой подход соответствовал его реальным потребностям бизнеса.
Важность презентации :
Часто подразумевается, что навыки в HTML, CSS и т. Д. Так или иначе уступают навыкам в «реальных» языках программирования. Это серьезная ошибка.
В моей истории старший менеджер чувствовал, что дизайн очень важен для него, поскольку он изначально был готов игнорировать функции в его пользу. Теперь, если бы это был единичный инцидент, я мог бы предположить, что менеджер был просто глупым. Но это не так. Снова и снова я встречал пользователей, которые впечатлены яркой графикой и фантастическими виджетами, но не впечатлены сырой функциональностью и моими техническими достижениями. Я думаю, что здесь есть несколько уроков:
- Люди оценивают программное обеспечение по критериям, которые они понимают. Они часто понимают разницу между красивым и некрасивым, но редко ценят технические нюансы.
- Люди одурачены внешностью. Возможно, это не очень хорошая вещь, но это реальность, с которой мы должны жить.
- Внешность влияет на отношение людей к программному обеспечению. То, как люди относятся к программному обеспечению, важно для них. Действительно, люди иногда предпочитают программное обеспечение, которое заставляет их чувствовать себя лучше программного обеспечения, которое функционально лучше. Действительно, они могли бы быть более продуктивными с инструментами для хорошего самочувствия, чем с технически превосходными инструментами. В этом смысле наших пользователей не обманывают. Они на самом деле делают мудрый и вдумчивый выбор.
- Как программисты, мы часто пренебрегаем ролью представления, поскольку фокусируемся на функции. В какой-то степени это правильно и правильно. Тем не менее, важно признать, что есть еще одно измерение в нашей работе, которое важно для наших клиентов.
Таким образом, ориентированные на представление языки (HTML, CSS) важны. Не следует недооценивать ценность, добавленную теми, кто может эффективно использовать эти инструменты.
Важность реальных языков программирования
Как указала ОП, «настоящими» языками программирования являются Turing Complete. Как настоящий печальный гик, я нахожу это восхитительно захватывающим. Это означает, что для любой программы, написанной на языке TC, функционально эквивалентная программа может быть написана на любом другом языке TC. Конечно, это не значит, что все языки одинаковы. У каждого из них есть свои сильные и слабые стороны, которые делают их более или менее подходящими для определенных задач. Однако, если не считать ввода-вывода, это означает, что все программы могут быть написаны на всех настоящих языках программирования.
(Между прочим, важная вещь - это TC. Декларативная или императивная здесь - это «красная сельдь». Например, SQL является декларативным, но также является подходящим языком программирования, потому что это TC.)
Конечно, то же самое нельзя сказать о языке разметки, таком как HTML или CSS. Фактически, существуют целые классы проблем, которые эти языки просто не могут решить . Там, где я могу программировать все, что захочу, на настоящем языке программирования - включая механизмы компоновки - просто невозможно достичь того же с языками, которые не являются TC.
Как подчеркивалось в моей истории, HTML и его аналог используются для создания презентации. Реальные языки программирования используются для создания функциональности.
Почему программисты педантично относятся ко всему этому?
- Программисты тратят много времени, сил и денег на развитие своих навыков. Люди, естественно, ценят то, во что они вкладывают деньги («ваше сердце там, где ваши деньги»).
- Программисты часто считают необходимым обосновать количество времени, которое требуется для получения результатов, по сравнению с быстрыми результатами, достигнутыми дизайнерами пользовательского интерфейса. Чтобы сделать это, им необходимо провести различие между тем, что на самом деле делают две группы .
- Потому что работодатели должны применять подходящих людей на правильные рабочие места. Если мы не проясним (часто технические) различия, менеджеры легко совершают неправильные звонки.
- Потому что есть реальная и принципиальная разница, как указано выше.
Всегда ли уместно быть педантичным?
Посмотрим правде в глаза, как программисты, мы, естественно, педантичные . Это идет с территорией. Это не помогает, что многие из нас сгорели, когда непрограммисты не смогли понять, что мы делаем.
Тем не менее (и, честно говоря, это идет вразрез с моими естественными инстинктами), я не думаю, что нам нужно вызывать людей всякий раз, когда они пропускают все мелкие различия .
Здесь важны контекст
и перспектива .
Мне говорят, что с точки зрения биолога помидор - это фрукт. Но когда я покупаю их в супермаркете, я ищу их среди овощей. Почему? Потому что техническое различие не имеет значения в этом конкретном контексте. Кроме того, различие будет на самом деле получить в пути их полезности: если бы я был достаточно глуп , чтобы включать помидоры в фруктовый салат, например.
То же самое с компьютерными языками. Есть моменты, когда разница между языками программирования и другими языками действительно имеет значение . Однако довольно часто мы все можем общаться совершенно эффективно, просто смешивая их вместе. В случае вопроса, связанного с ОП, действительно не имело значения, какие языки являются настоящими языками программирования, а какие нет. Выделение различия никоим образом не способствовало обсуждению. К счастью, помимо добавления небольшого шума (и становления стимулом для интересного обсуждения!), Педантизм, связанный с ОП, не имел большого значения. В худшем, однако, педантизм может вызвать негативные чувства и испортить отношения ... по крайней мере, по мнению моей жены.
:-)
Как бороться с педантизмом среди программистов
Однажды мой друг-проповедник произнес проповедь под названием:
Стоит ли умирать на этом холме?
Он имел в виду генералов, которые дают стратегическую оценку, за какие сражения стоит сражаться: стоит ли завоевания затрат?
- Стоит ли прерывать ход обсуждения, чтобы провести это различие?
- Моя педантичность проистекает из чувства высокомерия или прошлой боли?
- Мои комментарии ценят навыки других так же как мои собственные?
Конечно, бывают моменты, когда необходимо проводить различия. Моя цель заключается в том, чтобы, когда я внесу свой вклад, это добавило ценности нашим коллективным усилиям.
В конце концов, это работа каждого настоящего программиста.