привел пример вообще без switch / case, на обобщениях
Не хочу вас расстраивать, но обобщенное программирование - это тоже отдельная парадигма :-)
И вы еще и ошибаетесь что switch / case не расширяем - оборачиваешь функцию другой, добавляешь новый тип, предоставляешь библиотеке новую функцию (разумеется автор предусмотрел если делал ее расширяемой).
Автор библиотеки должен предусмотреть, что надо использовать не библиотечную функцию, а вашу? Прям даже интересно, сможете ли вы найти хоть одну реальную либу с таким "расширяемым" switch / case.
Ну, т.е. сделать то в таком стиле можно, но там switch / case вообще не нужен. Просто сигнатуру лямбды фиксируешь и даёшь возможность её в настройках либы указать. Но это несколько другая история.
Отлично, может когда нибудь на Elixir начну писать, но пока на нем нет возможности делать мобилки / веб приложения и многое другое.
Если вас исключительно фронт и мобилки интересует, то ваш выбор: ReScript, есть и под React, и под React Native, и под много что ещё биндинги. Почитайте сравнение с TypeScript в идеалогическом плане.
Больше. С другой стороны, зачем быть леммингом и вестись на массовые стеки? Вам мало языков программирования что-ли? Например, на Ruby и Elixir гораздо меньше конкуренция за вакансии. Я часто на эти стеки людей нанимал за предыдущие 10 лет.
Ладно бы ещё эти ваши популярные JS, Python, PHP ценились как-то высоко, но они ж наоборот ушли на дно под натиском 1000 резюме на 1 вакансию.
это медианы вне зависимости от квалификации, но тенденция понятна
Вот мне все интересно, пять лет опыта - это уже считается "суперопытным"?
Под словосочетанием "суперопытный мидл" имелось в виду, что человек суперопытный на задачах мидла.
Ну, сами подумайте, если человек 2-3 года учил теорию и писал что-то для себя, потом ещё 5 лет работал на реальных проектах, и за это время не достиг уровня middle+/senior-, то, кажется, такому человеку пора бы задуматься о смене профессии.
к более-менее профессиональному, где человек уже что-то может сам
Да, всё так. Вас тянет к ФП, но вы не решаетесь попробовать функциональный язык, а довольствуетесь отдельными элементами. Например, вы не хотите использовать полиморфизм в стиле ООП, который в TypeScript является основным вариантом полиморфизма, и довольствуетесь switch/case.
Когда вам справедливо указывают, что такой вариант не расширяем (если вы пользуетесь какой-то либой, а её разработчик не предусмотрел case под ваш случай), вы просто обижаетесь и пытаетесь что-то доказывать.
В TypeScript ничего подобного нет и не будет, потому что его основная парадигма - ООП. Вы не в силах это изменить, но яростно гребёте против течения. Вместо того, чтобы выбрать подходящий ЯП себе по вкусу.
Чем же вы тогда лучше так ненавистных вам программистов на Java и C#? Да по сути ничем, вы так же как и они продолжаете пользоваться ОО-языками с элементами ФП.
Никак. В этом и суть парадигмы, что это максимально чистый набор идей без малейших примесей от других парадигм.
Языки, в которых есть элементы разных парадигм, называются мультипарадигмальными. Зайдите на ту же вики и почитайте элементы каких парадигм есть в TypeScript. Там их штук 7 где-то, а вы пытаетесь всё упростить, где не надо.
У вас память как у рыбки. Я ж вам в другой ветке уже писал, что ваш код с элементами ФП. Но отдельных элементов ФП мало, чтобы признать язык функциональным.
А в этой ветке мы обсуждаем определения, а не код. Перечитайте её сначала.
Я добавил определение процедурного стиля, и оно совсем отличается от моего Фп. Что в нем не так?
ПП - это не стиль ФП, это совсем разные парадигмы. Так что в ваших определениях всё не так. Почитайте хотя бы Википедию, если книги по Computer Science осилить не можете. И не выдумывайте собственных определений. Берите готовые и давайте ссылку на источник определения.
В примерах я возвращаю из функций новые функции с замыканием - это ПП?
Это элементы ФП, но отдельных элементов ФП недостаточно, чтобы назвать язык функциональным. Должен присутствовать полный комплект.
Я не говорил, что таких кейсов нет совсем, но их количество стремится к нулю. И это легко обосновать. Бизнес всегда стремится оптимизировать затраты, т.е. найти наилучших сотрудников за наименьшие деньги. Это широко известно как "кадровый дефицит высококвалифицированных низкооплачиваемых сотрудников". Итого, если вы к этой категории относитесь, то вас с радостью возьмут куда-нибудь в Яндекс, Т-Банк или другую крупную компанию, которая будет красиво смотреться в резюме.
А теперь попробуйте обосновать, какой смысл такому человеку идти в какую-то малоизвестную лабораторию, где ещё и собес пройти ни чуть не проще?
Ну, вы и сказочник. Конечно, можно любое утверждение выдумать, если доказывать его необязательно)
И, конечно, бывают люди с большим стажем и низкой зарплатой, но их квалификация тоже оставляет желать лучшего. При этом ещё и мотивация что-то менять отсутствует. Поэтому непонятно, как вы их собрались на собеседование зазывать, а главное зачем?
Я ориентировался на статистику отсюда же с хабра. Где джава миддл за 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? Обычно, в бенчмарках сплошь и рядом алгоритмы, опирающиеся на работу с массивами.
Не прыгайте с темы на тему. Мы тут секцию определений обсуждаем, и там вы дали урезанное определение ПП: "программирование используя структуры и функции"
Вот более подробное: "Procedural programming is a programming paradigm that involves implementing the behavior of a computer program as procedures (a.k.a. functions, subroutines) that call each other. Procedural programming is about dividing the program implementation into variables, data structures, and subroutines (a.k.a. functions, procedures)"
К ФП ваше определение ровным счётом никакого отношения не имеет.
Не хочу вас расстраивать, но обобщенное программирование - это тоже отдельная парадигма :-)
Автор библиотеки должен предусмотреть, что надо использовать не библиотечную функцию, а вашу? Прям даже интересно, сможете ли вы найти хоть одну реальную либу с таким "расширяемым" switch / case.
Ну, т.е. сделать то в таком стиле можно, но там switch / case вообще не нужен. Просто сигнатуру лямбды фиксируешь и даёшь возможность её в настройках либы указать. Но это несколько другая история.
Если вас исключительно фронт и мобилки интересует, то ваш выбор: 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
А про FORTRAN для физиков так ещё раньше - в 1950-х
Да, всё так. Вас тянет к ФП, но вы не решаетесь попробовать функциональный язык, а довольствуетесь отдельными элементами. Например, вы не хотите использовать полиморфизм в стиле ООП, который в TypeScript является основным вариантом полиморфизма, и довольствуетесь switch/case.
Когда вам справедливо указывают, что такой вариант не расширяем (если вы пользуетесь какой-то либой, а её разработчик не предусмотрел case под ваш случай), вы просто обижаетесь и пытаетесь что-то доказывать.
В функциональных языках просто есть нормальные решения для полиморфизма на этот случай. Например, протоколы в Elixir: https://hexdocs.pm/elixir/protocols.html
В TypeScript ничего подобного нет и не будет, потому что его основная парадигма - ООП. Вы не в силах это изменить, но яростно гребёте против течения. Вместо того, чтобы выбрать подходящий ЯП себе по вкусу.
Чем же вы тогда лучше так ненавистных вам программистов на Java и C#? Да по сути ничем, вы так же как и они продолжаете пользоваться ОО-языками с элементами ФП.
Спасибо, интересно. По многословности кода понятно, что всё-таки работа с массивами - это edge-кейс для этих языков.
В каком-нибудь Ruby это делается сильно проще:
Никак. В этом и суть парадигмы, что это максимально чистый набор идей без малейших примесей от других парадигм.
Языки, в которых есть элементы разных парадигм, называются мультипарадигмальными. Зайдите на ту же вики и почитайте элементы каких парадигм есть в TypeScript. Там их штук 7 где-то, а вы пытаетесь всё упростить, где не надо.
У вас память как у рыбки. Я ж вам в другой ветке уже писал, что ваш код с элементами ФП. Но отдельных элементов ФП мало, чтобы признать язык функциональным.
А в этой ветке мы обсуждаем определения, а не код. Перечитайте её сначала.
ПП - это не стиль ФП, это совсем разные парадигмы. Так что в ваших определениях всё не так. Почитайте хотя бы Википедию, если книги по Computer Science осилить не можете. И не выдумывайте собственных определений. Берите готовые и давайте ссылку на источник определения.
Это элементы ФП, но отдельных элементов ФП недостаточно, чтобы назвать язык функциональным. Должен присутствовать полный комплект.
Вы эти грибы больше не ешьте, а то галлюционируете похлеще самой убогой нейросетки xD
Процедурный стиль к ФП вообще никакого отношения не имеет.
HR-ы в штате - это константные расходы. А онбординг же только после найма, он тут вообще не в тему.
Это как это вы посчитали? Провести 2-3 собеседования стоит как з/п за полгода? xD
Я не говорил, что таких кейсов нет совсем, но их количество стремится к нулю. И это легко обосновать. Бизнес всегда стремится оптимизировать затраты, т.е. найти наилучших сотрудников за наименьшие деньги. Это широко известно как "кадровый дефицит высококвалифицированных низкооплачиваемых сотрудников". Итого, если вы к этой категории относитесь, то вас с радостью возьмут куда-нибудь в Яндекс, Т-Банк или другую крупную компанию, которая будет красиво смотреться в резюме.
А теперь попробуйте обосновать, какой смысл такому человеку идти в какую-то малоизвестную лабораторию, где ещё и собес пройти ни чуть не проще?
Ну, вы и сказочник. Конечно, можно любое утверждение выдумать, если доказывать его необязательно)
И, конечно, бывают люди с большим стажем и низкой зарплатой, но их квалификация тоже оставляет желать лучшего. При этом ещё и мотивация что-то менять отсутствует. Поэтому непонятно, как вы их собрались на собеседование зазывать, а главное зачем?
Давайте научу, как читать местную статистику. Вы ищете миддла с 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
А функциональное обозвали математическим стилем. Это тупая подмена понятий.
Читайте внимательнее. Я утверждаю, что вы в секции определений дали определение процедурного программирования, а не функционального.
Не прыгайте с темы на тему. Мы тут секцию определений обсуждаем, и там вы дали урезанное определение ПП: "программирование используя структуры и функции"
Вот более подробное: "Procedural programming is a programming paradigm that involves implementing the behavior of a computer program as procedures (a.k.a. functions, subroutines) that call each other. Procedural programming is about dividing the program implementation into variables, data structures, and subroutines (a.k.a. functions, procedures)"
К ФП ваше определение ровным счётом никакого отношения не имеет.