Вопрос от новичка - начал одновременно изучать месяц назад python и haskell. Есть уже небольшая практика на обеих языках, но все же haskell дается намного проще чем python. При этом все говорят что смысла сейчас учить haskell нет так как он безперспективный по сравнению с python. Как думаете - стоит ли его дальше изучать, или лучше на python переключится полноценно ?
Смотря для чего вы изучаете Haskell. Если для саморазвития, то почему бы и нет. Если для получения работы, то просто загляните на хаха.ру, поищите вакансии с хаскелем. Готов поспорить, их там немного. Даже на относительно популярный Rust не так много вакансий. По поводу Python -- тут вопрос не менее сложный. Мне нынешняя ситуация с ним напоминает историю с PHP лет 10-15 назад, когда этот неплохой инструмент прочно превратили в язык говнокодинга. А сейчас различные говнокурсы и инфоцыгане выпускают питонистов пачками. С одной стороны, вроде бы язык востребован (по уверениям тех же инфоцыган), с другой стороны, если питонистов выпускают пачками, а количество вакансий всё-таки не безгранично, то каковы шансы новоиспечённому питонисту найти работу? У меня нет готового ответа для вас. Изучите рынок вакансий на хаха, например.
Если будете учить хаскель, 100% придется учить плюсы впридачу., потому что весь ввод/вывод а так-же обходные инструменты в метсах где вывод типов хаскеля не вывозит - придется писать на них. Вообще хаскель - это одеальный язык для описания доменной области и написаниия декларативных скриптов и логики для тех, кто хочет писать на плюсах
14:20 - кибернетику никто не пытается подменять математикой. их стараются разнести на разные слои абстракций с четким направлением зависимостей между ними. И это огромный плюс. Даже те кто не знаем про монады, может написать гораздо более простой, поддерживаемый и тестируемый код в ФП стиле, чем в ООП
8:43 - и конечный автомат и машина тьюринга очень легко описываются на ФП. Во многом именно из-за этого Функциональщики на этих языках работать и любят
12:40 - у тебя и в ФП варианте и в ООП варианте приложение одинаковой степени "масштабируемости". И там и там не описаны абстракции,вместо них TODO комментарии. И там и там если описать абстракции получится одинаково простые для масштабирования приложения, но ООП код вырастет еще сильнее, чем ФП код
А что, есть желание написать гневный? : ) Так напишите. Я конструктивную критику не удаляю. Только за откровенное хамство или рекламу сразу бан выписываю.
Короче в переводе на человеческие язык, по ходу ФП - Функция, это способ группировки команд, для их повторного вызова, а ООП - это способ группировки Функций, для их последующего вызова, как всегда накидав вагон ненужной встрат*й терминологии - метод, это сама функция. А объект - Это функция, которая объединяет другие функции\методы. Теперь что бы избежать случайного повторения названий функция, перед ней как ее адрес еще указывают класс, или экземпляр, от кда ее вызывают, что бы с другой не перепутать.
Это слишком упрощённо сказано. ООП, помимо группировки функций в объекты, предоставляет ещё инкапсуляцию (упрятывание) и наследование. Так что просто к группировке тут всё не сводится. : )
@@MasterLid Не уверен, по скольку я только начал, но про наследование не то, что бы его вообще был бы смысл отдельно упоминать... мы в принципе же можем, в ходе задания какой ть функции использовать еще и ранее заданную функцию, что как бы и является аналогом наследования, и не получается ли "те же яйца, только в профиль"? Только в ООП ему почему то привесили отдельный ярлык, что бы по больше слов использовать.. Ну а переменные - это отдельно да..., в теории программа представляет собой сборную из модулей, от разным программеров, это получается что то типа "защиты от дурака" если они вдруг свои переменные одинаково назвали... Тогда получается Геральд и Ривия.Геральд и это два разных Герольда.. ))) Но и в принципе это все, просто один дополнительный индефикатор разделить функции и переменные, что бы не сливались в одно и то же.. Не? Что то типа адреса..
Есть нюансы. 1. В ФП функция получает какие-то данные на вход и всегда возвращает новые данные на выход (уже существующие данные никогда не изменяются). В ООП методы могут изменять уже существующие объекты и структуры. 2. В ФП данные отдельно, функции отдельно. В ООП данные и логика их изменения объеденены в объекты. Ключевым для объекта является именно опубликованное поведение. 3. Ключевые различия начинаются, когда требуется реализовать инверсию зависимостей для несвязанных модулей. В ООП мы используем референсные ссылки и интерфейсы. Сценарий бцдет описан как транзакционный скрипт. В ФП мы либо используем композицию двух модулей в третьем, который знает о них обоих - это самый простой вариант. Либо сложный вариант: импользуем Монады. Монады нужны чтобы писать сценарии с четкой последовательностью шагов, возможностью сбоя на каждом шаге и возможно еще какой-то скрытой логикой логикой, но в Функциональном стиле (т.е. по сути сценарий на языке формул). Благо в этом примере ни первое ни второе не потребовалось
@@АнатолийПетрович-в8и Это все не правильно... Функция как и ООП - это всего лишь правило, предназначенное для замены нескольких действий одним, или нескольких переменных - одной.Как формулируется правило? - желательно одной строчкой , чтобы исключить возможность двоякого интерпретирования... Если что то требует вагон текста для формулирование и вагон абстрактных терминов, понятных только двум людям: тому кто про них рассказывает и его психиатору, то это заблуждение, или секта. Не имеет права относиться ни к науке ни к логике, только к какому ть подвальному аккультизму... Процесс ради процесса... Молимся от сюда и до обеда, а потом жертвоприношение...
Твой основной ЯП - java? Что на счёт питона не только для ai и ml? Канал хороший, но почему ты не распространяешь его? Реклама там в пабликах вк, у популярных ютуб-программистов. Функциональщики - самые "странные" среди программистов.
Мой любимый язык -- это Java, да. Хотя занимаюсь сейчас в основном фронтендом на TypeScript. На питоне ничего серьезного не писал, поэтому не тот уровень знаний, чтобы ролик о нем создавать. По поводу продвижения канала -- мне некогда (и лень) этим заниматься, денег на нём я не планирую зарабатывать. Кому интересно, тот смотрит, получает ценную информацию.
Мне тут написал адепт функционального программирования гневную отповедь в комментах, а потом потёр её. Тем не менее, отвечу ему и возможным другим адептам. 1. Разумеется, я не стал во всех подробностях объяснять, что такое ФП, потому что во-первых, я в этом не специалист, а во-вторых, ролик не об этом. 2. Вы никогда не отнимете у программистов на ООП работу просто потому, что вас тупо меньшинство. Для понимания функционального программирования (особенно если идти дальше пресловутой чистой функции) нужно шарить в математике, а на это способны не все. 3. И ровно по этой же причине ФП никогда не достигнет всеобщего охвата и не станет повсеместно используемой технологией, потому что человечество не умнеет, а, к сожалению, наоборот тупеет. 4. Вас никто не пытается разоблачать. Скорее это вы бизнесу навязываете свое ФП, напирая на простоту тестирования, но забывая упомянуть, насколько увеличивается стоимость продукта и сроки разработки (да, ФП это дорого и долго). Всех вам благ, адепты ФП, лучи добра! Взаимно желаю и дальше вариться в своих монадах!
Видимо, комментарий потёрли вы. Общий посыл моего месседжа был в том, что даже не пытались представить код в функциональном стиле, поэтому сравнение крайне не корректное. Ваш пример похож на сравнение двух велосипедов, причём у второго вы специально сняли руль и колёса и говорите, что он хуже. Никто не навязывает вам ФП. ФП навязывается сам. Как давно вы перебирали коллекцию c помощью конструкции for? Думаю, лет пять назад, а ведь до этого, если бы вы показали кому-нибудь конструкцию вроде someArray = myArray.filter(findSomething) вас бы назвали "безумным функциональшиком". Даже Java перенимает лучшие идеи из мира фп. Посмотрите на тип Optional Фп это не языки, а концепции. Вот и всё. А вы ни одну не показали.
Я ничего не тёр. Текст вашего комментария я узнал только из письма, которое пришло уведомлением на почту. Предлагаю разойтись миром. С момента выхода ролика я немного пересмотрел точку зрения на чистые функции. В определенных ситуациях они довольно полезны. Так что действительно давайте заниматься каждый своим делом.
с путном 3 согласен. Поголовное ооп, бесконечные библиотеки, яп питон, с++ - все для леммингов) Главное пишите свой никому ненужный спагетти-код и побольше, бизнесу нужен гавнокод. а по пункту 4 - просто голословное дилетантское высказывание. Есть крупные исследования проведенные еще в 99 году очень известными личностями, когда еще пытались бороться с этой заразой, что ооп замедляет скорость разработки отнимая время у разработчиков "Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment". Есть миллион статей и высказываний дурости ооп с рабочими примерами от отцов основателей. И даже сам создатель ооп, сожалеет и не считает современное ооп - ооп. Он вообще не то имел ввиду. А по поводу навязывания, именно ооп агрессивно продвигаться реально сектантами в массы, можно еще макрософт поблагодарить и за триллион книг авторов-теоретиков, не создававших ничего, но зато уверяющих как ооп полезно и какая это серебряная пуля. Никто никому не навязывает, вы не найдете информации по ФП в интернете, как и не найдете инфу по другим стилям прогинга. Зато ооп везде. Никто вам ничего не навязывает, варитесь в свой джава-питонской тусовке и не трогайте другие способы создания кода. Бесит дилетантство, голословность и когда с умным видом подают чушь.
Вопрос от новичка - начал одновременно изучать месяц назад python и haskell. Есть уже небольшая практика на обеих языках, но все же haskell дается намного проще чем python. При этом все говорят что смысла сейчас учить haskell нет так как он безперспективный по сравнению с python. Как думаете - стоит ли его дальше изучать, или лучше на python переключится полноценно ?
Смотря для чего вы изучаете Haskell. Если для саморазвития, то почему бы и нет. Если для получения работы, то просто загляните на хаха.ру, поищите вакансии с хаскелем. Готов поспорить, их там немного. Даже на относительно популярный Rust не так много вакансий.
По поводу Python -- тут вопрос не менее сложный. Мне нынешняя ситуация с ним напоминает историю с PHP лет 10-15 назад, когда этот неплохой инструмент прочно превратили в язык говнокодинга. А сейчас различные говнокурсы и инфоцыгане выпускают питонистов пачками. С одной стороны, вроде бы язык востребован (по уверениям тех же инфоцыган), с другой стороны, если питонистов выпускают пачками, а количество вакансий всё-таки не безгранично, то каковы шансы новоиспечённому питонисту найти работу? У меня нет готового ответа для вас. Изучите рынок вакансий на хаха, например.
Если будете учить хаскель, 100% придется учить плюсы впридачу., потому что весь ввод/вывод а так-же обходные инструменты в метсах где вывод типов хаскеля не вывозит - придется писать на них.
Вообще хаскель - это одеальный язык для описания доменной области и написаниия декларативных скриптов и логики для тех, кто хочет писать на плюсах
14:20 - кибернетику никто не пытается подменять математикой. их стараются разнести на разные слои абстракций с четким направлением зависимостей между ними. И это огромный плюс. Даже те кто не знаем про монады, может написать гораздо более простой, поддерживаемый и тестируемый код в ФП стиле, чем в ООП
на 2й минуте рука нажала на "подписаться". Спасибо за видео!
8:43 - и конечный автомат и машина тьюринга очень легко описываются на ФП. Во многом именно из-за этого Функциональщики на этих языках работать и любят
12:40 - у тебя и в ФП варианте и в ООП варианте приложение одинаковой степени "масштабируемости". И там и там не описаны абстракции,вместо них TODO комментарии. И там и там если описать абстракции получится одинаково простые для масштабирования приложения, но ООП код вырастет еще сильнее, чем ФП код
Чётко! Приятно посмотреть.
14:35 - никто не заставляет вводить глобальные переменные. Ты сам ее ввел, и сам ругаешься. Все то-же самое можно было описать чистыми функциями.
13:10 - тебе никто не мешал цвет автомобиля в ФП варианте описать с помошью HEX или union-типа, или даже хотябы абстрактной строки
Будет только положительный коммент, за такой "безводный" контент руки не поднимутся писать гневный)) Лучи добра мастер, взаимно.
А что, есть желание написать гневный? : )
Так напишите. Я конструктивную критику не удаляю.
Только за откровенное хамство или рекламу сразу бан выписываю.
Нет ни желания, ни повода ув. Мастер : )
Чистые функции, функции высших порядков, лямбда функции - бьюсь в экстазе ))
Короче в переводе на человеческие язык, по ходу ФП - Функция, это способ группировки команд, для их повторного вызова, а ООП - это способ группировки Функций, для их последующего вызова, как всегда накидав вагон ненужной встрат*й терминологии - метод, это сама функция. А объект - Это функция, которая объединяет другие функции\методы. Теперь что бы избежать случайного повторения названий функция, перед ней как ее адрес еще указывают класс, или экземпляр, от кда ее вызывают, что бы с другой не перепутать.
Это слишком упрощённо сказано. ООП, помимо группировки функций в объекты, предоставляет ещё инкапсуляцию (упрятывание) и наследование. Так что просто к группировке тут всё не сводится. : )
@@MasterLid Не уверен, по скольку я только начал, но про наследование не то, что бы его вообще был бы смысл отдельно упоминать... мы в принципе же можем, в ходе задания какой ть функции использовать еще и ранее заданную функцию, что как бы и является аналогом наследования, и не получается ли "те же яйца, только в профиль"? Только в ООП ему почему то привесили отдельный ярлык, что бы по больше слов использовать..
Ну а переменные - это отдельно да..., в теории программа представляет собой сборную из модулей, от разным программеров, это получается что то типа "защиты от дурака" если они вдруг свои переменные одинаково назвали... Тогда получается Геральд и Ривия.Геральд и это два разных Герольда.. ))) Но и в принципе это все, просто один дополнительный индефикатор разделить функции и переменные, что бы не сливались в одно и то же.. Не? Что то типа адреса..
Есть нюансы.
1. В ФП функция получает какие-то данные на вход и всегда возвращает новые данные на выход (уже существующие данные никогда не изменяются). В ООП методы могут изменять уже существующие объекты и структуры.
2. В ФП данные отдельно, функции отдельно. В ООП данные и логика их изменения объеденены в объекты. Ключевым для объекта является именно опубликованное поведение.
3. Ключевые различия начинаются, когда требуется реализовать инверсию зависимостей для несвязанных модулей. В ООП мы используем референсные ссылки и интерфейсы. Сценарий бцдет описан как транзакционный скрипт. В ФП мы либо используем композицию двух модулей в третьем, который знает о них обоих - это самый простой вариант. Либо сложный вариант: импользуем Монады. Монады нужны чтобы писать сценарии с четкой последовательностью шагов, возможностью сбоя на каждом шаге и возможно еще какой-то скрытой логикой логикой, но в Функциональном стиле (т.е. по сути сценарий на языке формул). Благо в этом примере ни первое ни второе не потребовалось
@@АнатолийПетрович-в8и Это все не правильно... Функция как и ООП - это всего лишь правило, предназначенное для замены нескольких действий одним, или нескольких переменных - одной.Как формулируется правило? - желательно одной строчкой , чтобы исключить возможность двоякого интерпретирования... Если что то требует вагон текста для формулирование и вагон абстрактных терминов, понятных только двум людям: тому кто про них рассказывает и его психиатору, то это заблуждение, или секта. Не имеет права относиться ни к науке ни к логике, только к какому ть подвальному аккультизму...
Процесс ради процесса... Молимся от сюда и до обеда, а потом жертвоприношение...
@@_AbUser Уточните, пожалуйста, что именно неправильно?
Спасибо!
Твой основной ЯП - java? Что на счёт питона не только для ai и ml?
Канал хороший, но почему ты не распространяешь его? Реклама там в пабликах вк, у популярных ютуб-программистов.
Функциональщики - самые "странные" среди программистов.
Мой любимый язык -- это Java, да. Хотя занимаюсь сейчас в основном фронтендом на TypeScript.
На питоне ничего серьезного не писал, поэтому не тот уровень знаний, чтобы ролик о нем создавать.
По поводу продвижения канала -- мне некогда (и лень) этим заниматься, денег на нём я не планирую зарабатывать. Кому интересно, тот смотрит, получает ценную информацию.
@@MasterLid , вполне аргументированно, спасибо.
@@MasterLid хорошие объяснения, а насчёт продвижения, делайте ролики про JS и TS, это само себя раскрутит)
Что насчёт C# как языка?
Не кажется ли он более приятным чем Java?
@@MasterLid скажи пожалуйста стоит ли учить являясь джава разработчиком js или лучше сразу учить TS
Мне тут написал адепт функционального программирования гневную отповедь в комментах, а потом потёр её. Тем не менее, отвечу ему и возможным другим адептам.
1. Разумеется, я не стал во всех подробностях объяснять, что такое ФП, потому что во-первых, я в этом не специалист, а во-вторых, ролик не об этом.
2. Вы никогда не отнимете у программистов на ООП работу просто потому, что вас тупо меньшинство. Для понимания функционального программирования (особенно если идти дальше пресловутой чистой функции) нужно шарить в математике, а на это способны не все.
3. И ровно по этой же причине ФП никогда не достигнет всеобщего охвата и не станет повсеместно используемой технологией, потому что человечество не умнеет, а, к сожалению, наоборот тупеет.
4. Вас никто не пытается разоблачать. Скорее это вы бизнесу навязываете свое ФП, напирая на простоту тестирования, но забывая упомянуть, насколько увеличивается стоимость продукта и сроки разработки (да, ФП это дорого и долго).
Всех вам благ, адепты ФП, лучи добра! Взаимно желаю и дальше вариться в своих монадах!
Видимо, комментарий потёрли вы.
Общий посыл моего месседжа был в том, что даже не пытались представить код в функциональном стиле, поэтому сравнение крайне не корректное.
Ваш пример похож на сравнение двух велосипедов, причём у второго вы специально сняли руль и колёса и говорите, что он хуже.
Никто не навязывает вам ФП. ФП навязывается сам.
Как давно вы перебирали коллекцию c помощью конструкции for? Думаю, лет пять назад, а ведь до этого, если бы вы показали кому-нибудь конструкцию вроде
someArray = myArray.filter(findSomething) вас бы назвали "безумным функциональшиком".
Даже Java перенимает лучшие идеи из мира фп. Посмотрите на тип Optional
Фп это не языки, а концепции. Вот и всё. А вы ни одну не показали.
Кстати про монады - вы и сами не представляете жизнь без них сами того не зная, как и моноидальные операции.
Я ничего не тёр. Текст вашего комментария я узнал только из письма, которое пришло уведомлением на почту.
Предлагаю разойтись миром. С момента выхода ролика я немного пересмотрел точку зрения на чистые функции. В определенных ситуациях они довольно полезны. Так что действительно давайте заниматься каждый своим делом.
с путном 3 согласен. Поголовное ооп, бесконечные библиотеки, яп питон, с++ - все для леммингов) Главное пишите свой никому ненужный спагетти-код и побольше, бизнесу нужен гавнокод.
а по пункту 4 - просто голословное дилетантское высказывание. Есть крупные исследования проведенные еще в 99 году очень известными личностями, когда еще пытались бороться с этой заразой, что ооп замедляет скорость разработки отнимая время у разработчиков "Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment". Есть миллион статей и высказываний дурости ооп с рабочими примерами от отцов основателей. И даже сам создатель ооп, сожалеет и не считает современное ооп - ооп. Он вообще не то имел ввиду.
А по поводу навязывания, именно ооп агрессивно продвигаться реально сектантами в массы, можно еще макрософт поблагодарить и за триллион книг авторов-теоретиков, не создававших ничего, но зато уверяющих как ооп полезно и какая это серебряная пуля. Никто никому не навязывает, вы не найдете информации по ФП в интернете, как и не найдете инфу по другим стилям прогинга. Зато ооп везде. Никто вам ничего не навязывает, варитесь в свой джава-питонской тусовке и не трогайте другие способы создания кода. Бесит дилетантство, голословность и когда с умным видом подают чушь.