Тред про парное программирование https://twitter.com/N_Lopin/status/1367735338811146243 Чел в принципе дело говорит. Если правильно организовать, то это профитная тема. Жаль, что правильно организовать достаточно сложно.
Twitter
Ник Лопин
Так вот, про парное программирование. В индустрии еще не все понимают, зачем нужно писать тесты. Парное программирование в такой картине мира выглядит как сжигание ресурсов. Давайте разбираться, зачем это нужно и как делать
SOL Talks
Тред про парное программирование https://twitter.com/N_Lopin/status/1367735338811146243 Чел в принципе дело говорит. Если правильно организовать, то это профитная тема. Жаль, что правильно организовать достаточно сложно.
Про парное программирование он написал, а про тесты нет, поэтому напишу я. Про юнит-тесты, если точнее. Длиннопост.
Я прошёл все те же стадии (не)принятия юнит-тестирования, что и все: «а нах они?», «не отстреливаю, как их писать», «чё-то скучно», «та позже напишем» и т.д. Проблема в том, что дохуильон программистов застряли где-то посредине. У тех, кто пишет на динамических языках, ситуация чуть получше, потому что без тестов вероятность поставить что-то хоть сколь-нибудь качественное быстро множится на процент покрытия. Мои знакомые плюсовики же зачастую воспринимают написание тестов как тяжкое бремя.
Попросил я тут недавно одного своего девелопера напилить фичу и сразу покрыть код тестами. Он отлынивать не стал, к задаче подошёл ответственно и нахуячил тест-кейсы по паре сотен строк, проверяя в каждом целую пачку функций. Не удивительно, что это для многих тяжко и скучно — я б тоже хер положил с таким раскладом! Где-то на чтении середины первого кейса я потерялся и уже не смог отслеживать, что там происходит.
Вины девелопера в том нет. Он просто не видел, как надо, и никто никогда ему не объяснял, а метрики по line-coverage в этом явно не помогают. Я и сам долгое время морщился при упоминании юнит-тестов. На своих работах за более чем 10 лет я вроде не написал ни одного теста 😎 То не было ясно, как и зачем, то «не было нужно», то никто не просил, то проект закрыли…
Озарение, как это часто бывает, пришло, откуда не ждали. Писал я как-то на Nim и чё-то так притомился перезапускать прогу и проверять одно и то же руками в логах, что решил написать тест. И написал. Урвал дозу дофамина прям!
Программисты при написании кода так или иначе держат в голове какие-то реквайрменты, инварианты, пред- и постусловия, ожидаемые промежуточные значения переменных, которые они либо вручную протыкивают в дебаггере, либо дампят в лог, который потом так же вручную проверяют на правильность. Заче-е-ем‽ Можно же написать код, который будет делать ровно то же автоматически. Разве писать код — это не то, что мы любим? 🙂
Главное тут, как и с любым другим кодом, придерживаться некоторых простейших правил, чтобы потом не было мучительно больно этот код поддерживать: декомпозировать побольше, стейт хранить поменьше и всё в таком духе. Я типочку, о котором выше писал, показал на парочке простейших примеров, как надо — и это сразу поменяло его восприятие. Он быстро уловил фишку и теперь пишет збс.
Так а чё ж я раньше такой дохуя умный не был? Какую роль тут сыграл Nim? А всё очень просто: если в С++ надо порядочно поебаться, выбрать либу для юнит-тестирования, прикрутить к проекту, насетапить всё, то в Nim это буквально один импорт и можно фигачить тесты прям в том же файле, поближе к контексту то есть. Это важно.
Поэтому моя рекомендация: настроить инфраструктуру для запуска юнит-тестов в самом начале проекта и, может, хернуть один тест для примера. Остальные люди сами подтянутся (после пары пинков — уж точно).
Мой текущий фаворит для С++ — Catch2, кстати.
Я прошёл все те же стадии (не)принятия юнит-тестирования, что и все: «а нах они?», «не отстреливаю, как их писать», «чё-то скучно», «та позже напишем» и т.д. Проблема в том, что дохуильон программистов застряли где-то посредине. У тех, кто пишет на динамических языках, ситуация чуть получше, потому что без тестов вероятность поставить что-то хоть сколь-нибудь качественное быстро множится на процент покрытия. Мои знакомые плюсовики же зачастую воспринимают написание тестов как тяжкое бремя.
Попросил я тут недавно одного своего девелопера напилить фичу и сразу покрыть код тестами. Он отлынивать не стал, к задаче подошёл ответственно и нахуячил тест-кейсы по паре сотен строк, проверяя в каждом целую пачку функций. Не удивительно, что это для многих тяжко и скучно — я б тоже хер положил с таким раскладом! Где-то на чтении середины первого кейса я потерялся и уже не смог отслеживать, что там происходит.
Вины девелопера в том нет. Он просто не видел, как надо, и никто никогда ему не объяснял, а метрики по line-coverage в этом явно не помогают. Я и сам долгое время морщился при упоминании юнит-тестов. На своих работах за более чем 10 лет я вроде не написал ни одного теста 😎 То не было ясно, как и зачем, то «не было нужно», то никто не просил, то проект закрыли…
Озарение, как это часто бывает, пришло, откуда не ждали. Писал я как-то на Nim и чё-то так притомился перезапускать прогу и проверять одно и то же руками в логах, что решил написать тест. И написал. Урвал дозу дофамина прям!
Программисты при написании кода так или иначе держат в голове какие-то реквайрменты, инварианты, пред- и постусловия, ожидаемые промежуточные значения переменных, которые они либо вручную протыкивают в дебаггере, либо дампят в лог, который потом так же вручную проверяют на правильность. Заче-е-ем‽ Можно же написать код, который будет делать ровно то же автоматически. Разве писать код — это не то, что мы любим? 🙂
Главное тут, как и с любым другим кодом, придерживаться некоторых простейших правил, чтобы потом не было мучительно больно этот код поддерживать: декомпозировать побольше, стейт хранить поменьше и всё в таком духе. Я типочку, о котором выше писал, показал на парочке простейших примеров, как надо — и это сразу поменяло его восприятие. Он быстро уловил фишку и теперь пишет збс.
Так а чё ж я раньше такой дохуя умный не был? Какую роль тут сыграл Nim? А всё очень просто: если в С++ надо порядочно поебаться, выбрать либу для юнит-тестирования, прикрутить к проекту, насетапить всё, то в Nim это буквально один импорт и можно фигачить тесты прям в том же файле, поближе к контексту то есть. Это важно.
Поэтому моя рекомендация: настроить инфраструктуру для запуска юнит-тестов в самом начале проекта и, может, хернуть один тест для примера. Остальные люди сами подтянутся (после пары пинков — уж точно).
Мой текущий фаворит для С++ — Catch2, кстати.
GitHub
GitHub - catchorg/Catch2: A modern, C++-native, test framework for unit-tests, TDD and BDD - using C++14, C++17 and later (C++11…
A modern, C++-native, test framework for unit-tests, TDD and BDD - using C++14, C++17 and later (C++11 support is in v2.x branch, and C++03 on the Catch1.x branch) - catchorg/Catch2
Оказывается, самостоятельно издать книгу не так уж и сложно.
Помню, решил я написать книгу про QML где-то в 2010–2011 годах и для этого конечно же сначала изучил LaTeX. И забил 🙂 С тех пор ни разу им не воспользовался. Можно сейчас попробовать ещё разок, но с книгой на другую тематику, конечно.
Помню, решил я написать книгу про QML где-то в 2010–2011 годах и для этого конечно же сначала изучил LaTeX. И забил 🙂 С тех пор ни разу им не воспользовался. Можно сейчас попробовать ещё разок, но с книгой на другую тематику, конечно.
Theroadchoseme
How I self-published a professional paperback and eBook using LaTeX and Pandoc | The Road Chose Me
How I self-published a professional paperback and eBook using LaTeX and Pandoc Introduction After years working as a Software Engineer I wanted to
Помимо общей слабости к девайсам я какого-то хера особо падок на камеры, хотя за всю жизнь ничего толкового не снял. И Insta360 выпустила новую. Как обладатель Insta360 One R могу сказать, что эта китайская контора шарит, как и качество заделиверить, и прикольные мелочи туда натолкать.
Вроде только канал создал, а уже пост из серии «придётся брать™» 😅
Вроде только канал создал, а уже пост из серии «придётся брать™» 😅
YouTube
Introducing Insta360 GO 2 - The Tiny, Mighty Action Camera
Meet Insta360 GO 2. Available now at http://bit.ly/Insta360GO2_yt
Insta360 GO 2 – the tiny action camera that packs an almighty punch! Just 27g (that’s less than an ounce) and the size of your thumb, GO 2 captures the action without ever getting in the way…
Insta360 GO 2 – the tiny action camera that packs an almighty punch! Just 27g (that’s less than an ounce) and the size of your thumb, GO 2 captures the action without ever getting in the way…
SOL Talks
Немного о когнитивном. Делал я тут, значит, недавно в Jupyter фейковые диаграммы для презентации 🙂 Если кто не знает, Jupyter — это интерактивный блокнот с текстом и кусками кода, которые можно выполнять прям там же и получать rich output. Такой себе literate…
Я уже писал про Jupyter. Так уж повелось, что он в каком-то плане конкурирует с Excel: оба неплохо подходят для анализа данных, оба — со своими достоинствами и недостатками. Первый больше любят программисты, так как код на знакомом языке всё-таки писать как-то роднее, а второй больше любят… э-э-эм… остальные?
И тут чуваки сделали какой-то недо-Excel для Jupyter (с тотально ублюдочной анимацией сайдбара). Сильно сомневаюсь, что оно полетит. Но ещё в голову пришла другая мысль: было бы клёво, если бы в Excel добавили какой-то аналог блокнотов а ля Wolfram! 🤔 Думаю, Microsoft это даже вполне по силам. Интересно, можно ли наговнячить что-то похожее на VBA?
И тут чуваки сделали какой-то недо-Excel для Jupyter (с тотально ублюдочной анимацией сайдбара). Сильно сомневаюсь, что оно полетит. Но ещё в голову пришла другая мысль: было бы клёво, если бы в Excel добавили какой-то аналог блокнотов а ля Wolfram! 🤔 Думаю, Microsoft это даже вполне по силам. Интересно, можно ли наговнячить что-то похожее на VBA?
SOL Talks
Помимо общей слабости к девайсам я какого-то хера особо падок на камеры, хотя за всю жизнь ничего толкового не снял. И Insta360 выпустила новую. Как обладатель Insta360 One R могу сказать, что эта китайская контора шарит, как и качество заделиверить, и прикольные…
Кстати, сейчас это уже как-то и подзабылось, но работал я в 2015-м на SanDisk над похожей штукой. Это должна была быть камера в виде кулона, которая бы сама снимала фоточки и короткие ролики с какой-то периодичностью, а потом приложение-компаньон бы «автомагически» выбирало из них самые интересные моменты и склеивало в один клип. Проект быстро прикрыли: видимо, кто-то из менеджеров повыше решил, что оно того не стоит. А какая идея! Опередили время, эх.
SOL Talks
Помимо общей слабости к девайсам я какого-то хера особо падок на камеры, хотя за всю жизнь ничего толкового не снял. И Insta360 выпустила новую. Как обладатель Insta360 One R могу сказать, что эта китайская контора шарит, как и качество заделиверить, и прикольные…
Несомненный плюс того, что многие знают о моём интересе к разного рода гаджетам: люди делятся со мной своими находками. Сегодня дружбан подкинул линк на чашку, которая поддерживает установленную температуру напитка… за 130 баксов (или 150€)! Придётся брать!™ (На самом деле, конечно, чашка с блютус моментально идёт нахуй, но вдруг кому надо…).
Ember®
Ember Mug² (EU)
Designed for home or office, Ember Mug² does more than simply keep your coffee hot. Our smart mug allows you to set an exact drinking temperature, so your coffee is never too hot, or too cold.
Ember then maintains your chosen temperature for 1.5 hours with…
Ember then maintains your chosen temperature for 1.5 hours with…
SOL Talks
Несомненный плюс того, что многие знают о моём интересе к разного рода гаджетам: люди делятся со мной своими находками. Сегодня дружбан подкинул линк на чашку, которая поддерживает установленную температуру напитка… за 130 баксов (или 150€)! Придётся брать!™…
У нас с женой кстати вот по такой кружке(?) Stanley за двадцатку. Пользуемся почти каждый день дома, берём в поездки. Збс.
Stanley 1913
Classic Trigger-Action Travel Mug | 12 OZ
Shop Stanley insulated drinkware & gear! The 12oz Classic Travel Mug. The classic keeps your beverage warm (or cold) with its double-wall vacuum insulation.
This media is not supported in your browser
VIEW IN TELEGRAM
Типочки запилили нехуйскую систему для отделения людей от фона на видеостримах в реалтайме (4K@30fps, 1080p@60fps). И она явно получше тех, что используются в современном софте для видеоконференции, и якобы даже лучше хромакея. Чтобы это работало, нужно сначала снять чисто фон, что, в принципе не такая уж большая плата. А, ну и топовая видяха нужна 🤑
Вот видос, вот сорцы (Python).
Вот видос, вот сорцы (Python).
Написал, почему я перешёл с GMail на HEY.com. Последний появился всего около года назад, но я уже настолько привык, что позабыл о GMail, Outlook и т.д. Если кратко, то всё потому, что HEY помогает вырабатывать дисциплину, а не просто «предоставляет средства».
Teletype
Почему и зачем я перешёл на использование HEY.com?
Если вдруг кто не в курсе, то HEY.com — это почтовый сервис от Basecamp. Они пообещали переопределить само понятие электронной почты...
SOL Talks
Несомненный плюс того, что многие знают о моём интересе к разного рода гаджетам: люди делятся со мной своими находками. Сегодня дружбан подкинул линк на чашку, которая поддерживает установленную температуру напитка… за 130 баксов (или 150€)! Придётся брать!™…
Кто-то решил, что блютуса в чашке недостаточно и решил добавить тач-управление в бидон с ручкой кружку, чтобы подстраивать температуру по своему вкусу. Ещё грят, мол, оно изучает привычки пользователя бла-бла-бла. Ожидаемая розничная цена — двести баксов всего 🙂
Совершенно не ясно, как этим пользоваться и что оно там изучает. При установке температуры тачем кружка чё-то там показывает светодиодами. Что именно‽ Во-первых, их не видно, когда они не светятся, во-вторых, никакой шкалы или пометок не нарисовано. Мне их считать или что?
По поводу изучения привычек я тоже хз. Я сам не ебу, какой там температуры я обычно что пью: 135°F или 142°F (сколько это в нормальных единицах-то?) — даже не уверен, играет ли разница в несколько градусов роль.
Если бы я делал «умную» кружку, я бы сделал на ней одну кнопку: «вот сча заебись». Просто жмёшь её, кружка запоминает текущую температуру и старается всегда её поддерживать.
Если прям хочется LEDов туда натолкать, то можно фигачнуть три красно-синих, чтоб показывать, насколько горячее/холоднее напиток в сравнении с моим дефолтом. Всё.
Кидайте деньги кароч, сделаю проект на кикстартере! 😂
Совершенно не ясно, как этим пользоваться и что оно там изучает. При установке температуры тачем кружка чё-то там показывает светодиодами. Что именно‽ Во-первых, их не видно, когда они не светятся, во-вторых, никакой шкалы или пометок не нарисовано. Мне их считать или что?
По поводу изучения привычек я тоже хз. Я сам не ебу, какой там температуры я обычно что пью: 135°F или 142°F (сколько это в нормальных единицах-то?) — даже не уверен, играет ли разница в несколько градусов роль.
Если бы я делал «умную» кружку, я бы сделал на ней одну кнопку: «вот сча заебись». Просто жмёшь её, кружка запоминает текущую температуру и старается всегда её поддерживать.
Если прям хочется LEDов туда натолкать, то можно фигачнуть три красно-синих, чтоб показывать, насколько горячее/холоднее напиток в сравнении с моим дефолтом. Всё.
Кидайте деньги кароч, сделаю проект на кикстартере! 😂
Kickstarter
HAVA Mug: The most advanced, self-heating smart mug (Canceled)
Keep coffee or tea at your desired temperature for up to 2 hours | simply swipe on the mug to adjust
Наткнулся тут на либу для игр — raylib на сишечке. Наверняка не впервые, но как-то я раньше не обращал внимания на количество байндингов к другим языкам, которых весьма дофига.
Само́й библиотекой я пользоваться, конечно, не буду — мне нечего писать с её использованием. Но вот список языков пригодится: люблю я изучить новый под настроение. Когда-то напишу, откуда у меня такое пристрастие.
Само́й библиотекой я пользоваться, конечно, не буду — мне нечего писать с её использованием. Но вот список языков пригодится: люблю я изучить новый под настроение. Когда-то напишу, откуда у меня такое пристрастие.
raylib
raylib is a simple and easy-to-use library to enjoy videogames programming.
SOL Talks
Про парное программирование он написал, а про тесты нет, поэтому напишу я. Про юнит-тесты, если точнее. Длиннопост. Я прошёл все те же стадии (не)принятия юнит-тестирования, что и все: «а нах они?», «не отстреливаю, как их писать», «чё-то скучно», «та позже…
Если вдруг вы посмотрели на Catch2 и вам не хватает возможности мокать объекты, то я как раз только что наткнулся на другую библиотеку спецом для этого: называется Trompeloeil. Как на французском произносится trompe l'œil я хз, но в [слобожанском] русском есть малоизвестное слово «тремпель» — буду использовать его 🙂
Легко интегрируется не только с Catch2 кстати.
Легко интегрируется не только с Catch2 кстати.
GitHub
GitHub - rollbear/trompeloeil: Header only C++14 mocking framework
Header only C++14 mocking framework. Contribute to rollbear/trompeloeil development by creating an account on GitHub.
Есть ощущение, что то, во что выродились современные CLI, сильно отличается от задумки наших праотцов. Как часто вы реально пишете ванлайнеры с кучей свитчей, передавая результаты через пайп (особенно не в grep)? И как часто вы делаете это правильно с первого раза?
То, что когда-то задумывалось как способ общения с компьютером, теперь превратилось в способ для компьютера послать тебя нахер. Даже вот сервисы по типу https://explainshell.com/ не сильно помогают: половину из тех ванлайнеров, что я в нём проверил, он не смог нормально мне «объяснить».
Вместо того чтобы научить машины общаться с нами на более понятном нам языке, мы теперь учимся общаться на более понятном им. У меня есть теория на этот счёт.
Когда я только начинал программировать, я писал свои детские наивные программы так, будто бы компьютер со мной реально разговаривает. Он в интерактивном режиме задавал вопросы и, если ему по какой-то причине не подходил мой ответ, любезно говорил почему. Любезно — потому что я для себя же писал.
Позже мне кто-то сказал/показал, что это не труЪ. Сначала я увидел DOS. Позже: «Гляди, вон, в линуксе всё как сделано» — кто-то сказал мне. Десятки каких-то утилит, у каждой десятки свитчей с сотнями возможных параметров. Я тоже начал писать так, потому что же это «профессионально».
Сейчас маятник вроде качнулся в обратную сторону. Одни люди пытаются делать тулзы более дружелюбными, а другие им твердят, мол, говно, потому что: «А вдруг я буду деплоить это со своего утюга с аккордной клавиатурой на триста удалённых серверов в Микронезии через gopher — тогда что‽»
И так во всём сейчас. С одной стороны вроде как уже всем стало более ясно, как делать хорошо. С другой стороны, количество легаси не убывает. И либо какая-то компания берёт на себя смелость дропнуть поддержку чего-то старого, предоставив новое получше, либо «маємо те, що маємо».
При этом на компромиссы люди идут неохотно. Они считают, что новые решения должны быть если не идеальными, то хотя бы такими же, как старые, только значительно лучше. То есть вариант -2,+3 их не устраивает, даже если в общем зачёте решено больше проблем, чем раньше.
Можно подумать, что этот пост — наброс на линукс, терминалы или что-то ещё. Но на самом деле он про интерфейсы и UX 😉
То, что когда-то задумывалось как способ общения с компьютером, теперь превратилось в способ для компьютера послать тебя нахер. Даже вот сервисы по типу https://explainshell.com/ не сильно помогают: половину из тех ванлайнеров, что я в нём проверил, он не смог нормально мне «объяснить».
Вместо того чтобы научить машины общаться с нами на более понятном нам языке, мы теперь учимся общаться на более понятном им. У меня есть теория на этот счёт.
Когда я только начинал программировать, я писал свои детские наивные программы так, будто бы компьютер со мной реально разговаривает. Он в интерактивном режиме задавал вопросы и, если ему по какой-то причине не подходил мой ответ, любезно говорил почему. Любезно — потому что я для себя же писал.
Позже мне кто-то сказал/показал, что это не труЪ. Сначала я увидел DOS. Позже: «Гляди, вон, в линуксе всё как сделано» — кто-то сказал мне. Десятки каких-то утилит, у каждой десятки свитчей с сотнями возможных параметров. Я тоже начал писать так, потому что же это «профессионально».
Сейчас маятник вроде качнулся в обратную сторону. Одни люди пытаются делать тулзы более дружелюбными, а другие им твердят, мол, говно, потому что: «А вдруг я буду деплоить это со своего утюга с аккордной клавиатурой на триста удалённых серверов в Микронезии через gopher — тогда что‽»
И так во всём сейчас. С одной стороны вроде как уже всем стало более ясно, как делать хорошо. С другой стороны, количество легаси не убывает. И либо какая-то компания берёт на себя смелость дропнуть поддержку чего-то старого, предоставив новое получше, либо «маємо те, що маємо».
При этом на компромиссы люди идут неохотно. Они считают, что новые решения должны быть если не идеальными, то хотя бы такими же, как старые, только значительно лучше. То есть вариант -2,+3 их не устраивает, даже если в общем зачёте решено больше проблем, чем раньше.
Можно подумать, что этот пост — наброс на линукс, терминалы или что-то ещё. Но на самом деле он про интерфейсы и UX 😉
SOL Talks
Наткнулся тут на либу для игр — raylib на сишечке. Наверняка не впервые, но как-то я раньше не обращал внимания на количество байндингов к другим языкам, которых весьма дофига. Само́й библиотекой я пользоваться, конечно, не буду — мне нечего писать с её…
Важная для меня тема.
За всё время, что я программирую, я «изучил» весьма внушительное количество разнообразных языков. На некоторых я по итогу не написал ничего больше 100 строк кода, но ещё ни разу не пожалел о потраченном времени. Почему?
Для меня изучение языка программирования покрывает два основных топика: 1) поглядеть «а как ещё бывает» и 2) изучение новых концептуальных штук, расширяющих сознание. Первое чаще про синтаксис, и от него пользы мало, если не пишешь свой идеальный язык программирования, которым никто не будет пользоваться. Разве что похоливарить можно.
А вот на втором остановимся подробнее. Я люблю приводить пример, что я стал лучше понимать шаблоны в С++ после изучения Haskell, ведь оказалось, что шаблоны — это всего лишь функции над типами 🙂 Ну и STL стал лучше понимать, ведь он не сказать что очень уж в ООП-стиле. Хаскелем всё не ограничилось, конечно. У меня таких примеров — вагон и маленькая тележка.
Поначалу, конечно, я брался за изучение всего подряд, а в фокус, так уж выходит, чаще всего попадают всякие мейнстрим-языки. В мейнстриме тухло, ребят, нехуя там ловить. После левел-апа в миддла мейнстрим-язык вряд ли откроет у вас третье око. Почему собсно они становятся мейнстрим — тема для отдельного поста, но тратить время на них не стоит, если они непосредственно не влияют на вашу зп. (С этим осторожно надо, впрочем, потому что знание языка не факт что добавит бабла, а вот незнание — очень даже может сбить вашу цену).
По-настоящему же я понял, зачем я трачу время на языки с тремя с половиной пользователями после прочтения книги «Seven Languages in Seven Weeks». Например, благодаря изучению Ruby я увидел, как можно делать красивые, как мне тогда казалось, eDSL, и разобрался в метапрограммировании (которое сейчас в основном костыляю в Python). Благодаря io я отошёл от С++-версии ООП и приблизился к оригинальной с месседж-пассингом. Это впоследствии помогло с Objective-C, кстати. Ещё я увидел, что синтаксис может быть суперпростой, но при этом мощный. Благодаря ему же я раздуплился в прототипном наследовании в JavaScript. Лисп мне как-то не зашёл тогда, но не так давно я открыл для себя Red (наследник REBOL) и понял фишечку гомоиконичности. Erlang дал понимание модели акторов. Ну и т.д.
Важный момент: «а зачем учить столько языков, если всё это можно сделать в C++?» — спросите вы. Метапрограммирование/монады/акторы/eDSL/you name it… Я считаю, что это не эффективно. Вместо того чтобы бороться со сложностью и неприспособленностью языка и распылять своё внимание на нерелевантные вещи, я предпочитаю знакомиться с новыми концепциями в их нативной рафинированной среде. Языки приходят и уходят, а ваше понимание концептуальных вещей остаётся. И каждое такое знание значительно расширяет диапазон возможных решений той или иной задачи.
Короче, основная метрика, по которой я нынче оцениваю язык программирования — это не размер комьюнити, не количество либ или ответов на Stack Overflow и даже не производительность. Основная метрика — количество инсайтов, которые я получил, изучая его.
Вот бы теперь ещё с менеджментом так же 🙂
За всё время, что я программирую, я «изучил» весьма внушительное количество разнообразных языков. На некоторых я по итогу не написал ничего больше 100 строк кода, но ещё ни разу не пожалел о потраченном времени. Почему?
Для меня изучение языка программирования покрывает два основных топика: 1) поглядеть «а как ещё бывает» и 2) изучение новых концептуальных штук, расширяющих сознание. Первое чаще про синтаксис, и от него пользы мало, если не пишешь свой идеальный язык программирования, которым никто не будет пользоваться. Разве что похоливарить можно.
А вот на втором остановимся подробнее. Я люблю приводить пример, что я стал лучше понимать шаблоны в С++ после изучения Haskell, ведь оказалось, что шаблоны — это всего лишь функции над типами 🙂 Ну и STL стал лучше понимать, ведь он не сказать что очень уж в ООП-стиле. Хаскелем всё не ограничилось, конечно. У меня таких примеров — вагон и маленькая тележка.
Поначалу, конечно, я брался за изучение всего подряд, а в фокус, так уж выходит, чаще всего попадают всякие мейнстрим-языки. В мейнстриме тухло, ребят, нехуя там ловить. После левел-апа в миддла мейнстрим-язык вряд ли откроет у вас третье око. Почему собсно они становятся мейнстрим — тема для отдельного поста, но тратить время на них не стоит, если они непосредственно не влияют на вашу зп. (С этим осторожно надо, впрочем, потому что знание языка не факт что добавит бабла, а вот незнание — очень даже может сбить вашу цену).
По-настоящему же я понял, зачем я трачу время на языки с тремя с половиной пользователями после прочтения книги «Seven Languages in Seven Weeks». Например, благодаря изучению Ruby я увидел, как можно делать красивые, как мне тогда казалось, eDSL, и разобрался в метапрограммировании (которое сейчас в основном костыляю в Python). Благодаря io я отошёл от С++-версии ООП и приблизился к оригинальной с месседж-пассингом. Это впоследствии помогло с Objective-C, кстати. Ещё я увидел, что синтаксис может быть суперпростой, но при этом мощный. Благодаря ему же я раздуплился в прототипном наследовании в JavaScript. Лисп мне как-то не зашёл тогда, но не так давно я открыл для себя Red (наследник REBOL) и понял фишечку гомоиконичности. Erlang дал понимание модели акторов. Ну и т.д.
Важный момент: «а зачем учить столько языков, если всё это можно сделать в C++?» — спросите вы. Метапрограммирование/монады/акторы/eDSL/you name it… Я считаю, что это не эффективно. Вместо того чтобы бороться со сложностью и неприспособленностью языка и распылять своё внимание на нерелевантные вещи, я предпочитаю знакомиться с новыми концепциями в их нативной рафинированной среде. Языки приходят и уходят, а ваше понимание концептуальных вещей остаётся. И каждое такое знание значительно расширяет диапазон возможных решений той или иной задачи.
Короче, основная метрика, по которой я нынче оцениваю язык программирования — это не размер комьюнити, не количество либ или ответов на Stack Overflow и даже не производительность. Основная метрика — количество инсайтов, которые я получил, изучая его.
Вот бы теперь ещё с менеджментом так же 🙂
SOL Talks
Важная для меня тема. За всё время, что я программирую, я «изучил» весьма внушительное количество разнообразных языков. На некоторых я по итогу не написал ничего больше 100 строк кода, но ещё ни разу не пожалел о потраченном времени. Почему? Для меня изучение…
Глядите, кстати, чё Страуструп говорит на тему https://youtu.be/NvWTnIoQZj4
YouTube
Bjarne Stroustrup: The 5 Programming Languages You Need to Know | Big Think
Become a Big Think member to unlock expert classes, premium print issues, exclusive events and more: https://bigthink.com/membership/?utm_source=youtube&utm_medium=social&utm_campaign=yt_desc
------------------
Bjarne Stroustrup is a computer programmer…
------------------
Bjarne Stroustrup is a computer programmer…
Есть стойкое ощущение, что некоторые коллеги на работе регулярно пользуются этим сервисом на митингах 🙄 https://zoomescaper.com/
Zoomescaper
Zoom Escaper
Zoom Escaper is a simple tool to help you escape Zoom meetings and other videoconferencing scenarios. It allows you to self-sabotage your audio stream, making your presence unbearable to others.
Небольшой вводный пост по теме, на которую мне есть и ещё будет, что сказать.
Многие девелоперы любят ставить себя и менеджеров по разные стороны баррикад. К сожалению, некоторые (очевидно хуёвые) менеджеры тоже так делают со своей стороны. На самом деле это всё чушь, конечно, и все всегда тонут в одной лодке — разница лишь в том, насколько быстро и комфортно.
Будучи программистом, я и сам любил позубоскалить на тему того, как менеджеры заебали, ничего полезного не делая. Однако ряд коллег по цеху искренне верит, мол, настоящее value компании приносят именно инженеры, тогда как управленцы скорее мешают. Некоторые манагеры в натуре хер на работу клали, но так-то и девелоперы не все поголовно дохуя перформеры 😉
Большинство программистов не могут друг с другом договориться, как класс назвать, не то что каким-либо образом самоорганизоваться и принести тот самый мифический велью. К счастью, не все такие. Есть и те, кто умеет коммуницировать с людьми и знает, куда приложить свою инициативность и как организовать работу. Такие инженеры часто, сюрприз-сюрприз, становятся менеджерами! И по итогу только коллаборация обоих лагерей повышает шанс лодки добраться до берега. Обе роли важны.
К этому моменту в тексте всё как-то поделилось на чёрное и белое, а у ряда людей уже, возможно, подгорело. Конечно же текст выше очень утрированный и полярный, а в реальной жизни не всё так просто. Не нужно всем резко бросать программирование и становиться управленцами или наоборот.
Но для начала вот вам простой совет, о котором меня никто не просил: вне зависимости от того, как вы себя позиционируете, девелопер ли вы или менеджер, или где-то на распутье, ваш первый шаг — перестать бороться друг с другом и начать бороться с задачами.
(Сча бы в комменты насрать что-то типа «все вы, менеджеры, так говорите», да? 🙂)
Многие девелоперы любят ставить себя и менеджеров по разные стороны баррикад. К сожалению, некоторые (очевидно хуёвые) менеджеры тоже так делают со своей стороны. На самом деле это всё чушь, конечно, и все всегда тонут в одной лодке — разница лишь в том, насколько быстро и комфортно.
Будучи программистом, я и сам любил позубоскалить на тему того, как менеджеры заебали, ничего полезного не делая. Однако ряд коллег по цеху искренне верит, мол, настоящее value компании приносят именно инженеры, тогда как управленцы скорее мешают. Некоторые манагеры в натуре хер на работу клали, но так-то и девелоперы не все поголовно дохуя перформеры 😉
Большинство программистов не могут друг с другом договориться, как класс назвать, не то что каким-либо образом самоорганизоваться и принести тот самый мифический велью. К счастью, не все такие. Есть и те, кто умеет коммуницировать с людьми и знает, куда приложить свою инициативность и как организовать работу. Такие инженеры часто, сюрприз-сюрприз, становятся менеджерами! И по итогу только коллаборация обоих лагерей повышает шанс лодки добраться до берега. Обе роли важны.
К этому моменту в тексте всё как-то поделилось на чёрное и белое, а у ряда людей уже, возможно, подгорело. Конечно же текст выше очень утрированный и полярный, а в реальной жизни не всё так просто. Не нужно всем резко бросать программирование и становиться управленцами или наоборот.
Но для начала вот вам простой совет, о котором меня никто не просил: вне зависимости от того, как вы себя позиционируете, девелопер ли вы или менеджер, или где-то на распутье, ваш первый шаг — перестать бороться друг с другом и начать бороться с задачами.
(Сча бы в комменты насрать что-то типа «все вы, менеджеры, так говорите», да? 🙂)
SOL Talks
Важная для меня тема. За всё время, что я программирую, я «изучил» весьма внушительное количество разнообразных языков. На некоторых я по итогу не написал ничего больше 100 строк кода, но ещё ни разу не пожалел о потраченном времени. Почему? Для меня изучение…
Из всех языков программирования, что я пытался учить, хуже всего мне поддаётся Prolog.
Это очень интересный язык логического программирования, оказавший немалое влияние на индустрию в своё время (вплоть до того, что синтаксис Erlang очень похож на синтаксис Prolog, так как первый интерпретатор был написан на нём).
Основных проблем в его изучении две: 1) я никогда не уделял ему достаточно времени, потому что редко мог придумать практическое применение; 2) источников информации не так-то и много. Я предпочитаю учить по книгам, и с ними как-то вообще тухло. А все статьи по прологу начинаются и заканчиваются определением того, чей там кому батя Сократ.
Осознанных подходов к его использованию у меня было три, и все они связаны с попытками решить головоломки в компьютерных играх, над которыми мне было западло думать самостоятельно. Первая была давным давно в какой-то из частей «Нэнси Дрю» и чем-то напоминала судоку. Вторая была в прошлом году в «We Were Here Together» — там мне просто не хватило мозгов описать концептуальную модель задачи синтаксисом языка. Третья была буквально на днях в «Dishonored 2» и являлась вариацией т.н. «задачи Эйнштейна». Я потратил полтора часа, чтобы вспомнить синтаксис, все эти темы с унификацией и т.п., описать факты и предикаты для задачи и получить на выходе false вместо списка, кто там где живёт и чем бухает 😂 Не хватило знаний/опыта, чтобы правильно увязать эти предикаты воедино. Стоит ли говорить, что во всех трёх случаях жена находила правильный ответ на листочке бумаги гораздо быстрее и безо всякого программирования.
Зачем вообще его учить? Разве кто-то ещё его использует? Да, оказалось, что используют. Например, кореш когда-то на работе просветил меня, что в Gerrit встроен движок пролога для описания правил сабмита патчсетов. Да и вообще у меня есть ощущение, что огромный кусок потенциально полезных знаний недополучен.
Если вы шарите Prolog и можете подсказать, с чего и как лучше начинать, напишите мне плз.
Это очень интересный язык логического программирования, оказавший немалое влияние на индустрию в своё время (вплоть до того, что синтаксис Erlang очень похож на синтаксис Prolog, так как первый интерпретатор был написан на нём).
Основных проблем в его изучении две: 1) я никогда не уделял ему достаточно времени, потому что редко мог придумать практическое применение; 2) источников информации не так-то и много. Я предпочитаю учить по книгам, и с ними как-то вообще тухло. А все статьи по прологу начинаются и заканчиваются определением того, чей там кому батя Сократ.
Осознанных подходов к его использованию у меня было три, и все они связаны с попытками решить головоломки в компьютерных играх, над которыми мне было западло думать самостоятельно. Первая была давным давно в какой-то из частей «Нэнси Дрю» и чем-то напоминала судоку. Вторая была в прошлом году в «We Were Here Together» — там мне просто не хватило мозгов описать концептуальную модель задачи синтаксисом языка. Третья была буквально на днях в «Dishonored 2» и являлась вариацией т.н. «задачи Эйнштейна». Я потратил полтора часа, чтобы вспомнить синтаксис, все эти темы с унификацией и т.п., описать факты и предикаты для задачи и получить на выходе false вместо списка, кто там где живёт и чем бухает 😂 Не хватило знаний/опыта, чтобы правильно увязать эти предикаты воедино. Стоит ли говорить, что во всех трёх случаях жена находила правильный ответ на листочке бумаги гораздо быстрее и безо всякого программирования.
Зачем вообще его учить? Разве кто-то ещё его использует? Да, оказалось, что используют. Например, кореш когда-то на работе просветил меня, что в Gerrit встроен движок пролога для описания правил сабмита патчсетов. Да и вообще у меня есть ощущение, что огромный кусок потенциально полезных знаний недополучен.
Если вы шарите Prolog и можете подсказать, с чего и как лучше начинать, напишите мне плз.
Наткнулся на yet another ФП язык, компилящийся в JavaScript — Clio. Сам по себе он не примечательный, и если сегодня о нём узнают, то завтра забудут. Интересно тут другое.
Можно сколько угодно стебать хипстеров-миллениалов, которые ежедневно переизобретают давно существующие вещи и суют свой JS везде, но есть у них одно преимущество: в отличие от «дедов» они умеют сделать красиво и зачастую удобно. То и дело цепляю какие-то микроидеи.
Посмотрите на скрин: у бинаря, которым представлен язык, есть отдельная команда
Как там у вас, сишники, код без ньюлайна в конце файла уже компилится?)
Можно сколько угодно стебать хипстеров-миллениалов, которые ежедневно переизобретают давно существующие вещи и суют свой JS везде, но есть у них одно преимущество: в отличие от «дедов» они умеют сделать красиво и зачастую удобно. То и дело цепляю какие-то микроидеи.
Посмотрите на скрин: у бинаря, которым представлен язык, есть отдельная команда
highlight, которая выводит код в терминал с подсветкой синтаксиса! How cool is that‽ Вроде такая мелочь, а приятно 🙂Как там у вас, сишники, код без ньюлайна в конце файла уже компилится?)
Зацените. BMW продемонстрировала свою новую инфотейнмент-систему iDrive 8. Из промо-ролика наверняка понятно только одно: по ходу Microsoft поделилась с ними контактами студии 3D-шников и моушн-дизайнеров 🙂
YouTube
BMW iDrive 8 - The Most Advanced BMW Operating System
This new iDrive 8 will first launch in the BMW iX and then the BMW i4. Soon after that, the Bavarians will begin rolling it out, installing it in other model...