Вопрос в следующем. Около восьми лет программирую на С++ / C#, были чаще всего крупные проекты, в таких областях как GameDev, CRM-системы, Enterprise-интеграция. С web-разработкой знаком несопоставимо скромнее: основы php (набросал для себя простенький движок), использование CMS, ну и немного представляю саму кухню (что такое post, get, сессия, шаблонизаторы и т.п.).
Хочу уйти в профессиональную web-разработку. Все чаще и чаще ловлю себя на этой мысли. Хочу творить системы, изначально интегрированные в «бесконечный» океан интернета, работать с огромными потоками данных в режиме online, использовать изначальную кроссплатформенность и т.п. В общем, web — это будущее, и чувствую потребность идти в ногу с ним. Desktop, как класс, уже начинает вымирать.
Как это сделать? Основы основами, но для серьезной позиции нужно прошариться в каких-то ключевых технологиях. Если бы меня спросили аналогичное про С++, я бы сказал, к примеру: STL, BOOST. Для C# еще проще, практически все необходимое есть в самом .net (я о базовом функционале, конечно). А вот читая вакансии web, глаза разбегаются от обилия фреймворков и технологий. Особенно в мире Java (с которой, увы, не знаком вовсе). И языков тут вагон, а выбор — holywar.start().
В общем, буду признателен за советы, вдруг у кого-то есть опыт такого перехода. Осложняется все это еще тем, что есть некоторые обязательства, не позволяющие пойти на junior-вакансию с доходом в разы меньше нынешнего. Для не-junior нужен опыт. Замкнутый круг.
Во-первых, более системное программирование, чем веб, я думаю вы будете как в своей тарелке :) во-вторых, интересная тематика, так как сейчас она очень быстро развивается, ну и прибыльная :)
в любом случае, выбирать вам. Мне, к сожалению, не хватает ни времени, ни сил изучить java, но очень бы хотелось
Если у вас есть опыт работы с C# было бы логично попробовать .NET ASP MVC, думаю освоение оного проблем у вас не составит. Работа с базами — различные ORM (от стандартного Entities Manager до Hibernate и прочее). Если говорить о бэкэнде то даже не вижу смысла использовать еще что-то такое эдакое. Разве что для задач реализации REST API и прочего. Фронтенд — тут уже чуть сложнее. HTML5/CSS верстка довольно простая штука, но тут опыт нужен. Знал много верстальщиков которые хорошо знали и особенности поведения тегов и свойств, но не понимали концепции (у них разметка зачастую была привязана к оформлению страницы, а это уже плохо). Но в целом это много легче чем C++/Boost/SPL. Javascript — тут стоит владеть функциональным программированием.
Вообще, разница между программированием для десктопов и для WEB (если касаться серверной части и реализовывать на C#, PHP или Java) не сильно различается. Знать огромное количество фреймворков не обязательно, достаточно выбрать какой-то один. А потом взять другой будет все же достаточно просто.
Ах да, а разве при поиске работы требуется именно опыт в какой-то сфере? как я понимаю опыт в сфере WEB у вас так или иначе есть, а если взять еще и достаточно большой опыт разработки под десктоп я не вижу причин не пробоваться как минимум на позицию middle разработчика. Даже если вы чего-то не знаете, что вам понадобится, в течении месяца двух я думаю вы спокойно это нагоните.
Спасибо!
Дело в том, что от .net как раз хочется уйти. Есть в открытых технологиях (Python, PHP, Apache, Unix против ASP, .Net, IIS, Windows Server) что такое… не знаю как лучше выразить словами. Да, оно убогое (ни один Eclipse рядом не стоит с Visual Studio, ни один компилятор, ни одна операционка не ставится так легко из коробки, как продукты Microsoft). Но оно бесплатно, и мне не жалко денег — дело в другом, это делается совсем с другими мотивами. Оно не обременено духом корпораций, там царит дух свободы) И по-моему «тру-вэбники» как-то недолюбливают Microsoft.
На самом деле есть масса вполне объективных причин, почему большая часть WEB разработчиков (имеется ввиду те, что уровнем повыше) предпочитают UNIX-like системы. Знаю людей, которым кроме VIM ничего не нужно, знаю что тот же PHP на никсах работает в разы шустрее, знаю что сами эти системы намного более приспособлены для разработчика. Вот скажите, как часто вы пользовались для сборки проектов консолью? Очень много шуток аля "- Задеплой плиз. — А где RDP? — там жеж debian, на тебе SSH… — а где робочий стол?".
Я вот хоть и понимаю все прелести Linux для разработчика, пока не готов менять систему. Мне удобно и на Windows. А что бы нивелировать потери производительности — развернул все что нужно на Debian в виртуальной машине. И да в отделе я что-то вроде изгоя, так как мне нравится Windows и в нем я могу проделать массу операций достаточно быстро.
Я к чему, вещи которые многие люди привыкли делать в стиле windows-way на linux можно сделать в разы быстрее. И если брать только разработку — то таких задач очень много. Как минимум в винде нету вменяемой консоли, нету bash и прочего. В силу этого приходится ставить MingW или подобные штуки.
Согласен) Я и сам давно мечтаю «соскочить с иглы» Microsoft. Пробовал. Ставлю Qt, или CodeBlocks, пишу UI-приложения, и понимаю, что я уже час копаюсь в настройках, что по какой-то причине все это не работает по принципу «установи и используй». А C# — считанные секунды, и в бой) Но… надежда еще есть.
Можете посоветовать, какой дистриб Linux лучше взять (поменьше настроек, попроще для начала)?
Ubuntu (может не понравится Unity), Linux Mint (более привычный после Windows вариант, та же убунта но с другими обоями, по большему счёту), openSUSE и Fedora — тоже вполне приемлимо, в openSUSE хороший графический менеджер настроек, YaST. Убунтоподобные более «мейнстримны», под них и пакетов больше, и решение найти по форумам часто проще, случись чего.
У меня обратная ситуация. Ухожу от веба в сторону игростроя (давняя мечта). Столкнулся с тем, что тяжело начать с азов. Знаний не по теме много и эти знания мешают, к сожалению. Самое сложное — это осознать то, что нужно все начинаться почти с нуля, а также то, что новые знания будут вытеснять старые. В какой-то момент вы можете оказать в некой сумеречной зоне, когда новых знаний еще недостаточно, а старые уже не те, что были прежде, нужно быть к этому готовым.
Какие технологии, языки и фреймворки выбрать — решать только вам. Берите то, что по душе и то, что считаете перспективным. У любого инструмента есть свои достоинства и недостатки. Главное, все это должно быть вам интересно. Вспомните, чем вам понравился С++ / C# и выбирайте по тому же принципу, т.к. только в этом случае вам будет интересно изучать это. Если язык будет вызывать отвращение, а технология будет казаться бесперспективной, то вряд ли вы заставите себя изучить их, даже если все вокруг будут говорить, что это мейнстрим.
P.S. Извиняюсь за оффтоп, наверное по теме мало, что сказал, но поддержать хотелось. Удачи вам, в вашем начинании!
Спасибо) Тут палка о двух концах. Мне что-то может и по душе (например, до сих пор не могу спокойно относиться к слабой типизации в web-языках), но речь не о стартапе, где можно самому выбирать условия, речь о востребованности. Рынок, будь он не ладен, диктует свою моду на технологии. А тут я не силен, что перспективнее, Java или .Net, Ruby или Python? Остается сделать выбор, полагаясь на интуицию.
В таком случае, как веб-разработчик скажу следующее:
— PHP будет востребован еще долгое время, что бы не говорили. Низкий порог вхождения, прост в изучении, много интересный фреймворков.
— Phyton и Ruby серьезно набирают обороты, т.е. выглядят перспективнее PHP. Но порог вхождения выше, с наскоку не изучить.
— ASP.NET и Java стоят, на мой взгляд, в стороне. С выбором в их сторону нужно быть осторожнее, тщательно изучив все против и за.
— HTML, CSS и JS обязательны к изучению, вне зависимости от выбранного языка. Хотя бы базовое представление иметь нужно, даже если рассчитываете на должность backend-разработчика.
— Также нужно знать и уметь работать с базами данных. Хотя бы с чем-то одним. Например, MySQL или PostgreSQL.
— Ну и конечно, нужно понимать как работают веб-серверы. Какие бывают, чем отличаются, что и для каких задач лучше использовать.
— По ходу работы вы будете постоянно встречать множество вспомогательных технологий и каждый раз вам придется выбирать что-то одно. Ориентируясь частично на отзывы, частично на интуицию.
Чем для опытного разработчика Ruby сложнее PHP? Думаю, стоило бы упомянуть, что дело тут в фреймворках (Django, RoR, Sinatra), без них с Python и Ruby в вебе делать нечего, а с PHP можно взять и начать говнокодить моментально.
>дело тут в фреймворках…
>и начать говнокодить моментально
Для PHP также есть фреймворки, которые нужно изучать. Писать плохой код можно на любом языке, не нужно приписывать особенности плохих программистов особенностям языка.
А я и не приписываю ничего. Это факт, тупо факт. Я знаю, что для PHP есть фреймворки, но и без них вполне можно взять и нахерачить страницу отборной лапши. Просто взять, создать файл index.php и херачить. С Python и Ruby так не выйдет. Вот и всё.
А если говорить про сами языки, то Ruby мне показался проще, чем PHP (хотя, может это только после JavaScrip'а так. Многие не утруждают себя его изучением), хоть мне и не нравится отсутствие Сишного синтаксиса. Фигурных скобок и точек с запятой очень не хватает.
Я искренне надеюсь, что опытный разработчик, пусть и из другой сферы никогда так не поступит. Хотя согласен, подобных примеров, предостаточно
>А если говорить про сами языки, то Ruby мне показался проще, чем PHP
Возможно я ошибаюсь, говоря про более высокий порог. Но неудачный опыт коллег по переходу на Ruby не внушает оптимизма. Раньше информации по Ruby было не так много, хотя наверное за последние пару лет многое изменилось.
А ещё, на правах оффтопа — не могли бы вы рассказать, какие проблемы при переходе от вебдева к игрострою, почему знания мешают? Видел тут JavaScript разработчиков, которые вполне уверенно работают с C++ и прочим. Особенно последняя редакция C++ хорошо выглядит — добавили привычные анонимные функции, замыкании и вообще много чего интересного.
Дело не в языке, дело в специфике. В веб-приложениях вам редко приходится заботиться о состоянии памяти и о сборщике мусора; редко приходится сталкиваться с физикой и особенностями работы с изображениями. Тонкостей много на самом деле. Знания мешают начать с нуля. Ты смотришь простые примеры, и читаешь через строку, т.к. думаешь — “А ну это понятно!”. В итоге, упускаешь детали.
Да и вообще, не хочется делать что-то примитивное. После 5-ти лет активной разработки привыкаешь к сложным задачам, примитивные задачи кажутся пустой тратой времени. Нужно осознать что в другой, новой для себя области, ты обычный новичок, который должен начинать с азов. Это не простая задача, по крайней мере для меня.
Вот у нас тоже почему-то Yii используют, видать и правда хороший фреймворк. PHP подкупает одним — там С++ синтаксис, в отличие от того же Python. В выборе Ruby/Python склоняюсь ко второму, поскольку сфера применения Python шире. На нем ведь и утилиты, и десктоп многие гиганты пишут.
1) PHP — множество проектов на нем, следовательно работы всегда много. К сожалению, зачастую это старые проекты и код разного качества. Вариант на любителя, учиться на сомнительном коде — не лучший вариант.
2) Python популярен не только для веб-разработки, но и для обработки данных: вакансии под numpy/scipy не редкость. Приятное многообразие инструментов для входа. Можно начать с разработки под web2py — этот фреймворк специально создан для обучения программированию под веб. Пока что не очень популярен, но постепенно набирает обороты. К сожалению, IDE его не поддерживают. Если не пугает noSQL, то можно начать с Google App Engine в связке с PyCharm — быстро обучит программированию, и, главное, покажет правильный подход к администрированию приложений. После этого можно быстро и весело перейти на питоновский мейнстрим — Джангу.
3) Ruby пока не так популярен (особенно в России), но среди заказчиков весьма трендовый и популярность набирает быстрее питона. К сожалению, по нему не могу расписать подробнее — не занимался.
Как сказали выше, для Вас может отлично подойти разработка для мобильных устройств.
4) iOS — основное направление в отрасли мобильной разработки. Самый пухлый рынок и самый большой спрос на приложения. Некоторые умудряются впаривать по 50-100К рублей простые поделки предпринимателям, желающим приложений для айфона или айпада. Только разрабатывать придется под OS X.
5) Windows Phone — до сих пор наполовину полный/пустой стакан: сложно определиться взлетит или нет. Я считаю, что MS договорится с самыми крупными игроками (это они умеют очень хорошо), а потом и остальные подтянутся. Особенно интересен игрострой и интеграция с xbox live. Средний уровень приложений весьма невысок, поэтому есть возможность стать звездой и дальше работать по звездным расценкам.
Ну как сказать, все зависит от целей, естественно сразу в верха будет сложно попасть, C++ в плане разработок не особо перспективен, какие-то вещи на нем делаются, но этим занимаются в основном только очень крупные компании, которые ищут специалистов с опытом. C# как сказано выше дает ASP.NET, WCF и т.д.
Вообще если хотите менять язык, то смотрите по вакансиям, что чаще требуется, тут холивар не нужен, тот же питон конечно хорош, но как легко вы сможете найти с ним работу?
В общем ищите компанию, которая работает с php, устраивайтесь на годик и за этот год подтянете все что необходимо и идите дальше и выше.
С Python интересно. У него очень высокие ценники на вакансиях (Новосибирск), по сравнению с той же Java. Думаю, тут дело в том, что специалистов пока мало. Что это: сезонная мода, или же у Python большое будущее (я про именно web-применение)?
Разница между разработкой десктопных приложений и приложений под веб на практике очень велика.
Там нужно совсем другое мышление. Там другие науки (верстка, адаптивность, кроссбраузерность, скриптовые языки, которые труднее тестировать, протоколы веб сервисов и др.). Распространены другие архитектурные принципы (распределенные приложения, API, Rest сервисы и др.).
Если вы раньше разрабатывали коробочные решения, то вы в любом случае при переходе упадете на несколько позиций вниз (даже если и не джуниор девелопер). Это по факту. Работодатель конечно может вас на приличной позиции держать. Но если вы не будете это понимать и не найдете себе ментора, то горе тем, кто будет поддерживать ваши решения.
У меня похожая была ситуация, но несколько проще. Я с дельфи переходил на веб, но у меня тогда еще была возможность для juinor вакансии.
В Вашем варианте вижу только один путь: Пока работаете на основной работе выполнить параллельно несколько веб проектов. Будет и себе опыт и что показать работодателю.
Да, логичный выход. Может быть фриланс, как вариант. Только с чего-то нужно все равно начать, прежде чем браться за проект) Хотя бы выбрать технологии.
Могу сказать что, на мой взгляд, сейчас наиболее активно развиваются два направления:
1) web: верстка и прочие фронтенд задачи, бекенд.
2) программирование под мобильные устройства: Android (Java), iPhone (Objective C) и Windows Phone.
Сам веб я бы разделил на три ветки (наиболее типичные наборы технологий):
1) PHP+JS+MySQL
2) ASP: C# ASP.NET и M$ SQL
3) JavaEE: Java, Hibernate (или аналог), Oracle
В вебе чаще всего требуют сразу и всего: верстка div'ами, PHP, JS, MySQL.
Хотя хорошие компании обычно ищут людей под определенную часть, например, PHP-прогер на бекенд.
Какая специфика в разработке под мобильные устройства пока сказать не смогу, ибо не работал там.
Хотя сильно хочу со временем уйти в Java for Android, больно классно там все организовано.
Удачи Вам в переходе!
P.S. На самом деле Core Java на 90% похожа на C#. Это сильно упрощает задачу перехода между ними.
Спасибо! Про второй пункт, смотрю сейчас активно пиарят платформу Xamarin, как знать, а вдруг «выстрелит»? И через пару лет для планшетов, мобилок и веба все будут писать на .net. Ну а пока…
1. PHP… — ну вот непонятно, стоит ли туда идти. В отличии от двух других, это «чисто web» (тогда как на Java/.net можно и нехилые enterprise сервера строить), да и кончину PHP не устают предрекать.
2. Тут все понятно. По моим наблюдениям, ASP .NET (как и .net вообще) чаще используют для внутренних нужд компаний. У нас на них всякие CRM, ERM и т.п. А конечные продукты — php. Банковский софт, какие-то крупные web-проекты — вроде как Java чаще всего. В общем, .net — это дорога в мир корпоративного ПО, автоматизации бизнеса и прочей скукоты. Как-то так.
3. Java для меня темный лес. Почитал синтаксис — да, 99% C#, но такое обилие библиотек… непонятно, что устарело, что нет. Т.е. хочу я поставить себе Java, и кодить, десктопные приложения и сайты, что кроме Eclipse + JVM мне еще нужно установить?)
Про Android — а что там, если не секрет, привлекло?
PHP — это не «чисто веб». У меня на нём, например, помимо Web-скриптов, написаны ещё и служебные скрипты, вызываемые по cron (раз в сутки базу почистить, раз в неделю провести сверку информации и т. д.). Есть даже средства для разработки GUI-приложений на PHP, но сам их не пользовал — предпочитаю для этого более традиционные языки.
Android — готовое API от гугла. Хорошая документашка. Все подготовлено для разраба, чтобы он не ломал голову. Кучу проблем API берет на себя. + очень развивающейся рынок! Не сегодня завтра многое будет на андройде.
php в вебе без фрейворков не программирование а говнокод. Адов труд проект писать большой на php с нуля. Просто адов. Валидации, MVC, нет дебагера… и прочее. YII фреймворк — это адовая дьявольская машина офигенно гибкая. Без фреймворков увы, php крайне мазохичен для больших проектов. Просто крайне. Мое мнение.
Про Xamarin: я не думаю, что выстрелит. Я столкнулся с Xamarin, когда мы в Бауманке изучали C# и хотелось нечто для практики, но Windows-машину было ставить лень. Мои впечатления: Xamarin — это платный Mono. И еще мне кажется, что .NET, без прямой поддержки Microsoft, обладает только теоретической кроссплатформенностью, так как полная реализация .NET+CLR есть только на Windows. Здесь я могу ошибаться, так как только поверхностно знаю кухню .NET.
Java: сейчас на ней в основном пишут серверное ПО (Банковское и подобное) или, опять же, под Андройд (за этим стоит Google, который сравним по масштабам влияния с «одной компанией из Редмонта»
Про Android: все уже описали выше, я с этим согласен. Еще могу добавить, что привлекает: 1) перспектива — оно будет развиваться. 2) лекость локализации приложений.
Про PHP: оно не сдохнет в ближайшие N лет, так как на весьма крупные вещи написаны: тот же VK.com и Facebook.com (для минусующий: я знаю про компиляцию кода в С++). Плюс языку есть куда развиваться.
Но переходить туда Вам не советую, ибо:
1) много работодателей, которым нужен комбайн по клепанию сайтов, а не толковый программист.
2) уровень зарплат меньше, чем в Java/C#/C++ мирах при похожей нагрузке
3) сам язык.
Последнее поясню. После C# многого будет не хватать (сужу по себе):
а) статическая типизация реализована частично (есть для объектных типов и для массивов).
б) массивы: это не массивы, а ArrayList и HashMap.
в) нет boxing/unboxing, так как нет нормальной типизации, хотя бы опциональной.
г) нет перегрузок функций (опять из-за типизации). И как следствие надо в каждой функции проверять тип входящего параметра.
д) нет общего для всех объекта (Object): иногда бывает полезен при наследовании.
Alexufo: «нет дебагера» — как раз он есть: xdebug. Фреймворки (особенно Yii) — это хорошо, но много PHP-кода во View'шках. Большие команды больших проектов «пишут с нуля».
В общем, как ни крути, все дороги ведут к Java(
Я бы выбрал Python, но тогда действительно отпадают такие лакомые куски, как Android, Mobile, и банковский софт. Кстати, про закат Java уже поговаривают, пророча Scala взамен ее.
C C# на Java перейти даже проще, чем на Python, но не могу пока сориентироваться, что нужно кроме IDE+JVM (какие фреймворки, их там ОЧЕНЬ много).
Для меня Python весьма не привичен из-за его тяги к функциональному программированию и не C-подобности.
Опять же закат Java маловероятен, так как этот язык выбрал Google для своего андройда, а так как они заинтересованы в платформе, то язык тоже будет на плаву.
Для JavaEE надо: IDE (оно нормально работает и с NetBeans и c Eclipse for JavaEE)+JVM. Так как в EE-шных версиях IDE-шек многие компоненты весьма удобно интегрированы в саму среду разработки.
Пока наиболее востребованные фреймворки — Hibernate и Spring.
Ну если не вдаваться в .NET, то тут выбор относительно мал: PHP/Python/Ruby. В PHP у вас уже есть небольшой опыт, но попробуйте что-то сделать с нормальным фреймворком (к примеру Yii). В плане питона — попробуйте джанго, в плане руби — рельсы. Остановитесь на том, что будет приятнее, ведь это самое главное. А работы достаточно в любой сфере. Не стоит ударяться с головой в один язык, не попробовав остальные.
Я бы проголосовал за эзотерику — разбирайтесь с Clojure(1, 2).
На ближайшую пятилетку, я думаю, эта штука ещё себя проявит.
Это диалект Lisp'а, который исполняется в JVM.
Если Google-очки выпустятся на платформе андроид, и ресурсов в обозримом будущем
на любых девайсах, где есть android(коих большинство) мы увидим кратно больше,
что скорее всего и случится, то эта штука позволит разрабатывать
продукты — быстрее, чем это делают Jav'исты.
+ как бонус, после изучения Clojure появится легкость в тонкой настройке Emacs'а, с его Emacs lisp'ом.
Да, Clojure немного покопал, занятно. Первое, что непонятно, это практическое применение. Да, есть для него фреймворки, даже позволяющие сайты делать, да, я часто слышу истории про то, как «знакомый моего друга переписал на функциональном языке прогу, которая стала занимать в 5 раз меньше кода, и в 10 раз быстрее работать». Да, все моднее говорить о том, что ООП это sux, а за функциональными языками будущее. Но где это все? Где реальные, крупные проекты на базе Ф-языков? Если они дают такие дикие бонусы, о которых все говорят, почему это остаются больше на уровне разговоров, и не внедряется? Причем уже не один год, хотя IT- это очень динамичная область, где скорость разработки обладает таким финансовым эквивалентом, что обязательно нашлись бы компании, которые смогли бы найти спецов по этим языкам, и наколбасить что-нибудь этакое. Например, Google.
Для него есть все библиотеки и классы Явы, в первую очередь —
а потом уже на самом Clojure поделки, которых действительно пока не много,
за счет того, что язык всего 5ти лет отроду.
"На ближайшую пятилетку, я думаю, эта штука ещё себя проявит." — я ведь не зря отметил именно про перспективу.
Не считаю, что ооп чем-то уступает функциональному стилю и быстродействие вообще не важно,
в большинстве случаев если мы говорим о разработке сайтов(- это мы говорим про Россию).
Важна только скорость создания действующих решений.
Она высока у RoR и Django. Субъективно — Django популярнее.
Я сейчас немного разочарован выбором питона, как основного я\п — ведь с изучением этого языка
(за руби не скажу ничего, т.к. не знаю) — мозг начинает лениться… перейти с него на Яву или C# мне сейчас сложнее,
чем если бы я знал что-то из этого и переходил на питон. Причина в отсутствии некоторых конструкций, которые
в других языках присутствуют для более тонкого управления «железкой», статической типизации и сборки мусора(может что-то забыл ещё — добавьте, по-желанию..)
Ну а Clojure — вообще отдельная тема. С ним Вам точно будет интересно, если начнете активно копаться. :)
Время освоения питона и той же джанги, под чьим-нибудь чутким руководством, желательно —
после 8ми лет программирования на C# или Java — месяц, максимум.
Да, вот ещё — разумеется Вам также потребуется CoffeeScript(«новый вид» JavaScript'а, который компилируется в него же,
и возможно в будущем, будет использоваться Вместо него), и знание какой-нибудь либы, типо JQuery
— если Вы хотите понимать весь процесс От(back-end'а) и До(front-end'а).