Жрецы программирования

    Совсем недавно я понял, отчего многие программисты, использующие PHP, отличаются от программистов «в целом». Основой для моего понимания стали слова Руслана Косолапова: «Это PHP. Понять невозможно, только запомнить». А ведь действительно, это так. Объясню, почему.

    Практически все, кто плотно работает с PHP, соглашаются, что язык вовсе не прост в изучении: если в большинстве языков надо понять принципы, заложенные в язык, а потом обращаться к документации по необходимости, то тут фокус не прокатывает: в документацию придётся смотреть практически всё время — потому, что логика не работает. Дело в том, что PHP имеет огромное, неимоверное количество функций, размазанных в глобальной области видимости. Функции эти писались в разное время, разными людьми, без чётких соглашений о том, как их называть, как организовывать приём параметров, как возвращать результаты. Очень и очень многое сложилось стихийно, исторически, а раз так сложилось, то переделке уже не подлежит. В рамках каждого расширения — свой стиль и своя логика. Область видимости, в которую импортируются функции из расширений, — глобальная, а глобального стандарта не было, нет, и уже очевидно, что не будет: слишком велик объём необходимой для этого работы.
    PHP — это язык с историей, у него слоёв — как у древнего города. Он начался с набора скриптов на Perl для создания домашней странички, потом был переписан на C (несколько раз). Движок переписывался, а стихийно добавляющиеся функции оставались из соображений обратной совместимости почти неизменными, разве что увеличивали количество параметров. Но так, чтобы список параметров сократился, или, скажем, функция пропала — такого не было на моей памяти (это с 1998-го года). Кстати, порядок аргументов функций надо запоминать. Простой пример: если функциям поиска preg_match() и ereg() необходимо передавать сначала «что ищем», затем «в чём», а третьим, опциональным, параметром можно передать переменную для сохранения найденного, то функции strpos() — наоборот; оцените, кстати, разнородность и нелогичность названий функций как таковых). Что функция возвращает, и в какой ситуации — тоже надо запоминать. Та же strpos() вернёт false в случае, если ничего не найдено, и в документации особо подчёркнуто, что функция может вернуть и 0, то есть сравнивать возвращаемое значение и false надо с учётом типа, так как при проверке без типов целочисленный ноль сконвертируется в false.

    Это всё была присказка для тех, кто не слишком в теме. А теперь пристегните ремни: начинается сказка.
    Всё вышеописанное требует от программиста наряду с прочими навыками наличия ещё одного парадоксального умения: не пытаться обобщать накопленные знания. Лично мне всегда было проще понять или придумать правило, чем запомнить великое множество случаев, к которым оно подходит. В данном случае исключений из правила будет больше, чем случаев, в которых оно сработает.

    Начать работать с PHP можно очень быстро (аккурат засчёт простого и местами удобного синтаксиса). Именно поэтому его и начинают учить новички, да ещё, как правило, параллельно с изучением какого-нибудь проекта. И начинается абсурд: люди изначально привыкают к работе с низкосортным кодом, доставшимся в наследство; а объём кода проектов чаще всего таков, что переписать правильно, по идее, можно, но… только при наличии большого опыта работы, наличии свободного времени, ну и так далее, — сиречь нереально. И плодят, делая свои первые шаги к мало-мальскому мастерству, очередные тонны кода, который будет приводить в ужас всех, пришедших следом.
    Такова настройка Windows — там тоже нужно помнить многое. Правил мало, каждая менюшка — частный случай. Хотя вроде бы всё просто и наглядно, но вот лично мне проще прочитать толковую документацию без картинок и настроить нужный функционал в одном месте, чем с умным видом втыкать в книжку-раскраску для самых маленьких. Хотя начать можно просто и быстро, да.

    Недавно я читал пост в ЖЖ, где в комментариях прошла идея сравнения эникейщиков Windows и жрецов из D&D. Процитирую: «В игровой системе D&D придумано такое интересное деление для характеристик мыслительных способностей пресонажа: на INT (интеллект) и WIS (мудрость). Для мага более существенен INT, для священника – WIS, хотя игровая суть примерно одна и та же – использование волшебства (что это, как не проекция работы “компьютерщика” с точки зрения среднего обывателя). Впрочем, игровая механика нам тут несущественна, но интересна сама классификация способов постижения мира — путем самостоятельного построения логических конструкций (INT) или путем накопления знаний (WIS)».

    Это я к чему: в целом для программиста важнее развитые, «прокачанные» механизмы мышления, чем запоминания разнородных, не связанных друг с другом фактов. Но вот для программиста на PHP ситуация меняется с точностью до наоборот: важно помнить факты, не пытаясь понять. А я-то всё думаю, отчего святая война в проекте между программистами может разгореться из-за того, что один помнит, что кавычки разных типов обрабатываются с разной скоростью (разница ничтожна, но на огромнейших циклах, невозможных в реальной жизни, становится заметной), а второй указывает на то, что на самом деле такого цикла не нужно делать практически нигде и никогда. Для первого это факт, и это следует постоянно учитывать. При этом он же не понимает, что проверять неопределённую переменную в том же цикле — это многократно большая трата ресурсов; что ошибку можно заэкранировать, но ошибка от этого не пропадёт; не понимает, зачем нужна независимость транзакций. Дело не в том, что один из них умнее, а другой глупее, нет. Это просто другой тип мышления, ориентированный на запоминание, а не на стремление собрать данные и проанализировать ситуацию с разных сторон. А сам PHP — как инструмент, как средство, как тема общения, — привлекает к себе людей в первую очередь «запоминательного», а не аналитического типа.
    Жрецов программирования.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 667

      +109
      Сломал глаза пока прочитал. Разбивайте на абзацы в следующий раз — читать проще будет.
        +3
        я именно из-за этого больше 2 строк не осилил. Пост, возможно, интересен, но читать в таком виде невозможно.
          +6
          А вам эти 2 строки на несколько абзацев надо было разбить? :D
          • UFO just landed and posted this here
              0
              Вот теперь понятно.
                –3
                В топике от силы 2-3 агрессивных фаната php, да и обороняться у них получается довольно вяло.
                  0
                  Ничего, зато мне уже наобъясняли, что лично я — типичный неосилятор. :)
                    –3
                    Сложно спорить о языке, когда в качестве аргументов приводят библиотеки в язык не входящие.
                      0
                      Эти библиотеки рождаются благодаря качествам языка.
                        0
                        В PHP тоже есть библиотеки :) И ещё неизвестно где их больше
                          0
                          Явно, вы не пробовали действительно работать с ними на языках помимо php(если говорить о вебе).
                            0
                            С библиотеками на PHP работать из других языков? Вы правы, не пробовал даже в учебных целях.
                            +2
                            Тот же phpclasses.org и pear/pecl не сравнятся с rubygems. До руби я много и писал на php, и мне есть с чем сравнивать.
                              –2
                              Чёрт, не обновил страницу, теперь понял что вы имеете в виду. Не думаю, что если я начну писать на ruby, то я стану активно пользоваться rubygems, как не пользуюсь активно pear/pecl (только для зависимостей интересных проектов, типа phpdaemon, то есть если в install guide такого проекта содержится pear something). Есть задача — я её решаю, а не ищу путей как её не решать.
                                +4
                                Ну и не правильно. Это просто пхпшная привычка, от которой лучше избавиться как можно скорее. PEAR/PECL тоже не использовал. Но в руби и питоне с распространением пакетов все настолько лучше, чем в php, что даже сравнивать сложно. Совершенно не представляю, как можно писать на том же питоне без pypi, это мазохизм какой-то получится.
                                  –3
                                  Привычка далеко не пхпшная, а basic/asm. :) Тогда в России (вернее СССР) и интернета-то не было O_o
                              +2
                              Конечно в похапе. Судя по всему каждый студент считает обязательным написать свою библиотеку вместо того, чтобы взять готовую. Правда большинство этих библиотек не доступно публики, но от этого только лучше.
                                0
                                >Судя по всему каждый студент считает обязательным написать свою библиотеку вместо того, чтобы взять готовую.

                                Ещё каждый «студент» считает обязательным написать свою CMS, а с относительно недавних пор — фреймворк. И что в этом плохого? Я вот потихоньку пишу свой фреймворк на python для GAE. Пытался подключиться к одному open-source проекту, но моими идеями о том, каким должен быть роутинг (похожим на роутинг symfony/ror) не прониклись, например посчитали что описывать метод запроса в роутинге излишне, а ведь без этого неудобно реализовывать RESTful приложения — каждый метод превращается в цепочку if request.method == 'GET':… elif request.method == 'PUT'… elif request.method == 'POST'… elif request.method == 'DELETE'… else response = HTTPNotSupported()
                                  0
                                  В том, что студент еще не разобрался в языке нормально (пишет говнокод), не осилил готовую cms/framework(ниасилятор) и пишет свое унылое поделие.

                                  Алсо, а что в писоне нет switch?
                                    +1
                                    Если пишет библиотеку, это уже не говнокод, соблюдает «межпроектный» DYI :)

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

                                    Нет и, видимо, не будет. Да и проблему он бы не решил
                                      0
                                      *DRY
                                        0
                                        Чтобы написать библиотеку для ruby надо как миниум понять суть gem'ов и то как на реализовать это на ruby. Банально сразу и с места говнокод писать не получится. :D да и то, что код будут видеть другие дает о себе знать.

                                        >часто встречаются жалобы на то, что «асиляторы» не знают языка,

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

                                        Про switch это печально. Хотя если бы его реализовали тупо так же как if — в нем нет смысла.
                                          0
                                          так а зачем он в языке?

                                          processedRequest = { 
                                          	'GET': getFunc, 
                                          	'POST': postFunc, 
                                          	'PUT': putFunc,
                                          	'DELETE' : delFunc 
                                          }.get(requestMethod,defaultFunc)(request)
                                          

                                          на мой взгляд вполне себе switch ))
                                            0
                                            Затем, что в нормальных языках (си например) switch разворачивается в низкоуровневое сравнение которое быстрее if'a. Алсо, этого примера у меня кровоточат глаза, как я понимаю тут используется словарь и аноанимные функции, это как бы совсем не оптимально. Я конечно понимаю, что сейчас можно не экономить на памяти и процессоре, но не до такой же степени!

                                            p.s.
                                            Так и представляю подобный код вашим методом:
                                            gist.github.com/759642
                                              0
                                              пример однако вы подобрали ))
                                              да словарь, единственное в данном примере функции не анонимные.

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

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

                                              Кстати, не оспаривая преемуществ Си — Пайтон вполне себе нормальный язык, подходящий для очень многих вещей.
                                                0
                                                А что, живой пример из проекта :D Правда сейчас заменил этот кусок полностью.

                                                Суть switch'a в том, что в языках типа C, C# switch компилируется в более быстрый код (опять же зависит от ситукции). Вот даже шютка к теме: www.rsdn.ru/forum/cpp/3957942.flat.aspx

                                                В Python'e как и в Ruby есть столько не нужной хрени, а вы говорите, что switch не нужен. Ваш пример архи не читаемый и надо заниматься JumpToDefinition гимнастикой. Мой же код более читаемый (видели бы этот же кусок с if'ами вместо swich/case). И еще, мы же забываем, что на ruby и python можно не только web приложения писать. Я теперь не могу когда десктопные приложения жрут памяти больше чем надо.

                                                В вашем примере конечно и эта конструкция нормально смотрится(хоть и трудночитаемая), но не все же этим примером ограничивается. Например мой пример если написать со словарем — будет очень по-наркомански и не читаемое.
                                                0
                                                Ну в примере без свитча будет лучше. Словарик с данными и готово, раза в полтора меньше печатать (и читать). Плюс код будет говорить за себя — структура инициализируетя разными данными в зависимости от значения переменной, данные отдельно, код отдельно. Банальность скажу, но свитч — один из косвенных признаков дурно пахнущего кода по Фаулеру. А про процессор — там же и правда такие копейки, о которых и говорить не стоит.
                                                  +1
                                                  полностью согласен.
                                                    +1
                                                    Не оптимально же. Словарик с данными медленнее jump table и больше памяти тратит. Код не говорит за себя, код вызывает кровотечение из глаз.

                                                    >А про процессор — там же и правда такие копейки, о которых и говорить не стоит.

                                                    А теперь представьте побольше вероятных исходов. И сделайте вот это: gist.github.com/759692
                                                –1
                                                Да ладно, необходимо? С таким же успехом можно сказать, что чтобы написать библиотеку на php нужно понять суть pecl/pear. Говнокод выкладывать на гуглкод, гитхаб и т. п. никто не запретит (на rubygems есть премодерация проектов?).

                                                Сколько в этой (да и других темах) не общаюсь по поводу «говнокода» никто мне не назвал язык, который его запрещает синтаксисом. Язык, в котором как ты не извращайся, конечное приложение будет идеальным для любых условий. Идеология, %xxx% way, coding styles guide и т. п. дают лишь рекомендации, следовать им или нет выбор программиста.
                                                  +2
                                                  Необходимо.
                                                  Для руби библиотеки в 90% случаев поставляются в виде rubygems. В противном случае вас просто не найдут(через тот же gem search -r %keyword%)
                                                    –1
                                                    Не путаете «написать библиотеку» и «предоставить доступ к ней как можно большему числу людей, потенциально в ней заинтересованных»? Не знаю как кто, но я пишу библиотеки для своих нужд, если захочу выложить, то буду выкладывать там, где мне удобно выложить и куда удобно дать прямой линк.
                                                      +1
                                                      Ну, опять же, в руби не принято «скачивать» библиотеки. Они могут быть, например, в закрытом репозитории, но в виде rails-плагина или gem'a, чтобы в проекты подключать их одной строчкой, управлять версиями, зависимостями.
                                  –2
                                  зато у вас — нападать получается вообще никак ) без улыбки ваши комменты не прочитаешь
                            –6
                            Я накололся на том, что «автоматическое разбиение на абзацы» это «сохранение форматирования». На blog.dinexi.ru/2008-12-23/zhrecy-programmirovaniya/ всё нормально.
                              +9
                              Извиняюсь за оффтоп, но:
                              все-таки, не помешало бы отформатировать текст, даже если в вашем блоге он нормально смотрится.
                              Тут-то этот текст даже начинать читать не хочется…
                                +3
                                Ага, сделал. Правда, Хабр мне при этом сказал, что у меня кармы для публикации в блог уже недостаточно. :)
                                  0
                                  Так уже лучше…
                                  Сейчас вроде 5 единиц кармы нужно для всего этого. Хотя этот пост и так в блоге PHP =)
                                    0
                                    Ключевое слово «уже». :)
                                    И, кстати, с прискорбием отмечаю, что ещё лучше сделать не смогу. Иллюстраций не будет. ;)
                                      0
                                      уже достаточно )
                              +4
                              Скопировал, отформатировал и прочитать в редакторе :)
                                –1
                                Странно: уже давно разбил на абзацы, а Вас всё плюсуют и плюсуют. :)
                                  +4
                                  Плохо разбито, нужна пустая строка между абзацами
                                    +1
                                    Спасибо за объяснение. :)
                                      –4
                                      Запоминать имена функций и порядок следования аргументов нужно было во времена консольных компиляторов и убогих текстовых редакторов, а сейчас это давно уже не нужно — умная IDE подскажет и то и другое, а если даже примерно не помнишь названия функции, то Гугл поможет.
                                +7
                                пхп привлекает людей зарабатывающего деньги типа, не надо философии разводить. да, пхп кривоват, но такого уж особого множества фактов, которые необходимо помнить в нем нет.
                                  +1
                                  Ложь. Очень много свободных проектов с открытым кодом пишется на PHP.
                                    +12
                                    ну и что? посыл статьи — пхп привлекает запоминателей, а не аналитиков. мой ответ — это деление тут не при чем, потому что программирование — это в первую очередь бизнес, а не разгадывание шарад. то есть независимо от типа мышления человек будет на нём программировать и аналитику будет легче, чем запоминателю. как, впрочем, и при программировании на любом другом языке.
                                      –1
                                      Вот PHP с разгадыванием шарад сопряжён гораздо сильнее, нежели тот же python. Его я, к слову, привожу в качестве совершенно абстрактного языка, который не php; а то тут ещё джихад на тему PHP vs Python начнётся.
                                      Вон, пример, который я привёл в habrahabr.ru/blogs/php/110767/#comment_3527319: шарада? Однозначно. Бизнес от этого пострадает? Пострадает, времени на эту багу убито было э… много.
                                        +1
                                        насчет багов кто бы спорил, однако этот аргумент с посылом статьи никак не связан
                                          –1
                                          Так и про бизнес в статье нигде не говорилось. Это же не помешало Вам отмахнуться от моих слов коротким «Ну и что?» :-)
                                            +5
                                            ну так мы не рассматриваем сферических разработчиков в вакууме, а реальные программисты пишут на том, на чем требует рынок и в вебе это пхп. и мотив у них вовсе не «ой какой чудо язык для моего аналитического ума с удивительно логичным именованием функций».
                                            открытые проекты пишутся тоже не без профита (пусть это не деньги, а лишь всеобщий почет и уважение, что, впрочем, в конечном итоге тоже легко конвертируется).
                                              –1
                                              Сверхпопулярный ejabberd написан на Erlang. Широко известный xmonad — на haskell. Очень распространённый emacs — на Lisp. Рынок их требует крайне редко и в очень маленьких нишах. Сойдёт за контрпример?
                                                +4
                                                не сойдет, что тут контрпримерного?
                                                  –1
                                                  Рынок ни первого, ни второго, ни третьего нихрена не требует. А вот эти вещи написаны и очень востребованы.
                                                    +2
                                                    вещи востребованы, а программисты — нет
                                                      0
                                                      Ну, Вы уже себе противоречите. Всеобщий почёт и уважение наличествуют? Весьма и весьма. «Легко конвертируется» — это не я сказал.
                                                        +1
                                                        никакого противоречия, авторы вышеозначенных вещей востребованы, но это не значит, что существует огромный рынок труда для хаскелистов
                                                          +5
                                                          Конечно. Достойные программисты, пишущие на любом языке, востребованы. А огромного количества хаскелистов я как-то и не наблюдаю. И людей, которые на Эрланг пишут, тоже не вижу. И лисперов гораздо меньше, нежели людей, способных освоить за неделю PHP и сотворить на нём недосайтик.
                                                          Зато я знаю хедхантершу из Штатов, которая деньги два года назад зарабатывала в основном поиском спецов по Эрланг. Была, значит, потребность на их рынке.
                                                            +3
                                                            Есть, есть Эрлангеры и спрос на спецов по функциональным языкам в принципе. Я был на трех собеседованиях, два из которых — по Эрлангу, одно — по Хаскеллу. Все питерские.

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

                                                              +1
                                                              Вот-вот. В одной знакомой фирме ближайшего разработчика на Эрланг нашли по erlsoap, который он разработал. Жаль, не получилось у них его на работу соблазнить.
                                                                +2
                                                                Да меня тоже не соблазнили. Текущий работодатель перекрыл предложение :)
                                                                0
                                                                А если не секрет, где найти и как попасть в эти тусовки?
                                                                  +1
                                                                  Да все как обычно. Следите за русскоязычными аггрегаторами блогов, участвуйте в рассылках, публикуйте статьи на Хабре или тематических сайтах.

                                                                  Идеальный расклад — когда есть один или несколько проектов на языке, опенсорсных желательно — будут демкой ваших скиллов.

                                                                  В общем, создайте себе репутацию человека, активно интересующегося темой.
                                                                +1
                                                                Написал чатик по приколу на Erlang (для внутренних нужд, ничем ограничен не был), сначала хотел на CommonLisp, но на хабре поставили на путь истинный :) Прикололся, заценил, что нагрузку держит на порядок большую (вернее повалить не смог), чем мое же творение на php (html/js код идентичен). Поискал вакансии в России типа «junior Erlang developer», не нашёл ничего… Оставил Erlang из разряда прикольных воспоминаний, типа FORTH (саморучно портированный на 8080 в 1990-м году), Fortran'а на лабах по информатике, «машины Кнута» или брэйнфака.
                                                                  +1
                                                                  А почему именно в России? Из патриотизма?
                                                                    0
                                                                    По месту жительства :) Об эмиграции никогда серьезно не думал.
                                                                      0
                                                                      А удалённо — не вариант? Мне как раз дома работать удобнее.
                                                                        0
                                                                        Удаленно вариант, но с русскоговорящими. My English is very bad and I can't find a way to up it.
                                                                          +2
                                                                          Странно слышать такое от опытного программиста, честно. Can't you try to improve it? You can read books, chat in English with your friends, watch movies and so on. I guess, it won't be a problem.
                                                                            +4
                                                                            I understand books (technical without dictionary, other — with), some blogs and articles. But I can't speak and I haven't English speaking friends. I need not in «audio» English, only in «read-write» conversations.

                                                                            Есть смутное подозрение, что вышеизложенное могут понять только русские (может быть ещё славяне), изучавшие англияский в школе
                                                                              0
                                                                              Из советского лагеря. Нас специально учили так, чтобы понять не мог никто. Серьёзно. А взять книжечку, да на диван лечь, да прочесть пару рассказов перед сном, ну либо фильму посмотреть — оно и усвоится. :)
                                                                                0
                                                                                Не исключаю, что специально.

                                                                                Пробовал не раз читать (Шекли), но от понимания не приходит умение выражаться. Хотя может просто не набрал критической массы. Недавно вот набрал её для слепого набора с 100500-й попытки.
                                                                                  0
                                                                                  Оффтопим. Предлагаю продолжить в личке, я уже написал.
                                                                                    +1
                                                                                    продолжайте оффтопить, самая интересная ветка в комментах )))
                                                                                0
                                                                                Сериалы смотрите. Было уже множество тем на хабре насчет того как ненавязчиво улучшать уровень языка.
                                                                                  0
                                                                                  Т что буквами написано я и так понимаю, только вот «сказать»(написать ничего не могу)
                                                                              0
                                                                              Как бы мечтаю о заказе «нужен чат» где-нить на фрилансру, который мне попадётся на глаза и сумею убедить заказчика, что Эрланг это круто. Правда нормальный заказчик вряд ли согласится, где он потом найдёт «суппортера» за 5$/час. чистая «подсадка на иглу» :)
                                                                      +3
                                                                      У вас был отличный пример в статье — Windows. Да, она кривая и нелогичная. Но это ей не мешает быть абсолютным лидером. По вашей логике выходит что среди пользователей винды — тоже жрецы без логики. Однако, как сказал ваш оппонент — профессионалы вынуждены работать с Windows, потому что это огромный рынок. Статья в целом интересная, и с большинством я согласен. Кроме одного — в кривых руках, и язык кривой. Лично я давно не пытаюсь что-то запоминать в ПХП: есть хорошие CHM с моментальным поиском :)
                                                                        0
                                                                        один препод в универе нас учил: «не надо всё запоминать, заучивать, зубрить… всё запомнить невозможно и не нужно. важно уметь пользоваться справочниками, пособиями и знать где нужную информацию можно найти» (не дословно)… и разрешал на зачетах и экзаменах пользоваться «справочной литературой» (конспектами и учебником).
                                                                        причем, предмет преподавания с IT не свзян.
                                                                        0
                                                                        Какой у вас диалог интересный вышел, и никто никого не тролит и оба оратора рубят факты.
                                                            0
                                                            Рынку вообще до лампочки на чем оно написано всё, хоть на ассемблере.
                                                              0
                                                              рынку потребителей все равно, а рынку труда — вовсе нет
                                                                –1
                                                                И что интересно лучше, быть в меньшинстве, но которое таки востребовано, или влачить жалкое существование в общем потоке только потому, что мол рынок больше?
                                                                  +1
                                                                  что же не все варианты рассмотрены? еще можно быть в меньшинстве, которое не востребовано и влачить хорошее существование в общем потоке.
                                                                  в сухом остатке — хорошо, там где ты востребован, неважно общий поток это или нет. но в общем шансы выше
                                                                    0
                                                                    >но в общем шансы выше

                                                                    Ничего такого из того, что поток общий, не вытекает. С одной стороны конечно предложений больше, но с другой стороны и конкурентов больше.
                                                                    Вне общего потока можно найти свою нишу, свое призвание и жить спокойно.
                                                                    +3
                                                                    Ну, как видим, от человека зависит. Мой оппонент работает на том, что востребовано. Я ищу работодателей, которые дают мне работать на том, что нравится мне.
                                                                      0
                                                                      поддерживаю, работаю над тем (выбираю из того, что предлагают), что мне больше по душе/интересно и это, имхо, самый значительный плюс фриланса.
                                                          +4
                                                          Так, вот вы говорите что запоминателям в пхп проще потому что там успешность программиста зависит от умения запомниать.
                                                          Но постойте, я вот сейчас открою код своего проекта. И сделаю в нем grep -R 'str_'.

                                                          Да ладно уж, просто поищу упоминание стандартных функций по работе с массивами/строками.

                                                          Ой, нашло один strstr()

                                                          Вы не думайте, проект не на 100 строчек кода.

                                                          А знаете почему? Потому что гладиолус абстракция. (все сейчас представили что у меня врапперы написаны на все функции :) но нет).
                                                          Откройте проект на любом высокоуровневом фреймворке типа Zend/Symfony/Doctrine. Если не заглядывать в код фреймворка — 99% кода выполняют бизнесс задачи не требующие использования стандартных функций.

                                                          А теперь возьмем рядового программиста на пхп который в деле уже 3-5 лет. Вы думаете он до сих пор пишет на коленке? (а велосипедах долго не продержишся в отрасли).
                                                          Выходит что «запоминатели» они только в начале пути. Но пройдет время, дополучается необходимый опыт и человек из запоминателя превращается в аналитика.

                                                          А теперь подумаете — подходит ли ето к другим языкам. Разве когда вы начинаете писать на Python вы сразу можете использовать встроенные функции без мануала?
                                                          Не можете. В начале пути — мы все жрецы. И только потом становимся настоящими джедаями.
                                                            0
                                                            > Откройте проект на любом высокоуровневом фреймворке типа Zend/Symfony/Doctrine.
                                                            А где ж мне его взять? У меня щас под руками только N проектов, которые совсем-совсем не я писал на самодельном фреймворке. Сейчас эти проекты постепенно переписываются на Yii. Кстати, разве ж Doctrine — веб-фреймворк? Это OR/M, насколько я помню. :)
                                                              0
                                                              >Кстати, разве ж Doctrine — веб-фреймворк? Это OR/M, насколько я помню. :)
                                                              Некоторым и его достаточно :)
                                                                0
                                                                По сути, сознательное использование Doctrine приводит к (или вытекает из) необходимости выделения модели (бизнес-логики), уже какой-никакой каркас, а если ещё разделить остальное на представление и всё остальное :) (контроллер) то получается полноценный каркас. фронт-контроллеры, роутинг, формирование форм, их валидация и биндинг — это детали
                                                              • UFO just landed and posted this here
                                                              +1
                                                              Ну, может для вас это бизнес, а для меня это искусство!
                                                                +1
                                                                очень опасное заблуждение
                                                                  0
                                                                  Поясните пожалуйста, очень интересно :)
                                                              • UFO just landed and posted this here
                                                                • UFO just landed and posted this here
                                                                  • UFO just landed and posted this here
                                                                    • UFO just landed and posted this here
                                                                        0
                                                                        Ну тогда предложу вам попробовать пайтоновские листы, срезы. =) Если я не ошибаюсь, он их унаследовал аж от самого Фортрана.

                                                                        >>> S = [2*x for x in range(21) if x**2 > 3]
                                                                        >>> S
                                                                        [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40]
                                                                        >>> S[-1]
                                                                        40
                                                                        >>> S[2:6]
                                                                        [8, 10, 12, 14]
                                                                        >>> S[5::-2]
                                                                        [14, 10, 6]
                                                                        >>> import random
                                                                        >>> [[chr(random.randint(ord('A'), ord('Z'))), i] for i in range(6)]
                                                                        [['M', 0], ['S', 1], ['A', 2], ['W', 3], ['W', 4], ['S', 5]]
                                                                        >>>

                                                                        Сорри, уже спать собираюсь, ничего умнее не придумал.
                                                                  • UFO just landed and posted this here
                                                                  –2
                                                                  свободные проекты тоже пишутся для привличения прибыли.
                                                                    0
                                                                    Как «привлИкает» прибыль emacs или ejabberd?
                                                                      –3
                                                                      Коственно. Вы используете emacs в работе? а кто-то использует и получает профит. Думаю разработчики emacs и ejabberd на своих детищах заработали больше чем некоторые, кто не видит моделей получения прибыли с оупенсорц проектов. Тот самый ZF — оупенсорц, а сколько проектов каждый пыхопэ-программадор на нем заработал.

                                                                      Чтобы забивать гвозди нужен молоток. А оупенсорцный он или нет — уже второй вопрос.
                                                                +15
                                                                вы выковыряли несколько известных проблем php и на основании этого делаете далекоидущие выводы.
                                                                я с вами несоглашусь.
                                                                В php все достаточно логично и предсказуемо, просто есть свои особенности — которые нужно знать. но это касается любого языка.
                                                                  +4
                                                                  Отлично. Так, навскидку:
                                                                  <?php

                                                                  function throwEx() {
                                                                  throw new Exception();
                                                                  }

                                                                  class A {

                                                                  function __constuct($a) {
                                                                  echo __METHOD__;
                                                                  }

                                                                  function __destruct() {
                                                                  echo __METHOD__;
                                                                  }

                                                                  }

                                                                  $a = new A(throwEx());

                                                                  ?>

                                                                  Что произойдёт? И что должно бы произойти?
                                                                    +5
                                                                    Всё правильно — конструктор не вызовется, и будет брошено исключение. Особенно, если ключевое слово __construct написано правильно ;)
                                                                      +6
                                                                      Конструктор не вызовется, а деструктор вызовется. Очень прямая логика.
                                                                        –3
                                                                        Деструктор тоже не вызовется, Вы главное напишите __construct правильно :))
                                                                          0
                                                                          Деструктор вызывается
                                                                            +2
                                                                            yuriy.nasretdinov$ php
                                                                            <?php

                                                                            function throwEx() {
                                                                            throw new Exception();
                                                                            }

                                                                            class A {

                                                                            function __construct($a) {
                                                                            echo __METHOD__;
                                                                            }

                                                                            function __destruct() {
                                                                            echo __METHOD__;
                                                                            }

                                                                            }

                                                                            $a = new A(throwEx());

                                                                            ^D
                                                                            Fatal error: Uncaught exception 'Exception' in -:4
                                                                            Stack trace:
                                                                            #0 -(19): throwEx()
                                                                            #1 {main}
                                                                            thrown in - on line 4
                                                                            yuriy.nasretdinov$ php -v
                                                                            PHP 5.3.3 (cli) (built: Aug 22 2010 19:41:55)
                                                                            Copyright © 1997-2010 The PHP Group
                                                                            Zend Engine v2.3.0, Copyright © 1998-2010 Zend Technologies
                                                                              0
                                                                              У меня PHP 5.2 — значит в ветке 5.3 только пофиксили
                                                                                0
                                                                                Я это нашёл в 5.1.
                                                                                  +11
                                                                                  вы еще в php4 найдите глюки, и напишите пост о ущербности ))
                                                                                    +24
                                                                                    Как классно общаться с людьми, которые не умеют читать и не хотят понимать.
                                                                                    Я сказал, плюс-минус лапоть, следующее: в PHP многие вещи нужно помнить. Как пример, такое серьёзное изменение логики прошло практически недокументированно. Люди не знают о том, когда ущербное поведение заменили на логичное и правильное. Как следствие (см. текст поста, людям «запоминательного» типа с PHP общаться проще.)
                                                                                    Вы мне отвечаете, что я пишу об ущербности PHP.
                                                                                    Да, я согласен, что PHP ущербен, так как наблюдаю это поделие с 98-го, с «тройки». У меня по нему нет ZCE, но их пробные онлайновые я сдал на эксперта, так что говорю я это не просто так. Однако в данном случае речь не шла о том, что ущербен PHP, а о том, что людям, которым проще запомнить, чем понять, он легче даётся. Потому что понять местами нельзя.
                                                                                    Я понятно объяснил?
                                                                                      0
                                                                                      подобных багов можно нарыть кучу в реализации любого языка.
                                                                                      удивительно что вы общаясь с php еще с «тройки» этого не поняли.
                                                                                      это никого кроме вас не наталкивает на такие странный выводы, и желание написать об этом не менее странную статью.
                                                                                        +6
                                                                                        Подобных? Ну, если это для Вас незначительный баг, то таки да, конечно.
                                                                                          +1
                                                                                          баг значительный.
                                                                                          другое дело что я никогда не передавал напрямик в конструктор функцию, тем более которая в кидает эксепшн.
                                                                                          я както больше по старинке, сначала формирую параметры а потом передаю их в функции и методы.
                                                                                          видимо поэтому подобные глюки мне не портят нервы в работе.
                                                                                            +1
                                                                                            А зачем забивать пространство имён? Ну вот какой в этом сакральный смысл? Если этот параметр вообще нигде не будет использован дальше? Это вкусовщина. А то, что «Вы никогда» — так это сугубо Ваше дело.
                                                                                              +3
                                                                                              смысл в том чтобы не городить такие многоэтажные конструкции, к томуже перед рождением важных объектов можно провалидировать полученные данные, прежде чем передавать их дальше…
                                                                                              сами же писали о наследии говнокода который оставляют php кодеры. вот ваши пример как раз из той кучи.
                                                                                                0
                                                                                                Э… Понимаю, что Вы говорили не об этом, но всё-таки: в Ваших программах много неважных объектов?
                                                                                                  0
                                                                                                  да много. это например классы работы с типовыми формами, валидация, генерация картинок, плагины к социальным сетям… если чтото пойдет не так то юзер просто не увидит страницу или блок.

                                                                                                  а еще есть биллинг, транзакции, отчеты, импорт и экспорт данных — тут уже последствия могут быть хуже, ибо если написать их тяп-ляп то это чревато неправильными расчетами, несоответствием данных и косвенными глюками которые могут всплыть много позже…
                                                                                        0
                                                                                        лучше подумайте об ущербности программиста, который не в состоянии ничего запомнить…

                                                                                        не защищаю php, но если для вас даже это — проблема, то, извините, но лучше вам заняться чем-то другим, особенно чем писать посты ни о чем.
                                                                                          +5
                                                                                          Не стремясь защититься, предлагаю Вам хотя бы перечитывать свои сообщения перед отправкой. «То но лучше» — офигенно грамотно. «Особенно чем писать» — офигенно грамотно. Простите, как я могу принимать всерьёз мнение человека, который свои мысли даже на русском языке выразить не может? Может, он и читать не умеет. Ну не может пост «ни о чём» так бурно обсуждаться рядом умных людей, право.
                                                                                            –3
                                                                                            Я не претендую на «офигенную грамотность», я не задрот. Это во-первых. Во-вторых, то, что вам показалось «офигенно грамотным» в «то, извините, но » (которое вы так искаженно процитировали) объясняется скорее всего бедностью вашего языкового запаса. Это не редкость среди «технарей», надо было больше читать литературы.

                                                                                            Что «пост ни о чем», не один я сказал. Собственно как и ваш ответ не по теме комментария. Насчет русского языка я уже ниже писал: если для вас запомнить несколько «словоформ» языка php такая проблема, то как же вы с русским-то справлялись?

                                                                                            А последнее ваше высказывание — бред в чистом виде. Может и еще как.

                                                                                            Засим откланиваюсь, желаю натренировать память в новом году.
                                                                                              +1
                                                                                              Надеюсь, что Вы так и поступите: будете читать больше литературы. Обороты, используемые Вами, спокойно можно патентовать: так говорите только Вы. Ну, возможно, ещё Ваши коллеги из числа наименее образованных. У «технарей» такое бывает.

                                                                                              И да, с наступающим праздником Вас.
                                                                                          0
                                                                                          У мок-экзаменов от phparchitect (а именно они были «официальными» пробными) нет оценки «эксперт», уж извините за занудство :)
                                                                                            0
                                                                                            Ага, там написано Excellent.
                                                                                –5
                                                                                А вот если __construct написан неправильно, то действительно конструктор не вызывается, и, по всей видимости, функция throwEx() тоже :), и вот это уже действительно косяк.
                                                                          –5
                                                                          эксепшн возник еще ДО выполнения конструктора, и логично что пхп прервал его выполнение и вызвал деструктор.
                                                                          а что ДОЛЖНО БЫЛО произойти? чтоб выполнение продолжилось и эксепшн был проигнорирован? тогда бы вы еще больше начали кричать о нелогичности поведения )))
                                                                            +1
                                                                            Ой-ей-ей!
                                                                            Проблема в том, что деструктор не должен вызываться, если не вызван конструктор.
                                                                            Но это ладно, хуже другое:

                                                                            try{
                                                                            $a = new A(throwEx());
                                                                            } catch (Exception $e) {
                                                                            echo 'catched!';
                                                                            }

                                                                              –3
                                                                              Исключение не было поймано!
                                                                                +3
                                                                                Напишите слово __construct правильно — будет ловиться (и деструктор не будет вызываться).
                                                                                  +1
                                                                                  Хоть ставь PHP5.1, ей-Богу. :)
                                                                                  +4
                                                                                  переименуйте
                                                                                  function __constuct($a) {
                                                                                  в
                                                                                  function __construct($a) {
                                                                                  и оно чудесным образом будет поймано)
                                                                                    +3
                                                                                    Переименовал, стало лучше, спасибо.
                                                                                    0
                                                                                    Угу. Именно это мне и пришлось в своё время объяснять коллеге.
                                                                                      0
                                                                                      Точнее, не это, а почему __destruct() отрабатывает вне зависимости от того, отработал ли конструктор. Там бизнес-логика была.
                                                                                        0
                                                                                        а почему деструктор не должен-то отрабатывать? ведь объект уничтожается после завершения обработки… не?
                                                                                          +2
                                                                                          А потому что можно создать объект, а потом попытаться дёрнуть инициализирующий метод, словив исключение при получении аргументов, и оставив объект (объект при этом не знает, что он инвалид, и будет в __destruct() косячить). Самый простой пример — со статическим свойством, которое увеличивается на единицу в конструкторе и уменьшается на единицу в деструкторе. Из-за этого бага до PHP 5.3 это статическое свойство очень просто можно было загнать в глубокие минуса.
                                                                                          А можно сначала получить аргументы, создать объект и дёрнуть инициализирующий метод. По мне так логичнее второй подход, но раньше здесь работал первый.
                                                                                          +2
                                                                                          Деструктор – это специальный метод класса с именем __destruct(), который будет гарантированно вызван при потере последней ссылки на объект в программе.

                                                                                            0
                                                                                            Вопрос — а была ли создана хоть одна ссылка, если исполнение прервалось еще на стадии вычисления аргументов (напомню, что в PHP нет отложенных вычислений).
                                                                                            Вы зря спорите, на самом то деле. Эта логика, как выше уже выяснилось — была убрана в PHP 5.3.
                                                                                              0
                                                                                              получается что была создана)
                                                                                              • UFO just landed and posted this here
                                                                                                +1
                                                                                                Так вот должна ли она быть создана? Нет, не должна была, нам нечего передать конструктору в качестве аргументов. Однако он вызывался.
                                                                                        +2
                                                                                        Вы уж определитесь, «эксепшн возник ДО конструктора», или «пхп прервал выполнение конструктора»?
                                                                                          –2
                                                                                          А зачем? :) Нам противостоит типичный «жрец». :)
                                                                                            0
                                                                                            тоесть вы себя относите к высшей касте программистов? )))
                                                                                              +3
                                                                                              Вот опять. Это _разные_ типы мышления. Я не считаю людей, которым нравится чёрный, лучше людей, которым нравится красный. И левшей с правшами не разделяю по принципу «кто лучше».
                                                                                              Кстати, слово «каста» тоже какое-то… религиозное. :-P
                                                                                                0
                                                                                                я как и многие тут еще пишу на java например. и что? я все еще «жрец»?
                                                                                                  0
                                                                                                  Ну я тоже писал на Java. Работал с J2EE. В 2001-м. Там было всё логично. Да, доки тоже были открыты, но с javadoc конкретных вещей. Приколов типа процитированного с деструкторами без конструкторов там не было никогда.
                                                                                                    0
                                                                                                    тоесть если в java найти баг, то он автоматически станет «ЯП для жрецов»?)
                                                                                                      0
                                                                                                      То есть вот лично у Вас проблемы с вербализацией мыслей, о чём Вам в #comment_3527434 тактично намекнули. Как видно из продолжения дискуссии, Вы упорно не пытаетесь понять собеседника и продолжаете гнуть свою линию. Баги тут ни при чём., приведённый мной пример — не иллюстрация бага, а скорее «особенность реализации», которая, кстати, потихоньку была устранена. Молча.
                                                                                                      Java же, к слову, очень логичен и отлично продуман. Писать на нём — одно удовольствие.
                                                                                                        +1
                                                                                                        и у кого из нас проблемы после этого)) вы со мной вообще разговариваете?
                                                                                                        я уже который раз задаю прямой вопрос, и не получают прямого ответа.
                                                                                                        просто вы не можете ответить мне потому что это будет противоречить всей вашей теории о «персистентности типа ума» программистов.
                                                                                                        потому что даже ёжику понятно что нормальный прогер может легко переключиться на другой язык, если есть необходимость или просто желание. так как:
                                                                                                        — запоминать ничего не нужно, всю рутину давно переложили на IDE
                                                                                                        — баги есть везде! и это не показатель принадлежности языка к тому или иному типу
                                                                                                          0
                                                                                                          Да, стараюсь разговаривать с Вами.

                                                                                                          Объясняю по пунктам:
                                                                                                          1) Вам задали вопрос: «Вы уж определитесь, «эксепшн возник ДО конструктора», или «пхп прервал выполнение конструктора»?» Вы не ответили. А это немножко разные вещи.
                                                                                                          2) Вместо этого Вы начали что-то невнятное про «высшую касту». Ещё раз: я не считаю, что высшая каста — это люди, которые любят яблоки; равно как не считаю, что низшая — те, кто любит груши. Я вообще программистов на «касты» не делю.
                                                                                                          3) Да, поскольку с логикой у Вас проблемы (см. пп. 1) и 2)), Вы очень похожи на «жреца» по моей терминологии. Разговор у нас, соответственно, складывается ни о чём: вот уже и Вы в нём смысла не видите.

                                                                                                          Давайте закроем эту ветку, она заведомо непродуктивна.
                                                                                        +3
                                                                                        Простите но мне кажется что это как раз «очередные тонны кода, которые будут приводить в ужас всех, пришедших следом». Мешанина функций и классов, что может быть хуже?
                                                                                          +1
                                                                                          Это не тонны кода, а максимально сжатый по объёму пример, написанный за две минуты для того, чтобы проиллюстрировать конкретную проблему. Разницу видите?
                                                                                            0
                                                                                            А какую проблему демонстирует этот кусок кода? На сколько я понял в ранних версиях это могло привести к вызову деструктора без вызова конструктора. Ну так мне кажется что это кривизна кода а не проблема языка. mysql_query может к sql injection привести, но это же не проблема/недостаток языка а скорее проблема разработчика, который должен знать и понимать что и как он делает
                                                                                              0
                                                                                              Создание объекта происходит даже при исключительной ситуации при вызове конструктора. Это проблема, т.к. конструктор не отработал, а деструктор всё равно будет вызван.
                                                                                                –1
                                                                                                Всё же я с вами не соглашусь, да тут есть косяк со стороны php но исключительную ситуацию должен отлавливать разработчик
                                                                                                  0
                                                                                                  Достаточно специфичный пример у вас,
                                                                                                  вот тут собрано достаточно: www.tnx.nl/php.html
                                                                                                  ну и www.tnx.nl/php5.html
                                                                                                    0
                                                                                                    Вот еще такой пример.

                                                                                                    Кажется очевидной такая конструкция, но нет.
                                                                                                    if ( empty($obj->foobar) ) {

                                                                                                    }
                                                                                                    empty это такая специальная конструкция языка, и
                                                                                                    если переопределены __get, __set то нужно переопределить еще и __isset, который будет выполняться в этом случае.
                                                                                                      0
                                                                                                      Ну да, я в курсе. Но магия — это ещё одна тема для строительства багодромов.
                                                                                            0
                                                                                            функции работы с массивами тоже логичны и предсказуемы? :)
                                                                                            +10
                                                                                            А ведь сам язык php вполне логичен и прост. Я имею в виду собственно управляющие конструкции.
                                                                                            А остальное — это уже стандартная библиотека, не сам язык. Да, есть нелогичные места. Но в других языках тоже надо запоминать, и немало.
                                                                                              0
                                                                                              ООП — это стандартная библиотека?
                                                                                              +3
                                                                                              Он логичен как шаблонизатор. Для этого там есть специальный синтаксис записи операторов для вставки в html, и для этого там все переменные начинаются с $.
                                                                                                +2
                                                                                                Кстати, а там уже сделали возможность сделать a()[3] ?)
                                                                                                • UFO just landed and posted this here
                                                                                                    0
                                                                                                    Да ну? В 5.3.3 — синтаксическая ошибка.
                                                                                                      0
                                                                                                      Когда успели? Я что то не наблюдаю ничего такого:

                                                                                                      konstantin@konstantin-desktop:~$ php -r '$s="f,g,h";explode(",",$s)[0];' || php -v
                                                                                                      PHP Parse error:  syntax error, unexpected '[' in Command line code on line 1
                                                                                                      PHP 5.3.2-1ubuntu4.5 with Suhosin-Patch (cli) (built: Sep 17 2010 13:41:55) 
                                                                                                      Copyright © 1997-2009 The PHP Group
                                                                                                      Zend Engine v2.3.0, Copyright © 1998-2010 Zend Technologies
                                                                                                      
                                                                                                        0
                                                                                                        Same here. Кстати, зачем ||? :)
                                                                                                          0
                                                                                                          Просто чтобы выполнилось и с новой строки команду не вбивать) передавать по конвейеру я точно ничего не собирался)
                                                                                                            0
                                                                                                            Аха. Ну мне было бы лениво, я бы ";" тыркнул. :)
                                                                                                              0
                                                                                                              На вкус и цвет, в данном случае разницы никакой)
                                                                                                                0
                                                                                                                Согласен. :)
                                                                                                      0
                                                                                                      В транк закоммитили. Будет в следующей версии (5.3.4)
                                                                                                        0
                                                                                                        Прекрасно! Еще бы именнованые аргументы функций (чтобы вместо func1(array('x'=>10,'y'=>20)) писать func1(x:10,y:20)) и полнейшее ооп для того, чтобы можно было делать что-то типа «hello, world».substr(3,6) или на худой конец «hello world»->substr(3,6), потом дождаться, когда большинство хостеров примут версию РНР с этими вкусностями за базовую и можно наслаждаться жизнью до полной нирваны!
                                                                                                        P.S. python и ruby не предлагать! Серверный JS тоже.
                                                                                                          0
                                                                                                          > P.S. python и ruby не предлагать! Серверный JS тоже.
                                                                                                          да, хозяин
                                                                                                    • UFO just landed and posted this here
                                                                                                        0
                                                                                                        Прост? А как насчёт массивов-хешей? А может, его правила неявного преобразования типа просты и очевидно? Или поведение ссылок? Или банальный приоритет тернарного условного оператора? Или синтаксис интерполяции строк? Ну это только навскидку вспомнилось.
                                                                                                          0
                                                                                                          что такое интерполяция строк?
                                                                                                            0
                                                                                                            Когда переменные встраивают в строку вот так: «word word word $variable word».
                                                                                                            –1
                                                                                                            что такое интерполяция строк?
                                                                                                          +5
                                                                                                          Переписать еще несколько раз и все будет тип топ.
                                                                                                            0
                                                                                                            Камикадзе?
                                                                                                              +1
                                                                                                              Два раза.
                                                                                                            +4
                                                                                                            ИМХО, для человека, хоть немного знающего С++, изучение PHP дается с легкостью: знакомый синтаксис, много знакомых функций, только работа с переменными сначала кажется немного непривычной.
                                                                                                              +2
                                                                                                              а если наоборот?)
                                                                                                                0
                                                                                                                Не знаю, не пробовал.
                                                                                                              0
                                                                                                              Бредовый пост ни о чём… набор мыслей. Где идея?
                                                                                                                –2
                                                                                                                Идея — давайте опусти пхпшников, и на их фоне будем казаться крутыми )
                                                                                                                  +5
                                                                                                                  Неправда, я такого не писал и не имел в виду.
                                                                                                                    0
                                                                                                                    «А сам PHP — как инструмент, как средство, как тема общения, — привлекает к себе людей в первую очередь «запоминательного», а не аналитического типа.»

                                                                                                                    Я правильно понял, что вы подразумевали, что пхпшники не могут анализировать и размышлять?
                                                                                                                      +2
                                                                                                                      Нет, неправильно.
                                                                                                                        +3
                                                                                                                        Ну ладно тогда.
                                                                                                                        Заебали руби-неофиты, которые не способны написать что-то серьезнее хелловорлда, но дико горды своим синтаксическим диабетом.
                                                                                                                          0
                                                                                                                          А, ну тады ладно. Я не руби-неофит. :)
                                                                                                                            +2
                                                                                                                            +1.5
                                                                                                                            любой пхпшник мечтает писать на руби или питоне
                                                                                                                              –1
                                                                                                                              Не любой.
                                                                                                                                0
                                                                                                                                Не могу сказать, что мечтаю. Мне практически всё равно писать на php или python для веба. Для «десктопных» приложений однозначно python, пока нет биндингов qt для php
                                                                                                                                  +2
                                                                                                                                  >пока нет биндингов qt для php
                                                                                                                                  есть все, и qt и gtk и тд. только это говно, сами понимаете
                                                                                                                                    0
                                                                                                                                    Полностью поддерживает qt4 под линукс и виндовс? Если да надо будет посмотреть.
                                                                                                                                      +1
                                                                                                                                      Можете не смотреть, оно в любом случае уже года 2 как заброшено. К своему стыду, признаюсь, что у меня его даже не получилось собрать на современном дистрибутиве. Подробности не помню, но вроде ему позарес нужна была именно старая версия какой-то либы, которую уже достать у меня не получилось.
                                                                                                                                      +3
                                                                                                                                      php-qt это даже хуже, чем гланды через жопу удалять.
                                                                                                                        +5
                                                                                                                        Идея для тех, кто не умеет читать: «Дело не в том, что один из них умнее, а другой глупее, нет. Это просто другой тип мышления, ориентированный на запоминание, а не на стремление собрать данные и проанализировать ситуацию с разных сторон. А сам PHP — как инструмент, как средство, как тема общения, — привлекает к себе людей в первую очередь «запоминательного», а не аналитического типа».
                                                                                                                          +3
                                                                                                                          тут на Хабре каждый второй мультиязычен. успешно кодят сразу на несколько языках, в зависимости от поставленной задачи и проекта.
                                                                                                                          как вы объясните этот феномен с точки зрения своего «запоминательного» и аналитического типа»?
                                                                                                                            +7
                                                                                                                            Даже не собираюсь объяснять. Я тоже много на чём пишу. Но когда я пишу на PHP, мануал у меня открыт практически всегда.
                                                                                                                              +3
                                                                                                                              тоесть когда человек кодит на PHP он «запоминательного» типа.
                                                                                                                              только открыл в IDE проект на Ruby — сразу стал «аналитического типа»?
                                                                                                                              что за неявное преобразование типов )
                                                                                                                                +6
                                                                                                                                То есть человек с аналитическим мышлением сильно облажается, если будет строить предположения на базе уже имеющегося опыта. Впрочем, как справедливо заметили, человеку, который использует только IDE, не нужно строить предположений. Ему IDE подсовывает факты.
                                                                                                                                  0
                                                                                                                                  а вы что в Notepad-e кодите? что вам приходится ВСЕ ЭТО запоминать и постоянно обращаться к мануалу?
                                                                                                                                  тем более и запоминать то там не так много…
                                                                                                                                    0
                                                                                                                                    А IDE за вас и код сама понимает? Уже написанный.
                                                                                                                                    И мысли читает? Заранее угадывая какую функцию вы хотите написать.

                                                                                                                                    Вот, например. Функция считающая md5 файла хотя бы с какой буквы начинается? С «m» или с «f»? =) А в каком разделе мануала она? Cryptography Extensions или File System Related Extensions? =)
                                                                                                                                      0
                                                                                                                                      никогда это не было для меня проблемой. когда писал на других языках тоже не пытался запомнить ВСЕ функции. По мере набора опыта они сами запоминались. а что забыл быстро находилось в доках или с пом. хинтов в IDE. в чем проблема то? тем более широко используя фреймворки, процесс кодинга преместился на более высокий уровень абстракции, и там уже совсем другие классы и методы. пожалуйтесь еще что их тоже оказывается надо знать, изучать и запоминать… ))
                                                                                                                                        +1
                                                                                                                                        Операции с массивами, строками, изображениями, математика… разве эти задачи решают фреймворки? Каким образом они вдруг переместились в фреймворки? В php со всеми стандартными модулями несколько тысяч функций, и почти за каждой надо лезть в мануал, ибо знаешь, что от функции нужно, но порой даже не догадываешься, в каком разделе мануала ее вдруг обнаружишь и с какой буквы она может начинаться. Увидев в чужом коде незнакомую функции, также надо про нее читать. Догадаться что именно она делает со всеми ньюансами — практически не возможно. Вы к этому привыкли, и сейчас рьяно защищаете, а ничего хорошего то в этом нет. А код должны писать и понимать вы, а не IDE. У меня нет желания дальше с вами продолжать спор, это бессмысленно, пишите на своем php, мне то что, я же не к чему не призываю.

                                                                                                                                        Функция считающая md5 файла находится не в Cryptography Extensions или File System Related Extensions, а (sic!) в String Functions.

                                                                                                                                        Странно, что пресловутое:
                                                                                                                                        if (false == 0) echo 1;
                                                                                                                                        if ('false' == false) echo 2;
                                                                                                                                        if ('false' == 0) echo 3;

                                                                                                                                        в топике еще никто не упомянул.
                                                                                                                                          0
                                                                                                                                          Ложь.
                                                                                                                                          habrahabr.ru/blogs/php/110767/?reply_to=3532381#comment_3528300
                                                                                                                                          Тут вроде как не урожай апельсинов в Хельсинки обсуждался, а именно эта особенность. :)
                                                                                                                                            –1
                                                                                                                                            как спасают фреймворки? абстракцией батенька:
                                                                                                                                            $image = new fwImage('/var/www/html/images/myfoto.jpg');
                                                                                                                                            $image->resize(100,100)->save('/var/www/html/images/myfoto_th.jpg');
                                                                                                                                            вот и все. и ненужно знать как там внутри это работает. странно что вы этого не знаете.

                                                                                                                                            >пишите на своем php, мне то что, я же не к чему не призываю
                                                                                                                                            хаха )) конечно буду писать. или вы думаете что вашы слабые аргументы тут когото убедили? никого. на самом деле ФАНАТИК тут как раз ВЫ, т.к. пытаетесь нам всем показать что мы ошибаемся, не на том кодим и вообще ограниченные — а вот вы настоящий дартаньян, вовремя осознавший ущербность php, и снизошедщий до нас чтобы указать истинный путь.
                                                                                                                                            я и без вас знаю проблемные стороны php, они есть у любого ЯП. но плюсы у PHP перевешивают — это факт. потому и такая распространенность и востребованность, скорость разработки и т.д.
                                                                                                                                            за что платят на том мы и кодим, и неважно что это php, java или c++…
                                                                                                                                              +1
                                                                                                                                              «вот и все. и ненужно знать как там внутри это работает. странно что вы этого не знаете»
                                                                                                                                              Угу. php-шникам уже больше заняться нечем, кроме как оборачивать интерфейсы php-библиотек в новые интерфейсы на самом php. Шаблонизатор (smarty) на шаблонизаторе (php) уже написали, что дальше? Новый язык программирования на php напишете?

                                                                                                                                              Впрочем это и нормально, на сэкономленные деньги, заказчик может купить больше серверов, чтобы оно хоть как-то потом работало.
                                                                                                                                                0
                                                                                                                                                конечно) уж вы бы данный ресайз картинки делали вручную на низкоуровневых функциях))))…
                                                                                                                                                я в вас ни на минуту не сомневался, прекрасный подход.
                                                                                                                                                  0
                                                                                                                                                  Низкоуровневый код для php это как-то так:
                                                                                                                                                  #include "gd.h"
                                                                                                                                                  #include <stdio.h>
                                                                                                                                                  
                                                                                                                                                  int main() {
                                                                                                                                                  	gdImagePtr im = gdImageCreate(64, 64);
                                                                                                                                                  	
                                                                                                                                                  	int black = gdImageColorAllocate(im, 0, 0, 0);
                                                                                                                                                  	int white = gdImageColorAllocate(im, 255, 255, 255);
                                                                                                                                                  	
                                                                                                                                                  	gdImageLine(im, 0, 0, 63, 63, white);
                                                                                                                                                  	
                                                                                                                                                  	FILE *pngout = fopen("test.png", "wb");
                                                                                                                                                  	gdImagePng(im, pngout);
                                                                                                                                                  	
                                                                                                                                                  	fclose(pngout);
                                                                                                                                                  	gdImageDestroy(im);
                                                                                                                                                  }


                                                                                                                                                  Называть функции стандартной библиотеки высокоуровневого скриптового языка «для веба» — низкоуровневыми, это нонсенс.

                                                                                                                                                  p.s. Особенно мне понравилось: «вы бы данный ресайз картинки делали вручную»

                                                                                                                                                  p.p.s. Ах да. Я вообще для ресайза картинок в одном проекте рассматриваю возможность применения CUDA.
                                                                                                                                                    0
                                                                                                                                                    я очень рад за вас, правда. если есть возможность делать нестандартные вещи — это круто.
                                                                                                                                                    но мне очередной заказчик написал в требованиях что писать надо на php, в окружении стандартного хостинга. так как он все посчитал. и ему в будущем поддержка и доработка будет стоить в этом случае меньше всего.
                                                                                                                                                    и нет проблем. берем чтонить типа Yii fw и делаем уникальный сайт, быстро и добротно.
                                                                                                                                                    это рынок.
                                                                                                                                                    а ваши разговоры про то что там есть нелогично названные функции, или что в php нет в поставке своего веб сервера или чтото подобное — это совершенно никого не напрягает, кроме вас))) хотя вы на нем не кодите.
                                                                                                                                                    и это особенно странно, учитывая вашу активность в обсуждении
                                                                                                                                                      +3
                                                                                                                                                      Объясню, почему я здесь. Я довольно долго сам писал на php, более шести лет. О чем жалею. Крутясь постоянно внутри php сообщества, кажется, что php единственный easy, fast, right и вообще only true way для веб-разработки. Уж каких только мифов среди php-шников ни ходит, и это печально на самом деле. А что массово среди разработчиков, то и влияет на заказчиков, а также и всю остальную инфраструктуру. Сейчас мне совсем не кажется, что php достоин всех этих почестей. Он был хорош в начале века, можно сказать в некотором роде совершил революцию. До этого все CGI-приложения писали, а php дал возможность добавлять очень легко и просто серверную динамику прямо в html-страницы. Тогда это было супер-круто. Но времена изменились, сложность этой самой динамики значительно возросла, это уже не набор отдельных «страничек», это целое приложение, а вот сознание разработчиков нет. Что еще печально, если я начинал свой путь в программирование с C++, который, в некотором роде, ошибок не прощает, и по большим толстым умным книжкам дядек в 10 раз умнее меня, то сейчас многие следуя моде начинают программировать с php, прочитав какой-нибудь мануал, аля apache+php+mysql и свой блог за 10 минут. А php один из тех языков, который не учит «хорошим манерам», как мне кажется. Все это очень неприятно.
                                                                                                                                                        0
                                                                                                                                                        почти все кого я знаю из разработчиков, имеют опыт программирования не только на php. зачастую это perl, java, python…
                                                                                                                                                        Все всё прекрасно понимают и плюсы и минусы каждого ЯП. Для себя кодят на чем нравится, а для заказчика на чем нужно исходя из требований. иногда удается переубедить — но не всегда.

                                                                                                                                                        можно и на c++ в билдере лабать проги не особо разбираясь в тонкостях языка. непуганных идиотов хватает везде. не нужно формировать свое мнение глядя только на них. мне приходилось работать с большими профессионалами своего дела, и на php создавать не только странички но и довольно сложные системы. да это можно было бы делать на множестве языков. но это не аргумент.

                                                                                                                                                        времена изменились но и php меняется. не всегда быстро и правильно, но в целом тенденция хорошая.
                                                                                                                                                          +2
                                                                                                                                                          Заказчик ведь свои требования не с потолка берет. Меня например совсем не устраивает, когда «для себя кодят на чем нравится, а для заказчика на чем нужно». Работа должна быть в радость. Я предпочитаю программировать исключительно на чем нравится, и благо такую возможность всегда нахожу. То, что нравится, надо нести в массы, и до заказчиков. Иначе, ситуация не поменяется.

                                                                                                                                                          PHP меняется, да как верно заметили, не то что не всегда быстро, а скорее даже очень медленно. А с учетом тормозов хостеров — и того медленнее. Когда там php6 ожидать? Вон неймспейсы из него портировали, но, как погляжу, не все от них в восторге. А когда с ними перепишут все фреймворки и пр. еще большой вопрос. Более менее вменяемый gc тоже вроде наконец сделали, но насколько вменяемый не знаю, вопрос. Настоящий fastcgi говорят теперь возможен, а на практике? Тоже вопрос.
                                                                                                                                                            0
                                                                                                                                                            >А когда с ними перепишут все фреймворки и пр. еще большой вопрос.

                                                                                                                                                            symfony2 и Zend Framework 2 находятся, имхо, уже в пригодном для продакшена состояния, хотя официально это отрицается :)