10.9K subscribers
331 photos
17 videos
15 files
714 links
Архитектура | Программирование | Профессиональное развитие

Live канал - https://t.iss.one/soer_live

SOER CLUB - https://soer.pro или https://boosty.to/s0er

Бусты - https://t.iss.one/boost/softwareengineervlog

№ 5101661084
Download Telegram
"Найду первую работу, а там попрет" - это тот план, который надо сразу выкинуть из головы.

Во-первых, потому что скорее всего не попрет, во-вторых, после устройства на работу самые сложные задачи только появятся.

Рынок устроен так, что 80% сами ищут работу, а 20% приглашают (хантят). Поэтому основная задача попасть из первой группы во вторую.

Если план в том, чтобы всегда искать работу, то вы ставите себя в позицию "ну возьмите меня", а это очень плохо работает на длинной дистанции. Потому что уже на первой работе вы рискуете застрять на полжизни (хороший коллектив, привычные таски, страх что-то менять - это сильно вас затормозит, уж поверьте).

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

Первое время вам еще предлагают линейные переходы (с мидла, на мидла) и вроде как иллюзия выбора есть. Но через некоторое время и эти предложения иссякнут.

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

Никому не надо повышать сотрудников просто так, никому не надо развивать вас как специалиста сверх тех требований, которые есть в компании. Никому кроме вас не интересно качать вашу карьеру и просто устроившись на работу вы не решите следующую задачу - как расти по карьере.
👍130🤔10🔥85👎5🤡5😁1💩1
"А как надо?"

А надо понять свою цель. Если цель устроиться на работу, то это плохая цель, потому что за не ничего нет. Не будет такого, что кто-то за вас начнет ставить новые цели.

Все начинается с момента когда вы начинаете хотеть чего-то еще, а не только "устроиться на работу". Когда появляется "хочу заниматься созданием умных устройств", "хочу строить сложные архитектурные проекты", потом надо разбивать цель на задачи (Event Storming) и когда появится ясность, чего вы хотите, тогда и планов "найду работу, а там как-нибудь что-нибудь придумаю" не будет.
👍59😁10🤡103🔥3💩1
Я не говорю о том, что вы не должны устраиваться на работу. Я говорю о том, что устраиваясь на работу нужно понимать какая работа вам нужна, какие дальнейшие шаги вы будете делать, не засиживаться на уютном месте и т.д.

Самое главное "я пошел куда взяли" - это не стратегия. Вот о чем мои посты. А таких "планов" я встречаю каждый стрим по пять штук. Это не стратегия, не план, это просто "надежда", что все получится само собой.
👍67🤡8🔥7💩1
Live stream scheduled for
Субботний стрим 25.11 10:00

Начинаю сбор вопросов на завтрашний стрим, напоминаю, что у нас будет четыре секции:

- Зачем это надо? (ЗЭН)
- Годное чтиво (разбираем книгу корпоративных паттернов)
- Сплетни нашего ютуба
- Донаты решают

В комментарии к этому посту скиньте вопросы на ЗЭН, они должны касаться АйТи.

Так же можно скинуть ссылки на свои репо, которые я могу посмотреть в прямом эфире и сказать мнение о коде и архитектуре, так же можно скинуть новость или ссылку на ютуб ролик, который можно обсудить в Сплетнях.
🔥12👍3
Сегодня вечером в телеграме запланирован техток по карьере программиста. В 15:00 по мск. В формате дискуссии со всеми кто придёт
👍31
Live stream started
Live stream finished (1 hour)
1
SOER
🔥236🥰2👨‍💻2
Стоило упомянуть Мурыча, как тут же набежали агрессивные маслятки, которые знают, что такое "ЯваСкрипт".

Ребята, отдыхайте, ваш "гуру" уже слился никакого "эпичного" разоблачения в прямом эфире не последовало, а после драки, как известно, кулаками не машут.
😁45🫡9🤡7🤣71
Про оптимизацию

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

Это не так. Общее правило гласит "сильный алгоритм лучше, чем слабый + оптимизации". Оптимизировать на уровне языка имеет смысл только если уже нет возможности улучшить алгоритм, а проблемы с производительностью есть.

На практике в большинстве случаев помогает поиск "сильного алгоритма", при слабом алгоритме байтоебство (за редким исключением) ничего не дает.

Чтобы проиллюстрировать проблему, я привел два скрина с leetcode, перый - это оптимизация от человека, который много лет изучает движок V8 и спеку JS, а второй решение той же задачи "в лоб" от меня.

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

Поэтому учите алгоритмы, господа. Учите алгоритмы!
👍123🤡11🌚85👎2
Вижу, что предыдущий пост вызывает сомнения у некоторых подписчиков. Давайте я дам другое объяснение.

Итак, у нас есть функция f() которая считает время выполнения нашей программы в некотором окружении. Мы точно знаем,
что эта функция многих переменных, более того, мы точно знаем, что одна из переменных - это O(N), т.е. функция выглядит как-то так:
f(O(N), x1, ..., xn)

Проблема в том, что функция f() на каждом вычисляющем устройстве своя, т.е. на самом деле - это множество функций. И все что мы точно знаем, что O(N) - это тривиальное свойство этой функции, а x1..xn - это нетривиальные свойства, а по теореме Райса проверить наличие нетривиальных свойств функции - невозможно (эта задача неразрешима)

Таким образом, улучшить работу алгоритма гарантированным способом можно только через оптимизацию O(N), в остальных случаях надо брать и рассматривать каждый конкретный запуск отдельно, искать те x1...xn, которые нам нужны (откидывая ненужные) и оптимизировать что-то конкретное, при этом мы никогда не будем уверены, что запуск который мы отпимизировали будет быстрее, чем запуск, который мы не оптимизировали (всегда лотерея).

Собственно мой предыдущий пост как раз об этом - изучая алгоритмы вы получаете хороший инструмент улучшения своего кода, уповая на "технические" оптимизации вы будете в ситуации "может да, а может нет". Поэтому попытки выработать "общие рекомендации как технически улучшить ваш код", которые всегда работают - это утопия. Пишите код красиво и понятно, а не занимайтесь решением "неразрешимых задач".
👍71🔥19💯4🤬1
Басня про математиков и программистов

Решили как-то раз три математика на охоту сходить, да беда в том, что патроны у них старые были. Непонятно какие стреляют, а какие нет.

Подумали они, подумали. И решили патроны в виде функций описать, если патрон стреляет, то функция "истину" возвращает, а если нет, то ложь.
Да вот беда, если запустить функцию, то патрон ломается, и больше не работает.

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

Написал быстро программу, отдал математику. Математик проверил свои патроны, пошел на охоту. Больше его никто и не видел.

Второй математик пошел к Haskell разработчику, так как не доверял императивщикам. Начали они обсуждать проблему, да только поругались в пух и прах, не сошлись во мнении, что круче монада или функтор. До сих пор не разговаривают, так сильно поругались.

А третий математик никуда не пошел, так как знал про теорему Райса. Купил новых патронов, сходил на охоту, добыл дичь и жил долго и счастливо.

Мораль сей басни такова - хочешь жить долго и счастливо, не связывайся с программистами, особенно если они программируют на Haskell.
😁149👍13🤡65👏1🤔1🤬1🤣1
Ну что, завтра у нас снова пятница, и может быть стоит провести еще один техтолк? Если да, то пишите темы, на которые хотите пообщаться, в комментарии к этому посту. Побеждает тема, которая наберет больше всего реакций!
👍24🤡1
Сегодня узнал, что Валерий Лис снова вернулся на ютуб, я очень люблю этого автора, за его глубокие знания и техническую компетенцию, а главное за скромный характер. Я помню как несколько лет назад провел всю новогоднюю ночь на его стриме, где он писал программу для отображения фрактала Мандельброта. И это было очень круто!

А еще Лис отлично знает ассемблер и X86 архитектуру, развлекается тем, что с нуля пишет эмулятор процессора и запускает на нем что-нибудь олдовое.

В целом, если хакеры и существуют, то это Лис!

А ссылку на видео я не дам, так как Лис очень скромный и явно этого не одобрит! Виват Лису!
👍50👎50😁9🔥4🤡3🤔2💯2
Завтра в 10:00 утрк мск стрим с мурычем.
Я ему скидываю ссылку на зум, он подключается и шарит экран на своём стриме.

Формат - каждый высказывает претензии и даёт свою оценку. Вывод каждый делает сам.

У меня на канале стрима не будет. Но ссылку я, наверное, скину.
🔥49👍94🤡3
О чем я хочу поговорить с мурычем

Основной тезис: "Мурыч - это виндертон 2.0".

Что делал виндертон:
1. Сначала снимал хорошие технические ролики по спеке Си (уровня сеньера)
2. Далее канал получил развитие и Виндертон начал приписывать себе опыт и "хуесосить" других инженеров
3. Завел Patreon
4. Начал продавать планы

Что делает мурыч:
1. Сначала снимал ролики по JS
2. Начал приписывать себе знания архитектуры, ФП, ООП и другой теории, оскорбляет других инженеров
3. Завел патреон
4. Планы?


Рассмотрения требует п. 2 - приписывание опыта

1. Предпосылки
Знания - не бинарная оценка, а градиент, поэтому нужно оценивать не их наличие или отсутствие, а насколько
они глубоки.

Мурыч, раздает бинарные оценки "может/не может", "знает/не знает", "должен/не должен", однако на свои
ошибки закрывает глаза, почему же учит людей, если сам ошибается?

2. Компетенция (теория, которую мурыч не знает или не рассказывает)

Утверждения мурыча, которые противоречат теории ниже:
1. В редьюсерах функция математически доказуема, в for нет
2. Типы не нужны (тайпскрип - говно)
3. BigO - фигня (он готов котенка убивать, за каждое упоминание BigO)
4. Утверждение, что ФП базируется исключительно на лямбда
5. Утверждение, что лямбда изначально создавалась для создания алгоритмов (вообще, рассмотрение лямбды как языка программирования)

2.1 лямбда исчичление
2.1.1 проблема вычислимости
2.1.2 проблема разрешения
2.1.3 лямбда-исчисление как основа вычислений (книга "Теория вычислений для программистов")
2.1.4 Лямбда и машина тьюринга
2.2. Как лямбда-используется в ФП

Основное утверждение Соера: "правильно типизированный лямбда терм завершается".
ФП - лямда + Категория типов + теория категорий
Пример, категория Хаск (которая не совсем категория)


- Типы как решение проблем корректности программ (Пирс "Типы в языках программирования")
- Соответствие Карри-Говарда (конструктивная логика)
- Алгоритм Хиндли-Милнера
- Полиморфизм в значении типов
- Операционная и денатационная семантика
- Невозможность проверить семантику
- Структура != не семантика (поговорить в чем разница)
- Корректность - продвижение и сохранение
- классы эквивалентности (как не указав класс эквивалентности сравнивать const [ a, b] = value и const {0: a, 1: b} = value, ломается на генераторах)


2.3 Алгоритмы (книга Кормена "Алгоритмы")
- проеб мурыча с мемоизацией (Динамическое программирование)
- проеб мурыча с Мерой Хэмминга
- проеб с "оптимизацией" на leetcode
- Теорема Райса и невозможность создать универасльный алгоритм оптимизации
- доказательство алгоритмов с for (индукция, инвариант)

2.4. Анализ сайта Соера (что не увидел мурыч):

- Защиту через неясность (Security through obscurity)
- Access + Refresh токены
- Fingerprint
- Рэйт лимиты
- Заголовки безопасности (как способ косвенного анализа используемых инструментов)
- Разницу Web1.0 и Web2.0
- современные архитектуры сервисной/микросервисной организации



3. Практика (что есть у Соера, а что у мурыча, что он делает вывод о некомпетенции Соера в создании сайтов?)

Достижения Соера:

3.1 Красивый код, но что за ужас на стримах показывает мурыч? Это фп, структурный подход или что?

3.2 Метархия:
- интегрировал PassportJS для Oauth
- сделал свою реализацию Metacom
- создал небольшой проект на Метархии (obsoverlay)
- сделал Issue с ошибкой обработки параметров

3.3. Сделал учебный проект (бесплатный) через который прошли более 160 человек за Год
3.4. Архитектурные стримы, воркшопы
3.5. Видео на канале (см. ниже)
3.6. XDonate
3.7. ObsOverlay


Достижения Мурыча:

3.1 Сайт не доделан
3.2. На сайте какие-то залипушные Cache и ленивая загрузка картинок
3.3. Пустой гитхаб
3.4. Делал что-то для метархии, но что?
3.5. Что вообще заставляет мурыча считать, что он хорош в практике?


4. Иженерные увлечения (что заставляет говорить мурыча, что Соер не шарит?)

Соер:
👍67🔥22🤡148🤔5👎3👏2
4.1. Решение задач на codewars (например, sql движок, рекурсивный спуск)
4.2. Сбор и анализ исходников (на пример OBS)
4.3. Архитектурные вопросы
4.4. Ассемблер (мурыч не знает, что машинный код !== asm)
4.5. Числа с плавающей запятой, разные аспекты программирования

мурыч:
4.1. Спека JS
4.2. V8 оптимизации
???




Вывод: ошибки в теории, необоснованные утверждения, отсутствие образования, придуманные термины, непонятная практика (если вообще есть).
На чем строится мысль, что мурыч может советовать как делать проекты и писать код для продуктовых задач?
🔥71👍20🤡116👏3👎2