Что такое настоящий язык программирования?

Недавно один учитель сказал, что «PHP - не настоящий язык программирования», но дал, на мой взгляд, слабое обоснование:

  • Не компилируется.
  • Это сценарий.
  • Он работает не на всех платформах.

Разве PHP не считается «настоящим» языком программирования? Что такое «настоящий» язык программирования? Нужно ли компилировать язык, чтобы к нему относились серьезно?

Задний план

Два дня назад я провел вводный урок в мой класс вычислений A-Level в школе, мы используем Java в течение первого года курса. Я не знаком с Java, но довольно хорошо разбираюсь в общих основах программирования (переменные, функции, объектная ориентация, циклы и т. Д.).

Наше первое задание учитель выполнил смехотворно быстро. Она не потрудилась объяснить какие-либо концепции, как они работают или для чего их можно реально использовать, и, похоже, с большим удовольствием наблюдала за тем, как большинство студентов (которые в целом были новичками в программировании) корчились. сидеть на своих местах, не имея ни малейшего представления о том, о чем она. Оглядываясь назад, я считаю, что она прошла через это невероятно быстро, чтобы увидеть, кто действительно может «справиться» с получением Computing A-Level, поскольку у студентов все еще есть шанс сменить предмет до начала сентября.

Первой и единственной задачей было написать приложение командной строки Java для преобразования двоичного кода в десятичный (десятичный). У нас была двухчасовая дегустационная сессия, и после объяснения того, как работает двоичная система, нам пришлось начать, несмотря на то, что в целом никто не имел ни малейшего представления, с чего начать. По прошествии часа одни были дальше других, но по-настоящему ничего значительного никто не добился. Сама учительница так смутилась, что позвала другого учителя из соседнего дома. Он пришел помочь людям и посмотреть, куда идти дальше.

Без хвастовства, у меня, вероятно, было больше всего опыта в классе и я продвинулся дальше всех в упражнении. Он спросил меня, был ли у меня какой-либо предыдущий опыт; Я сказал «да», особенно в PHP, и в шутку заметил, что могу написать что-нибудь для преобразования двоичного кода в динарий всего за несколько строк PHP, в то время как приложение Java быстро разрасталось до нескольких экранов кода.

Он ответил: «PHP - это не настоящий язык программирования!» ...! После некоторого обсуждения он привел три вышеуказанные причины. Однако я указал, что вы можете запускать PHP на любой платформе, на которой работает Apache, но я не думаю, что он действительно знает, что такое Apache, и не имел ничего из этого!


person Jack    schedule 11.07.2010    source источник
comment
Ваш учитель, вероятно, один из тех настоящих программисты   -  person Gordon    schedule 11.07.2010
comment
Мне понравился этот комикс XKCD, когда я впервые его прочитал. Спасибо за напоминание. И я предполагаю, что настоящий программист 2000-х использовал бы Java.   -  person TNi    schedule 11.07.2010
comment
Похоже, у вас есть жестокий учитель, который, вероятно, боролся с PHP и решил, что это зло.   -  person Chris Diver    schedule 11.07.2010
comment
@Gordon, как мы все знаем, есть только один настоящий программист, и он не программировал на PHP или JAVA.   -  person Toon Krijthe    schedule 11.07.2010
comment
@Gamecat, это отсылка к Мелу Кею? Или еще какую-нибудь шутку, которую я не понимаю ...;)   -  person Jack    schedule 12.07.2010
comment
Кстати, спасибо за правки. Я действительно слишком много болтаю. : D   -  person Jack    schedule 12.07.2010
comment
@ Джек, должно быть, Мел или Чак Норрис;)   -  person Gordon    schedule 12.07.2010
comment
Когда Чак Норрис выбрасывает исключения, это происходит через всю комнату ... ... с моим учителем информатики. ;)   -  person Jack    schedule 12.07.2010
comment
в шутку прокомментировал, что я могу написать что-нибудь для преобразования двоичного кода в динарий всего за несколько строк PHP, в то время как приложение Java быстро разрасталось до нескольких экранов кода. - шутка заключалась в том, что для этого требовалось несколько страниц кода сделать это на Java, не так ли?   -  person Mr. Boy    schedule 12.07.2010
comment
Хорошие учителя кажутся крайне необычными.   -  person Daniel Earwicker    schedule 12.07.2010
comment
@Daniel: Девяносто процентов всего - грязь.   -  person    schedule 12.07.2010
comment
@Roger - но с учителями это минимум 99,99%.   -  person Daniel Earwicker    schedule 12.07.2010
comment
@ Дэниел ... так легко критиковать. Так сложно сделать.   -  person Mr. Boy    schedule 12.07.2010
comment
@John - это просто разные способы признать одно и то же. Преподавание - это чрезвычайно сложно, поэтому почти все учителя не справляются с поставленной задачей, и поэтому существует множество возможностей для их критики.   -  person Daniel Earwicker    schedule 12.07.2010
comment
Неразумно быть разработчиком программного обеспечения И штатным учителем, за исключением кого-то. Преподавание в столь быстро развивающейся области должно быть практически невозможным, чтобы оставаться в курсе, учителя должны сосредоточиться на теории и не вовлекаться в разговоры о конкретных технологиях, потому что какой-нибудь умный ребенок, который не понимает CS, будет бегать вокруг них по Ruby on Рельсы.   -  person Mr. Boy    schedule 13.07.2010
comment
По его стандартам, только двоичный язык является языком программирования; на ENIAC не работает другой язык.   -  person RCIX    schedule 02.08.2010
comment
Я думаю, что вы, учитель, прав, PHP не очень хороший язык для крупномасштабных систем или приложений для научных исследований. Вряд ли можно увидеть научное приложение, реализованное на PHP. Он просто плохой разработчик, вот и все. Я могу написать преобразователь двоичного кода в денаринг всего за несколько строк на java   -  person thelinh bui    schedule 13.09.2012
comment
Скажите ему: настоящие учителя пишут программы на ФОРТРАНЕ и ЯЗЫКЕ АССАМБЛЕИ.   -  person ingobaab    schedule 07.11.2019


Ответы (15)


Для начала нам нужно знать, что такое язык программирования. Как минимум, язык программирования - это то, что считывается компьютером и предписывает ему выполнять определенные операции. Многие люди также ожидают, что язык программирования общего назначения будет Тьюринг завершен. Однако могут быть ситуации, когда предметно-ориентированный язык не является полным по Тьюрингу, но все же полезный язык программирования для этой конкретной области. Языки программирования можно компилировать или интерпретировать, и они могут работать на многих платформах или только на одной конкретной. Для разных нужд требуются разные языки программирования. Очевидно, что PHP - это язык программирования.

Мое определение «настоящего» языка программирования - это любой язык программирования, который имеет хотя бы одно практическое применение в реальном мире. Это противоположно эзотерическому языку программирования, который обычно не имеет практического применения. Поскольку PHP широко используется для решения реальных проблем, он легко удовлетворяет этому требованию как настоящий язык программирования, хотя, возможно, это не особенно красивый язык.

PHP - прагматичный язык. Он был создан для того, чтобы иметь возможность быстро создавать веб-страницы (изначально это название расшифровывалось как Personal Home Pages), а язык был расширен по мере необходимости. Поскольку при его создании не было теоретических основ или строгих принципов проектирования (нет даже формальной спецификации языка), он менее чист, чем многие другие более современные языки. Такие функции, как правильная обработка иностранных символов / символов Unicode, очевидно, добавляются позже и не полностью интегрированы с остальной частью языка. Эта неопрятность и отсутствие теоретической строгости заставляет многих людей (особенно академиков) не любить язык, и это может быть одной из причин, по которой ваш учитель не считает PHP «настоящим» языком.

Однако PHP хорош в том, для чего он был разработан, и многие сайты используют его, даже очень большие сайты, такие как Facebook, Yahoo! и Википедия.

person Mark Byers    schedule 11.07.2010
comment
Хороший ответ, Марк! А я как раз подумала: PHP == 'PHP: Hypertext Preprocessor' || PHP == 'Personal Homepage' -?! - person Jack; 11.07.2010
comment
да, я написал это в виде битов кода. - person Jack; 11.07.2010
comment
@Jac Webb-Heller: Изначально это название было аббревиатурой от «личной домашней страницы», но позже изменилось по мере развития PHP. - person Mark Byers; 11.07.2010
comment
Хорошо, спасибо за разъяснения! - person Jack; 11.07.2010
comment
Из php.net/manual/en/history.php.php : PHP / FI означает персональную домашнюю страницу / интерпретатор форм. - person luiscubal; 11.07.2010
comment
спасибо за введение термина Полнота по Тьюрингу :) - person Aditya M P; 09.03.2011
comment
Что ж, теперь у php есть объектно-ориентированная нотация :) - person Danny22; 18.02.2014
comment
@DannyG Хотя это не исправит гнилой фундамент :) - person rounce; 01.12.2014

Это не скомпилировано

PHP можно скомпилировать (например, с помощью HHVM).

Это сценарий

Это просто еще один способ сказать, что PHP не компилируется.

Он работает не на всех платформах

Ява тоже.

Похоже, у тебя там действительно плохой учитель.

person Quentin    schedule 11.07.2010
comment
PHP на оптимизированный C ++! Что они подумают дальше? - person TNi; 11.07.2010
comment
Да, учитель пытается оправдать собственное невежество, утверждая, что то, чего он не знает, не стоит того, чтобы знать. - person Bill Karwin; 11.07.2010
comment
@ Джон: Но то, что он говорит, правильно. Учитель ошибся во всех перечисленных выше пунктах. - person NikiC; 11.07.2010
comment
@ Джон: На ​​что именно вы жалуетесь? Что Дэвид нашел ошибки в аргументах учителя? Согласен он или нет, совершенно неважно. - person Konrad Rudolph; 12.07.2010
comment
Джон, вероятно, был учителем. - person rgin; 04.02.2014

Конечно, PHP - это язык программирования. Он, вероятно, имел в виду, что это не «настоящий» язык программирования в том же смысле, в котором «настоящие» мужчины не едят пирог с заварным кремом.

person Dipstick    schedule 11.07.2010
comment
Я громко рассмеялся над этим! - person Jack; 11.07.2010
comment
Это может быть какой-то выход, но ... Мне нравится пирог с заварным кремом. Я чувствовал, что должен это сказать. - person Jla; 12.07.2010
comment
Это единственный ответ, который не путает реальное с буквальным значением ... - person Inverse; 18.07.2010

define: язык программирования

В соответствии с этим кажется, что PHP - это язык программирования. Вопрос о том, является ли это настоящим языком программирования, полностью субъективен. Является ли это хорошим языком - тоже субъективно. Конечно, он чаще всего не используется в качестве языка программирования приложений, но его можно использовать для разработки приложений оболочки через CLI. Я никогда этого не делал, поэтому я плохо понимаю это, но это возможно.

Итак, написан ли PHP сценарий (я понимаю это как язык сценариев), и работает ли он на каждой платформе? Вы судите:

PHP: препроцессор гипертекста - это широко используемый язык сценариев общего назначения, который изначально был разработан для веб-разработки для создания динамических веб-страниц. Для этого код PHP встраивается в исходный HTML-документ и интерпретируется веб-сервером с модулем процессора PHP, который генерирует документ веб-страницы. Как язык программирования общего назначения, PHP-код обрабатывается приложением-интерпретатором в режиме командной строки, выполняя требуемые операции операционной системы и производя вывод программы на своем стандартном канале вывода. Он также может работать как графическое приложение. PHP доступен как процессор для большинства современных веб-серверов и как автономный интерпретатор для большинства операционных систем и вычислительных платформ.

Источник: http://en.wikipedia.org/wiki/PHP.

Работает ли Java на всех платформах? Нет. Только те, для которых существует JVM.

Наконец, нужно ли компилировать язык? Многие нет. Даже Java компилируется не так, как C или C ++. И тогда вам также нужно будет взглянуть на Perl, Python и т. Д.

Лично я считаю PHP настоящим языком программирования. Я начал там и легко перешел на C / C ++ и Java. Я бы не стал использовать его для тех же целей, что и Java, и его дизайн отличается от Java, но это мало что значит. Для меня это было легче, чем Java.

person TNi    schedule 11.07.2010
comment
Отличный, обстоятельный ответ TNi! Спасибо! - person Jack; 11.07.2010

Во-первых, то, что он не компилируется и не интерпретируется (что он, конечно, имел в виду под сценарием, что несколько расплывчато и в любом случае используется для разных целей) - это разные стороны одной медали и, следовательно, на самом деле одна и та же причина.

Последняя причина, по которой он работает не на всех платформах, просто сбивает с толку. Похоже, он пытается рекламировать переносимость Java, а PHP просто не является Java. Однако Java работает на одной очень специфической платформе: JVM. Эта платформа, в свою очередь, работает на многих других платформах и, таким образом, дает Java ее переносимость, но это не совсем то же самое, что традиционное использование «переносимости». Например, C является портативным и работает на всем, от PDP-11 до новейших встраиваемых устройств.

Однако C делает это, определяя правила своей собственной абстрактной платформы, а компиляторы преобразуют код C в сборку в соответствии с этими правилами. Вот чем переносимость Java похожа на C: они оба определяют правила, которые переводятся в инструкции для конкретной конкретной машины (процессора); разница в том, когда это происходит.

Все проблемы в области информатики можно решить с помощью другого уровня косвенности.
Дэвид Уиллер

В действительности, даже ассемблер или «машинный код» интерпретируется процессором в его собственных действиях. (У меня нет хорошего источника для этого, но я помню, что он слегка покрыт Краткий курс современного оборудования, который в любом случае является хорошей презентацией.) По мере того, как скорость процессора увеличивается, мы почти не замечаем на наших недостаточно используемых коробках, находится ли данная программа в asm или запускать через интерпретатор, но именно здесь вступает в игру определение «реального языка программирования».

Единственный разумный способ определить «настоящий язык программирования» - это «язык, позволяющий выполнять реальную работу», но это также сильно мешает определению «настоящего». (Тем не менее, он устанавливает различие с эзотерическими языками программирования, потому что никто не делает реальной работы для Например, в Malbolge любое определение «настоящего» можно было бы согласовать с десятью людьми. ) И, по сравнению с сегодняшним днем, в прошлом ваш выбор языка программирования был гораздо более ограничен их стратегией реализации и накладными расходами (например, интерпретатором времени выполнения). Однако даже сегодня некоторые языки более "настоящие", чем другие, для определенных приложений и ожидаются нагрузки, все зависит от ваших требований.

Похоже, ваш учитель имел опыт работы с PHP только через игрушечные веб-приложения (и, возможно, использование слова «приложение» - это натяжка для того, что он видел). Игрушечные программы - не настоящая работа. У PHP определенно много проблем, но я не могу сказать, что это не настоящий язык программирования, разве что в шутку.

Отладка ожидалась с отвращением, выполнялась с неохотой и хвасталась вечно.
Дэн Камински

Существует определенная ассоциация между «настоящим» и «сложно сделать» (относящаяся к «настоящей работе»), и ваш учитель, возможно, выражал это мнение. Мне всегда казалось, что это форма велосипедного шеддинга (для этого есть более подходящий термин , но я не могу его вспомнить), где оценка ценности вещи связана с усилиями, которые он должен был вложить в нее (например, велосипедный навес более важен, когда я предоставил данные о цвете крыши и о том, должна быть табличка). Мы внутренне ценим свои собственные усилия больше, чем усилия других, только потому, что мы с ними знакомы, хотя бы по какой-либо другой причине, даже если это не имеет смысла. PHP, несмотря на его недостатки, действительно упрощает некоторые вещи, и поэтому он и программы, написанные на нем, могут восприниматься как менее стоящие.

person Community    schedule 12.07.2010
comment
Ух ты. Замечательный ответ! Эта концепция «велосипедного шеддинга» - отличный способ объяснить это. - person Jack; 12.07.2010

Facebook, Digg, Википедия, Yahoo. Думаю, это не настоящие сайты.

person Daniel    schedule 11.07.2010

Когда я изучал PHP, я тоже не верил, что PHP - это язык программирования.

Я не уверен, откуда я взял эту идею, но где-то я узнал, что язык сценариев - это не язык программирования. Поэтому я применил это мышление к другим языкам, таким как JavaScript и SQL.

С тех пор я изменил свое мнение и теперь понимаю, что существует спектр языков, который идет от высокого уровня (например, PHP, Javascript) до низкого уровня (например, c, ассемблер) с такими вещами, как C # и Java, где-то посередине.

person Matt Ellen    schedule 11.07.2010

Ты прав. Эти причины слишком слабые. На самом деле вам даже не нужен Apache для запуска PHP.
И первые две причины просто повторяются, поскольку на самом деле это только одна причина. Итак, можно сказать, что «PHP не является компилируемым языком», но это не значит, что это «не настоящий язык программирования». Программы Java тоже не компилируются в машинные коды - ну, это тоже не настоящий язык. q.e.d.

person Your Common Sense    schedule 11.07.2010

Извините за OT, но в этой картинке так много всего неправильного! Я просто надеюсь, что ты выйдешь из этого класса, этого факультета и школы так быстро, как только сможешь. Я обещаю, что к февралю у вас не будет ничего и близкого к семестру знаний. И, если вы похожи на меня, вы будете проводить часы в классе в разочаровании, негодовании и гневе из-за того, что ваш учитель тратит на вас зря.

Эта женщина не учитель! Десятичные числа в двоичные как введение в кодирование? Ужасно!

Это Университет (ха!) Феникса?

person Pete Wilson    schedule 12.07.2010

ОБНОВЛЕНИЕ: внимательно прочтите перед голосованием, это не мой подход к PHP / Java, Я пытаюсь понять, как его учитель видит тему PHP / Java. Спасибо.

Думаю, ваш учитель подумал: PHP - это язык, который заблокирован внутри веб-сервера и в основном используется для создания веб-страниц.

Java, с другой стороны, является языком общего назначения, который также используется для веб-страниц, но используется в других отраслях, таких как микроволновые печи и автомобили, вы можете писать настольные приложения на Java и т. д.

Имея это в виду, понятно, почему ваш преподаватель сказал: «PHP - это не настоящий язык программирования!»

Я не пристрастен, мне не нравятся оба, Java и PHP :) ... но я должен использовать их оба

person dwich    schedule 11.07.2010
comment
PHP не заблокирован внутри веб-сервера. php.net/manual/en/features.commandline.php // gtk.php.net - person Quentin; 11.07.2010
comment
Дэвид, я знаю об этом, конечно, я занимаюсь PHP каждый день уже 10 лет. Сколько проектов выполняется на PHP в командной строке? Я пытался отразить, как его учитель видит разницу между PHP и Java. - person dwich; 11.07.2010

Не существует таких вещей, как настоящий язык программирования, настоящий человек или реальный мир. Вы программист, если умеете программировать на PHP.

person BobTurbo    schedule 12.07.2010
comment
Это может сделать одного программиста на день. Вы программист, если мыслите категориями циклов, условных выражений, структур данных и т. Д., Независимо от языка программирования. - person George Marian; 12.07.2010

Безусловно, PHP - это язык программирования. Это даже полный по Тьюрингу язык, что в основном означает, что его «мощность» равна «мощности» других языков программирования. Он «настоящий» как в строгом (он действительно существует), так и в метафорическом смысле (есть люди, которые зарабатывают себе на жизнь с помощью PHP). Так что кажется, что ваш учитель как-то пристрастен.

Однако я вижу определенный смысл в вашем отношении к учителю. PHP и Java имеют совершенно разное происхождение. Несмотря на свою полезность, PHP очень хаотичен. Сравните стандартную библиотеку классов в Java со стандартной библиотекой функций PHP - последняя выглядит как огромный набор не связанных между собой инструментов. Более того, в сети есть множество руководств по PHP, которые, вежливо говоря, посредственного качества. Поскольку вы учитесь программировать, лучше всего учиться с помощью хороших инструментов, а Java - гораздо лучший инструмент для изучения программирования, чем PHP.

PS. Google для "PHP отстой", чтобы получить массу информации, почему PHP не лучший инструмент в мире.

person el.pescado    schedule 11.07.2010

«Итак, что делает PHP в« определении языка программирования »не« правильным »?»

Настоящая причина в том, что большинство людей не используют его как язык программирования приложений общего назначения.

Это потому, что всегда были языки, которые лучше подходят (за одним исключением: для чего был создан PHP - веб-программирование). PHP - это «еще один язык, даже не обладающий лучшими конструктивными особенностями по сравнению с существующими». Некоторые примеры проблем при сравнении с другими языками включают: отсутствие стабильных и переносимых наборов инструментов GUI (по крайней мере, в Windows / MacOS), отсутствие потоковой передачи, недостаточная скорость и т. Д.

В конечном счете, люди, которые собираются писать общие приложения на PHP, - это в основном люди, которые хорошо знают PHP только как язык программирования. Потому что нет причин писать новое приложение с нуля на PHP: вы обнаружите, что большинство опытных или талантливых программистов никогда бы не подумали о том, чтобы сделать это.

person Cerpheus    schedule 11.07.2010

Это одна из тех глупостей, которые люди повторяют, чтобы заставить себя казаться умнее и заткнуться, это самодовольство культа карго. Если вы попросите его объяснить, он либо притворится, что это была шутка (скажите ему «хорошая попытка»), либо патетически попытается защитить свою позицию (скажите ему «о, я вижу» и медленно отступите)

person asdfjkl    schedule 11.07.2010

Просто чтобы аргументировать против всех остальных ...

Мне немного неудобно думать о PHP как о языке программирования, потому что я не уверен, что у вас получится программа. Вы не оставляете свое приложение PHP запущенным, вместо этого запрашивается страница PHP, которая загружается и обрабатывается для создания выходной страницы с побочными эффектами, такими как изменения БД и т. Д.

Ничто из этого не означает, что PHP технически не может быть описан как язык программирования, но я думаю, что разумно как-то отделить его от Java / C ++, где программу можно оставить работающей с некоторой концепцией состояния. Каждый файл PHP, безусловно, является своей собственной «программой», поскольку вы можете запросить любую страницу PHP ... нет точки входа в веб-приложение PHP, кроме соглашения о вызове нужных страниц.

person Mr. Boy    schedule 11.07.2010
comment
Да ладно, есть php-cli! Что именно мешает вам иметь бесконечное while (true) {} в файле PHP, который, например, проверяет, чтобы таблица mysql была внешне заполнена адресами электронной почты, и отправляет электронные письма на адреса, как только они появляются в таблице? Тогда вам придется запустить этот php-процесс в CLI и вечно наблюдать, как он обрабатывает электронные письма. Это реализация демона в php. Ребята, которые действительно изучали PHP, утверждали, что настоящая проблема PHP в утечках памяти, когда вы используете объекты. Настоящие эксперты по php ответят, что, начиная с версии php 5.3, утечки памяти исчезли. - person bPizzi; 11.07.2010
comment
Есть пара примеров, опровергающих эту идею. Например, есть приложения PHP-GTK, такие как текстовые редакторы: Tulip tulip.solis.coop. br / us / install_lin.php или серверы, которые работают довольно долго: nanoweb.si.kz < / а> - person mario; 11.07.2010
comment
Я написал полностью «нормальные» приложения командной строки на PHP. Вы путаете PHP-программирование с веб-программированием. Ваш аргумент в основном говорит о том, что веб-приложение отличается от приложения на стороне клиента, но это ничего не говорит о языке, используемом для его создания. Между прочим, я считаю PHP действительно ужасным языком. Но нельзя утверждать, что это настоящий язык. - person Konrad Rudolph; 12.07.2010