Контекст:.
Всю жизнь занимался разработкой прикладного программного обеспечения, компьютерных игр, чего-то системного, алгоритмического. Финансовые проблемы заставили моих работодателей убрать меня из моей локальной зоны комфорта (большого крутого ПО) в сторону программирования веб-приложений. По необъяснимым для себя причинам, покинуть своих любимых работодателей я не могу.
Почему спрашиваю:
Мог бы и сам все попробовать, но чтобы хорошо вникнуть в какой-то стэк технологий, нужно не меньше месяца, а технологий таких кучи. Как я могу узнать что мне подойдет лучше, если я всего не попробую… Уповаю на ваш опыт и рекомендации.
Мой опыт:
У меня хорошо с математикой, алгоритмами, проектированием. Много работал с Pascal, C, C++, C#, Delphi, JavaScript. Меньше с Python, PHP, Java, prolog. Суммарно 10 лет.
Хорошо знаком с PHP CodeIgniter, делал на нем небольшое множество серьезных проектов, но не нравится мне особо сам php и конкретно этот фреймворк.
Что ищу:
Нужен язык / язык + фреймворк для разработки сайтов, веб-приложений.
Критерии выбора (в порядке важности):
0. Ориентация на stateless.
1. Качество.
2. Перспективность. Надеюсь что выбранный стэк технологий не умрет, пока я его учу.
3. Популярность. Важно, чтобы на эту тему было много вакансий (с убер большой З. П. разумеется).
4. Развитость. Не хочется ковыряться в багах инструментов. Было бы просто отлично, если бы я мог использовать уже готовые модули, а не делать свои для каждой задачи.
5. Быстродействие.
6. Грамотное сообщество, хорошие документации. Правда я верю, что для всех фрейворков в этом плане все хорошо, но мало-ли.
7. Отсутствие проблем с хостингом.
Предпочтения:
Объектно ориентированный язык программирования со статической строгой типизацией, Си-подобного синтаксиса.
Итого:
Подскажите пожалуйста язык + возможно фреймворк для программирования сайтов / веб-приложений. Большое чисто человеческое спасибо автору каждого полезного ответа, ну и плюсик в карму разумеется.
P. S. Пожалуйста, пишите развернутые ответы.
P. P. S. Пожалуйста, ставьте плюсы и минусы ответам, это поможет мне в выборе.
Обновление 1:
Большое спасибо за ответы, но все-же хочу уточнить, что не список названий фреймворков и языков мне нужен. Хотелось бы услышать что-то типа «Рекомендую то-то и то-то, потому что так и так, подходит под такие-то критерии и прочие...». Спасибо.
Решение:
Среди statless ориентированных, качественных фреймворков мой выбор пал на Python/Django. Меня убедили (в том числе в офлайне) в его качественности, я нашел в своем родном городе несколько активных вакансий на его тему с 2500$++ заработной платой. Решающую роль в выборе сыграли критерии качества и популярности. Java и ASP.NET — имеют лучшую производительность, вероятно даже технологически более развитые, но их stateless ориентация — под сомнением (уточню при запросе). Выбирая между самым популярным php фреймворком — Zend Framework, Python/Django, Ruby on Rails я остановился на Django поскольку он популярней чем RoR, а php / zend был исключен по критерию качества самого php (качество синтаксиса и структуры языка). Python был близок к исключению по критерию качества интерпретаторов/компиляторов/выполняторов, но меня убедили (офлайн), что это только мои личные стереотипы и давно минувших лет проблемы.
Как читающий пост спустя три года и имеющий проблему выбора, очень хочу узнать - оправдался ли выбор и с какими проблемами или наоборот приятными моментами столкнулись?
Ну веет ветром еще и node.js. Суть в том, что стоимость пробы слишком высока. В моем случае, скорей всего 3 месяца где-то. Слишком надеюсь сделать сразу правильный выбор.
я попробовал Django, просто так, для самообразования, взял один из старых проектов и реализовал его на нём, изучается быстро, достаточно прост (относительно), возвращаться назад в мир ПХП, очень не просто, особенно когда просят найти ошибку или чуть чуть изменить чужой скрипт…
прошло время, остался на нём, но хорошо понимаю где его сильные стороны где не очень, но всё решаемо, да и версии новый выходят одна за другой, постоянно появляются «вкусняшки» всякие.
Сообщество конечно не как у ПХП, но и порог вхождения повыше, намного меньше вопрос по типу «как подключится к mysql » или «помогите составить запрос».
основная информация о проблемах и решения таковых находят в 90% на англоязычном stackoverflow.com/
руби не использовал, не могу за него сказать, но понимаю что идеологически они похожи, просто там другой баланс + и — какой подойдёт именно вам, это можно понять только сравнив, например написав один и тот же проект на 2х.
я вот тоже долго выбирал, пока ещё не знаю правильно я поступил или нет, время покажет, но пока не жалею, что пошёл в сторону отличную от PHP
Ну порог вхождения — вопрос последний для меня.
> прошло время, остался на нём, но хорошо понимаю где его сильные стороны где не очень
А какие у него сильные и слабые стороны?
Сильно холиварный вопрос, любители как и не любители могут закидать, кому-то не проблема ведь рыться в чужом говнокоде пхп и искать ошибки. а кому-то это отвратно.
могу уверенно сказать следующее
1 мало кода для определённого функционирования (реально афигевал по началу типо блог на 50 строк и то половина это пагинация, хотя есть встроенная)
2 если надо быстро запустить прототип или бетту, то имея навыки это будет намного быстрее чем гуру ПХП 80лв это сделает, разумеется не беру во внимание Yii с коханами (это отдельная тема для разговора)
в общем реально сильно сокращается время разработки, это главное достоинство, я считаю
3 чертовски приятный язык
4 когда-то я работал в телекоме который отныне куплен билайном, и там очень много приходилось работать с SQL запросами, сложными-большыми-огромными, за последние 1.5 года я не написал ни одного запроса, меня это радует (нет я понимаю что если встанет __нестандартная__ задача я с лёгкостью накидаю его),. но считаю, это сродни механической КПП в автомобиле городском, вроде круто и всё такое, но нафиг не нужно в повседневной жизни (гидроавтомат форевер :D). и тут так, я рад, что фреймворк делает это за меня, это чертвоски приятно
4 удобный процесс разработки, хоть под вин, хоть под linux, хоть в браузере (была пару тем на хабре)
5 язык питон более распространён в реальной жизни, в консоле linux серверов, скрипты много чего вместо bash начал делать на питоне, приложения для андройда для венды можно также писать на питоне
в общем _мой_мнение_, что в жизни он более полезнее окажется чем руби.
про минусы не буду они могут оказаться сугубо индивидуальными и зависеть от моих способностей, я не считаю себя способным, одарённым и т.п. у меня есть друг который за пол года в джанге натаскался раза в 3 больше меня, и времени он тратит также раза в 3 на всё, по его мнению в джанге свои минусы которых я не замечаю или не касался пока.
но могу с уверенностью сказать что попробовать стоит.
Ну у меня есть опыт работы с питоном, минималистичность (за исключением явности) ему действительно присуща, и это хорошо. Остается 2 главных вопроса:
1. Как у него с быстродействием, относительно того-же php.
2. Можно ли таки писать запросы, а не доверять это ему. У меня на работе есть специальные люди для этого. Не верю я, что объектная модель может сделать запрос лучше аналитика. Или может?
3. Вакансии, З. П.?
4. Недостатки? Пожалуйста, все-же озвучьте те недостатки, которые вы в нем видите.
по быстродействию тут вопрос большой и просторный, я могу сказать, что не заметил прямо вот тормознутости, но могу сказать, что все инструменты для кэширования различных уровней есть, есть сторонние батарейки, если подойти с умом к архитектуре то будет не хуже любой ЦМС хоть джумлы хоть битрикса. хоть срипта на коленке, просто больше гибкости для дальнейшей оптимизации.
2 если хотите, конечно можно писать свои запросы, совсем не беда, ради бога.
я не говорил, что запрос будет лучше чем от аналитика, понятно, что будет не столь оптимально как узкозаточенный костыль, но местами это можно полностью простить эти мелочи.
вы наверняка владете автомобилем, и доверяете распределение момента между колёсами дифференциалу, вы не управляете временем открытия форсунки каждого цилиндра, вы не управляете фазами сдивига в работе клапанов (VVT-i да VTEC и им подобные) автомобиль всё делает за вас и вас это устраивает, тут примерно такая же ситуация, конечно вы можете вывести датчик какойнить между вами и сидушкой, чтоб от степени нажатии на него или сжатия его какая-то система автомобиля работала иначе никто не запрещает, если вам это действительно нужно
например для сайта с отзывами о косметики надо было вывести топ участников по числу оставленных комментариев
то есть, есть модель с косметикой, к ней цепляется модель отзывов и отзыву цепляется юзер
и вот чтоб вывести список ТОП пользователей по числу оставленных отзывов -комментариев, для этого потребовалось написать одну строку, я не выдумал скул запрос, даже не пытался. одна простая срочка, с перечислением полей которые мне нужны и по какому посчитать сгруппировать, это подкупает, правда.
понятно, что я мог бы написать более оптимальынй запрос чем его сгенерировала ОРМ, но если на эту страницу не тыкают 500 000 человек каждый день, то нет смысла, с учётом правильного настроенных батареек кэширования запросов. можно так и 500 000 человек пережить.
допустим еслиб вам надо было ещё дальше узнать чёнить из профиля пользователя, например какой цвет глаз преблодает и сделать ещё что-то может быть возникли проблемы с ОРМ было бы проще уже написать свой запрос. джанга не против этого нисколько
про кэширование нештатное, есть ещё и штатные Обзор готовых и свой вариант или вот пользователь сам написал
Всё зависит от вас, от вашего опыта, это просто удобный инструмент для определённого круга задач…
3 вакансии и ЗП это вам на HH там всё будет, но как мне кажется их число будет расти. ну и запрлаты должны быть не хуже чем у опытных PHP
4 любая ОРМ тебя отодвигает от гибкости и возможностей, она тебя немного загоняет в рамки, которые заложили архитекторы ОРМ в силу разных причин.
Тут 2 варианта либо вы принимаете эти условия и радуетесь либо пытаетесь с ними бороться, если вы приняли то и архитектуру вы выстраиваете так чтоб было её легче реализовывать с этой ОРМ, не вижу в этом ничего плохого, если будет такая ОРМ которая будет давать вам просто всё, то по моему мнению, ога будет сильно громоздка, в её справке можно будет утонуть, а по настоящему хорошо в ней будут разбираться только бородатые гуру.
то есть придёт момент, когда вы упрётесь в возможности ОРМ и надо будет самому писать скул запросы не потому что так будет оптимальнее, а потому что ОРМ просто не сможет понять вашу логику.
Но все штатные(обычные повседневные) моменты она покрывает на 100%
Джанга наверное имеет тут небольшой плюс перед Рельсами, они вроде как намного больше тяжелее и по слухам, там больше возможностей.
1, 3 — пойду уточнять у гугла.
2. С ОРМ, всякие ТОП — это конечно очень хорошо, но вот, например, в последним проекте было множество запросов на пару экранов. с множеством различных join, кастов, иерархий. И это все редактировали и тестировали аналитики. В случае с ОРМ там не получится.
может они имели ввиду что-то вроде возможностей node.js и прочих реалтайм… чатов и проектов, но это мои догадки, нужды ещё не было.,
Главное что я вынес из интервью, что они завтра не запилят версию джанго2 и все мои нафиг проекты сломаются, я по моему с ними с версий толи 1.2 толи ещё какая была, сейчас почти все проекты на 1.4 без проблем перезжают, хотя оп началу джанго ругалась мне что вот этот код устарел замени на вот этот (в 1.3), а в 1.4 выпили но это не было внезапностью для меня.
то есть мягкая плавная эволюция, а не «всё в понедельник с чистого листа»
да я вот писал свой пагинатор и получилось что он делал что-то 30 запросов в базу чтоли, но потом средствами ОРМ и чтением доков сократил до одного-двух.
Правильного выбора нет.
На сегодня и ближайшие лет 5 есть несколько направлений, которые точно не умрут и голодными вас не оставят:
— Ruby фреймворки (Ruby on Rails, Sinatra)
— Python (Django)
— PHP (Yii, Symfony)
90% малых и средних проектов пишется на одном из трех языков. Python и Ruby не сильно разные, есть свои плюсы и минусы. PHP сильно популярен, но далеко не идеален, слишком много минусов у самого языка и инфраструктуры вокруг него.
Советую вам выбрать один и работать с ним, дальше будет видно, ведь пока не сделаешь выбор не поймешь правильный он или нет.
Если решите заниматься ruby то готов помочь и направить с чего начать изучение.
Насколько знаю, сейчас самые передовые и с ок архитектурой — Yii и Symfony 2.
Я сам выбрал 2-ю и не сколько не жалею, т.к. она хоть и сложная, но повышает очень сильно качество кода.
Если много работали с C#, то вполне логичным было бы заняться разработкой на .NET. Насколько я знаю, вакансии по нему есть и не самые низкооплачиеваемые. А в свете подъёма Микрософта на волне Вин8-семейства продуктов, количество их будет только расти.
Можно попробовать Java и фреймворки Spring/Hibernate или Spring Roo. Вот уж где статическая строгая типизация и си-подобный синтаксис в чистом виде.
ASP.NET — пробовал, стошнило 3 раза за 5 минут. Быть может нужно было пробовать лучше, но пока как-то не хочется.
Java, несмотря на то, что я тот человек, у которого ни на одном компьютере на стоит java-машина, может подойти. Можно подробней про эти фрейворки?
Если интересна java в этом контексте, то был похожий вопрос тут.
От себя добавлю что по java посмотрите так же в сторону gwt, сам на нем не писал, но знаю тех, кому он пришелся по душе.
Рекомендую Python+Django. У джанги большое сообщество хорошая документация, множество готовых компонентов. На питоне есть и другие хорошие фреймворки, но у джанги самое большое сообщество, поэтому это идеальный вариант для вникания в веб-разработку.
Раз вы неплохо разбираетесь в PHP, то начните с Yii. Это позволит вам незаморачиваясь на изучение языка, разобраться со стеком протоколов, техникой и технологией. После этого уже решите, куда вам интересней двинуться дальше на Ruby или Python. Если вообще конечно захотите потом углубляться в сферу…
Сразу хороший выбор?! Могу только позавидовать вашему оптимизму… Извините, но это всё равно, что выбирать жену по советам неизвестных людей с интернета. Хороший инструмент разработки это очень субъективная вещь…
Будь у меня сейчас опыта лет на десять меньше, я бы вам сказал категорично и однозначно: RoR и только RoR. Мол, суперинструмент…
Но исходя опыта, могу лишь только осторожно посоветовать обратить внимание. потому как на вкус и на свет все фломастеры, как говорится…
Перефразирую. Хочу сделать выбор чуть лучше, чем просто пальцем в небо, и следовать этому выбору. Когда то так выбрал С#, Qt и ни капли не жалею о том. Это не так невероятно как кажется.
Вкус и цвет свой я объяснил в критериях, надеялся что тут есть люди с схожей ситуацией, которые уже сделали свой выбор (на основе аналогичных критериев) и не жалеют о том.
> Много работал с Pascal, C, C++, C#, Delphi, JavaScript
Вычёркиваем всё, что не подходит для веба, остаётся C# и JS. JS слишком рискованно для вашей ситуации, остаётся C# и ASP.NET. Нормальный выбор, вакансий полно, платят хорошо, и опять же — это знакомый Вам рынок большого крутого ПО, а рельсы, джанго, нода итп — там немного другая атмосфера, которая Вам может и не понравиться :)
Я открыт для изучения нового, не нужно ограничиваться тем, что я уже знаю. Почему js рискованный для моей ситуации? Крутое делают в основном на ASP.NET?
а) скорее всего, Вы работали с ним постольку-поскольку (как все), а для того, чтобы на нём писать большое и крутое ПО, Вам придётся выучить те аспекты языка, с которыми Вы, скорее всего вообще плотно не сталкивались, а там всё достаточно мутно + ощутимо отличается по сути от остальных языков программирования. Я не хочу сказать, что там всё сложно или коряво — нет, но время придётся потратить.
б) сам принцип серверного веб-программирования на JS тоже отличается от PHP и кодигнайтера. Опять же я не говорю, что он лучше или хуже, но мозги придётся здорово перестраивать.
в) вообще на JS Вам придётся учиться постоянно — технологии постоянно развиваются, новые инструменты появляются, старые умирают — какая-то стабильность там появится ещё не скоро, если вообще появится. И опять — это НЕ плохо, но это не очень подходит для написания «большого крутого ПО».
В общем, по пп. 1, 2, 3, 4 у JS для «большого крутого» ПО могут быть проблемы.
P. S. Я обожаю JavaScript и терпеть не могу разрабатывать большое крутое корпоративное ПО :) Я для своих задач вполне могу позволить взять себе модуль с гитхаба версии 0.01 от какого-нибудь анонимуса, а в большом крутом ПО за такой подход могут и по голове надавать.
1. У самой ноды качество более менее, но у кучи модулей качества может не быть вообще. Ну то есть вот Вам какой-то код, вроде работает, а там хз…
2. А кто его знает, умрёт или нет. Критической массы кода на ноде ещё не накопилось, чтобы в любом случае осталась хотя бы работа по его поддержке.
3. Всё относительно. По сравнению с джавой и C# вакансий по ноде нет вообще. Хотя за те, что есть, обычно платят неплохо.
4. Готовых модулей не так уж и много + большинство из них — это заготовки на гитхабе без гарантий.
> Объектно ориентированный язык программирования со статической строгой типизацией, Си-подобного синтаксиса.
У JS другая реализация ООП, статической строгой типизации там нет вообще, синтаксис там конечно в циклах и условиях Си-подобный, но те же вложенные функции, другие правила области видимости итд итп убивают всю эту Си-подобность на корню.
Хм,
— отличная архитектура из всех в мире PHP (собраны все лучшие идеи и паттерны отовсюду);
— большое профессиональное коммьюнити (top repos, geocoder, buzz, gaufrette).
А вы попробуйте микрофреймворк вроде Slim. Он изучается за час максимум, мне, правда он не нравится, я бы лучше свой написал, но тем не менее, он очень прост и много времени на него не уйдет.
Для шаблонов стоит использовать нативный PHP.
На PHP не стоит переносить подходы, применяемые в той же яве, когда на каждый чих содаются фабрики, объекты, билдеры и прочее. Это, конечно, возможно на PHP, но работает не очень быстро и пишется не очень быстро. Если вы не делаете мегапортал, то лучше применять более простые подходы.
Очень интересный топик получился.
Не поленитесь, пожалуйста, в конце-концов отписаться здесь о своем выборе с объяснением. У меня сейчас такой же выбор.
Сейчас меня закидают тряпками, но я бы посоветовал Perl с метафреймворком Plack. Ну или Mojolicious / Dancer / Catalyst, чтобы уж совсем всё из коробки.
Перл, конечно, как и рок-н-ролл, по утверждению некоторых, умер, но всё ещё широко используется. А с библиотекой CPAN мало кто может посоревноваться.
ну пункт 2 — вообще, я считаю, не про perl, ему уже лет 10 пророчат смерть, и всё как-то не получается. К тому же с появлением Plack/Mojo/Dancer сейчас много людей в perl приходят.
пункт 3 у вас несколько противоречивый — на популярные технологии супер-зарплаты не будет. :)
ну и поясните про stateless, чем perl сюда не попадает?
2. Ну Delphi старушка, тоже уже 10ый год помирает, что не делает ее очень популярной. То, что Perl жив, не говорит о том, что я найду с ним работу или хотя бы единомышленников.
3. Ну у Java есть, не вижу тут противоречий. Просто чем больше вакансий, тем сильнее конкуренция, тем больше З.П.
0. Ну насколько я знаю, perl — язык общего назначения. То бишь, как и на С++, Delphi чтобы начать программировать сайты, нужно будет наплодить огородов, модулей и извращений.
2. ну не знаю, мне кажется perl разработчику найти работу не так уж и сложно — тот же mail.ru нанимает, ну да ладно.
0. Зачем плодить велосипеды? mojolicio.us/www.perldancer.org/ — вполне себе работают в продакшене.