Как стать автором
Поиск
Написать публикацию
Обновить
102
0
Роман Смирнов @Source

Head of Elixir at Ecom.tech

Отправить сообщение

Так вы бы прочитали ответ на его комментарий, прежде чем писать свой.

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

А экзотика - это Idris, Pharo Smalltalk, OCaml, Common Lisp, Racket. Их да, если только для общего развития стоит изучать.

будучи совсем не мальчиком начинать всё сначала

Вы тут палитесь. Если для вас новый ЯП == начинать всё сначала, значит у вас нет нормального багажа знаний. Потому что ЯП (включая фреймворки и либы) - это от силы 10% от всех компетенций. И другие 90% шарятся, если вы не меняете направление. Условно, если вы 10 лет разрабатывали backend, то при смене языка вы по зарплате в худшем случае на 10% просядете и то максимум на год.

Так я ничего экзотического или устаревшего не назвал. Это распространенные стеки, просто не заезженные, и желающие войти-в-айти по-быстрому о них не в курсе.

Kotlin для бекенда и Scala для дата-слоя к этой же истории относятся. На C# тоже ситуация получше, чем в Java. Вот вам уже 5 вариантов.

 привел пример вообще без switch / case, на обобщениях

Не хочу вас расстраивать, но обобщенное программирование - это тоже отдельная парадигма :-)

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

Автор библиотеки должен предусмотреть, что надо использовать не библиотечную функцию, а вашу? Прям даже интересно, сможете ли вы найти хоть одну реальную либу с таким "расширяемым" switch / case.

Ну, т.е. сделать то в таком стиле можно, но там switch / case вообще не нужен. Просто сигнатуру лямбды фиксируешь и даёшь возможность её в настройках либы указать. Но это несколько другая история.

Отлично, может когда нибудь на Elixir начну писать, но пока на нем нет возможности делать мобилки / веб приложения и многое другое.

Если вас исключительно фронт и мобилки интересует, то ваш выбор: ReScript, есть и под React, и под React Native, и под много что ещё биндинги. Почитайте сравнение с TypeScript в идеалогическом плане.

А бек, IoT, ML и интерактивчики - лучше на Elixir

В общем, слезайте уже с объектно-ориентированных Go и TypeScript. А то весь ваш посыл выглядит неконгруентно, как "пчёлы против мёда".

На рынке сотни кандидатов на массовые стеки. 

Больше. С другой стороны, зачем быть леммингом и вестись на массовые стеки? Вам мало языков программирования что-ли? Например, на Ruby и Elixir гораздо меньше конкуренция за вакансии. Я часто на эти стеки людей нанимал за предыдущие 10 лет.

Ладно бы ещё эти ваши популярные JS, Python, PHP ценились как-то высоко, но они ж наоборот ушли на дно под натиском 1000 резюме на 1 вакансию.

это медианы вне зависимости от квалификации, но тенденция понятна
это медианы вне зависимости от квалификации, но тенденция понятна

Вот мне все интересно, пять лет опыта - это уже считается "суперопытным"? 

Под словосочетанием "суперопытный мидл" имелось в виду, что человек суперопытный на задачах мидла.

Ну, сами подумайте, если человек 2-3 года учил теорию и писал что-то для себя, потом ещё 5 лет работал на реальных проектах, и за это время не достиг уровня middle+/senior-, то, кажется, такому человеку пора бы задуматься о смене профессии.

к более-менее профессиональному, где человек уже что-то может сам

т.е. к сеньорному, если одним словом)

Вы просто не в курсе. Дело давно было, для SQL в 1974 году, например. Когда, он ещё назывался SEQUEL

Chamberlin, Donald D; Boyce, Raymond F (1974). "SEQUEL: A Structured English Query Language"
Chamberlin, Donald D; Boyce, Raymond F (1974). "SEQUEL: A Structured English Query Language"

А про FORTRAN для физиков так ещё раньше - в 1950-х

Да, всё так. Вас тянет к ФП, но вы не решаетесь попробовать функциональный язык, а довольствуетесь отдельными элементами. Например, вы не хотите использовать полиморфизм в стиле ООП, который в TypeScript является основным вариантом полиморфизма, и довольствуетесь switch/case.

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

В функциональных языках просто есть нормальные решения для полиморфизма на этот случай. Например, протоколы в Elixir: https://hexdocs.pm/elixir/protocols.html

В TypeScript ничего подобного нет и не будет, потому что его основная парадигма - ООП. Вы не в силах это изменить, но яростно гребёте против течения. Вместо того, чтобы выбрать подходящий ЯП себе по вкусу.

Чем же вы тогда лучше так ненавистных вам программистов на Java и C#? Да по сути ничем, вы так же как и они продолжаете пользоваться ОО-языками с элементами ФП.

Спасибо, интересно. По многословности кода понятно, что всё-таки работа с массивами - это edge-кейс для этих языков.

В каком-нибудь Ruby это делается сильно проще:

arr = [1, 2, 3, 4, 5] # либо (1..5).to_a
arr[0], arr[-1] = arr[-1], arr[0] unless arr.empty?
puts arr.inspect # => [5, 2, 3, 4, 1]

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

Языки, в которых есть элементы разных парадигм, называются мультипарадигмальными. Зайдите на ту же вики и почитайте элементы каких парадигм есть в TypeScript. Там их штук 7 где-то, а вы пытаетесь всё упростить, где не надо.

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

А в этой ветке мы обсуждаем определения, а не код. Перечитайте её сначала.

Я добавил определение процедурного стиля, и оно совсем отличается от моего Фп. Что в нем не так?

ПП - это не стиль ФП, это совсем разные парадигмы. Так что в ваших определениях всё не так. Почитайте хотя бы Википедию, если книги по Computer Science осилить не можете. И не выдумывайте собственных определений. Берите готовые и давайте ссылку на источник определения.

В примерах я возвращаю из функций новые функции с замыканием - это ПП?

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

Я добавил определение процедурного стиля
Процедурный стиль - стиль ФП, в котором

Вы эти грибы больше не ешьте, а то галлюционируете похлеще самой убогой нейросетки xD

Процедурный стиль к ФП вообще никакого отношения не имеет.

HR-ы в штате - это константные расходы. А онбординг же только после найма, он тут вообще не в тему.

Это получается - перебор 2-3 специалистов стоит как 50% увеличение ЗП на год

Это как это вы посчитали? Провести 2-3 собеседования стоит как з/п за полгода? xD

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

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

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

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

Я ориентировался на статистику отсюда же с хабра. Где джава миддл за 200-250, синьор за 300-400 это вполне среднее по рынку.

Давайте научу, как читать местную статистику. Вы ищете миддла с 5 годами опыта, это уже должно быть хотя бы в районе 75-го перцентиля, т.е. 290k на руки. За 227k на руки можно поискать миддла с 3 годами опыта.

Почему у вас не получится найти мидла в левой части распределения? Потому что это на самом деле джун+ (они по хардам к вам не пройдут). Обратите внимание, что всегда есть пересечение диапазонов зарплат по разным уровням квалификации. Это вызвано тем, что есть компании, которые вместо повышения зарплаты, повышают в должности. Т.е. уровень от 75 до 90-го перцентиля можно считать равным уровню от 10-го до 50-го перцентиля следующего грейда.

Посмотрите распределение для джунов. 157-206k по сути тоже что для мидлов 147-227k. Это уровень Junior+, а мидлы по сути начинаются только от медианы. Т.е. 227k на руки - это низ рынка для мидлов по Java в СПб. Но вы хотите суперопытного мидла, поэтому для вашего случая низ рынка будет 290k.

Я думаю, что человеку с 5 реальными (а не нарисованными) годами опыта вакансия на 200k, да ещё и в офис, может приглянуться только если речь про какой-то районный центр. А тут речь про Питер, так что у неё вообще околонулевой Signal to Noise Ratio

Подозрительно это всё. Получается, на уровне кода не показать in-place мутабельность. А есть какие-нибудь бенчмарки сравнения с какой-нибудь Java? Обычно, в бенчмарках сплошь и рядом алгоритмы, опирающиеся на работу с массивами.

и примеров сотни статей я так и не дождусь

Я думал, что вы умеете гуглить по ключевым словам.

Вот вам про наследование реализации через тайп-классы, через макросы, через замыкания.

Определение ООП без наследования и полиморфизма

Вы просто взяли определение процедурного программирования xD

А функциональное обозвали математическим стилем. Это тупая подмена понятий.

Информация

В рейтинге
3 963-й
Откуда
Россия
Работает в
Зарегистрирован
Активность