ООП по сути просто кривая эмуляция алгебраических типов данных и тайп-классов. Да, понятие класса/объекта, считается, легче заходит начинающим, хотя по сотне ребят, кто прошёл мой курс для начинающих с полного нуля, смотрю, оно совсем не так легко и просто воспринимается, как может показаться. Скорее наоборот: человек доучился до уровня, когда может написать сортировку массива, но далее переход к объектам, когда надо что-то смоделировать с помощью классов, в 70% случаев вызывает разрыв шаблона. Это совсем не интуитивно!
А вот развитие в сторону условного функционального программирования происходит действительно легко и просто. Есть функции, есть интерфейсы, и есть чётко отделённые от них структуры данных, и надо просто учиться это всё комбинировать и выстраивать цепочки трансформаций.
Но я не могу так учить, потому что 100% вакансий будут требовать знания ООП.
Однако из позитивных трендов нельзя не упомянуть Go и Rust, где никаким наследованием и не пахнет. Впрочем, в computer science это было давно известно, вот легендарный учебник "Object-Oriented Programming With ANSI-C" 1993-го года от одного из святых cs, крайне рекомендую всем вне зависимости от того, на каком языке вы пишете.
Код/логика должен быть простым, а для этого он должен быть прежде всего плоским. Ну ок, на хаскеле наверное это получается лучше всего, но например в F# есть модули, интерфейсы , статические методы, SRTP...
Ну и конечно либа FSharpPlus.
А вот развитие в сторону условного функционального программирования происходит действительно легко и просто. Есть функции, есть интерфейсы, и есть чётко отделённые от них структуры данных, и надо просто учиться это всё комбинировать и выстраивать цепочки трансформаций.
Но я не могу так учить, потому что 100% вакансий будут требовать знания ООП.
Однако из позитивных трендов нельзя не упомянуть Go и Rust, где никаким наследованием и не пахнет. Впрочем, в computer science это было давно известно, вот легендарный учебник "Object-Oriented Programming With ANSI-C" 1993-го года от одного из святых cs, крайне рекомендую всем вне зависимости от того, на каком языке вы пишете.
Код/логика должен быть простым, а для этого он должен быть прежде всего плоским. Ну ок, на хаскеле наверное это получается лучше всего, но например в F# есть модули, интерфейсы , статические методы, SRTP...
type Adder<'T> = { Add : 'T -> 'T -> 'T }
let addValues adder a b = adder.Add a b
let intAdder = { Add = (+) }
let result = addValues intAdder 3 5Ну и конечно либа FSharpPlus.
👍48🤔10✍1❤1
Продолжаю работу с курсантами 🤓
...Также у нас в компании начинаются сокращения, до многих дошли с уведомлением об увольнении. Я не попадаю под сокращение, но на собственной шкуре ощутил важность иметь предложения от других компаний.
...На данном этапе обучения у меня отсутствует напрочь логика построения запроса таким образом, чтобы создавать временные агрегированные таблицы с целью дальнейшего использования. Алгебраически вроде понятно, как и что вычислять, но группировка данных и дальнейшее использование не ясно
...когда в том году получилось устроиться в [...], все время уходило на работу, на доучивание стека.
Подумал, наконец-то карьеру сделал, дальше можно спокойно жить и развиватся.
На тот период забросил все дополнительные курсы - физические не было времени.
В итоге в феврале сократили. Как говорится, расскажи богу о своих планах. А на рынке какая-то беда. Работу найти не могу.
Желание расти и развиваться, как разработчик не забросил. Хочу продолжить.
...С удивлением обнаружил, что не позволяю перезатирать значения по ключу. Почему я решил сделать такое поведение мне уже не ведомо, больше похоже на ошибку. В целом, я бы таким контейнером не пользовался бы xD
...Зато обратил внимание как мысли стали выстраиваться иначе в решении повседневных задач на основной работе.
...Самостоятельно доперел до того, что операции объединения/пересечения/вычитания замкнуты на типе, разве что не знал, как это называется правильно.
...При выполнении этого задания я ощутил погружение в реальную жизнь разработчика с неполной документацией, нечёткими требованиями и недостатком знаний.
...Также у нас в компании начинаются сокращения, до многих дошли с уведомлением об увольнении. Я не попадаю под сокращение, но на собственной шкуре ощутил важность иметь предложения от других компаний.
...На данном этапе обучения у меня отсутствует напрочь логика построения запроса таким образом, чтобы создавать временные агрегированные таблицы с целью дальнейшего использования. Алгебраически вроде понятно, как и что вычислять, но группировка данных и дальнейшее использование не ясно
...когда в том году получилось устроиться в [...], все время уходило на работу, на доучивание стека.
Подумал, наконец-то карьеру сделал, дальше можно спокойно жить и развиватся.
На тот период забросил все дополнительные курсы - физические не было времени.
В итоге в феврале сократили. Как говорится, расскажи богу о своих планах. А на рынке какая-то беда. Работу найти не могу.
Желание расти и развиваться, как разработчик не забросил. Хочу продолжить.
...С удивлением обнаружил, что не позволяю перезатирать значения по ключу. Почему я решил сделать такое поведение мне уже не ведомо, больше похоже на ошибку. В целом, я бы таким контейнером не пользовался бы xD
...Зато обратил внимание как мысли стали выстраиваться иначе в решении повседневных задач на основной работе.
...Самостоятельно доперел до того, что операции объединения/пересечения/вычитания замкнуты на типе, разве что не знал, как это называется правильно.
...При выполнении этого задания я ощутил погружение в реальную жизнь разработчика с неполной документацией, нечёткими требованиями и недостатком знаний.
❤🔥43✍17👍6❤3💯2
Отчёт за неделю.
Официальный "блоггер-паблик"
-- Почему многоуровневые подходы (Clear, Onion, Hexagon, да какие угодно)
в конечном итоге приводят лишь к фрагментации домена и расползанию бизнес-логики...
Для донов начинающих+ по саморазвитию
-- Если вы работали c сервисами Jira, Trello, Notion , то уже фактически имеется представление о Kanban. Но буквально в последние годы активно развиваются их конкуренты, которые внедряют AI... Некоторые платформы добавляют игровые элементы, например, баллы за выполнение задач, уровни и награды, соревнования с другими и т.п. Получается своеобразная "Жизнь как Ролевая игра" :)
-- Набор на мой новый трек для начинающих с полного нуля, 5 мест закончились за один час. Такие наборы для донов теперь проводятся регулярно.
-- Вы отправили заявки на более чем 200 вакансий — и ни одного отклика? Проблема не в навыках — у вас всё выглядит как у любого другого джуниора.
В большинстве резюме есть:
- Опыт работы с JavaScript и Java или Python
- TODO-приложение на GitHub
- "Увлечён программированием, хочу у вас работать" в сопроводительном письме.
Если вы не выделяетесь из массовки, вас игнорируют. Три ключевых шага, которые вам надо сделать.
=
Для донов-неначинающих
— Open Closed Principle
Мы хотим иметь возможность повторно использовать и расширять код без необходимости изменять исходную реализацию. ФП достигает этого с помощью двух инструментов...
— Single Responsibility Principle
Если доводить SRP до логического предела, то, скорее всего, вы получите кодовую базу с множеством мелкоструктурных классов, каждый из которых имеет единственный метод. когда такое мелкое структурирование происходит неоднократно, пора переходить на функциональный стиль...
Бусти
-- command-line tool for answering that eternal question: Who wrote this code?!
-- Важно! 2 сезон сериала СильныхИдей:
Продолжаем тему software design с акцентом на programming in small, и немного затронем programming in large. Полное содержание тут.
(Первая часть: БАЗА программной инженерии)
Официальный "блоггер-паблик"
-- Почему многоуровневые подходы (Clear, Onion, Hexagon, да какие угодно)
в конечном итоге приводят лишь к фрагментации домена и расползанию бизнес-логики...
Для донов начинающих+ по саморазвитию
-- Если вы работали c сервисами Jira, Trello, Notion , то уже фактически имеется представление о Kanban. Но буквально в последние годы активно развиваются их конкуренты, которые внедряют AI... Некоторые платформы добавляют игровые элементы, например, баллы за выполнение задач, уровни и награды, соревнования с другими и т.п. Получается своеобразная "Жизнь как Ролевая игра" :)
-- Набор на мой новый трек для начинающих с полного нуля, 5 мест закончились за один час. Такие наборы для донов теперь проводятся регулярно.
-- Вы отправили заявки на более чем 200 вакансий — и ни одного отклика? Проблема не в навыках — у вас всё выглядит как у любого другого джуниора.
В большинстве резюме есть:
- Опыт работы с JavaScript и Java или Python
- TODO-приложение на GitHub
- "Увлечён программированием, хочу у вас работать" в сопроводительном письме.
Если вы не выделяетесь из массовки, вас игнорируют. Три ключевых шага, которые вам надо сделать.
=
Для донов-неначинающих
— Open Closed Principle
Мы хотим иметь возможность повторно использовать и расширять код без необходимости изменять исходную реализацию. ФП достигает этого с помощью двух инструментов...
— Single Responsibility Principle
Если доводить SRP до логического предела, то, скорее всего, вы получите кодовую базу с множеством мелкоструктурных классов, каждый из которых имеет единственный метод. когда такое мелкое структурирование происходит неоднократно, пора переходить на функциональный стиль...
Бусти
-- command-line tool for answering that eternal question: Who wrote this code?!
-- Важно! 2 сезон сериала СильныхИдей:
Продолжаем тему software design с акцентом на programming in small, и немного затронем programming in large. Полное содержание тут.
(Первая часть: БАЗА программной инженерии)
3❤36✍6🔥2👏1
...Но главное, что весь предыдущий недельный спринт я вложил в курс "Гомотопическая теория типов для программистов". Продвигается очень тяжело, но зато я буду первым в мире, кто низведёт HoTT до уровня рядовых миддлов мэйнстрима. Ну или возвысит их до уровня HoTT :)
Столько времени к сожалению вкладывать в него долгосрочно нереально, ну хотя бы по нескольку помидорок в день буду стараться.
Пока я сделал БАЗУ: введение в HoTT и MLTT, интуиционистская версия, теория групп, открытое множество, непрерывное отображение, топологическое пространство...
И начал "Базовые понятия": фундаментальная группа, петля, путь, окружность, тор... При этом добавляю мою реализацию HoTT на питоне, с максимумом комментариев.
=
Отвечая на ваш вопрос. Нет никакой практической ценности в изучении HoTT, иначе вся мировая айтишка была бы там. Однако HoTT от этого застрахован, потому что туда очень трудно попасть.
..И все же всегда имеется слабая возможность и для обычного человека войти в эту тему, если он получит правильную карту. Но, предупреждаю заранее, если ему это и удаётся, то результатом становится замешательство, иногда необратимое -- вплоть до полного unemployable.
Столько времени к сожалению вкладывать в него долгосрочно нереально, ну хотя бы по нескольку помидорок в день буду стараться.
Пока я сделал БАЗУ: введение в HoTT и MLTT, интуиционистская версия, теория групп, открытое множество, непрерывное отображение, топологическое пространство...
И начал "Базовые понятия": фундаментальная группа, петля, путь, окружность, тор... При этом добавляю мою реализацию HoTT на питоне, с максимумом комментариев.
=
Отвечая на ваш вопрос. Нет никакой практической ценности в изучении HoTT, иначе вся мировая айтишка была бы там. Однако HoTT от этого застрахован, потому что туда очень трудно попасть.
..И все же всегда имеется слабая возможность и для обычного человека войти в эту тему, если он получит правильную карту. Но, предупреждаю заранее, если ему это и удаётся, то результатом становится замешательство, иногда необратимое -- вплоть до полного unemployable.
1❤46👍11🤯6⚡1🤔1
Твой выбор, мистер Андерсон. Альтернативы нет :)
Anonymous Poll
64%
Страх потратить всю жизнь на работу, которая ощущается как каторга
36%
Страх потерять работу и умереть в нищете
🤯21🫡13😎12🐳3
То знакомое чувство лёгкой грусти, когда возникает очередное противоречие между теоретической моделью обобщённых типов, и их фактической реализацией в Python...
Даже на таком простом уровне, как реализация типа-суммы (дизъюнктное объединение типов- параметров).
Когда уже сделал реализацию, но решил сэкономить на том, чему активно учишь других, и забил на TDD (или хотя бы "тесты-первыми"). В результате первые же тесты ломаются, после чего тратишь кучу времени на странные баги, а когда добираешься до причины, понимаешь, что всё придётся переписать заново :)
Я совсем забыл, что питончик - это type erasure, когда информация о параметрах типа (T и U для класса Sum[T, U]) стирается во время выполнения...
Тут рекомендуют паттерн Стратегия, но я бы для продакшена делал фабричные методы вроде Sum.left(), которые создают экземпляры Sum с явно заданным значением is_left, что полностью обходит необходимость определения типа во время выполнения.
Но в данном случае (и в ряде существенно более сложных) мне надобудет придумать как сделать абсолютно чистый в математическом смысле интерфейс.
Даже на таком простом уровне, как реализация типа-суммы (дизъюнктное объединение типов- параметров).
class Sum(Generic[T, U]):
def __init__(self, value: Union[T, U], is_left: Optional[bool] = None):
Когда уже сделал реализацию, но решил сэкономить на том, чему активно учишь других, и забил на TDD (или хотя бы "тесты-первыми"). В результате первые же тесты ломаются, после чего тратишь кучу времени на странные баги, а когда добираешься до причины, понимаешь, что всё придётся переписать заново :)
Я совсем забыл, что питончик - это type erasure, когда информация о параметрах типа (T и U для класса Sum[T, U]) стирается во время выполнения...
Тут рекомендуют паттерн Стратегия, но я бы для продакшена делал фабричные методы вроде Sum.left(), которые создают экземпляры Sum с явно заданным значением is_left, что полностью обходит необходимость определения типа во время выполнения.
Но в данном случае (и в ряде существенно более сложных) мне надо
❤36👍16✍7❤🔥1🤯1
У меня на рутубе много подкастов, которые слушаю фоном, и сегодня он внезапно стал отключаться, едва уходишь на другую вкладку или просто сам хром сворачиваешь, или переключаешься на другую программу.
Я "ничего не трогал ничего не обновлял ничего не менял комп перезагружал", но главное что в фоне продолжает прекрасно работать и ютуб, и вквидео, и даже одноклассники-видео :) и онлайн-кинотеатры разные, то есть проблема конкретно в рутубе. Впрочем, по очевидным причинам совершенно не удивлён. Видимо, совсем у пацанов дела плохи, раз приходится экономить трафик таким образом )))
Любой джун-фронтендер подскажет, как можно эту проблему решить на время жизни вкладки: надо отрубить Page Visibility API.
F12 -> Console ->
А если регулярно повторяется, автоматизируем подмену API с помощью Tampermonkey.
Подкасты с рутуба я из гуманных соображений всегда слушал в видеоформате 144, но теперь из вредности буду всегда ставить 1080++.
( даже стрим мэдисона на кике в фоне норм работает 😊 начинал он кстати с рутуба... )
Самое же возмутительное, что на рутуб у меня платная подписка, и вот его отказ работать в фоне даже для платных папищеков откровенное свинство.
27.03.25 Сегодня вроде заработало; был баг?
30.03.25 Опять сломалось...
Я "ничего не трогал ничего не обновлял ничего не менял комп перезагружал", но главное что в фоне продолжает прекрасно работать и ютуб, и вквидео, и даже одноклассники-видео :) и онлайн-кинотеатры разные, то есть проблема конкретно в рутубе. Впрочем, по очевидным причинам совершенно не удивлён. Видимо, совсем у пацанов дела плохи, раз приходится экономить трафик таким образом )))
Любой джун-фронтендер подскажет, как можно эту проблему решить на время жизни вкладки: надо отрубить Page Visibility API.
F12 -> Console ->
Object.defineProperty(document, 'hidden', { value: false, configurable: false });
Object.defineProperty(document, 'visibilityState', { value: 'visible', configurable: false });А если регулярно повторяется, автоматизируем подмену API с помощью Tampermonkey.
Подкасты с рутуба я из гуманных соображений всегда слушал в видеоформате 144, но теперь из вредности буду всегда ставить 1080++.
( даже стрим мэдисона на кике в фоне норм работает 😊 начинал он кстати с рутуба... )
Самое же возмутительное, что на рутуб у меня платная подписка, и вот его отказ работать в фоне даже для платных папищеков откровенное свинство.
27.03.25 Сегодня вроде заработало; был баг?
30.03.25 Опять сломалось...
😎36😁22👍10🤔3🐳3
Как Spring-разработчик заваривает чай.
Входные данные: Spring-разработчик не может просто взять и заварить чай, ему нужен DI.
Spring Context: всё должно быть бинами: @TeaBean, @Sugar (опционально, как всегда), @BoilingWater.
Прокси-слой (AOP): прежде чем выдать чай, нужно залогировать процесс и замерить время заваривания.
Внешний сервис: вода берётся асинхронно (@Async), а если кран не работает – автоматический retry (@Retryable).
Exception Handler: если чайник сломался, Spring gracefully вернёт TeaPotException (HTTP 418 I'm a teapot).
Можно добавить ещё @Scheduled для автоматического чаепития каждые 2 часа.
Входные данные: Spring-разработчик не может просто взять и заварить чай, ему нужен DI.
Spring Context: всё должно быть бинами: @TeaBean, @Sugar (опционально, как всегда), @BoilingWater.
Прокси-слой (AOP): прежде чем выдать чай, нужно залогировать процесс и замерить время заваривания.
Внешний сервис: вода берётся асинхронно (@Async), а если кран не работает – автоматический retry (@Retryable).
Exception Handler: если чайник сломался, Spring gracefully вернёт TeaPotException (HTTP 418 I'm a teapot).
Можно добавить ещё @Scheduled для автоматического чаепития каждые 2 часа.
😁57👍9✍7💯4🏆2
Продолжаю работу с курсантами 🤓
...С основной работы я уже ушел, 21го числа. Решили что нет смысла "лямку тянуть" до конца месяца. (Как то даже по спокойнее сразу стало - снизилась тревожность и себя стал слышать, даже идеи сами приходят)
...Я в первую очередь буду на свои модели менять, потому что уж очень важный узел, и как будто ЛЛМ вообще не нужен, а хороший NLU классификатор который можно прозрачно дообучить/переобучить после того как обнаружатся странности.
Такие роутеры классификаторы на LLM это вообще рандом. Осенью очень много смешных поведений ловили. Буквально чуть чуть промпт меняешь, пробел лишний или слово 1-2, и результат вообще другой.
...Теперь командам разработки без выделенных девопсов/dba никогда не посоветую self-hosted HA-кластер сопровождать).
Кстати месяц где-то назад одну мою команду как раз отговорил на основе этого моего опыта.
(а ты сможешь самостоятельно обновить кластера без даунтайма?)
...В одном из проектов заменил PostgreSQL на MongoDB. Исходной причиной стало понимание того, что более эффективно будет работать с денормализованными данными. Таким образом мы перешли от набора таблиц к единому документу, что упростило схему БД и сделало выполнение запросов более быстрым. В дополнение к этому мы получили отказоустойчивый кластер из коробки, что упрощает процесс его сопровождения.
...Неужели, ORM так и работает: использует под капотом эти функции для получения запросов в виде json, а потом при помощи какого-нибудь jackson мапит их в объекты?!
...Альтернативой в экосистеме Go между ORM и голым SQL могут служить инструменты, такие как query-билдеры, например, squirrel. - Они способны на 99% загрыть потребность в ORM, если стоит вопрос о гибкости и удобстве построения сложных запросов.
Если говорить про модели данных, то одной из лучших рекомендаций для ослабления ограничеий ORM-ов может стать денормализация таблиц и формирование более избыточных моделей, чтобы была возможность гибко с ними работать без излишних джоинов и сложной бизнес-логики.
...Помимо этих интеграции вышел очередной баг с 1с, господа решили раз в месяц менять в каком нибудь api ответ datetime полей с null, на mindate.
Также переводил на новый pipeline и десерилизовал ответ от 1с новым самописным десириализатором,по вашим занятиям избавился полностью от nullable полей в record ответе от 1с, и жить стало в разы легче, теперь я работаю с двумя состояниями даты, либо она конкретная, либо минимальная.
Да, писать свой собственный клей для подобных случаев, похоже , надо будет всегда, главная проблема что он со временем сам превращается в баттлнек )
Горжусь вами, дорогие!
❤️❤️❤️❤️❤️❤️❤️
...С основной работы я уже ушел, 21го числа. Решили что нет смысла "лямку тянуть" до конца месяца. (Как то даже по спокойнее сразу стало - снизилась тревожность и себя стал слышать, даже идеи сами приходят)
...Я в первую очередь буду на свои модели менять, потому что уж очень важный узел, и как будто ЛЛМ вообще не нужен, а хороший NLU классификатор который можно прозрачно дообучить/переобучить после того как обнаружатся странности.
Такие роутеры классификаторы на LLM это вообще рандом. Осенью очень много смешных поведений ловили. Буквально чуть чуть промпт меняешь, пробел лишний или слово 1-2, и результат вообще другой.
...Теперь командам разработки без выделенных девопсов/dba никогда не посоветую self-hosted HA-кластер сопровождать).
Кстати месяц где-то назад одну мою команду как раз отговорил на основе этого моего опыта.
(а ты сможешь самостоятельно обновить кластера без даунтайма?)
...В одном из проектов заменил PostgreSQL на MongoDB. Исходной причиной стало понимание того, что более эффективно будет работать с денормализованными данными. Таким образом мы перешли от набора таблиц к единому документу, что упростило схему БД и сделало выполнение запросов более быстрым. В дополнение к этому мы получили отказоустойчивый кластер из коробки, что упрощает процесс его сопровождения.
...Неужели, ORM так и работает: использует под капотом эти функции для получения запросов в виде json, а потом при помощи какого-нибудь jackson мапит их в объекты?!
...Альтернативой в экосистеме Go между ORM и голым SQL могут служить инструменты, такие как query-билдеры, например, squirrel. - Они способны на 99% загрыть потребность в ORM, если стоит вопрос о гибкости и удобстве построения сложных запросов.
Если говорить про модели данных, то одной из лучших рекомендаций для ослабления ограничеий ORM-ов может стать денормализация таблиц и формирование более избыточных моделей, чтобы была возможность гибко с ними работать без излишних джоинов и сложной бизнес-логики.
...Помимо этих интеграции вышел очередной баг с 1с, господа решили раз в месяц менять в каком нибудь api ответ datetime полей с null, на mindate.
Также переводил на новый pipeline и десерилизовал ответ от 1с новым самописным десириализатором,по вашим занятиям избавился полностью от nullable полей в record ответе от 1с, и жить стало в разы легче, теперь я работаю с двумя состояниями даты, либо она конкретная, либо минимальная.
Да, писать свой собственный клей для подобных случаев, похоже , надо будет всегда, главная проблема что он со временем сам превращается в баттлнек )
Горжусь вами, дорогие!
❤️❤️❤️❤️❤️❤️❤️
👍48❤17🔥1
Сейчас истеричные белки по поводу AI заводятся ровно по двум темам:
1. Смотрите! Смотрите! Очередной жпт порвал все другие жпт в неких абстрактных программистских тестах в вакууме, которые к реальной работе имеет отношение более чем никакое, и делаются крупными конторами исключительно для перепиаривания конкурентов и развода лохов-инвесторов.
Я проверил намедни новую дипсику 31 со всеми её супер-пупер-синками, так она не смогла корректно сгенерить линейный json для создания простой диаграммки из пяти квадратиков со стрелочками, хотя я мучил её полчаса -- а нарисовать вручную оказалось 3 минуты. Как всегда, "дешевле девочку посадить за эксель", чем платить сотни долларов за токены.
2. Смотрите! Смотрите! Школьник, не умеющий программировать, двумя промптами, создал полноценную игруи продал её за миллион долларов.
Во-первых, AI её внутри отнюдь не создал с нуля, а просто скопипастил с гитхаба нечто достаточно похожее, и добавил несколько "оригинальных" фич, спизж... с других проектов.
Во-вторых, ну ок, но вы попробуйте этот проэкт поразвивать дальше.
Попросите сделать для этой игры UI с действительно оригинальными возможностями, добавить логически более-менее сложные и нестандартные фичи -- и AI тут же обломается.
=
А что если действительно AIsys? Сейчас в эту темку вкладывается беспрецедентная сумма, доселе невиданная в истории человечества.
"ИИ может сыграть роль в приходе Антихриста, — заявил Патриарх Кирилл. ...ИИ должен быть поставлен под жёсткий контроль государства и "в хорошем смысле общества".
Но разве его послушает кто-то из демонстративно крестящихся на камеры, когда под распил заходит такое баблище...
Но, не получится служить одновременно Богу и AIsys-у.
1. Смотрите! Смотрите! Очередной жпт порвал все другие жпт в неких абстрактных программистских тестах в вакууме, которые к реальной работе имеет отношение более чем никакое, и делаются крупными конторами исключительно для перепиаривания конкурентов и развода лохов-инвесторов.
Я проверил намедни новую дипсику 31 со всеми её супер-пупер-синками, так она не смогла корректно сгенерить линейный json для создания простой диаграммки из пяти квадратиков со стрелочками, хотя я мучил её полчаса -- а нарисовать вручную оказалось 3 минуты. Как всегда, "дешевле девочку посадить за эксель", чем платить сотни долларов за токены.
2. Смотрите! Смотрите! Школьник, не умеющий программировать, двумя промптами, создал полноценную игру
Во-первых, AI её внутри отнюдь не создал с нуля, а просто скопипастил с гитхаба нечто достаточно похожее, и добавил несколько "оригинальных" фич, спизж... с других проектов.
Во-вторых, ну ок, но вы попробуйте этот проэкт поразвивать дальше.
Попросите сделать для этой игры UI с действительно оригинальными возможностями, добавить логически более-менее сложные и нестандартные фичи -- и AI тут же обломается.
=
А что если действительно AIsys? Сейчас в эту темку вкладывается беспрецедентная сумма, доселе невиданная в истории человечества.
"ИИ может сыграть роль в приходе Антихриста, — заявил Патриарх Кирилл. ...ИИ должен быть поставлен под жёсткий контроль государства и "в хорошем смысле общества".
Но разве его послушает кто-то из демонстративно крестящихся на камеры, когда под распил заходит такое баблище...
Но, не получится служить одновременно Богу и AIsys-у.
❤38🤔20🐳7💯1🫡1
Как NET-разработчик заваривает кофе.
Входные данные: C# программист не может просто налить кипяток. Нужен ICoffeeService, иначе это "антипаттерн".
DI Container: всё должно быть интерфейсами:
- ICoffeeService (но реализация OutOfMemoryCoffeeService)
- ISugar (опционально, как Nullable<Sugar>)
- IBoilingWater (но только если лицензия Azure позволяет)
Middleware/AOP:прежде чем выдать кофе:
- обязательно залогировать (ILogger<Coffee>)
- замерить время (Stopwatch + метрики в Prometheus)
- добавить RetryPolicy (потому что WaterAPI тормозит)
Exception Handler: если кофемашина сломалась:
- вернуть 503 Service Unavailable
- или CoffeeMachineException (с подсказкой "Обновите NuGet-пакет")
Внешний сервис: обязательно:
- HttpClient с таймаутом в 1 секунду (но ждём 10)
- Polly с 5 попытками (хотя после 3-ей уже пора писать в саппорт)
- обязательно ConfigureAwait(false), иначе deadlock
Выходной результат: кофе со StackTrace:
- "NullReferenceException: Sugar was not injected"
- "AzureTimeoutException: WaterAPI не ответил за 365 дней"
...из обсуждений в рабочем чате:
"Почему кофе холодный? 🤮 Потому что был async void BrewAsync()"
"Почему в чашке StackOverflowException? 💩 Рекурсивный вызов AddSugar()"
"Кто-то забыл Dispose() чашку 🤡 — теперь в памяти утечка кофеина"
+ тимлид сразу подкидывает новых проблем, AFAIK!!1 💥
- Блок с [Obsolete] методами ("Старый кофеварка")
- BackgroundService для автоматического кофепития
- .gitignore для сбежавшего кофе
(1я серия про java)
Входные данные: C# программист не может просто налить кипяток. Нужен ICoffeeService, иначе это "антипаттерн".
DI Container: всё должно быть интерфейсами:
- ICoffeeService (но реализация OutOfMemoryCoffeeService)
- ISugar (опционально, как Nullable<Sugar>)
- IBoilingWater (но только если лицензия Azure позволяет)
Middleware/AOP:прежде чем выдать кофе:
- обязательно залогировать (ILogger<Coffee>)
- замерить время (Stopwatch + метрики в Prometheus)
- добавить RetryPolicy (потому что WaterAPI тормозит)
Exception Handler: если кофемашина сломалась:
- вернуть 503 Service Unavailable
- или CoffeeMachineException (с подсказкой "Обновите NuGet-пакет")
Внешний сервис: обязательно:
- HttpClient с таймаутом в 1 секунду (но ждём 10)
- Polly с 5 попытками (хотя после 3-ей уже пора писать в саппорт)
- обязательно ConfigureAwait(false), иначе deadlock
Выходной результат: кофе со StackTrace:
- "NullReferenceException: Sugar was not injected"
- "AzureTimeoutException: WaterAPI не ответил за 365 дней"
...из обсуждений в рабочем чате:
"Почему кофе холодный? 🤮 Потому что был async void BrewAsync()"
"Почему в чашке StackOverflowException? 💩 Рекурсивный вызов AddSugar()"
"Кто-то забыл Dispose() чашку 🤡 — теперь в памяти утечка кофеина"
+ тимлид сразу подкидывает новых проблем, AFAIK!!1 💥
- Блок с [Obsolete] методами ("Старый кофеварка")
- BackgroundService для автоматического кофепития
- .gitignore для сбежавшего кофе
(1я серия про java)
😁58😎7👍5✍2❤1
Так называемый "естественный язык" прекрасен для целей, для которых он был создан: грубость, рассказывание шуток, жульничество или занятие любовью,
но он безнадежно неадекватен, когда нам приходится однозначно иметь дело с ситуациями большой сложности, ситуациями, которые неизбежно возникают в таких сферах деятельности, как законодательство, арбитраж, математика или программирование.
-- Эдсгер Дейкстра
но он безнадежно неадекватен, когда нам приходится однозначно иметь дело с ситуациями большой сложности, ситуациями, которые неизбежно возникают в таких сферах деятельности, как законодательство, арбитраж, математика или программирование.
-- Эдсгер Дейкстра
👍61🤔15❤5⚡1💯1
Интересный тренд (реально), Spring-разработка массово...
Anonymous Quiz
25%
возвращается от JPA обратно к JDBC
11%
полностью перешла на JPA, забыв про JDBC
20%
упорно стоит в этих темах на месте
44%
я шарпист!
🤔43✍9
Ваше мнение о Rust ?
Anonymous Poll
55%
Это фантастика для программирования системного уровня 😇
45%
Это кошмар для крупномасштабных корпоративных приложений 😳
🤔46❤5💯3
Отчёт за неделю.
— Основной паблик:
Как 10-кратно сократить количество багов в продакшене?
Эта best practice известна в программной инженерии не один десяток лет, но в 98% она не применяется, потому что системное мышление отсутствует у современных ит-менеджеров более чем полностью. Они способны мыслить лишь глупеньким карго-культом "список пользовательских фич" + "надо сделать побыстрее", но это не вина их, а беда.
Например, по ФЗ № 323, главврач любой клиники обязан иметь высшее медицинское образование + 5 лет работы в медицине. А в айтишке достаточно быть племянником гендира или приятелем овнера, и сразу войти в айти-директора...
— Для донов-начинающих + по саморазвитию:
...Многие опасаются, что AI заменит их на работе.
Лично я настроен скептически. Технологические инновации всегда приводили к сокращению количества людей, необходимых для работы над чем-либо. Однако в то же время это создавало новые рабочие места.
Но, действительно, эффективное обучение — наиболее важный софт-скилл сегодня, чем когда-либо.
Обучение - это сверхспособность.
...Создаём себе "Второй мозг 2.0".
— Для донов-неначинающих:
...Полезные платные подписки для сеньоров и техлидов: AI IDE, полезный свежий контент, поисковик c AI, лучшая в мире рисовалка диаграмм...
...Продолжаю выкладывать для донов материалы СильныхИдей.
29. Open Closed Principle (OCP) и ФП.
Мы хотим иметь возможность повторно использовать и расширять код без необходимости изменять исходную реализацию. ФП достигает этого с помощью двух инструментов...
— Бусти:
Как работают Virtual Threads JVM
Книги по СильнымИдеям:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
— Курс "Гомотопическая теория типов для программистов" - делаю уже не знаю какой по счёту заход, теория обширная, и реализовать базовые понятия так, чтобы их потом можно было корректно применять во всех аспектах, ну наверное без итераций просто нереально.
Зря я конечно своим собственным советам сразу не следовал 🙈
Теперь сперва делаю очень тщательные тесты. Например, для типа Путь/Path (гомотопия; тип, который представляет доказательство тождества между двумя значениями) такие тесты сделал: создание рефлексивного пути, композиция путей (транзитивность), симметрия пути (инверсия), композиция нерефлексивных путей, композиция с последующей инверсией... Всё на Python, с примерами.
(за такой работой прям чувствуешь, как живёшь 💥 :)
=
Но в целом временно отвлёкся на другое: копирую первый курс трека "Как понять в программировании всё" на внешнюю платформу, 42% сделал, и потом будет доступен всем желающим НЕначинающим, кто хочет потом попасть в мою Школу.
А начинающим, напомню, в группе для начинающих , для донов несколько раз в месяц провожу регулярные наборы.
Копирую в основном потому, что на моём учебном сервере нету возможности автоматического приёма оплаты... да только вот везде помимо плюсов ещё и свои минусы. Внешняя платформа, как и многие другие, в том числе и Бусти, вчера весь день лежала из-за отказа яндекс облака. Вроде бы ЯОблако - критически важная инфраструктура, но... 2N+1? ДГУ? ATS? Нет, не слышали видимо. Tier II lol, даже по-моему до 999 не дотянули, если простой был больше 8часов45минут.
— Основной паблик:
Как 10-кратно сократить количество багов в продакшене?
Эта best practice известна в программной инженерии не один десяток лет, но в 98% она не применяется, потому что системное мышление отсутствует у современных ит-менеджеров более чем полностью. Они способны мыслить лишь глупеньким карго-культом "список пользовательских фич" + "надо сделать побыстрее", но это не вина их, а беда.
Например, по ФЗ № 323, главврач любой клиники обязан иметь высшее медицинское образование + 5 лет работы в медицине. А в айтишке достаточно быть племянником гендира или приятелем овнера, и сразу войти в айти-директора...
— Для донов-начинающих + по саморазвитию:
...Многие опасаются, что AI заменит их на работе.
Лично я настроен скептически. Технологические инновации всегда приводили к сокращению количества людей, необходимых для работы над чем-либо. Однако в то же время это создавало новые рабочие места.
Но, действительно, эффективное обучение — наиболее важный софт-скилл сегодня, чем когда-либо.
Обучение - это сверхспособность.
...Создаём себе "Второй мозг 2.0".
— Для донов-неначинающих:
...Полезные платные подписки для сеньоров и техлидов: AI IDE, полезный свежий контент, поисковик c AI, лучшая в мире рисовалка диаграмм...
...Продолжаю выкладывать для донов материалы СильныхИдей.
29. Open Closed Principle (OCP) и ФП.
Мы хотим иметь возможность повторно использовать и расширять код без необходимости изменять исходную реализацию. ФП достигает этого с помощью двух инструментов...
— Бусти:
Как работают Virtual Threads JVM
Книги по СильнымИдеям:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
— Курс "Гомотопическая теория типов для программистов" - делаю уже не знаю какой по счёту заход, теория обширная, и реализовать базовые понятия так, чтобы их потом можно было корректно применять во всех аспектах, ну наверное без итераций просто нереально.
Зря я конечно своим собственным советам сразу не следовал 🙈
Теперь сперва делаю очень тщательные тесты. Например, для типа Путь/Path (гомотопия; тип, который представляет доказательство тождества между двумя значениями) такие тесты сделал: создание рефлексивного пути, композиция путей (транзитивность), симметрия пути (инверсия), композиция нерефлексивных путей, композиция с последующей инверсией... Всё на Python, с примерами.
(за такой работой прям чувствуешь, как живёшь 💥 :)
=
Но в целом временно отвлёкся на другое: копирую первый курс трека "Как понять в программировании всё" на внешнюю платформу, 42% сделал, и потом будет доступен всем желающим НЕначинающим, кто хочет потом попасть в мою Школу.
А начинающим, напомню, в группе для начинающих , для донов несколько раз в месяц провожу регулярные наборы.
Копирую в основном потому, что на моём учебном сервере нету возможности автоматического приёма оплаты... да только вот везде помимо плюсов ещё и свои минусы. Внешняя платформа, как и многие другие, в том числе и Бусти, вчера весь день лежала из-за отказа яндекс облака. Вроде бы ЯОблако - критически важная инфраструктура, но... 2N+1? ДГУ? ATS? Нет, не слышали видимо. Tier II lol, даже по-моему до 999 не дотянули, если простой был больше 8часов45минут.
👍43❤9🔥6❤🔥4
Ну, с Днём Математика!
Знаете почему, родители постоянно вас спрашивали и спрашивают: "Кем ты хочешь стать? Какие у тебя планы по работе?". Они хотят украсть вашу идею!
С математикой аналогично. На самом деле практически все те, кто говорят вам, что программистам изучать математику совсем не обязательно, сами как минимум изучали её несколько семестров, а то и курсов, в университете.
Говорят они так специально: по себе поняв, насколько мощно математика бустит профессию, теперь просто стараются отговаривать других, чтобы у них самих не появлялись сильные конкуренты.
Математика -- это инструмент богатых.
"кто не учит матан будет переработан в метан" (с)
"Если вы обнаружите себя в положении, в котором вы будете терпеть постоянные неудачи в личной и деловой жизни, то начнете обвинять в этом судьбу, карму, духов животных или какой-нибудь иной вид магии. В то время, как причина гораздо проще - математика. Всегда есть закономерность, но она не всегда легко различима. Не переставайте искать только потому, что не увидели закономерностьв первые 7 лет ."
= Кстати а вы же уже посмотрели сериал "Опасные числа", что я раньше рекомендовал? к просмотру обязателен!
"топовые темы -- это криптография и теория типов" (с)
Математики - самые опасные люди на планете.
Знаете почему, родители постоянно вас спрашивали и спрашивают: "Кем ты хочешь стать? Какие у тебя планы по работе?". Они хотят украсть вашу идею!
С математикой аналогично. На самом деле практически все те, кто говорят вам, что программистам изучать математику совсем не обязательно, сами как минимум изучали её несколько семестров, а то и курсов, в университете.
Говорят они так специально: по себе поняв, насколько мощно математика бустит профессию, теперь просто стараются отговаривать других, чтобы у них самих не появлялись сильные конкуренты.
Математика -- это инструмент богатых.
"кто не учит матан будет переработан в метан" (с)
"Если вы обнаружите себя в положении, в котором вы будете терпеть постоянные неудачи в личной и деловой жизни, то начнете обвинять в этом судьбу, карму, духов животных или какой-нибудь иной вид магии. В то время, как причина гораздо проще - математика. Всегда есть закономерность, но она не всегда легко различима. Не переставайте искать только потому, что не увидели закономерность
= Кстати а вы же уже посмотрели сериал "Опасные числа", что я раньше рекомендовал? к просмотру обязателен!
"топовые темы -- это криптография и теория типов" (с)
Математики - самые опасные люди на планете.
❤50👍15🔥8
Как Django-разработчик заваривает чай.
Входные данные: Python-разработчик не может просто вскипятить воду. Нужно создать модель Tea и миграцию.
Django ORM: всё должно быть объектами:
Tea.objects.filter(is_hot=True) (но почему-то возвращает None)
Sugar(optional=True) (но всегда NULL в проде)
HotWater() выполняется за O(n^3) (потому что "потом оптимизируем")
Middleware: прежде чем выдать чай:
- проверить @login_required (гости чай не получают)
- добавить @cache_control (чтобы чай не остывал)
- запустить @transaction.atomic (иначе сахар может исчезнуть)
Error Handling: если чайник сломался:
вернуть 500 Internal Server Error
или TemplateDoesNotExist (шаблон чашки потерялся)
или ImproperlyConfigured (настройки чайника кривые)
Внешний сервис: особенности:
requests.get(timeout=1) (но ждём 30 секунд)
3 попытки (хотя вода уже закончилась после первой)
ConnectionError (соседи отключили API)
Выходной результат: чай с багами:
TypeError: NoneType is not drinkable
MigrationError: Сахара нет в базе
CircularImportError: чай пытается импортировать сам себя
Из рабочих чатов:
"Почему чай холодный? 🤮 Потому что забыли @async_to_sync"
"Почему в чашке MemoryError? 💩 Слишком много locals()"
"Кто-то сделал tea.save() но забыл commit=True 🤡"
"Чайник упал с SIGTERM (системный администратор экономил электричество) ☠️"
Не забываем про
(1-я серия про java)
(2-я серия про с#)
Входные данные: Python-разработчик не может просто вскипятить воду. Нужно создать модель Tea и миграцию.
Django ORM: всё должно быть объектами:
Tea.objects.filter(is_hot=True) (но почему-то возвращает None)
Sugar(optional=True) (но всегда NULL в проде)
HotWater() выполняется за O(n^3) (потому что "потом оптимизируем")
Middleware: прежде чем выдать чай:
- проверить @login_required (гости чай не получают)
- добавить @cache_control (чтобы чай не остывал)
- запустить @transaction.atomic (иначе сахар может исчезнуть)
Error Handling: если чайник сломался:
вернуть 500 Internal Server Error
или TemplateDoesNotExist (шаблон чашки потерялся)
или ImproperlyConfigured (настройки чайника кривые)
Внешний сервис: особенности:
requests.get(timeout=1) (но ждём 30 секунд)
3 попытки (хотя вода уже закончилась после первой)
ConnectionError (соседи отключили API)
Выходной результат: чай с багами:
TypeError: NoneType is not drinkable
MigrationError: Сахара нет в базе
CircularImportError: чай пытается импортировать сам себя
Из рабочих чатов:
"Почему чай холодный? 🤮 Потому что забыли @async_to_sync"
"Почему в чашке MemoryError? 💩 Слишком много locals()"
"Кто-то сделал tea.save() но забыл commit=True 🤡"
"Чайник упал с SIGTERM (системный администратор экономил электричество) ☠️"
Не забываем про
venv/bin/activate_teapot
./manage.py brew_tea --force
requirements.txt с зависимостями (teapot==2.7.0, django-sugar-plugin)
(1-я серия про java)
(2-я серия про с#)
😁43👍14✍5🐳3❤2
Отчёт за неделю.
Был сильно занят, помогал пацанам в очередном веб3-стартапе.
В основном выходилось выступать в роли психотерапевта, только вместо пациентов разработчики, которые непрерывно кричат 'Кто это написал?!' и физически тыкают пальцем в монитор (что я вообще всю жизнь категорически запрещаю).
Пытался объяснить что "быстро выкатить важнейшие фичи" и "сделать на совесть" -- это совсем не синонимы, особенно когда техдолг уже выше крыши (а крыша — это вчерашний дедлайн ). Когда ребята на митингах буквально каждый день ругаются, куда делся тот самый очень важный таск, который "вот только что был в бэклоге", а теперь его нет ни в джире, ни в головах команды, и нигде вообще в этом мире...
Основной паблик:
По моей статистике сотен курсантов, даже про такую базу, как PMBoK или SMBoK, или сертификация ISO (я уж молчу про CMM), не наберётся даже 1%, который в теме хотя бы немного...
Для донов-начинающих + по саморазвитию:
-- Рассматриваем очередную стратегию управления временем, которая помогает повысить продуктивность с помощью ...
Для донов-неначинающих:
-- Продолжение трека "Элитный программист":
25. Как стать цифровым минималистом .
Если вы сможете несколько дней не открывать ленту сообщений, и это даётся вам относительно легко, то тогда следует постепенно приступать к тонкой настройке своей ленты, внося коррективы в ваше поведение, которые и позволят манипулировать алгоритмами.
Для того, чтобы снова не скатиться к компульсивному использованию социальных сетей, необходимо выработать две привычки. Все действия, о которых мы говорили ранее (за исключением тех, которые касались изменения настроек приложений), направлены на выработку этих двух привычек ...
-- Продолжаю выкладывать для всех донов материалы СильныхИдей -- доступны моим курсантам, но тут расширенные версии, дополненные множеством примеров.
30. Liskov Substitution Principle
Принцип подстановки Лисков -- это, по сути, контравариантность: позволяется использовать более универсальный тип, чем заданный исходно.
Этот принцип широко распространён в ФП: мы создаём функцию с генериками (полиморфными типами), чтобы гарантировать, что входные данные одного типа могут быть заменены на данные другого типа без каких-либо изменений в существующем коде. Функция с аргументами общего типа должна обеспечить корректную работу реализации независимо от конкретных типов передаваемых аргументов.
Напомню, что первые две дюжины материалов СильныхИдей пока ещё доступны на бусти и пока по очень дружелюбным ценам:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
-- Копирую первый курс трека "Как понять в программировании всё" на внешнюю платформу, 42% => 75% сделал, и потом будет доступен всем желающим НЕначинающим, кто хочет потом попасть в мою Школу.
❤️❤️❤️
Был сильно занят, помогал пацанам в очередном веб3-стартапе.
В основном выходилось выступать в роли психотерапевта, только вместо пациентов разработчики, которые непрерывно кричат 'Кто это написал?!' и физически тыкают пальцем в монитор (что я вообще всю жизнь категорически запрещаю).
Пытался объяснить что "быстро выкатить важнейшие фичи" и "сделать на совесть" -- это совсем не синонимы, особенно когда техдолг уже выше крыши (
Основной паблик:
По моей статистике сотен курсантов, даже про такую базу, как PMBoK или SMBoK, или сертификация ISO (я уж молчу про CMM), не наберётся даже 1%, который в теме хотя бы немного...
Для донов-начинающих + по саморазвитию:
-- Рассматриваем очередную стратегию управления временем, которая помогает повысить продуктивность с помощью ...
Для донов-неначинающих:
-- Продолжение трека "Элитный программист":
25. Как стать цифровым минималистом .
Если вы сможете несколько дней не открывать ленту сообщений, и это даётся вам относительно легко, то тогда следует постепенно приступать к тонкой настройке своей ленты, внося коррективы в ваше поведение, которые и позволят манипулировать алгоритмами.
Для того, чтобы снова не скатиться к компульсивному использованию социальных сетей, необходимо выработать две привычки. Все действия, о которых мы говорили ранее (за исключением тех, которые касались изменения настроек приложений), направлены на выработку этих двух привычек ...
-- Продолжаю выкладывать для всех донов материалы СильныхИдей -- доступны моим курсантам, но тут расширенные версии, дополненные множеством примеров.
30. Liskov Substitution Principle
Принцип подстановки Лисков -- это, по сути, контравариантность: позволяется использовать более универсальный тип, чем заданный исходно.
Этот принцип широко распространён в ФП: мы создаём функцию с генериками (полиморфными типами), чтобы гарантировать, что входные данные одного типа могут быть заменены на данные другого типа без каких-либо изменений в существующем коде. Функция с аргументами общего типа должна обеспечить корректную работу реализации независимо от конкретных типов передаваемых аргументов.
Напомню, что первые две дюжины материалов СильныхИдей пока ещё доступны на бусти и пока по очень дружелюбным ценам:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small
-- Копирую первый курс трека "Как понять в программировании всё" на внешнюю платформу, 42% => 75% сделал, и потом будет доступен всем желающим НЕначинающим, кто хочет потом попасть в мою Школу.
❤️❤️❤️
1❤37✍14👍14
Любимая Российская Федерация -- лучшая в мире страна для создания своего микро/мини айти-бизнеса (и все остальные страны ей завидуют:).
Главное -- ориентироваться на массовые продукты для рублёвой аудитории и/или менторинг (про 2b забудьте вообще, и с меня пример не берите). В России есть отличные готовые платформы для лёгкого и простого создания онлайн-курсов с приёмом денег и выводом на карточку, платные блоги на Бусти, ВК и Дзене с автоматической оплатой и ежедневным выводом, донатные сервисы с приёмом как рублей так и валюты, этого более чем достаточно. Самозанятым зарегистрироваться 15 минут.
Не моё:
"6 продаж по 15к = 90 тысяч за неделю на новом курсе по нейросетям
В планах ещё 7, шобы было 200 тысяч рублей
Курс не мой, а участницы раскачки (групповое обучение)
Участница хотела делать чек 5 тыщ, на что я сказал, что за эти деньги сейчас нихера не купишь и то как она вкладывается стоит минимум 15к. Хотя по-моему мнению можно и за 30 продавать, но пока рановато, будет саботировать.
Прописали тариф и о боже… стали покупать за новый чек.
Но самое главное это можно повторить 12 раз за год и заработать минимум 2,5 млн рублей. Это если в трафик вкладывать по 10к всего. А если по 50к, то можно и 5 млн сделать."
В данном случае пацанки делают конечно курсы про нейросетки не для программистов, а для всех. Чтобы не скатываться в инфоцыганство, просто не добавляйте в подобные курсы "как на этом заработать". Просто покажите, чему именно полезному и перспективному люди научатся и какую реальную пользу смогут извлечь для своей работы и жизни.
При этом даже не смотрите темки про автоворонки продаж, маркетинг, сарафанное радио и прочую ересь: пока не будете зарабатывать миллион рублей в месяц, вкладывайтесь исключительно в прямую рекламу своих сервисов и услуг.
Главное -- ориентироваться на массовые продукты для рублёвой аудитории и/или менторинг (про 2b забудьте вообще, и с меня пример не берите). В России есть отличные готовые платформы для лёгкого и простого создания онлайн-курсов с приёмом денег и выводом на карточку, платные блоги на Бусти, ВК и Дзене с автоматической оплатой и ежедневным выводом, донатные сервисы с приёмом как рублей так и валюты, этого более чем достаточно. Самозанятым зарегистрироваться 15 минут.
Не моё:
"6 продаж по 15к = 90 тысяч за неделю на новом курсе по нейросетям
В планах ещё 7, шобы было 200 тысяч рублей
Курс не мой, а участницы раскачки (групповое обучение)
Участница хотела делать чек 5 тыщ, на что я сказал, что за эти деньги сейчас нихера не купишь и то как она вкладывается стоит минимум 15к. Хотя по-моему мнению можно и за 30 продавать, но пока рановато, будет саботировать.
Прописали тариф и о боже… стали покупать за новый чек.
Но самое главное это можно повторить 12 раз за год и заработать минимум 2,5 млн рублей. Это если в трафик вкладывать по 10к всего. А если по 50к, то можно и 5 млн сделать."
В данном случае пацанки делают конечно курсы про нейросетки не для программистов, а для всех. Чтобы не скатываться в инфоцыганство, просто не добавляйте в подобные курсы "как на этом заработать". Просто покажите, чему именно полезному и перспективному люди научатся и какую реальную пользу смогут извлечь для своей работы и жизни.
При этом даже не смотрите темки про автоворонки продаж, маркетинг, сарафанное радио и прочую ересь: пока не будете зарабатывать миллион рублей в месяц, вкладывайтесь исключительно в прямую рекламу своих сервисов и услуг.
2❤43🤔19✍9😁5💯3
Как OCaml-разработчик заваривает чай.
Входные данные: OCaml-разработчик не может просто заварить чай. Нужно:
- Доказать, что чай существует (
- Проверить exhaustiveness pattern matching'а
- Убедиться, что чай иммутабельный
Functor Brewery: всё должно быть модулями:
- Сахар опционален (
Monadic Layers: прежде чем выдать чай:
- Обернуть в
- Сделать
- Запустить
Exception Handler: если что-то пошло не так:
-
-
- Или просто вернём
Внешние эффекты: IO это боль:
Выходной результат: чистая функция вернула:
Или вдруг
Из рабочих чатов:
"Почему чай холодный? 🤮 Потому что забыли
"Почему в чашке
"Кто-то использовал
"Рекурсивное заваривание:
Тимлид набрасывает на вечер пятницы, AFAIK:
- Блок с
- GADT-версию (
- Сигнатуру
Особые случаи:
(1-я серия про java)
(2-я серия про с#)
(3-я серия про django)
Входные данные: OCaml-разработчик не может просто заварить чай. Нужно:
- Доказать, что чай существует (
Tea.t)- Проверить exhaustiveness pattern matching'а
- Убедиться, что чай иммутабельный
Functor Brewery: всё должно быть модулями:
module type TEA = sig
type t
val brew : int -> t option
end
module Make (S : SUGAR) : TEA
- 'a tea — полиморфный тип (но в runtime всё равно int)- Сахар опционален (
option), потому что "сахар — это зло"Monadic Layers: прежде чем выдать чай:
- Обернуть в
option (вдруг чайник пустой)- Сделать
bind (потому что монады — наше всё)- Запустить
map (преобразовать bitter в drinkable)Exception Handler: если что-то пошло не так:
-
Match_failure (не учли случай холодной воды)-
Stack_overflow (рекурсивное кипячение)- Или просто вернём
None (и сделаем вид, что так и задумано)Внешние эффекты: IO это боль:
Sys.command "boil_water" (но нужны права sudo)Unix.sleep 3600 (потому что тип int, а не float)Thread.yield() (пока ждём, можно почитать про алгебраические эффекты)Выходной результат: чистая функция вернула:
Some tea (но забыли, что это unit -> tea option)None (потому что "ленивые вычисления")Или вдруг
tea lazy_t (чай обещан, но не заварен)Из рабочих чатов:
"Почему чай холодный? 🤮 Потому что забыли
Lazy.force""Почему в чашке
TypeError? 💩 Sugar.t не совместим с Tea.t""Кто-то использовал
Obj.magic — теперь чай превратился в кофе 🤡""Рекурсивное заваривание:
let rec tea = brew tea in tea 🥶"Тимлид набрасывает на вечер пятницы, AFAIK:
- Блок с
ppx расширениями ([@@deriving brew])- GADT-версию (
type _ tea = Black : string tea | Green : int tea)- Сигнатуру
ASYNC_TEA с Lwt.tОсобые случаи:
let drink = function
| Hot -> "Чай готов!"
| Cold -> failwith "Недопустимое состояние"
(* | _ -> ... *) (* warning: неохватывающий паттерн *)
(1-я серия про java)
(2-я серия про с#)
(3-я серия про django)
✍27😁21👍6❤5🐳2