Pull to refresh

Comments 82

UFO just landed and posted this here
Хм… а расскажите, чем плох Go? Было с ним небольшое знакомство, показался очень интересным.
UFO just landed and posted this here
Отсутствие дженериков, поразительная многословность, отсутствие перегрузки функций, плохой подход к обработке ошибок, отсутствие явно напрашивающихся библиотек(например для работы с потоками), «токсичность» некоторых членов сообщества, крайне странная работа с модулями и версиями, необходимость в GOROOT и GOPATH…
Это все, конечно, мое субъективное мнение.
отсутствие явно напрашивающихся библиотек(например для работы с потоками)

Эм… В гоу есть goroutines, каналы и пакет sync. Что еще нужно?


крайне странная работа с модулями и версиями

В чем странность? Мое мнение, что, конечно, системе зависимостей далеко до, например, того, что мы имеем в PHP (composer), но что же в go mod странного?


На счет GOPATH — это не совсем так. Причём давненько ;)

поразительная многословность

По сравнению с Java, например?

отсутствие явно напрашивающихся библиотек(например для работы с потоками)

Вы действительно знакомы с Go?

Зачем там библиотеки если это ядро самого языка.

необходимость в GOROOT и GOPATH…

Вы действительно знакомы с Go?

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

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

И это не еще считая альтернативного способа go mod (который уже пару версий как основной)

плохой подход к обработке ошибок

Или напротив — хороший.

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


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

бизнеслогику на Go писать немного неудобно.
а так — замечательный язык(хотя и со странностями)

Гоу — язык, как язык. Я бы не назвал его плохим, однако есть ряд особенностей, которые мне лично не нравятся, а недостаток это или нет — не хочу судить.


Вот примеры того, что мне не нравится:


  • пакеты в go определяются именем каталога, причем документация говорит о том, что

Good package names are short and clear. They are lower case, with no under_scores or mixedCaps. They are often simple nouns [...]

Отлично, но в реальном мире (если мы не пишем библиотеку для общего назначения) одного слова часто недостаточно. Да и емкое слово еще надо придумать. Ну, либо, придется лепить слова в одно, без подчеркиваний и кемелкейса. С учетом того, что всё приложение состоит из пакетов (особенно, если оно хоть как-то более-менее сложное), это превращается в проблему для описания бизнес-логики в go (каждый раз, когда мне это нужно сделать, я убиваю в себе перфекциониста). Вот пример названия пакета из реальной жизни: validatingwebhookconfiguration (kubernetes, если что).


  • то, что я давно считал антипаттерном, в go — на удивление — часто нормальная практика. В частности использование глобальных переменных, с возможностью их модификации откуда бы то ни было. Например, настройки стандартного глобального логгера можно в любой момент поменять из любого места приложения.


  • более того, разработчик часто вынужден лезть в инстанс глобального логгера, потому что иногда нужно выводить логи из сторонних библиотек. Понятное дело, что адекватные программисты делают это в самом начале инициализации приложения и больше этого не делают, но выстрелить себе в ногу очень легко. В мире здорового человека для логов в библиотеку можно было бы передать имплементацию некоего интерфейса, но в мире курильщика так почти никто не делает. Вообще, в целом в go — в моем восприятии — почему-то крайне редко используется методология dependency injection.


  • система structure tags, имхо, достаточно крива в плане синтаксиса. В частности меня добивает тот факт, что разбить длинный тег структуры на несколько строк просто нельзя. Если структура имеет достаточно сложное описание тэгов, то без вариантов — у вас будет длинный рояль в кустах.


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


  • для новичка, наверное, будет удивлением, но в функцию, описанную как func name([]interface{}) нельзя передать переменную типа []string, например (вместо string любой конкретный тип). На это, понятное дело, есть свои причины, но тем не менее, это порой вынуждает писать полотна boilerplate кода.


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


  • стандартов по неймингу методов, имхо, тоже недостаточно наработано. Например, если у вас есть геттер, который возвращает, скажем entity, то часто у вас метод будет назван как Entity() (без Get). Но если у вас есть экспортируемое поле с этим же именем, то вы уже не можете использовать геттер без Get.


  • вообще, с геттерами/сеттерами всё не однозначно — у меня сложилось впечатление, что авторы по возможности дают напрямую работать с полями объекта. Но тут есть проблема — возможно, вы хотите дать прочитать, но от изменения объект не защищен. И тут уже как бы ответственность лежит на программисте. И ладно, если вы используете стороннюю библиотеку — всегда можно сказать "используй строго в соответствии с документацией", но если у вас есть свой внутренний проект, то рано или поздно кто-то создаст неявные зависимости там, где вы их не ожидали увидеть.


  • использование импорта пакета для получения сайд-эффекта а-ля import _ "somepkg" за счет вызова функции "init" можно, имхо, смело считать bad practice, но в мире go это достаточно распространенная практика.


  • если вам надо разобрать в go json с заранее неизвестной структурой (или же с динамической структурой), то вы обречены на кучу бойлерплейта и врапперов. При этом встроенная библиотека для декодирования json эффективностью работы не впечатляет.


К сожалению «орогие» языки не для удалённого фриланса, возможно нынешний массовый переход фирм на удалёнку несколько изменит ситуацию, но особой надежды на это нет. Поэтому так и сидим на пхп/яваскрипт, хотя уже лет 10 как скучно это до безобразия, при том что начинали с асма и си которые очень нравились.
Несмотря на все разговоры об умирании PHP (в 2012-ом), все же решил изучать его. Немного, конечно, не удобно что его хоронят. Но, с другой стороны, пришло понимание того, как вообще устроенно программирование, а благодаря тому, что язык развивается стали понятны некоторые аспекты из других языков. И последние года три есть четкое понимание что я зык — это инструмент и когда возникнет необходимость смогу заменить инструмент. Доказательством тому пет-projects на go и готовлюсь предложить правки для фреймворка Phalcon (понравилась zephyr`ка).

PHP хоронят уже лет 20 — столько сколько меня зовут начинать на нём новые проекты.

Солидарен с вами.
Многие не задумываются о том, что не бывает серебряной пули. И для каждого (мне так, кажется) языка есть своя область применяя. Просто надо знать и понимать, что для чего. А так-то да, микроскопом гвоздь тоже можно забить.

Платят не за язык, а за то, как его используешь.
Несмотря на все разговоры об умирании PHP (в 2012-ом)


Ну PHP создан был для того, чтобы умирать)

Вопрос на засыпку: сколько потеряешь в зарплате, переключившись с PHP на Java, если на PHP уже практически достиг потолка зарплат и уже получаешь больше чем половина Java разработчиков с опытом 10+ лет?

У Вас, имхо, какая-то очень атипичная ситуация.
По нормальному кодер джун на яве без реалього опыта получает больше чем топ кодер на пхп с 20+ годами опыта.
Да, до джуна на яве расти дольше чем до миддла на пхп, но тем не менее.

До Джуна расти? С чего это? Джава это же не Аси или брейнфак, там ничего сверхсложного нет.

Зависит от определения джуна.
Последнее время слышим определение джуна как «я прочитал туториал по языку, порешал задачки, если вдруг затруднюсь — посмотрю функции в мануале или погуглю.». Формированию подобного мнения способствует дикое количество курсов «ява за 30 часов».

По нам определение джуна это программист с профильным (хотя не обязательно универсистетским, может самоучка) образованием, который изучил язык (не по туториалу, а по полноценному мануалу) так что бы все базовые функции знать не лазя в мануал, знает на том же уровне все нужные либы и иде и системы версий, но имеет небольшой опыт применения языка на практике (при этом сам завершил хотя бы 3 полноценных проекта).

В нашем определении даже джун пхп это минимум полгода изучения вопроса на фуллтайме, для явы в меру сложности и объема этот срок скорее ближе к 2 годам.

Ни в коем случае не настаиваем на своей правоте — мы просто объясняем о каких джунах мы говорили.

Джунство у вас зависит от языка? Если человек, полжизни писал на JS или Java, потом прошёёл курсы TypeScript/Kotlin за 30 часов — он джун в последних?

Джунство у вас зависит от языка?
Время до джунства. Если пхп на порядок проще явы, то представляется самоочевидным, что джуном на нем можно стать быстрее.

Если человек, полжизни писал на JS или Java, потом прошёёл курсы TypeScript/Kotlin за 30 часов — он джун в последних?
Затрудняемся ответить.
Учитывая условно-совместимый бакграунд — расти до сеньера он будет на порядок быстрее человека только пришедшего в профессию.

Если вопрос в том джун ли он — то скорее всего да, т.к. тут идет не изучение нового языка (о чем говорили мы), а переобучение на новую (хотя и сильно отличающуюся) версию.

Он однозначно не миддл, если вопрос в этом. Т.к. кроме базы в котлине\тайпскрипте за 30 часов ничеге не изучить. Однако с учетом бакграунда по сути в этой же области — за год вполне может стать сеньером, что для новичка в котлине просто фантастика.
так что бы все базовые функции знать не лазя в мануал, знает на том же уровне все нужные либы и иде и системы версий

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

На мой взгляд джунство это не просто знание технологии, а знание+уровень умения учиться и разбираться.
Что есть базовые функции и либы?)
В случае с php это всё отсюда www.php.net/manual/en
Базовые знания — значит что необязательно знать все флаги или запоминать порядок аргументов, но о наличии функций с нужным функционалом и их поведении знать надо.
Что бы не было шедевров вида sleep(0.5), тогда как sleep принимает аргументом только целые секунды (в одном из тестовых заданий было у кандидата) или что бы не велосипедить перевод 2011-09-13 в unixtime (опять же в одном из тестовых заданий и кандидат гордился этим).

На мой взгляд джунство это не просто знание технологии, а знание+уровень умения учиться и разбираться.
Умение учиться и разбираться нужно для любой работы.

Хороший пример, да. Противоречащий сам себе. sleep(0.5) — типичный пример, как люди уповают на своё знание. Если не пользуешься чем-то, что такие ляпы не даст совершать (нормальная IDE, отдельный статанализатор и т. п.), то гуглить (поиск гугла по php.net лучше поиска самого сайта) сигнатуры "базовых функций и либ" обязательно, чуть ли не при каждом использовании.


Я бы вообще к базовым PHP относил только основную работу со строками и массивами, ну и базовую с датами. Я вот за 20+ лет разработки на PHP не знаю даже полного списка поддерживаемых из коробоки баз данных. А когда открываю его, как сейчас, то о трети баз данных и не слышал никогда. Вы реально считаете, что джуну нужно знать, что PHP поддерживает DB++?

Хороший пример, да. Противоречащий сам себе. sleep(0.5) — типичный пример, как люди уповают на своё знание. Если не пользуешься чем-то, что такие ляпы не даст совершать (нормальная IDE то гуглить (
Не противоречащий, т.к. мы сказали «надо знать», а не «уповать на знание»:) Вы же не гуглите оператор инкримента что бы не ошибиться «уповая на знание»?

Вы реально считаете, что джуну нужно знать, что PHP поддерживает DB++?
Ща словим минусцов:)
Сам факт что поддерживает? Да, иначе это «английский со словарем», все равно как в английском не знать о существовании Future Perfect Continuous скажем или не знать как включается 6 передача на авто, т.к. «все равно первые два года выше 70км/ч нельзя ездить».
Учитывая что расширение экспериментальное — можно не знать деталей функций, но хотя бы что в принципе функции могут делать — знать надо. Что бы просто читая чужой код и внезапно встретив dbplus_find не думать «что это вообще за на фиг».

Из примеров — нас брали на аудит проекта и мы там увидели решение кэширования на файлах на диске в памяти. Само по себе неплохое решение, но для него нужны причины. Спросили — отчего так? Почему не мемкэшед например? Ответ — так пхп же не поддерживает мемкэшед. Вы понимаете? Человек зарезал один из хороших вариантов только потому, что он просто не знал о наличии в пхп его поддержки.

Если подходить к знанию языка по другому, то что дальше? Не надо знать sleep, потому что есть более универсальный time_nanosleep? Не надо знать родные функции mysqli потому что есть более универсальный pdo? Не надо знать зачем нужно экранирование кавычек потому что во всех нормальных фреймворках оно сделано на автомате? Можно забить на знание функций работы хмл, т.к. они редко встречаются в проектах и всегда можно нагуглить?
Ответ на ваш последний абзац почти везде — «да». Для любого ЯП. Сильные разработчики, по моему опыту, выделялись совсем другими характеристиками.
Ответ — так пхп же не поддерживает мемкэшед
Берешь и гуглишь «PHP Memcache», очень легко.
Ответ на ваш последний абзац почти везде — «да». Для любого ЯП. Сильные разработчики, по моему опыту, выделялись совсем другими характеристиками.
Для сильных разработчиков это всегда было обязательной базой.
Какой это разработчик на php если он php не знает? Чё за бред вообще?

Берешь и гуглишь «PHP Memcache», очень легко.
С такой логикой можно взять школьника с 9 классами образования. Он тоже может нагуглить «php memcache», равно как и ООП подучить.
По Вашему в вакансиях пишут требования — знания php, знание yii, знание zend с целью узнать может ли разработчик нагуглить информацию по ним? Или с целью нанять разработчика знающего их?
Вы когда отдаете документы, допустим, на перевод, Вы ожидаете кого там увидеть в работниках? Человека знающего «английский со словарем»?
Какой это разработчик на php если он php не знает? Чё за бред вообще?
PHP знает, библиотечные функции не все знает (=не может о конкретных поговорить, хотя в прошлом мог работать и с mysqli, и с XML, а мог и не работать). Поговорить о знании ЯП можно спросив про работу со ссылками, о сборке мусора, о типах, о классах. Дать несложное задание на кодинг и посмотреть результат (а гугл в помощь). Знание ЯП — само по себе лишь маленькая часть профессиональных навыков разработчика, так что странно на этом заостряться. Мы спрашивали больше о принципах дизайна, архитектуры кода и проекта, о их реальных проектах (это даже важнее остального). Кстати, у разработчиков с опытом преимущественно в других ЯП тоже был хороший шанс.
знание yii, знание zend
По моим впечатлениям конкретно на фреймворках на собеседованиях никто не заостряется. Желательно только иметь опыт хоть с каким-то в данной области.
Вы когда отдаете документы, допустим, на перевод, Вы ожидаете кого там увидеть в работниках? Человека знающего «английский со словарем»?
Я в основном ожидаю увидеть перевод. Сильный лингвист может и только со словарём, да. Дальше аналогия ломается, т.к. перевод сильно отличается от разработки.
знание ЯП — само по себе лишь маленькая часть профессиональных навыков разработчика, так что странно на этом заостряться
Это обязательная часть навыков. Это как колеса у автомобиля. Часть маленькая, но если хотя бы одного нет — далеко не уедешь.

PHP знает, библиотечные функции не все знает
Тогда он не знает php. В чем его знание состоит? В том что он знает что после функций надо точку с запятой ставить? Офигеть нормы знания.

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

Вот здесь habr.com/en/news/t/495968/#comment_21470146 abar и F0iL неплохо написали на эту тему.
Вот главное оттуда
Люди просто путают «освоить синтаксис языка» и «освоить язык».

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

Знание ЯП — само по себе лишь маленькая часть профессиональных навыков разработчика, так что странно на этом заостряться.
Речь не о разработчике. Речь о разработчике на конкретном языке программирования. Который, внезапно, оказывается даже не знает библиотечных функций этого языка. Но заявляет себя профессионалом в этом языке.

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

Не стоит судить так категорично. Невозможно знать всю стандартную библиотеку языка, т.к. языки развиваются, если только они не мертвые. Также невозможно знать все особенности всех библиотек и фреймворков для этого языка. Везде нужна своя мера, в этом суть.
В конечном счете значение имеет то, как, имея какое-то знание средств языка, ты сможешь решить ту или иную задачу и как сделаешь это эффективно… или условно эффективно, лишь бы заказчик был доволен.
Невозможно знать всю стандартную библиотеку языка
Вы, вероятно, пропустили часть дискуссии выше. Речь не шла о знании вплоть до всех флагов, и даже порядок аргументов можно не везде помнить.
А вот знать какие функции есть в языке и какое их назначение — особой проблемы нет и это база знания языка, как таблица умножения.

Также невозможно знать все особенности всех фреймворков для этого языка.
Про фреймворки речь не шла. Фреймворков понятно может быть целый зоопарк.

лишь бы заказчик был доволен.
Заказчик бывает доволен сайтом который грузится 10 секунд и имеет целый набор уязвимостей. Так себе критерий.
Речь не шла о знании вплоть до всех флагов

А вот знать какие функции есть в языке и какое их назначение — особой проблемы нет

Что тогда вы подразумеваете под словами знать функции?
В том же php банально для массивов и строк порядка сотен функций. Помнить их все поименно не имеет практического смысла. Больший смысл имеет знать, что есть те или иные группы функций для определенного случая.

Заказчик бывает доволен сайтом который грузится 10 секунд и имеет целый набор уязвимостей.

Все должно быть регламентировано, иначе можно бесконечно долго доводить до «идеала».
Допустим, время отклика приложения было 10сек, вас это не устроило, вы оптимизировали работу и добились отклика в 1сек… а почему не 0,1сек… почему не 0,01сек? Где грань?
Прочитайте, пожалуйста, дискуссию выше. На все эти вопросы ответы были уже выше, мы сейчас начинаем по второму кругу повторяться — поэтому ответим упрощенно.

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

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

Все должно быть регламентировано, иначе можно бесконечно долго доводить до «идеала».
Количество функций в ЯП не бесконечное.

Допустим, время отклика приложения было 10сек, вас это не устроило, вы оптимизировали работу и добились отклика в 1сек… а почему не 0,1сек… почему не 0,01сек? Где грань?
А это опять критерий вида «заказчик доволен», к знанию языка он неприменим.
Грань очень простая: не должно быть недостатков/ошибок и/или избыточных затрат времени произошедших из-за незнания штатных функций ЯП.

Это не значит что надо брать д-еба который не знает программирования.
Суть в том, что если Вы нанимаете а) программиста б) на ЯП… то он должен уметь а) программировать б) знать ЯП.
Я прекрасно понимаю вашу позицию. Я был столь же категоричен раньше. Сейчас же я более сдержан в своих требованиях и ожиданиях.
Количество функций в ЯП не бесконечное.

Оно конечно, как и все в реальном мире. Но оно (количество) изменчиво.
Я привел вам простой пример о функциях массивов и строк в php. Их более двух сотен. Нужно ли помнить их все? Используются ли они все в реальной жизни? Помните ли и используете ли вы их сами?
Принцип Парето никто не отменял: в разработке в 80% случаев используется 20% функционала ЯП / фреймворка.

Это не значит что надо брать д-еба который не знает программирования.

Не надо в крайности бросаться. Я лишь акцентирую внимание на необходимой достаточности знаний.
Суть в том, что если Вы нанимаете а) программиста б) на ЯП… то он должен уметь а) программировать б) знать ЯП.

Не согласен с "б". Должен он знать ЯП на достаточном для вас как для работодателя уровне. Собственно и программирование так же.

Все так и было, но лет 20- тому назад). Сейчас на PHP много разного e-commerce с деньгами и уже не так много специалистов. Java разработчиков наоборот штампуют конвейерами, да и область использования весьма разношерстна — от автоматизаторов тестирования до различных крутых энтерпрайзов.
Сейчас на PHP уже не так много специалистов.

В картинке к статье зарплата пхп спецов 100к — вторая снизу — ниже только дельфи.
При этом по количеству спецов пхп опять же на втором месте, только уже сверху, на первом яваскрипт.
Таким образом имеем — большая конкуренция за небольшую зарплату, каким образом это «не так много спецов на пхп».
Картинка медианная. Это значит, что она призвана отражать зарплаты основной массы. На самом деле было бы интересно увидеть расклад по опыту/тайтлам, но возможно это не входит в цели поста. Могу лишь предположить, что речь идет о разработчиках уровня junior и middle.

100к больше похожа на медианную по всем уровням. И, наверное, в реальности миддловая плюс-минус.

Когда я переходил с позиции senior fullstack PHP на middle fullstack Java, моя зарплата упала на ~20%. В мире PHP есть востребованность в хороших специалистах и компании готовы (были) платить много, я получал далеко не «потолок».

Сам переход был обусловлен мыслями о будущем. В пхп я провел около 10-ти лет. Ушел когда мне было 36. В целом хотел тихой гавани в большой компании, где цикл разработки большой, а ты один из множества старперов. Мои ожидания полностью оправдались — большая компания, куча «возрастных» специалистов, где я со своими почти 40-ка выгляжу достаточно молодо. :)

А сами задачи интересней и сложней тех, с чем приходилось сталкиваться в PHP мире. Не берусь утверждать что так везде.

А меняли область разработки? Стали писать под mobile или desktop или, грубо говоря, "лишь" сменили PHP на Java, Symfony на Spring, Doctrine на Hibernate, а так продолжали решать те же бизнес-задачи, что и раньше?

Сменил Laravel на Spring, бизнес задачи остались теми же с поправкой на размер компании.

Переход на самом деле занял время и усилий. На первых порах было сложно отказаться от многих PHP-привычек — сложно жилось без «магических» методов, очень много сервисов, dto, репозиториев (куда больше чем в PHP), в работе с базой пришлось значительно чаще использовать разные возможности БД. Преодалеть привычки помогло общение с коллегами и code review.

Звучит так, что мне перейти будет проще. :)

сложно жилось без «магических» методов, очень много сервисов, dto, репозиториев
Звучит как переход от более ситуативной разработки (aka г-код) к более систематической. Вред implicit кода и разделение ответственности описан еще в книжках 90-х (это самые старые, попадавшиеся мне). От ЯП вообще не зависит.

Может она атипичная для России, но вот Киеве смотрю аналогичную статистику (медианы, доллары в месяц, чистыми):
Junior Java — 900
Junior PHP — 900
Senor Java (10+ лет опыта) — 4400
Senior PHP (10+ лет опыта) — 4000

UFO just landed and posted this here
Любопытно, можно пример вакансии сеньера пхп с такой зарплатой? С трудом представляем себе требования.

В питере скорее так (по знакомым, не по статистике)
Junior Java — 1500
Junior PHP — 600
Senor Java (10+ лет опыта) — 8000
Senior PHP (10+ лет опыта) — 2500
По москве на 20-50% больше, но пропорция сохраняется.
Но — java только в крупных компаниях, где только оффлайн, офис, диплом, NDA и все корпоративные вещи.

Не прямо 5, но 4,5+ тут, например


А 5 не просто рассматривают, а иногда кажется, что продешевил :)


По Java с теми же пераметрами предложений раз в 6 больше, а если зп/ожидания уменьшать, то сближаются числа, что косвенно подтверждает статистику.

Зарплаты выше среднего по какому-то языку — это всего лишь видимый результат перекоса спроса и предложения. Оно плохо коррелирует с заявленной темой статьи, так как может быть результатом множества разных ситуаций. Например — технология умирает, а легаси очень много. Зарплаты высокие, потому что количество желающих сокращается сильно быстрее объемов легаси (обычно из-за фундаментальных проблем именно самой технологии или появления лучших альтернатив). Но тренд технологии исключительно нисходящий, и желающих влиться в это дело в далеком будущем как максимум ждет непыльное местечко а-ля COBOL и государственный софт в США. Но таких мест будет очень мало, и всех, кто не смог на них попасть, ждет гораздо более прозаичный вариант: увольнение и отсутствие другой профильной работы.

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

Смотреть только на зарплаты — занятие сомнительное.
Оно плохо коррелирует с заявленной темой статьи

Если верить графикам в статье, то при медианной зряплате менее 8$/час как в РФ, и среднемировых около 30$ за вами будут охотиться HR любых компаний, какой бы язык вы не выбрали. При таком прайсе даже индусам сложно конкурировать.
UFO just landed and posted this here
объемы легаси быстро сократились (но как такое могло произойти?)

Варианты из личного опыта:


  • фирмы, использующие заказной софт на Delphi, загнулись
  • фирмы, использующие заказной софт на Delphi, перешли в веб. Сам несколько раз инициировал и принимал участие в подобных проектах в 2000-х, основной аргумент был: "у вас всё пиратское, а за это начинают сажать. или платите за windows, firebase (или как там его), сам delphi, или переписывайте на FOSS, желательно веб. Я, кстати, могу недорого переписать на LAMP"
  • фирмы, использующие заказной софт на Delphi, перешли на заказной .Net (на Java ни разу не видел)
  • фирмы, использующие заказной софт на Delphi, перешли на коробочный софт или SaaS
Учитывая, что на Delphi делалось очень много наколенной частной автоматизации (или в пределах одного рабочего места, или чуть распределенно, но всё равно очень частно) — логично предположить, что это как раз тот вариант, при котором выкинуть имеющееся и заменить его более общим решением (1C и подобным) наиболее просто.

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

Ну да, "заказной" в моём комменте часто означало по факту "сын НОК на программиста учится же? Пускай нам склад сделает, а мы даже заплатим ему две стипендии его. Всё равно каждый день играть приходит"


Аргумент про пиратское стал весовым, когда реально начали за пиратство привлекать, до этого, как говорится, строгость законов компенсировались их неприменением. УК РФ вроде в 96-м приняли новый, да и до этого уже какие-то статьи были, а кампанию врде как раз в 2000-м и начали.

Ну вот про базу не нужно, мало кто использовал interbase от Борланд я видел в основном firebird (который полностью открытый и бесплатный продукт) а вот среда разработки да мало кто платил за лицензию, не говоря уже о компонентах. Тут скорее сыграл фактор резкого разового увеличения затрат, и многие пошли по пути раз уж всё равно платить то переделаем на более модном (при этом от вэб автоматизации многие страдали, т.к. более менее удобный для повседневных задач интерфейс стало возможно делать не так давно, а те кто умеет в них появились ещё позже) но да где работа заключалась в нажатии 2х кнопок и 3х полей ввода там веб был отличным вариантом.

К слову 'перейти на веб' можно уже вполне в пределах Delphi. Несколько отличных фреймворков в помощь: UniGUI, TMS Web Core.

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

Так и вебовый нормальный разработчик платный и недешевый (по своему опыту). Делфи разработчики стоят чуть дороже вебовых, зато производительность разработки на Унигуе выше просто на голову по сравнению с 'традиционным' вебом, как вот у нас было: jQuery фронт + Delhi бэк. Опять же по опыту.
Есть, по крайней мере, один язык, который занимает одно из первых мест, если не первое, по реализации его на разных языках программирования. :) (Forth, Форт)

Например это легко проверяется по выборке его упоминания в проектах на Github

P.S. Стоит ли он изучения каждый может решить сам, но понимание принципов его экосистемы может оказаться полезным для расширения кругозора возможностей инструментальных средств применяемых с этим языком.
И, да, Вы не найдёте вакансий по нему в кадровых агенствах и заинтересованности Теам лидеров в нём :)
Если действительно хотите, чтобы за вами высунув язык гонялись все хедхантеры планеты, учите COBOL. Крепко учите.
После нынешней пандемии буквально будут рвать на куски. ЕВПОЧЯ
UFO just landed and posted this here

Можно ли называть языки аппаратного описания языками программирования? На мой взгляд, их стоит отделить.

UFO just landed and posted this here

По тем вакансиям, что видел я, у меня сложилось впечатление, что на том же Java, например, стартовать проще. Зарплаты тех, кто пишет под ПЛИС, выглядят в большинстве ниже. Правда, смотрел я предложения российского рынка труда. Может, в международной выборке ситуация иная. Также мне показалось, что в случае IP под специализированные микросхемы (ASIC), ситуация лучше. Правда и хлопот там побольше, чем в случае с ПЛИС.

На PHP на Zend/Symfony очень хорошие зп. Скажем в Москве до кризиса найти на 140к мидлу было достаточно просто (ну тут естественно, идет symfony + mysql/postgres + redis/elastic + rabbit/кафка + шардирование итд). Т.е. фактически обычный энтерпрайз стек просто на ПХП.

Плюс очень хорошие зп были у тех, кто для амеров под заказ делал сайты на Wordpress/Magento.

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

Ну и фразу: «Хочешь деньги, учи Java» — никто еще не отменял.
Если ты эксперт в каком-то ЯП, то условие популярности не столь важно, так как ты и так будешь востребованным.
мне python нравится, очень удобный, а другие языки изучать лень

Очень хорошая статья, лично я учу питон из за его плюшек и очень лёгкого синтаксиса

Динамическая типизация вас не смущает?

Даже не стал читать. Заголовок неправильный. Чтобы за вами охотились HR любой компании надо мозги иметь а не язык знать.

Чтобы знать некоторые языки необходимо-таки иметь мозги.

Язык желательно все таки знать. Английский.

UFO just landed and posted this here

Как у него с разработкой и работой под Linux сейчас, можно спокойно брать и работать, а потом деплоить в прод?

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

Я думаю пункты 3 и 5 должны быть на самом верху. Я долгое время работал Java и PHP разработчиком, но заинтересовался Rust'ом (когда-то давно у меня был и плюсовый опыт). Года полтора я просто изучал язык, писал на нем хобби-проекты в свободное время, старался активно участвовать в сообществе. Главными тут были — интерес к самому языку, вера в его перспективность и понимание того, зачем он нужен мне в моих личных проектах. Со временем стал неплохо разбираться в нем, и устроиться на работу не составило большого труда. Сейчас работаю Rust-разработчиком и в общем-то всем доволен. Хотя моя зарплата слегка уменьшилась с переходом на Rust, но она все равно осталась выше приведенных тут медианных значений и я получил возможность больше времени уделять тому, что мне нравится.

На основании моего скромного опыта могу сказать, что HR охотится на обладателей знания технологий, а не языков. Или в общем случае, на обладателей фундаментального знания, например, статистического анализа или линейной алгебры.


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

Sign up to leave a comment.