Чем плох PHP? Альтернативы?

vijrel7878

Привет,
Для нового проекта стоит задача выбора основного языка разработки. В числе параметров в том числе есть стоимость разработки/поддержки.
Мне PHP нравится своей широкой распространенностью, относительно простотой поиска квалифицированных разработчиков, наработаными библиотеками, простотой хостинга, в т.ч. Google Cloud и Amazon.
Также я думаю, что успех проекта слабое связан с языком, только если язык не накладывает каких-то принципиальных ограничений. Таковых в PHP я не вижу.
Поводом написать является распространенное мнение (особенно его часто слышу от разработчиков на Python), что "PHP говно".
Буду рад услышать более обоснованные мнения, если это действительно так.

spitfire

если это действительно так.
Да, это действительно так.

vijrel7878

Перестал читать после этой фразы "I loooove Python".

spitfire

Напрасно. Прочитай целиком, рекомендую.

vijrel7878

По описанию автора все выглядит так мрачно, что я даже не понимаю, как на таком ужастном языке можно было написать большую часть веба.
Еще меня смущает вот что:
- сравнение ведется только с одним языком - Python
- о минусах самого Python ни слова. Уверен, что их тоже можно набрать похожий список.
Думаю объективное сравнение должно охватывать 4-5 языков с их плюсми / минусами.
Эта статья однобока и субъективна.

Marinavo_0507

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

Maurog

Эта статья однобока и субъективна.
полностью соответствует вопросу в subj :shocked:

vijrel7878

Что правда, то правда :)
На Python или чем-то еще можно написать хорошо? Мне кажется ужастность идет от недостатка стандартизации, зоопарка технологий и очень высокого темпа смены последних

vijrel7878


полностью соответствует вопросу в subj
Ok, переформулировал тему в более практичный вопрос

stm5872449

относительно простотой поиска квалифицированных разработчиков
Серьезно? Мы тут искали пхпшника в команду, у меня впечатление что там страх и погибель.

Marinavo_0507

программиста искать не пробовали ?

pilot

Аффтар же по себе оценивает.

stm5872449

программиста искать не пробовали ?
Это подъебка на тему "хорошие программисты могут писать НА ЧЕМ УГОДНО"? Скучно отвечать.

vijrel7878

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

stm5872449

Меня интересуют такие вещи, если бы вы выбирали сейчас стек технологий для веб проекта, чтобы вы выбрали?
Если это относительно небольшой (< ~100k loc) CRUD-like проект, то питон (руби, если в результате флуктуации вакуума проще найти людей. Пхп/перл - no no). Если больше/сложнее, то статическая типизация имо начинается окупаться. Java/Scala?
Если нужна производительность и база не является ботлнеком, то go.
Про ноду и зачем она нужна я ничего не знаю.

luna89

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

carusya

Привет,
А как вообще отвечать на вопрос типа
"Привет! Подбираю, что подвести к розетке(ам), останавился на 3х1,5 мм^2 алюминиевом проводе. Подкупает широкой распространенностью, простотой закупки, и т.д. Поводом написать является распространенное мнение "алюминиевая проводка говно".
Но не может же 80% проводки на территории ex-USSR быть построенной из говна?"

Kira

что за проект-то? а то вдруг ты десктоп приложение на нём пишешь.

Filan

Если это относительно небольшой (~ < 100k loc) CRUD-like проект ...
Вот это лучший ответ а треде!
Невозможно обоснованно рекомендовать что-то для сферического веб-проекта в вакууме.
Какого рода веб-проект у топикстартера?
Заказная разработка для бизнеса - Java однозначно. Какой-нибудь стартап для широкого круга обычных пользователей - скорее python. Домашнюю страничку сделать - на том, что лучше знаешь и на что меньше времени и сил уйдёт.

luna89

Поводом написать является распространенное мнение (особенно его часто слышу от разработчиков на Python), что "PHP говно".

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

yroslavasako

домашнюю страничку - на smalltalk. Для разнообразия.

Filan

На брейнфаке.

yroslavasako

А есть готовые фреймворки?

Hastya

Мне PHP нравится своей широкой распространенностью, относительно простотой поиска квалифицированных разработчиков, наработаными библиотеками, простотой хостинга, в т.ч. Google Cloud и Amazon.
Если вкратце, PHP - говно, но если PHP-истов посадить в песочницу, где сильно нагадить они не смогут, то нормуль (см. Facebook). Весь мало-мальски серьезный код при этом пишется на других - более приличных - языках.

vijrel7878

О, абсолютно точно! У меня тоже есть подобный опыт.
Много лет назад взяли в команду одного чела. Он сразу стал убеждать всех, как круто писать на питоне. Настрогал какое-то нереальное кол-во кода, но это был баг на баге и разобраться в этой лапше не было никаких сил. Был уволен. После этого, есть такой момент, я стал предвзято относится и к питону тоже.

vijrel7878

Весь мало-мальски серьезный код при этом пишется на других - более приличных - языках.
Кстати, каких? Если взять пересечение доступных для AWS Amazon и Google App Engine то получается выбор только из PHP и Python. Если пожертвовать универсальностью, то сюда можно добавить Go, .NET, Node.JS и Java. Есть еще Rubi, но это мне вообще не понятно кто это использует и зачем.

Hastya

Кстати, каких?
Java, C++, ну наверное Go какой-нибудь тоже прокатит.

vijrel7878


Какого рода веб-проект у топикстартера?
Заказная разработка для бизнеса - Java однозначно. Какой-нибудь стартап для широкого круга обычных пользователей - скорее python. Домашнюю страничку сделать - на том, что лучше знаешь и на что меньше времени и сил уйдёт.
да, я тоже согласен, что это был лучший ответ. Приложение - обычное CRUD.Изучив этот линк http://www.quora.com/Which-is-better-PHP-or-Python-Why склоняюсь к тому, что мне нужно побороть свое субъективно негативное отношение к Python и проанализировать этот язык на реальных простых примерах, чтобы сделать обосновнанный вывод.

stm5872449

фишки питона (как-нибудь хитро абстрактно классов нанаследовать)
Что за бред?

yroslavasako

А что по-твоему, метаклассы - не фишка питона? А возможность присвоить __class__ свойство? А ещё есть goto, подключаемое декоратором. Если того желать, можно крупно поднасрать. Опять же, см. почему rails может убить ruby. На питоне тоже так можно.

Marinavo_0507

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

yroslavasako

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

Marinavo_0507

Если взять пересечение доступных для AWS Amazon и Google App Engine
цукерберг со своей реализацией php смеётся над тобой

stm5872449

А что по-твоему, метаклассы - не фишка питона? А возможность присвоить __class__ свойство? А ещё есть goto, подключаемое декоратором.
Не ясно как твои вопросы связаны с моим удивлением по поводу "абстрактно наследовать".
Метаклассы - фишка питона, но сказать что все прям пытаются их применять - это абсурд. 95% про них не слышали, из оставшихся - 99% не применяли в реальной жизни (я в том числе). Есть супер-редкие случаи когда они позволяют сделать удобное апи, и тогда хорошо что они есть.
Про goto вообще смешно, оно имплементится там перетиранием байт-кода и является просто упражнением, ты такое же можешь в джаве сделать, только внешняя тулза будет нужна.
Если того желать, можно крупно поднасрать.
Если в команде есть разработчик, желающий такого, то язык - последняя проблема, которая должна беспокоить.

luna89

Что за бред?
Ну я например открываю flask (считается легковесным фреймворком на питоне) и вижу что там для чтения конфига используется какой-то питоноспецифический мудреж.

stm5872449

Это пример того как "многие питонисты, изучив свой питон, думают что приобщились к таинству программирования, и теперь надо только использовать в коде фишки питона"? :grin: :grin: :grin:
И этот "мудреж" используется не для "чтения конфига", а чтобы заалиасить app.debug (и другие подобные параметры) в app.config['debug'].

sutulin

Долго работал с PHP и ASP.NET.
PHP - нормальный язык, в общем-то, но мне не нравится, что много html-кода генерится непосредственно php-скриптами. Ну то есть люди реально пишут какую-нибудь функцию, которая возвращает строку, содержащую кусок html-кода. PHP MVC фреймфорки как-то не пошли.
ASP.NET ( c# ) - тоже можно сделать много хорошего и быстро, но производительность часто невысокая, и дорого поддерживать такое решение. Код неплохо отделяется от логики.
В последнее время все новые разработки веду на MEAN-стеке. Удобно, что везде используется один язык - JavaScript, нет возни с базой данных, производительность приложения хорошая, но проигрывает затюненному nginx+php-fpm. Код очень удобно структурируется по модулям, к которым несложно написать потом тесты. Много уже готового кода.
Python тоже пробовал, но его синтаксис мне не нравится, а особых преимуществ перед PHP MVC фреймворками я не нашёл.

stm5872449

В последнее время все новые разработки веду на MEAN-стеке. Удобно, что везде используется один язык - JavaScript, нет возни с базой данных
Это с монгой-то нет возни? :smirk:

sutulin

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

stm5872449

Отсутствие схемы побуждает не делать миграции (ну а фигли, мы же можем хэндлить отсутствие какого-нибудь поля у старых записей в самом коде!), что в свою очередь превращает последующую жизнь в БОЛЬ.
Агрегация данных с появлением aggregation framework по-моему стала просто ужасной, до этого она была невыносимой.
О мелочах вроде багов из-за асинхронного сохранения по дефолту в старых инсталяциях и нечитаемого синтаксиса запросов разговаривать даже не хочется. Глобально мне не ясно, зачем из постгреса и монги выбирать монгу.

luna89

И этот "мудреж" используется не для "чтения конфига", а чтобы заалиасить app.debug (и другие подобные параметры) в app.config['debug'].
Вот я это и имею в виду, вместо того чтобы написать просто и понятно, что-то сидеть и алиасить, переопределяя какие-то магические методы. Если при чтении значения из хэш-таблицы разводят такой бардак, то что будет при решении более сложной задачи, страшно подумать.

stm5872449

Ты прикалываешься что ли? Читай значения из хэш-таблицы, благо flask позволяет, кто не дает-то?

sutulin

Глобально мне не ясно, зачем из постгреса и монги выбирать монгу.
Как раз из-за отсутствия схемы. Для несложных структур данных монго - очень практичный выбор, повышает скорость разработки.
С багами не сталкивался. Синтаксис запросов, к сожалению, действительно оставляет желать лучшего, но, опять же, он сделан таким образом, чтобы вписаться в общую javascript-концепцию.

pilot

Глобально мне не ясно, зачем из постгреса и монги выбирать монгу.
Хочется же иногда повелосипедить :o

stm5872449

С багами не сталкивался.
Никогда не видел такого, что в хэндлере запроса делается collection.insert({"id": "123"}), отрабатывает успешно, этот айдишник возвращается клиенту. Тот приходит снова, выполняется collection.find({"id": "123"}) - и с некоторой вероятностью ничего блеать не находится?
Это было дефолтным поведением монги даже с одним инстансом (insert возвращал управление до того, как что-то попадало в базу) и, насколько я знаю, до сих пор является дефолтным поведением при наличии репликаций (код может пойти к другой реплике, до которой информация о новой записи не успела дойти).

okis

Да, у монги это фича такая, write concern
Но можно настроить и дожидаться появления данных на реплике

schipuchka1

Приложение - обычное CRUD.
Кто-нибудь обидится, если данные утекут непонятно куда? если нет, то ПХП или питон, если да - Java, Go, Scala...
Да, кстати, Java у Amazon, очевидно есть:
http://aws.amazon.com/java/

stm5872449

Мне давно пора прекращать писать в этой теме, но я не могу. :o
Кто-нибудь обидится, если данные утекут непонятно куда? если нет, то ... питон, если да - Java, Go, Scala...
WAT?

schipuchka1

http://3v4l.org/tT4l8?
<?php
var_dump(md5('240610708') == md5('QNKCDZO'));
var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
var_dump('0010e2' == '1e3');
var_dump('0x1234Ab' == '1193131');
var_dump('0xABCdef' == ' 0xABCdef');

bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true)

Marinavo_0507

в java просто каждую такую строчку надо переписать в виде 10 классов разбросанных по 5 директориям :)
поэтому простого примера с фейлом не привести
но идея проста: java-программы срут исключениями, которые обрабатывают как попало
(то есть если пхп-разработчик путает == и ===, то жава-разработчик в аналогичной ситуации криво обработает исключение)
и вот во время подсчёта хеша от пароля возникнет исключение, в результате обработки хеш станет равным пустой строке или null, то есть совпадёт с правильным хешем "подсчитанным" тем же способом :)

stm5872449

Это конечно занимательно, но:
1) что в твоем сообщении делает питон?
2) основные причины утекания данных неизвестно куда - sqli и xss. Обе причины никак не зависят от языка.
3) если ты используешь для паролей sha*, а не pbkdf2, то Брюс хочет перемолвиться с тобой парой слов

schipuchka1

Твоя подъёбка несколько устарела ;-)
Сейчас редко пишут велосипеды для секьюрити на джава (и использовать её корректно легко)

Hastya

и вот во время подсчёта хеша от пароля возникнет исключение, в результате обработки хеш станет равным пустой строке или null, то есть совпадёт с правильным хешем "подсчитанным" тем же способом
ппц. Ты реально писал когда-нибудь на java?

sutulin

Никогда не видел такого, что в хэндлере запроса делается collection.insert({"id": "123"}), отрабатывает успешно, этот айдишник возвращается клиенту. Тот приходит снова, выполняется collection.find({"id": "123"}) - и с некоторой вероятностью ничего блеать не находится?
Это было дефолтным поведением монги даже с одним инстансом (insert возвращал управление до того, как что-то попадало в базу) и, насколько я знаю, до сих пор является дефолтным поведением при наличии репликаций (код может пойти к другой реплике, до которой информация о новой записи не успела дойти).
Я не знаю точно, как работает mongoose, который используется в MEAN-стеке, но когда в нём сохраняешь документ, то в результате получаешь коллбэк с сохраненной версией документа, и эта конструкция работает без багов, даже на моей реплике, поэтому сталкиваться с такой проблемой не приходилось.

Marinavo_0507

давно писал очень, джава была ещё без дженериков
зато запускал программы
как правило они срут длинными эксепшнами в stderr или в лог, но продолжают "корректно" работать

Marinavo_0507

Сейчас редко пишут велосипеды для секьюрити на джава
ты так говоришь как будто для php нет фреймворков которые умеют проверять пароль

Marinavo_0507

Твоя подъёбка несколько устарела ;-)
не сильно устарела, пример 2013 года
http://howtodoinjava.com/2013/07/22/how-to-generate-secure-p...
вылетает исключение - по джавовской традиции срём в лог - результат возвращаем null

Werdna

Поводом написать является распространенное мнение (особенно его часто слышу от разработчиков на Python), что "PHP говно".
Буду рад услышать более обоснованные мнения, если это действительно так.
Пиши на ПХП.
Не слушай шибко умных. ПХП нормально работает и всё с ним отлично.

Werdna

Могу рассказать историю из личного опыта. Я участвовал в веб-проекте, его изначально написал хороший программист (сишник) на ПХП. Код был написан просто и прямолинейно, его было легко понять и он работал хорошо. Потом этот программист отошел от программирования, и ему надо было кому-то передать проект. Так вышло, что он нанял питониста. Питонист раскритиковал PHP и убедил переписать все на питон. В результате он развел там нереальный бардак из python-фреймворков и уволилися (уехал за границу).
Похожая ситуация с Кинопоиском и Яндексом.
Написано всё было хорошо, работало и пользователи были довольны. Пришли пидорасы, выкинули всё и написали на яве. Результат всем известен.
Важно не на чем пишут, а КТО(!) и как.

kill-still

Много программистов на битриксе.
:grin: :grin: :grin:

yroslavasako

С ПХП всё плохо. Зачем учить язык, который тебе не помогает писать программы, а вредит? И чтобы весь этот вред победить нужно иметь нехилый опыт в области мазохизма.

Marinavo_0507

Зачем учить язык, который тебе не помогает писать программы, а вредит?
так его и не нужно учить
в интернете набираешь "как сделать то-то" и тебе ответ на пхп
а вот чтоб найти пример на джаве выше, мне пришлось постараться

Werdna

Зачем учить язык, который тебе не помогает писать программы, а вредит?
ШТОА?

luna89

Если взять пересечение доступных для AWS Amazon и Google App Engine то получается выбор только из PHP и Python.
А в google app engine все та же убогая гугловая база данных? Я бы предпочел опердень делать на плохом языке с хорошей БД, чем на хорошем языке с плохой БД.

schipuchka1

Тебе никто не запрещает использовать любую БД.

Fragaria

Интересно, здесь из тех, кто наезжает на PHP, есть хоть один человек из компании, где на PHP написано что-то большое и высоконагруженное? Ну скажем в районе 50 тысяч rps? Или все о PHP знают исключительно потому что в свое время персональные странички или инет-магазинчики на них лабали в свободное время?

Ivan826

Я писал
Вполне язык. LAMP вполне позволяет сделать всё что угодно. Пианист дело говорит - не важно на чём пишут, важно кто пишет.
Да, у пыха есть очень странные особенности - ебаная тонна фунцкций в глобальной области видимости, адовые наименование этих самых функций (никогда невозможно всё запомнить, мануал - твой друг), спецефичный сахар, весьма "своебразная" объектная модель, ориентированность на винду в разработке и многие многие. Отдельной строкой мне понравились трейты — очень клёвая возможность мгновенно замакаронить код. Ну и всякие мелочи, вырастающие из возможности мешать хтмл и код.
А так тот же js серьёзно сложнее в поддержке т.к. наговнокодить на нём даже проще, и ещё и в ногу себе выстрелить задача ну просто тривиальная. Это помимо прототипного ориентирования, которое не понимает 90% js-писателей

okis

ориентированность на винду в разработке
:confused:

Fragaria

А что за проект, если не секрет.
Я вообще согласен с тобой. Две крупные соц.сети написаны на php, одна из них - это фейсбук. Это означает, что недостатки php, связанные с производительностью, кривым наименованием функций и так далее, всё же не перевешивают его достоинств. Часть недостатков можно пофиксить фреймворком, часть - велосипедом типа hhvm, а можно просто забить и докупить серверов, и это будет дешевле, чем писать на го или питоне.
У любого языка есть область применения, и по опыту нашей компании например получается, что постоянно изменяемую бизнес-логику удобнее писать на php, специализированные сервисы для хранения и обработки данных - на C, многопоточные утилиты - на Go.
А то, что программисты на php сплошь тупые, это конечно правда только отчасти. Дело в том, что php - язык с очень низким порогом вхождения, не навязывающий правильных парадигм написания кода, и к тому же популярный. И каждый, кто прочитал "PHP за 24 часа", тут же бежит по собеседованиям.
Но при этом попробуйте устроиться программистом в фейсбук.

Hastya

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

Fragaria

На php писал? И на что в итоге перешли в таком случае?

apl13

<?php
var_dump(md5('240610708') == md5('QNKCDZO'));
var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
var_dump('0010e2' == '1e3');
var_dump('0x1234Ab' == '1193131');
var_dump('0xABCdef' == ' 0xABCdef');
А я че-то перестал в какой-то момент понимать, в чем тут проблема.
Ну да, сравнение — это три "равно", а не два. Два "равно" это неведомая ебаная хуйня, не пригодная никогда. Это надо запомнить и использовать.
Трудно запомнить тем, кто видел сишное семейство? Ну ради бога. Кто-то когда-то с Бейсика Паскаля на Си переходил, тоже было тяжело вместо одного "равно" два писать. Особо отличившиеся личности даже придумали в равенстве слева всегда ставить rvalue. (Такой быдлопаттерн. Потом приходит сравнение двух lvalue, и человек не знает, что делать, и входит в бесконечный цикл, вращая бешено глазами.)
Ну и ч0.
Ну синтаксис в PHP такой. Бывает и круче.
Переходите на Лисп, там сравнение делается одним "равно".
Префиксным, правда.
(Ну или всякими equal?, для педантов.)

YUAL

Важно не на чем пишут, а КТО(!) и как.
Сказал человек не переваривающий джаву и переписывающий libslave на том же языке ещё раз просто потому что оригинал использует буст.

Garryss

В первую очередь я бы присмотрелся к рынку труда в том месте, где ты собираешься делать проект. А то может оказаться так, что найдется всего два прогера, и те на ruby. Тут вопрос о выборе языка отпадет сам собой.
Если по первому пункту есть кого выбирать, то тут нужно смотреть, какие требования у тебя к проекту.
Между скриптовыми языками нет большой разницы, perl/php/python/ruby — все они предназначены для решения одного и того же спектра задач. Более свежий языку лучше предшественника максимум на 5%, и отличия обычно ограничены syntactic sugar (уровня "давайте не будем делать, как $name/@name/%name в перле"). Но во всем остальном полностью стремятся друг к другу: по фичам языка, по встроенной библиотеке, по скорости выполнения. Для опытных прогеров 5% особой роли не играют: нет смысла переучиваться на новый язык из-за жалких 5%. А вот свежеиспеченный выпускник всегда предпочтет выучить самый современный языку. Это, в конечном счете, и обеспечивает преемственность языков. Поэтому если нужна долгосрочная поддержка (10+ лет), то лучше все таки питон — он умрет позже php.
Плюс питон выбивается из оставшихся языков тем, что он изначально хорошо спроектирован (в отличие от php, который обрастал фичами со временем) и поэтому используется в том числе за пределами веба, например в науке. Как следстве, матожидание от скиллов случайно выбранного прогера выше.
Если же долгосрочной поддержки не требуется, но есть проблема с наймом людей, то можно, наоборот, смотреть эзотерические варианты вплоть до хаскеля: что может быть лучше, чем самомотивированный упоротый прогер? Такой будет и по ночам, и по выходным хреначить чисто за интерес.

apl13

изотерические варианты вплоть до хаскеля
В этом "словосочетании" все прекрасно уныло.

Hastya

На php писал? И на что в итоге перешли в таком случае?
PHP так и остался. Backend переехал на java + python.

durka82

В первую очередь я бы присмотрелся к рынку труда в том месте, где ты собираешься делать проект.
А собственно что мешает работать с удалёнными разработчиками?

Dasar

Выше затраты на управление разработчиками, выше требования к проджект-менеджеру.

durka82

Это понятно, но в условиях дефицита кадров это всё равно может оказаться выгоднее.

Dasar

Это понятно, но в условиях дефицита кадров это всё равно может оказаться выгоднее.
Да, может. Если в наличии есть менеджер с таким уровнем навыка )

Ushkvarok

а почему, например, Haskell не хотите?

yroslavasako

отличия обычно ограничены syntactic sugar
строгая/нестрогая типизация - это серьёзное отличие, а не syntatic sugar.

SergeRRRRRR

баду на пыхе+мускуль крутится. Чуваки на хабре частенько пишут.

luna89

весьма "своебразная" объектная модель, ориентированность на винду в разработке и многие многие. Отдельной строкой мне понравились трейты — очень клёвая возможность мгновенно замакаронить код
...
А так тот же js серьёзно сложнее в поддержке т.к. наговнокодить на нём даже проще, и ещё и в ногу себе выстрелить задача ну просто тривиальная. Это помимо прототипного ориентирования, которое не понимает 90% js-писателей
Раньше, при всей дерьмовости ПХП, это был минималистичный язык, в этом была его сила. Потом туда приделали классов, трейтов и прочего бесполезного УГ. Концептуально язык превратился в плохую java. Сейчас джаваскрипт так же "улучшают".

iravik

Потом туда приделали классов, трейтов и прочего бесполезного УГ.
Я юзаю пхп во всех web-проектах и до сих пор не знаю, что это такое :grin:

kill-still

то желающие сделать что-то хитрее пишут кодогенератор - проще не становится
А что думаешь по поводу babel?

kill-still

Глобально мне не ясно, зачем из постгреса и монги выбирать монгу.
надо выбирать ElasticSearch! :p

luna89

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

yroslavasako

Приведи пример задачи, когда для динамического языка нужен кодогенератор
js за динамический язык считается?

luna89

js за динамический язык считается?
Конечно.

yroslavasako

кофескрипт, тайпскрипт, джак и так далее. Смотри полный список: http://gist.github.com/imsky/8741402 . Даже если 95% перечисленного - треш, для остальной кодогенерации нашлось применение.

luna89

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

yroslavasako

да вот легко. Динамическия язык не поддерживает статической типизации, а хочется. Вот и рождается тайпскрипт. Потому что статическая типизация - это нулевой этап тестирования, где определения тестов размазаны незаметно по всему коду

kill-still

плохой список. jxt и harmony нет. :)

luna89

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

yroslavasako

А какая ещё бывает кодогенерация? Всегда нужен какой-то отдельный язык для конфигурации кодогенератора.

Werdna

Я юзаю пхп во всех web-проектах и до сих пор не знаю, что это такое
Ещё ты не знаешь что такое сидеть дружным амбициозным коллективом из 20 целеустремлённых профессионалов своего дела и рисовать схему классов динамично развивающегося стартапа.
Ты ж просто какой-то мутный хуй с горы, который даже не понимает, что функция strlen плохая, так как она не вызывается как метод классика. В Итоге твой код — ужасная, нечитаемая хрень, от которой одно расстройство.
То ли дело Ява! Ты точно знаешь, что классик
Text::Utilities::Generic::Common::LengthDetector
— то что тебе нужно! Ты подключаешь библиотеку, наследуешь свой класс от интерфейса, и у тебя появляется понятный функционал!
А если ты написал $len = strlen($s) — ты мудак и пишешь вермишель, которая не понятна другим разработчкиам. И тебе не место в коллективе целеустремлённых, нацеленных на профессиональный рост!

Fragaria

Я знаю, что баду на этом крутится, я уже почти три года как в баду работаю =) Собственно я потому и спрашиваю, чем PHP не устраивает, может просто кто-то не умеет с ним правильно работать, используя там, где его преимущества перевешивают недостатки?

Marinavo_0507

Имхо это не та кодогенерация, которая имелась в виду. Gadfather утверждает, что в "бедном" языке потребуется кодогенерировать, чтобы решить какую-то задачу. Я себе представить не могу зачем это надо в динамическом языке.
сдаётся мне ты чего-то не догоняешь
в динамическом языке как раз много чего можно
например eval хотя бы

luna89

Можешь привести полезный реалистичный пример использования eval (или любой другой кодогенерации) в динамическом языке?

Marinavo_0507

в тех языках на которых я что-то делал (больше всего perl) такое не особо нужно - там и так всё можно
хотя я пытался использовать eval - идея была такая чтоб превратить дерево данных в дерево кода в динамике, то есть сделать как бы компилятор, но это не помогло, оставил в итоге интерпретатор, то есть обычный спуск по дереву
а вот когда я писал на java - это было давно, версия кажется 1.2 - там было ничего нельзя
в нашей команде чел генерировал java-код на GNU Prolog :)
ну там не было даже дженериков

durka82

Можешь привести полезный реалистичный пример использования eval (или любой другой кодогенерации) в динамическом языке?
Пример специфический, но вполне себе: ввод пользовательской функции (например для вывода графика, но не существенно).
В том числе при обучении программированию на языках без eval, примеры, требующие пользовательскую функцию, требуют достаточно много костылей/условностей, что ухудшает лёгкость восприятия материала.
Когда я впервые увидел, как легко подобное делается на Haskell-е - был практически культурный шок :)

Marinavo_0507

ну если на то пошло: генерация javascript на сервере, чтоб клиент исполнил - вроде нередко делают
pip install и другие такие новомодные штуки - eval в чистом виде

durka82

ну если на то пошло: генерация javascript на сервере, чтоб клиент исполнил - вроде нередко делают
Поясни пожалуйста, а что ты имеешь в виду.
Ибо и javascript - текстовый файл, который запросто может отдаваться на клиент с сервера после генерации на сервере.
Так же как и любой html/asp/php/etc-файл.
Или ты как раз это и имеешь в виду?
Ну тогда это как бы не свойство языка.

Marinavo_0507

Ибо и javascript - текстовый файл, который запросто может отдаваться на клиент с сервера после генерации на сервере.
Так же как и любой html/asp/php/etc-файл.
php типичный клиент не станет исполнять
а javascript - станет
это использование кодогенерации на динамическом языке на практике

Dmitriy82

Кстати, в той реализация goto-декоратора, которая гуляет по сети, баг на баге сидит. Сырое говно. Ненавижу когда на неё ссылаются. А идея хорошая.

luna89

ну если на то пошло: генерация javascript на сервере, чтоб клиент исполнил - вроде нередко делают
Почему не написать руками js-код, который будет обрабатывать какие-то данные пришедшие с сервера? Почему надо генерировать код?

Marinavo_0507

приебался к единственному примеру где я написал "вроде"
откуда я знаю? но так вроде делают
я не делал
у тебя какая-то идея-фикс
тебя покусал eval в детстве?

Marinavo_0507

но могу придумать пример, если настаиваешь: по каждому товару генерируется кнопочка "Заказать!", а у ней onclick - даже если это просто вызов одной функции с параметром - номером товара, то это всё равно кодогенерация

hwh2010

а у ней onclick - даже если это просто вызов одной функции с параметром - номером товара
а разве нельзя без номера товара сделать, без параметра? какая кнопка кликнута — определять уже внутри обработчика

Marinavo_0507

ну вы упоролись
зачем вы меня хотите заставить придумать необходимость кодогенерации на js?
давайте лучше теперь вы придумайте, а я буду критиковать

yroslavasako

Почему не написать руками js-код, который будет обрабатывать какие-то данные пришедшие с сервера? Почему надо генерировать код?
Потому что схема данных может меняться. И было бы хорошо, чтобы под эту схему автоматически генерировался код клиента и сервера.

jakal222

Как обычно, каждый хочет внести свои радости в таком серьезном вопросе, как php.
Знаю php-стов, которые хорошо справляются с поставленными задачами.
Знаю питонистов, которые хорошо справляются с поставленными задачами.
Знаю рубистов, которые хорошо справляются с поставленными задачами.
Однако, интересные факты.
мои знакомые php-сты не рады языку, однако это хороший инструмент в их случае ( большой опыт / много готовых проектов ) и вполне подходит для решения задач. Тем более, что один из php-стов сейчас хочет внедрять машинное обучение/data mining в своей конторе.
мои знакомые питонисты ( в количестве одна штука ) так рады своему питону, что не могут не впихнуть его куда попало.
К примеру, стояла простая задача взаимодействия из скриптов с проектом Xcode ( Эппловские файлы проектов )
Так вот, было две возможности:
1) выбрать питон с использованием либы в 1к строк, которая, "по словам питониста", божила просто и все умела, зачем использовать что-то еще.
2) выбрать руби с использованием функциональной части cocoapods ( сторонний менеджер пакетов библиотек для маков, достаточно популярный на тот момент ).
Выбор стоял между "какой-то" божественной библиотекой ( там был один файлик ) и уже функциональной на то время частью cocoapods.
Очевидно, что питон лизнул питон.
мои знакомые рубисты тоже не рады своему языку - слишком много читов можно использовать, всякие monkey patching и подобное. Некоторые из них свалили в Scala. Со слов: "тот же руби, но ты хотя бы понимаешь, почему у тебя все сломается на этапе компиляции"
Такие дела, а тот же php - смотря что у тебя за проект по нагрузкам/сложности и сколько времени у тебя есть на раздумья. Тот же хостинг предоставляет Heroku на амазоне, достаточно удобно интегрировать проекты и на php, и на python/ruby.

zya369

Почему не написать руками js-код, который будет обрабатывать какие-то данные пришедшие с сервера? Почему надо генерировать код?

JSONP например

yroslavasako

А питонист вообще знал руби? Если нет, то я не удивлюсь, почему он не стал писать на нём. Учить язык ради одной скриптовой задачи - это слишком.

lord2476

зачем учить язык ради одного скрипта, если можно написать этот скрипт забив в гугл пару запросов о синтаксисе

pilot

А по-моему смешнее что упоротыш строит статистику про питонистов, а к концу поста выясняется что знает он только одного. :)

yroslavasako

Копировать код, не зная, что он делает - верх безответственности.

durka82

ну если на то пошло: генерация javascript на сервере, чтоб клиент исполнил - вроде нередко делают
php типичный клиент не станет исполнять
а javascript - станет
это использование кодогенерации на динамическом языке на практике
Ты всё правильно пишешь - и это и есть суть клиент-серверного программирования (когда ты на сервере можешь сгенерить себе именно такой клиент, какой тебе нужен именно сейчас) - кроме одной вещи - это всё не имеет никакого отношения к eval-у и динамическому программированию.
Ибо из того, что у тебя на сервере C-шный CGI-клиент клепает тот же javascript для клиента отнюдь не следует, что в C есть eval и он является динамическим языком ;)

Marinavo_0507

Ибо из того, что у тебя на сервере C-шный CGI-клиент клепает тот же javascript для клиента отнюдь не следует, что в C есть eval и он является динамическим языком
не тупи
в этом случае на С написан кодогенератор
а кто является динамическим языком - в этой задаче не имеет никакого значения

lord2476

одна скриптовая задача не требует изучения языка, если знаешь алгоритмы решения.
глянул как оформляются методы, классы, циклы, стандартные/нестандартные либы необходимые для задачи и вперед кодить.

durka82

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

durka82

не тупи
в этом случае на С написан кодогенератор
а кто является динамическим языком - в этой задаче не имеет никакого значения
Ну так помоги мне - объясни, чем по-твоему отличается

генерация javascript на сервере, чтоб клиент исполнил
от

на сервере C-шный CGI-клиент клепает тот же javascript для клиента

Marinavo_0507

во втором варианте указан язык на сервере, в первом варианте не указан
а что тебе мешало сравнить самому?

marat7256

не тупи
в этом случае на С написан кодогенератор
а кто является динамическим языком - в этой задаче не имеет никакого значения
Я тебе больше скажу - вообще не важно есть тут динамический язык или нет.

Marinavo_0507

вы сговорились что ли? что вы ко мне пристали с динамичностью?
объясняй это форесту и ддд2

durka82

вы сговорились что ли? что вы ко мне пристали с динамичностью?
Ну ты же сам это написал про это как про

использование кодогенерации на динамическом языке на практике

Вот я и пытаюсь понять, а что конкретно ты этим хотел сказать.

Marinavo_0507

а что конкретно ты этим хотел сказать.
пришёл ддд2 и говорит: генерировать код на динамическом языке не нужно
ну ок, во-первых причём здесь я? зачем вы на меня насели с этим?
но раз уж зашёл разговор, то вот вам пример, когда генерируют код на javascript

pilot

А, а второе смешное: что питонист сует свой питон туда куда не нужно это не ок, а пхпшник собирается машинное обучение внедрять на пхп это ок. :)

luna89

А какие языки сейчас считаются достойными машинного обучения?

uncle17

1) А как вы заебали
2) Я уже 15 лет пишу на PHP
3) Потому что Си я не знал никогда в жизни, а PHP3 (тогда еще) мне понравился своей простотой
4) Регэкспы я учил на перле, а уже потом применял их в PHP по PCRE-стандарту
5) В школе и в универе учили максимум нахождению максимума в массиве и методу Рунге - Кутты с использованием паскаля..
Еще вопросы?

stm5872449

А какие языки сейчас считаются достойными машинного обучения?
Такие где уже все машинное обучение доступно в виде хорошо протестированной библиотеки (нативно или через байндинги)? :)
1) А как вы заебали
2) Я уже 15 лет пишу на PHP
3) Потому что Си я не знал никогда в жизни, а PHP3 (тогда еще) мне понравился своей простотой
4) Регэкспы я учил на перле, а уже потом применял их в PHP по PCRE-стандарту
5) В школе и в универе учили максимум нахождению максимума в массиве и методу Рунге - Кутты с использованием паскаля..
Еще вопросы?
У меня есть - зачем ты все это написал?
Или это к тому, что на php в основном пишут немотивированные грамотеи-недоучки, который не в состоянии даже Кернигана-Ритчи прочитать,
и поэтому поиcк квалифицированных программистов затруднен?

uncle17

и поэтому поиcк квалифицированных программистов затруднен?
Ты риальне хочешь получить человека на уровне Ритчи сейчас за стотыщрублей?

yroslavasako

одна скриптовая задача не требует изучения языка, если знаешь алгоритмы решения.
глянул как оформляются методы, классы, циклы, стандартные/нестандартные либы необходимые для задачи и вперед кодить.
А побочные эффекты? Мало ли что код выглядит знакомо, важно какие вещи происходят за сценой. Порядок инициализации, например.
Оставить комментарий
Имя или ник:
Комментарий: