software design -- это искусство принятия правильных решений.
Но ещё больше это искусство не принимать неправильные решения.
Это понимание того, как проектировать систему так, чтобы сделанный выбор можно было безболезненно отменить.
И знать, когда и как вы должны сделать всё правильно с самого начала.
Но ещё больше это искусство не принимать неправильные решения.
Это понимание того, как проектировать систему так, чтобы сделанный выбор можно было безболезненно отменить.
И знать, когда и как вы должны сделать всё правильно с самого начала.
125👍65🏆6🔥1🫡1
Классная опенсорсная штука: ChartDB. Выбираете марку своей СУБД (только нужны последние версии конечно), вам выдаётся SQL скрипт, который ломает всю вашу базу формирует json со структурой вашей базы; вставляете этот json в ChartDB и за 10 секунд получаете красивую диаграмму, которую можно вдобавок вручную править в редакторе.
(можно и локально на работе задеплоить и получить премию:)
(можно и локально на работе задеплоить и получить премию:)
1👍56🔥19⚡4✍1
А разве этот пост у меня не на русском написан? 😎 ну воля ваша, как монополиста. Конечно, я понимаю эти придирки, но принципиально не буду ничего править, потому что мне совершенно пофиг; моя позиция однозначна: я прав, а вк нет 🤘
Пусть получится lose-lose. Не увидят больше 90% подписчиков мои посты.
Готовлю продолжение, скоро будет:
...В событийной архитектуре порядок событий имеет критическое значение, прежде всего в тех случаях, когда действия могут быть взаимоисключающими или зависимыми друг от друга.
Мы можем легко и просто реализовать поддержку последовательных цепочек событий, рассматривая например категорию событий (события как морфизмы, которые трансформируют состояние системы), и эндофункторы (функции, которые принимают состояние системы и возвращают новое состояние). Таким образом, цепочка взаимосвязанных событий может быть представлена как последовательное применение/композиция функций. Например, мы можем всю логику CRUD реализовать в контексте монады Maybe.
Но что с ассоциативностью? Да, мы теперь можем организовать свой код на монадах так, что порядок применения операций в нём будет предсказуем и инвариантен к способу комбинирования (функции будут работать правильно даже при изменении порядка комбинирования). И вроде бы очевидно, что вроде как "моноидальные" патчи в распределённой системе по всему CRUD ну никак не ассоциативны.
И вот что с этим делать...
P.S. В принципе, охват вк на 13 тыс. такой микроскопичный, что практически сравнялся с охватом тг на одну тыщу папищеков ) Поэтому, возможно, буду больше писать не в вк, а в тележку.
Пусть получится lose-lose. Не увидят больше 90% подписчиков мои посты.
Готовлю продолжение, скоро будет:
...В событийной архитектуре порядок событий имеет критическое значение, прежде всего в тех случаях, когда действия могут быть взаимоисключающими или зависимыми друг от друга.
Мы можем легко и просто реализовать поддержку последовательных цепочек событий, рассматривая например категорию событий (события как морфизмы, которые трансформируют состояние системы), и эндофункторы (функции, которые принимают состояние системы и возвращают новое состояние). Таким образом, цепочка взаимосвязанных событий может быть представлена как последовательное применение/композиция функций. Например, мы можем всю логику CRUD реализовать в контексте монады Maybe.
Но что с ассоциативностью? Да, мы теперь можем организовать свой код на монадах так, что порядок применения операций в нём будет предсказуем и инвариантен к способу комбинирования (функции будут работать правильно даже при изменении порядка комбинирования). И вроде бы очевидно, что вроде как "моноидальные" патчи в распределённой системе по всему CRUD ну никак не ассоциативны.
И вот что с этим делать...
P.S. В принципе, охват вк на 13 тыс. такой микроскопичный, что практически сравнялся с охватом тг на одну тыщу папищеков ) Поэтому, возможно, буду больше писать не в вк, а в тележку.
❤52👍33🔥10😁7🤯3
Как издеваться над программистами, делая code review? Набор анти-паттернов.
Особенно хорошо заходит в пятницу к концу рабочего дня.
"...Когда рецензент кода переходит на тёмную сторону, у него появляется огромный выбор способов помешать или отсрочить улучшения кода, досадить авторам исправлений или полностью обескуражить их, и т.д.
Если вы только недавно обратились к тёмной стороне, то, возможно, ещё не знаете всех возможностях. Итак, вот список антипаттернов для проверки кода -- для тех, кто работает на тёмной стороне, и у кого заканчиваются идеи.
Например:
"...При первом ревью кода вносите небольшие и простые изменения, но побольше: названия переменных немного непонятны, в комментариях есть опечатки и т.п.
Подождите, пока разработчик исправит это, а затем сообщите, что в риквесте есть гораздо более фундаментальная проблема, которая требует полного переписывания этой части кода (что означает также отказ от многих мелких исправлений, которые вы уже заставили разработчика сделать).
Ничто так не говорит о том, что "ваш труд никому не нужен, а ваше время не ценится", как то, что заставляет кого-то выполнять много работы, а затем заставляет его её выбросить. Этого может быть достаточно, чтобы разработчик сдался.
Особенно хорошо заходит в пятницу к концу рабочего дня.
"...Когда рецензент кода переходит на тёмную сторону, у него появляется огромный выбор способов помешать или отсрочить улучшения кода, досадить авторам исправлений или полностью обескуражить их, и т.д.
Если вы только недавно обратились к тёмной стороне, то, возможно, ещё не знаете всех возможностях. Итак, вот список антипаттернов для проверки кода -- для тех, кто работает на тёмной стороне, и у кого заканчиваются идеи.
Например:
"...При первом ревью кода вносите небольшие и простые изменения, но побольше: названия переменных немного непонятны, в комментариях есть опечатки и т.п.
Подождите, пока разработчик исправит это, а затем сообщите, что в риквесте есть гораздо более фундаментальная проблема, которая требует полного переписывания этой части кода (что означает также отказ от многих мелких исправлений, которые вы уже заставили разработчика сделать).
Ничто так не говорит о том, что "ваш труд никому не нужен, а ваше время не ценится", как то, что заставляет кого-то выполнять много работы, а затем заставляет его её выбросить. Этого может быть достаточно, чтобы разработчик сдался.
1✍40👍15🤓7🤯6⚡3
В контексте мифического задержания Дурова пошла очередная волна разговоров про "свой мессенджер" (за очередной миллиард рублей из кармана налогоплательщиков). Чтобы в нём зарегистрироваться, потребуется личная явка в МФЦ и нотариально заверенное фото с паспортом и военным билетом. Он будет настолько безопасный, что даже сами создатели не смогут в него войти.
А под капотом у него будет (только это военная тайна) что-то из этого:
-- Rocket.Chat : куча фич: чаты, каналы, видео-/аудио-звонки, множество интеграций... заодно Meteor 3.0 полезно поизучать
-- Mattermost : микросервисный аналог слака
-- Matrix -- децентрализация, федеративные чаты и каналы (неплохой выбор, потому что пользователям можно будет рассказывать сказки про его безопасность, конфиденциальность супер-защищённость за счёт end2end шифрования)
-- Zulip -- интересная фишка, внутри чата можно выделять разные тематические потоки.
и т.п.
Только в их доморощенной версии вы будете неделями смотреть на колёсико "Ожидание одобрения сообщения": каждое "привет" надо будет согласовывать с тремя начальниками и пятью департаментами.
=
Первое правило конспирологии: "Что бы ни случилось, это то, что они задумали с самого начала".
Во-первых, арест Дурова -- вполне может быть операция прикрытия, когда он на самом деле решил перейти на недружественную сторону.
Во-вторых, вы видели хотя бы одно неофициальное фото/видео, как Дуров в аэропорту ходил, как его арестовывали, из зала суда и т.п.?
Всё что нам показали, напоминает недавний фантастический фильм "Атлас" с Дженнифер Лопес. Она весь фильм сидит в каком-то жестяном корыте с рычажками, где её периодически трясёт, а она корчит страдальческие рожи. А всё действо полностью компьютерно сгенерено.
Думайте 😎
А под капотом у него будет (только это военная тайна) что-то из этого:
-- Rocket.Chat : куча фич: чаты, каналы, видео-/аудио-звонки, множество интеграций... заодно Meteor 3.0 полезно поизучать
-- Mattermost : микросервисный аналог слака
-- Matrix -- децентрализация, федеративные чаты и каналы (неплохой выбор, потому что пользователям можно будет рассказывать сказки про его безопасность, конфиденциальность супер-защищённость за счёт end2end шифрования)
-- Zulip -- интересная фишка, внутри чата можно выделять разные тематические потоки.
и т.п.
Только в их доморощенной версии вы будете неделями смотреть на колёсико "Ожидание одобрения сообщения": каждое "привет" надо будет согласовывать с тремя начальниками и пятью департаментами.
=
Первое правило конспирологии: "Что бы ни случилось, это то, что они задумали с самого начала".
Во-первых, арест Дурова -- вполне может быть операция прикрытия, когда он на самом деле решил перейти на недружественную сторону.
Во-вторых, вы видели хотя бы одно неофициальное фото/видео, как Дуров в аэропорту ходил, как его арестовывали, из зала суда и т.п.?
Всё что нам показали, напоминает недавний фантастический фильм "Атлас" с Дженнифер Лопес. Она весь фильм сидит в каком-то жестяном корыте с рычажками, где её периодически трясёт, а она корчит страдальческие рожи. А всё действо полностью компьютерно сгенерено.
Думайте 😎
1🤔56👍14😁7🫡3🤯2
С каждым днём в Сети появляется всё больше контента, сгенерированного AI, и одна из сопутствующих бед в том, что поисковики всё чаще по запросам текста, рисунков, фото (а скоро и видео) выдают искусственные результаты. Например, "похожие" на оригинал фото -- только вылизанные и облагороженные, словно после фотошопа (и постепенно они уходят всё дальше и дальше от оригинала), или цитаты великих, "похожие" на реальные. Кстати, уже для немалого числа известных личностей, и ныне прекрасно здравствующих, по запросам по ним начинают выдаваться "их слова", сгенерённые нейронкой :)
Фанатичные Свидетели AGI-евы, мега-секта которых располагается в Кремниевой Долине, делают сегодня невиданные ранее в мировой истории инвестиции, чтобы ускорить замену реального на фиктивное. В таких условиях ситуация очень скоро может зайти в тупик -- почти наверняка в течение следующих 12 месяцев.
Фанатичные Свидетели AGI-евы, мега-секта которых располагается в Кремниевой Долине, делают сегодня невиданные ранее в мировой истории инвестиции, чтобы ускорить замену реального на фиктивное. В таких условиях ситуация очень скоро может зайти в тупик -- почти наверняка в течение следующих 12 месяцев.
5🤔57👍8🫡4💯3⚡1
С 3-го (ретроградный Меркурий всё "Я календарь переверну...") или 4-го сентября (Марс в Раке:) начинаю выкладывать для донов в этой группе новый уникальный контент: около 100 материалов СильныхИдей (сейчас они доступны только моим курсантам), причём расширенные и дополненные множеством примеров (Java).
Уровень? полезно будет всем, от крепкого джуна до сеньора, особенно тем, кто в университетах не обучался.
Материалы будут выходить минимум 1 раз в неделю, но когда выложу 5-й материал, самый старый удалю, и т.д. То есть всегда будет не более 4-х материалов (чтобы не получалось так, что через полгода стал доном разик, всё выкачал, и слился).
И с того же дня стоимость подписки для новых донов вырастет.
Первые материалы будут такие:
1. Три уровня рассуждений о программной системе.
Вы когда-нибудь задумывались о том, что значит "программа работает неправильно", "программа ошибочна"? Что-то вроде "ну, это когда она вылетает с ошибкой... но если она вроде работает, а может сломаться гипотетически, при определённых условиях... кхм, подождите...".
...Программа ошибочна, если причина, по которой она должна быть правильной, ошибочна.
...Мы перешли от ясного и простого определения проблемы к тому, что выглядит какой-то логической головоломкой, парадоксом или софизмом, и что вообще невозможно использовать :) На самом деле, это определение довольно строгое, и мы разберёмся с ним, освоив несколько понятий из области формальной верификации кода...
2. Три уровня рассуждений о программной системе-2
Вы завершили стадию предварительного планирования, и включились в циклы коротких итераций, как рекомендует agile. У вас есть доска с множеством листков-задачек, пользовательских требований, которые вам просто надо реализовать. И во всей этой гибкой движухе всё более соблазнительно отказаться от ведения отдельного документа по проектированию — в пользу того, чтобы просто начать фигачить модный самодокументирующийся код.
И это ваша роковая ошибка.
Мы рассуждаем о поведении программы на трёх уровнях...
3. Три уровня рассуждений о программной системе-3
Впечатление, что программирование с каждым днём всё больше превращается в запоминание кусков кода со stackoverflow и стандартных функций (а сегодня добавилась ещё и генерация кода LLM-ками) и последующее их комбинирование в надежде "угадать" правильное решение. Сторонники запоминания длиннющих перечней шаблонов проектирования и методов рефакторинга при этом даже не понимают разницу между метриками method-method coupling, method parameter coupling и method invocation coupling, с которых начинается запутывание и рост сложности в любом проекте.
Забудьте об этой тотально ложной парадигме, которую вам навязывает мэйнстрим. Изучая фигню, вы и специалистом станете по фигне, и работу будете искать соответствующую. Пока ещё можно много выиграть, просто изучив общие принципы computer science...
=
Там же продолжу и трек "Элитный Программист" (первая дюжина материалов выложена). Про что он?
...Программирование уже давно не считается профессией для фриков, ботаников и социофобов. Работа программистом стала очень престижной — в частности, потому, что за неё очень хорошо платят. Многие ребята буквально мечтают войти в ИТ и сделать там успешную карьеру. Однако большая засада в том, многие из этих многих, кто пытается это сделать, очень быстро упираются в потолок своей карьеры. Многие даже с трудом находят первую работу.
Если вы один из таких, и чувствуете, что застряли в своей ИТ-карьере, упёршись лбом в стеклянно-бетонный потолок, то самое первое, дорогие, что вам важно понять: это не ваша вина! Против вас ведётся тщательно продуманная и очень хорошо организованная война.
Самая главная причина, по которой люди застревают в своей карьере в сфере ИТ, заключается в том, что такая работа и такая карьера требуют очень хорошей способности концентрироваться. Но в наши дни вокруг вас так много отвлекающих факторов, что порой сосредоточиться очень трудно. И все это скорее специально, чем случайно.
Уровень? полезно будет всем, от крепкого джуна до сеньора, особенно тем, кто в университетах не обучался.
Материалы будут выходить минимум 1 раз в неделю, но когда выложу 5-й материал, самый старый удалю, и т.д. То есть всегда будет не более 4-х материалов (чтобы не получалось так, что через полгода стал доном разик, всё выкачал, и слился).
И с того же дня стоимость подписки для новых донов вырастет.
Первые материалы будут такие:
1. Три уровня рассуждений о программной системе.
Вы когда-нибудь задумывались о том, что значит "программа работает неправильно", "программа ошибочна"? Что-то вроде "ну, это когда она вылетает с ошибкой... но если она вроде работает, а может сломаться гипотетически, при определённых условиях... кхм, подождите...".
...Программа ошибочна, если причина, по которой она должна быть правильной, ошибочна.
...Мы перешли от ясного и простого определения проблемы к тому, что выглядит какой-то логической головоломкой, парадоксом или софизмом, и что вообще невозможно использовать :) На самом деле, это определение довольно строгое, и мы разберёмся с ним, освоив несколько понятий из области формальной верификации кода...
2. Три уровня рассуждений о программной системе-2
Вы завершили стадию предварительного планирования, и включились в циклы коротких итераций, как рекомендует agile. У вас есть доска с множеством листков-задачек, пользовательских требований, которые вам просто надо реализовать. И во всей этой гибкой движухе всё более соблазнительно отказаться от ведения отдельного документа по проектированию — в пользу того, чтобы просто начать фигачить модный самодокументирующийся код.
И это ваша роковая ошибка.
Мы рассуждаем о поведении программы на трёх уровнях...
3. Три уровня рассуждений о программной системе-3
Впечатление, что программирование с каждым днём всё больше превращается в запоминание кусков кода со stackoverflow и стандартных функций (а сегодня добавилась ещё и генерация кода LLM-ками) и последующее их комбинирование в надежде "угадать" правильное решение. Сторонники запоминания длиннющих перечней шаблонов проектирования и методов рефакторинга при этом даже не понимают разницу между метриками method-method coupling, method parameter coupling и method invocation coupling, с которых начинается запутывание и рост сложности в любом проекте.
Забудьте об этой тотально ложной парадигме, которую вам навязывает мэйнстрим. Изучая фигню, вы и специалистом станете по фигне, и работу будете искать соответствующую. Пока ещё можно много выиграть, просто изучив общие принципы computer science...
=
Там же продолжу и трек "Элитный Программист" (первая дюжина материалов выложена). Про что он?
...Программирование уже давно не считается профессией для фриков, ботаников и социофобов. Работа программистом стала очень престижной — в частности, потому, что за неё очень хорошо платят. Многие ребята буквально мечтают войти в ИТ и сделать там успешную карьеру. Однако большая засада в том, многие из этих многих, кто пытается это сделать, очень быстро упираются в потолок своей карьеры. Многие даже с трудом находят первую работу.
Если вы один из таких, и чувствуете, что застряли в своей ИТ-карьере, упёршись лбом в стеклянно-бетонный потолок, то самое первое, дорогие, что вам важно понять: это не ваша вина! Против вас ведётся тщательно продуманная и очень хорошо организованная война.
Самая главная причина, по которой люди застревают в своей карьере в сфере ИТ, заключается в том, что такая работа и такая карьера требуют очень хорошей способности концентрироваться. Но в наши дни вокруг вас так много отвлекающих факторов, что порой сосредоточиться очень трудно. И все это скорее специально, чем случайно.
6👍54❤10✍7😎1
...Существует множество компаний, которые хотят отнять у вас буквально всё ваше внимание. Ваше внимание конвертируется в их прибыль. На эту борьбу работают многие тысячи профессиональных психологов и специалистов по Бигдате и AI. А так как вы противостоите этой профессиональной армии фактически в одиночку, и при этом вы самый обычный гражданский человек, совершенно не обученный военным действиям за своё внимание и свой здоровый ум, то вы обречены проиграть.
Ваше внимание — это очень ограниченный ресурс ума, и вы постоянно проигрываете в битве за него; в результате у вас остаётся мало ресурсов, чтобы сосредоточиться на продуктивной работе. Именно поэтому многие ИТ-специалисты упираются в потолок своей карьеры, дальше которого они не могут продвинуться. Проблема не в том, что им не хватает соображалки, нет: в 90% случаев им не хватает умения длительное время сосредотачиваться на одном главном, и не тратить при этом энергию ума на постоянные отвлечения.
У меня для вас однако хорошая новость: вы можете выиграть эту войну, хотя это и будет нелегко. Но вы сможете победить все отвлекающие факторы и стать чётким, собранным, дисциплинированным и продуктивным разработчиком, которого все жаждут взять на работу. Этому и посвящён трек "Элитный программист", который научит вас, как это сделать.
=
Краткое описание всех материалов СИ, ЭП и курса карьеры (для курсантов) выкладываю тут.
Ваше внимание — это очень ограниченный ресурс ума, и вы постоянно проигрываете в битве за него; в результате у вас остаётся мало ресурсов, чтобы сосредоточиться на продуктивной работе. Именно поэтому многие ИТ-специалисты упираются в потолок своей карьеры, дальше которого они не могут продвинуться. Проблема не в том, что им не хватает соображалки, нет: в 90% случаев им не хватает умения длительное время сосредотачиваться на одном главном, и не тратить при этом энергию ума на постоянные отвлечения.
У меня для вас однако хорошая новость: вы можете выиграть эту войну, хотя это и будет нелегко. Но вы сможете победить все отвлекающие факторы и стать чётким, собранным, дисциплинированным и продуктивным разработчиком, которого все жаждут взять на работу. Этому и посвящён трек "Элитный программист", который научит вас, как это сделать.
=
Краткое описание всех материалов СИ, ЭП и курса карьеры (для курсантов) выкладываю тут.
7❤45👍14⚡7✍1🔥1
Культура ФП на самом деле очень прагматична: сначала вы определяете типы и пишите функции, и только потом формируете более сложные абстракции. На определённом уровне вы просто садитесь за IDE vim и начинаете сразу фигачить достаточно качественный код (потому что, в частности, хорошая система типов сразу сильно ограничивает в написании фигни).
Если же вы используете ООП, то вам сперва придётся достаточно чётко продумывать объектные абстракции и схемы их взаимодействия (что весьма сложно; например, с помощью АТД; у меня отдельный трек ООАП этому посвящён), и только потом писать логику методов.
Вчера я говорил, что "...всё более соблазнительно отказаться от ведения отдельного документа по проектированию — в пользу того, чтобы просто начать фигачить модный самодокументирующийся код. И это ваша роковая ошибка...", но это относится к мэйнстриму конечно. Сегодня тотально учат "ООП" с самого начала, просто как "удобный" скилл кодирования. Правильно же начинать учить ООП с концепции обмена сообщениями (каким ООП и был в оригинале у Алана Кэя), немного затронуть сигма-исчисление (формальная модель ООП Луки Карделли), потом плавно переходить к модели акторов. А в идеале, лучше вообще начинать с разбора вычислительных моделей (декларативная, императивная, объектная...).
Если же вы используете ООП, то вам сперва придётся достаточно чётко продумывать объектные абстракции и схемы их взаимодействия (что весьма сложно; например, с помощью АТД; у меня отдельный трек ООАП этому посвящён), и только потом писать логику методов.
Вчера я говорил, что "...всё более соблазнительно отказаться от ведения отдельного документа по проектированию — в пользу того, чтобы просто начать фигачить модный самодокументирующийся код. И это ваша роковая ошибка...", но это относится к мэйнстриму конечно. Сегодня тотально учат "ООП" с самого начала, просто как "удобный" скилл кодирования. Правильно же начинать учить ООП с концепции обмена сообщениями (каким ООП и был в оригинале у Алана Кэя), немного затронуть сигма-исчисление (формальная модель ООП Луки Карделли), потом плавно переходить к модели акторов. А в идеале, лучше вообще начинать с разбора вычислительных моделей (декларативная, императивная, объектная...).
2🤔37👍33❤8⚡6🫡2
Ёлки-палки, плохи наши дела ))
LLMs can function not only as databases, but also as dynamic, end-user programmable neural computers.
LLMs cannot reason. Many are working on fixing this. For example, below is a proposal to add logic programming (Prolog) by teaching an LLM to translate natural language queries into Prolog statements, which are then answered by a Prolog processor...
... the integration of Prolog enables LLMs to achieve high performance on the NLR dataset, which even the most advanced language models (including GPT4) fail to solve using text only.
Автор тот самый Эрик Мейер ("Why the fuck do we let people that have no computer science backgrounds write code? Unacceptable!").
LLMs can function not only as databases, but also as dynamic, end-user programmable neural computers.
LLMs cannot reason. Many are working on fixing this. For example, below is a proposal to add logic programming (Prolog) by teaching an LLM to translate natural language queries into Prolog statements, which are then answered by a Prolog processor...
... the integration of Prolog enables LLMs to achieve high performance on the NLR dataset, which even the most advanced language models (including GPT4) fail to solve using text only.
Автор тот самый Эрик Мейер ("Why the fuck do we let people that have no computer science backgrounds write code? Unacceptable!").
❤38🤔26👍7🫡4
Думаю, как сделать Школу максимально элитарной: буду объяснять темы так, будто твой дедушка лауреат премии Тьюринга, и ты просто обязан понимать всё с полуслова
примерно как бренд Birkin (люксовые сумки). Бренд позиционирует себя настолько крутым, что потенциальным клиентам нужно сперва долго обхаживать продавца сумок, делать ему подарки, и в целом для начала купить товаров как минимум на 10,000 евро.
У меня первым шагом к подобной илитарности будет полный запрет таких слов, как SOLID, DRY, CRUD, MVC, Clean и DDD.
примерно как бренд Birkin (люксовые сумки). Бренд позиционирует себя настолько крутым, что потенциальным клиентам нужно сперва долго обхаживать продавца сумок, делать ему подарки, и в целом для начала купить товаров как минимум на 10,000 евро.
У меня первым шагом к подобной илитарности будет полный запрет таких слов, как SOLID, DRY, CRUD, MVC, Clean и DDD.
2😎52🤔24👍10🏆7❤4
В ряде ситуаций, когда вы провалили собес, это может быть к лучшему не только в плане опыта. Например, Брайан Эктон не прошёл в 2009-м стандартное техническое собеседование в facebook, и с горя запилил whatsapp. Сперва, кстати, это была просто мобильная программка для показа статусов из списка контактов, и только потом Брайан с Яном Куном решили добавить возможность обмена сообщениями. Потом появились уведомления и смс, появилась годовая подписка за один доллар (причём первый год бесплатно) -- и уже в 2014-м фейсбук купил вотсап за 19 миллиардов долларов.
P.S. На собесах в фейсбук кстати спрашиваются стандартные вещи
("Как я получил оффер от Фейсбука и в итоге к ним не пошёл"),
например: "как изменится твоя модель, если водитель не привязан жёстко к автомобилю (скажем, компания-таксопарк может назначать одному и тому же водителю разные машины в разные дни)? Как будет устроена связь автомобиля с поездкой?"
Товарищи курсанты, это вам ничего с моих проектов не напоминает? :)
P.S. На собесах в фейсбук кстати спрашиваются стандартные вещи
("Как я получил оффер от Фейсбука и в итоге к ним не пошёл"),
например: "как изменится твоя модель, если водитель не привязан жёстко к автомобилю (скажем, компания-таксопарк может назначать одному и тому же водителю разные машины в разные дни)? Как будет устроена связь автомобиля с поездкой?"
Товарищи курсанты, это вам ничего с моих проектов не напоминает? :)
1👍66😁9❤🔥3
Лаборатория Математики и Программирования Сергея Бобровского
В ряде ситуаций, когда вы провалили собес, это может быть к лучшему не только в плане опыта. Например, Брайан Эктон не прошёл в 2009-м стандартное техническое собеседование в facebook, и с горя запилил whatsapp. Сперва, кстати, это была просто мобильная программка…
"Термы -- это деревья, а деревья -- это термы"
-- Банчи (книга "Конечные автоматы, их алгебры и грамматики – к теории формальных выражений")
Компиляторы, автоматы, AST, правила вывода, разбор json, редьюсинг алгебраических выражений, паттерн матчинг и многое многое другое -- это всё про переписывание термов.
На F# пацаны разбирают что-то вроде (^f.(^x.f(^y.xxy))(^x.f(^y.xxy))) легко и просто (редуцируется этот терм к нормальной форме?неа, он рекурсивен; подумайте, почему ), а вот если термов сотня миллионов?? )))
Например, можно запилить hott-плагин для Lean , сэмулировав аксиому унивалентности:
universe u
constant U : Type u
-- простейшая версия эквивалентности типов :)
constant equiv : U → U → Type u
axiom univalence : ∀ (A B : U), equiv A B → A = B
example (A B : U) (e : equiv A B) : A = B := univalence A B e
Или расширить новыми теориями инструменты формальной верификации криптографических протоколов ProVerif или Tamarin (в них тоже активно используются термы и правила их переписывания) ...
=
Однако с лёгкой печалью обнаружил, что vds с озу 200 гиг под подобные задачки стоит дороже, чем дедик, меньше $100/месяц не получается...
(и хорошо масштабируемый русский облачный сервис для Jupyter я тоже не нашёл)
Рабочие станции Dell 7920, HP Z8 G4, Lenovo P920 (потенциально терабайты оперативки) продаются с 16 гб (!) от трёх тысяч долларов (а серваки уже от $5 тыс). Какие-то мутные материнки вроде ASUS ROG Rampage VI Extreme Encore 128гб продаются за 100 долларов, но крайне сомнительно, reconditioned сгорит через неделю.
-- Банчи (книга "Конечные автоматы, их алгебры и грамматики – к теории формальных выражений")
Компиляторы, автоматы, AST, правила вывода, разбор json, редьюсинг алгебраических выражений, паттерн матчинг и многое многое другое -- это всё про переписывание термов.
На F# пацаны разбирают что-то вроде (^f.(^x.f(^y.xxy))(^x.f(^y.xxy))) легко и просто (редуцируется этот терм к нормальной форме?
Например, можно запилить hott-плагин для Lean , сэмулировав аксиому унивалентности:
universe u
constant U : Type u
-- простейшая версия эквивалентности типов :)
constant equiv : U → U → Type u
axiom univalence : ∀ (A B : U), equiv A B → A = B
example (A B : U) (e : equiv A B) : A = B := univalence A B e
Или расширить новыми теориями инструменты формальной верификации криптографических протоколов ProVerif или Tamarin (в них тоже активно используются термы и правила их переписывания) ...
=
Однако с лёгкой печалью обнаружил, что vds с озу 200 гиг под подобные задачки стоит дороже, чем дедик, меньше $100/месяц не получается...
(и хорошо масштабируемый русский облачный сервис для Jupyter я тоже не нашёл)
Рабочие станции Dell 7920, HP Z8 G4, Lenovo P920 (потенциально терабайты оперативки) продаются с 16 гб (!) от трёх тысяч долларов (а серваки уже от $5 тыс). Какие-то мутные материнки вроде ASUS ROG Rampage VI Extreme Encore 128гб продаются за 100 долларов, но крайне сомнительно, reconditioned сгорит через неделю.
1🤯59🔥10👍8🫡4❤2
Вкатываемся в понедельник 💪🏻💪🏻💪🏻
По картинке кстати ничего странного, совершенно типовая ситуация: пацан явно не проходил мой курс по software design, который так и называется: "Незримые механизмы логики". В частности, часть 2 "Как так получается, что вроде бы давно работающий код всё ещё содержит баги?".
По картинке кстати ничего странного, совершенно типовая ситуация: пацан явно не проходил мой курс по software design, который так и называется: "Незримые механизмы логики". В частности, часть 2 "Как так получается, что вроде бы давно работающий код всё ещё содержит баги?".
1⚡38😁19👍7🤔3🫡2
Почему в своё время стали так популярны нетипизированные языки (PHP, Python, ...)? Потому что компьютеры тогда были столь слабы, что если пишешь код на языке со статической типизаций и включённым тайпчекингом, то каждое сохранение файла может длиться десятки секунд. Это дико бесило :)
Поэтому в то время нетипизированные языки и тесты были основным инструментом разработки. Тесты в целом конечно работают медленнее, чем тайпчекинг, но запускаются они считанные разы, а файлы мы сохраняем постоянно.
Сейчас компьютеры шустрые, поэтому проверка статических типов гораздо лучше и надёжнее выполняет свою задачу, чем вы.
С тех пор однако мэйнстрим тянет и тянет в массы "культуру" тестирования, объявляя её обязательной, хотя 90% закодированных вручную тестов в любой современной системе бесполезны (например, потому, что тесты нужны только если они не работают), и вместо них должны (бы) быть статические типы.
В любом случае, каждому разработчику, который хочет стать Программистом с большой буквы, 💯 полезно поиграть в такие высокоинтеллектуальные игры, как система типов в F# (и в F*), мета-программирование на темплейтах плюсов, генерики TypeScript, боль и страдание Rust :) и т.п. Такой этап в карьере стратегически весьма важен.
Поэтому в то время нетипизированные языки и тесты были основным инструментом разработки. Тесты в целом конечно работают медленнее, чем тайпчекинг, но запускаются они считанные разы, а файлы мы сохраняем постоянно.
Сейчас компьютеры шустрые, поэтому проверка статических типов гораздо лучше и надёжнее выполняет свою задачу, чем вы.
С тех пор однако мэйнстрим тянет и тянет в массы "культуру" тестирования, объявляя её обязательной, хотя 90% закодированных вручную тестов в любой современной системе бесполезны (например, потому, что тесты нужны только если они не работают), и вместо них должны (бы) быть статические типы.
В любом случае, каждому разработчику, который хочет стать Программистом с большой буквы, 💯 полезно поиграть в такие высокоинтеллектуальные игры, как система типов в F# (и в F*), мета-программирование на темплейтах плюсов, генерики TypeScript, боль и страдание Rust :) и т.п. Такой этап в карьере стратегически весьма важен.
10👍65❤10🫡10🔥3
"На смену изумлению приходит ужас"
Последние новости от наших курсантов :)
В планах включить настройку по отключению/включению всех шедулеров, поскольку сейчас висит техдолг на их локальную отладку. В данный момент мы руками прописываем в начале выполнения шедулера return, чтобы он не стучался к той базе, к которой локально нет доступа:)
---
1. Мозг - глючное. Если не переносить мышление и особенно проектирование в экзокортекс - всегда просочится подобная "все-фигня" (читаю Левенчука понемногу :)
2. С протекшим в реализацию "не правильным" обобщением бороться можно, и в коде и инфраструктуре, но все как то сплошными костылями. Иногда эти костыли настолько ущербны и к тому же не очень просты (как минимум не дешевы по времени), что проще жить дальше, ибо...
3. Нормально делать и пытаться делать нужно было с самого начала. Тут мы плавно возвращаемся к пункту 1, где на примере опыта никто экзокортекс не использовал.
---
Есть таблица с историей какой-то сущности, например банковская карта, и требуется отобрать счета имевшие определённый статус на конкретную дату. Прямым запросом к этой таблице результат не получить - этот статус относится к второстепенным признакам и фиксируется отдельно, вместе с ещё примерно полусотней признаков. В этой дополнительной таблице тоже так просто не получить результат - там для этих 50..100 признаков всего штук пять колонок - внешний ключ к первой таблице, дата изменения, цифровой код признака который был изменён, значение этого признака (или код значения). В итоге, бизнес требования на языке запросов выглядят наподобие
select ...
from card
join card_adv ca1 on card.id = ca1.id and ca1.field1 = 15 and ca1.field2 = 53
join card_adv ca2 on card.id = ca2.id and ca2.field1 = 48 and ca2.field2 = 19
...
---
По итогу перепроверили айпишники и правда, срок договора выделенных прямых айпи истек, аналитик продлил его и запрос отправился, шаг выполнился, но не следующий...
А все потому что 1с решил поменять жсон ответ с Да на "Да", наша кукухазачеркнуто десериализация по дто полетела на попытки спарсить булеву :)
--
Когда заглядываешь во внутрь тех структур данных которыми активно пользуешься, с них спадает магическая вуаль, и ты поражаешься что не так уж замысловато все устроено.
На смену изумлению приходит ужас, когда смотришь на свой старый код с этими структурами, понимая сколько лишних телодвижений происходит.
Благодаря курсу я немного пролечил свой синдром самозванца.
(Когда-то на собеседовании не смог динамический массив реализовать, теперь гештальт закрыт :)
Последние новости от наших курсантов :)
В планах включить настройку по отключению/включению всех шедулеров, поскольку сейчас висит техдолг на их локальную отладку. В данный момент мы руками прописываем в начале выполнения шедулера return, чтобы он не стучался к той базе, к которой локально нет доступа:)
---
1. Мозг - глючное. Если не переносить мышление и особенно проектирование в экзокортекс - всегда просочится подобная "все-фигня" (читаю Левенчука понемногу :)
2. С протекшим в реализацию "не правильным" обобщением бороться можно, и в коде и инфраструктуре, но все как то сплошными костылями. Иногда эти костыли настолько ущербны и к тому же не очень просты (как минимум не дешевы по времени), что проще жить дальше, ибо...
3. Нормально делать и пытаться делать нужно было с самого начала. Тут мы плавно возвращаемся к пункту 1, где на примере опыта никто экзокортекс не использовал.
---
Есть таблица с историей какой-то сущности, например банковская карта, и требуется отобрать счета имевшие определённый статус на конкретную дату. Прямым запросом к этой таблице результат не получить - этот статус относится к второстепенным признакам и фиксируется отдельно, вместе с ещё примерно полусотней признаков. В этой дополнительной таблице тоже так просто не получить результат - там для этих 50..100 признаков всего штук пять колонок - внешний ключ к первой таблице, дата изменения, цифровой код признака который был изменён, значение этого признака (или код значения). В итоге, бизнес требования на языке запросов выглядят наподобие
select ...
from card
join card_adv ca1 on card.id = ca1.id and ca1.field1 = 15 and ca1.field2 = 53
join card_adv ca2 on card.id = ca2.id and ca2.field1 = 48 and ca2.field2 = 19
...
---
По итогу перепроверили айпишники и правда, срок договора выделенных прямых айпи истек, аналитик продлил его и запрос отправился, шаг выполнился, но не следующий...
А все потому что 1с решил поменять жсон ответ с Да на "Да", наша кукухазачеркнуто десериализация по дто полетела на попытки спарсить булеву :)
--
Когда заглядываешь во внутрь тех структур данных которыми активно пользуешься, с них спадает магическая вуаль, и ты поражаешься что не так уж замысловато все устроено.
На смену изумлению приходит ужас, когда смотришь на свой старый код с этими структурами, понимая сколько лишних телодвижений происходит.
Благодаря курсу я немного пролечил свой синдром самозванца.
(Когда-то на собеседовании не смог динамический массив реализовать, теперь гештальт закрыт :)
3⚡35👍28✍6🤔3🏆2
😁57🤔28✍7🤓3👍2
Смотрю, сейчас многие ноют дескать "найм сломан", "у меня 100500 лет опыта, а на моё резюме 0 отлкиков" бла бла бла.
Ну, тут либо твой опыт программирования столь впечатляющ, что кадровики просто не верят, что ты настоящий, а не AI 😂
либо это скрытая награда от Вселенной за то, что ты освободился от участия в очередном кругеада собеседований на давно уже закрытые вакансии.
Но вообще интересно, как там на самом деле. Несколько лет назад я делал эксперимент: выложил резюме в духе "27 лет, опыт 4 года", и за полдня мне накидали с десяток приглашений пообщаться (некоторые были столь душевные, что я едва удержался:). И сейчас стану такой же экс-пе-римен-татор (и опытным, и джуном без опыта), причём постараюсь ситуацию максимально ухудшить, как можно дальше отойти от всех шаблонов и рекомендаций эйчаров. Всё буду делать наоборот, и потом вам расскажу.
Осень самое горячее время хантинга, сезон сбора фруктов и талантливых разработчиков. Рекрутеры, как белки, запасают побольше программистов на зиму, в результате вакансии растут быстрее, чем ты успеваешь собирать грибы.
Или нет?
Ну, тут либо твой опыт программирования столь впечатляющ, что кадровики просто не верят, что ты настоящий, а не AI 😂
либо это скрытая награда от Вселенной за то, что ты освободился от участия в очередном круге
Но вообще интересно, как там на самом деле. Несколько лет назад я делал эксперимент: выложил резюме в духе "27 лет, опыт 4 года", и за полдня мне накидали с десяток приглашений пообщаться (некоторые были столь душевные, что я едва удержался:). И сейчас стану такой же экс-пе-римен-татор (и опытным, и джуном без опыта), причём постараюсь ситуацию максимально ухудшить, как можно дальше отойти от всех шаблонов и рекомендаций эйчаров. Всё буду делать наоборот, и потом вам расскажу.
Осень самое горячее время хантинга, сезон сбора фруктов и талантливых разработчиков. Рекрутеры, как белки, запасают побольше программистов на зиму, в результате вакансии растут быстрее, чем ты успеваешь собирать грибы.
Или нет?
1👍75🔥14🫡7🏆3❤2