Forwarded from Pro WEB & IT
csvq - SQL-like query language for csv
Продолжаем тему работы с данными в терминале. CSV - удобный формат, но еще удобнее работать с ним написав SQL запрос
https://github.com/mithrandie/csvq
Продолжаем тему работы с данными в терминале. CSV - удобный формат, но еще удобнее работать с ним написав SQL запрос
https://github.com/mithrandie/csvq
👍7🤯7🔥1
Философия и технологии
Ядерная реакция может дать энергию и быть во благо, но может уничтожить планету.
Мобильник хорош для моментальной связи и получения информации, но может ослабить интеллект ребенка из-за игр.
И т.д.
Даже эти вопросы до конца не дорешали, хотя им сто лет в обед.
И ведь опять происходит какая-то такая херня, причем очень быстро.
Этот год, например, прям богат на прорывы в области нейросетей.
ChatGPT поддерживает беседу, сочиняет стихи и сценарии, переводит и пишет простые программы.
Dalle2, midjourney и тд уменьшили порог входа в графический дизайн почти до нуля
Copilot помогает писать код всё лучше и лучше
Даже на войне, говорят, используются интеллектуальные помощники по оптимальному управлению войсками.
И всё это проявилось за какой-то сраный год.
Опять философия отстаёт от технологий. Человечество наступает на все грабли, и лишь после этого думает о том, что будет дальше.
Правильная последовательность дйствий: сначала "зачем", потом "как".
Сейчас: сначала сделаем, а там посмотрим, что будет.
Конечно, генерируемые программой картинки - это не атомная бомба, но в профессиональной дизайнерской среде наступает заметный перекос. Неолуддиты уже пытаются напрягать регуляторов.
Если, предположим, какие-то ИИ-подходы радикально упростят или заменят сложные профессии ( программирование, бизнес, копирайтинг и тд), то что будут делать люди? Торговать пивом? Для чего?
Что смогут напрограммировать автоматические программисты с бесконечными ресурсами, какой пиздец это готовит миру?
Сейчас некому взвесить "за" и "против", а скорость изобретений зашкаливает.
Философы, где вы?
Чему учить детей сейчас, и какой в этом смысл?
Является ли человек венцом эволюции или же он лишь промежуточная ступень для алгоритмов?
Где общественная дискуссия на этот счет?
Может, эти вопросы надо задавать сразу боту chatGPT? :)
Ядерная реакция может дать энергию и быть во благо, но может уничтожить планету.
Мобильник хорош для моментальной связи и получения информации, но может ослабить интеллект ребенка из-за игр.
И т.д.
Даже эти вопросы до конца не дорешали, хотя им сто лет в обед.
И ведь опять происходит какая-то такая херня, причем очень быстро.
Этот год, например, прям богат на прорывы в области нейросетей.
ChatGPT поддерживает беседу, сочиняет стихи и сценарии, переводит и пишет простые программы.
Dalle2, midjourney и тд уменьшили порог входа в графический дизайн почти до нуля
Copilot помогает писать код всё лучше и лучше
Даже на войне, говорят, используются интеллектуальные помощники по оптимальному управлению войсками.
И всё это проявилось за какой-то сраный год.
Опять философия отстаёт от технологий. Человечество наступает на все грабли, и лишь после этого думает о том, что будет дальше.
Правильная последовательность дйствий: сначала "зачем", потом "как".
Сейчас: сначала сделаем, а там посмотрим, что будет.
Конечно, генерируемые программой картинки - это не атомная бомба, но в профессиональной дизайнерской среде наступает заметный перекос. Неолуддиты уже пытаются напрягать регуляторов.
Если, предположим, какие-то ИИ-подходы радикально упростят или заменят сложные профессии ( программирование, бизнес, копирайтинг и тд), то что будут делать люди? Торговать пивом? Для чего?
Что смогут напрограммировать автоматические программисты с бесконечными ресурсами, какой пиздец это готовит миру?
Сейчас некому взвесить "за" и "против", а скорость изобретений зашкаливает.
Философы, где вы?
Чему учить детей сейчас, и какой в этом смысл?
Является ли человек венцом эволюции или же он лишь промежуточная ступень для алгоритмов?
Где общественная дискуссия на этот счет?
Может, эти вопросы надо задавать сразу боту chatGPT? :)
🔥13
Если юзаете Gitlab, чекните бекапы, некотрые репозитории при бекапе помечаются как Empty и не попадают в бекап, хотя они не пустые. Можно неприятно удивиться.
Баг еще жив в версии 14 как минимум: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/28854#note_24652059
Баг еще жив в версии 14 как минимум: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/28854#note_24652059
GitLab
Some repositories (esp. wikis) are skipped from backup but they aren't empty (#28854) · Issues · GitLab.org / GitLab FOSS · GitLab
Summary Executive Summary: When doing a backup of GitLab, some repositories are marked as skipped whereas there are not empty....
👍4
Forwarded from Shit books (Maxi Frolof)
Приветики!🌷
Дочитал "Идеальный программист" Роберта Мартина. Читал две недели. Роберт Мартин - известный инженер и консультант в области ИТ-организаций. Он подписывал https://agilemanifesto.org/. Его почему-то периодически зовут Дядя Боб. Может быть у него просто есть племянники.
Книга - один из его известнейших трудов, наравне с "Чистым кодом" и "Чистой архитектурой". "Идеальный программист" - самая человекопонятная из них, поэтому я выбрал именно ее. Кроме этого, мне хотелось узнать, что такое "идеальный программист". Если такой специалист реально существует, то за определением стоит идти к человеку уровня Мартина.
Ответ оказался предельно прост. Как я уже читал в книгах Питерсона, Франкла и Перлза, любой человек характеризуется ответственностью. Настоящий профессионал у Мартина характеризуется ответственностью и знанием программирования. Именно эти понятия и поясняются на протяжении всей книги.
Ответственный программист не раздает пустых обещаний, умеет говорить "нет", умеет соглашаться, занимается развитием и изучает свою предметную область.
Профессиональный программист тренируется в мастерстве, выдает качественный продукт, развивает отношения с коллегами и умеет сотрудничать.
Все это подкрепляется большим количеством прикладных примеров из практики автора. Обсуждаются как абстрактные концепты ("ответственность"), так и конкретика ("программирование ночью").
Как специалисту в процессах, мне было интересно почитать размышления Мартина про экспертные оценки сроков выполнения задач в интеллектуальном труде. Для тех кто не в курсе - это очень мутная тема и там нет четкого ответа "как правильно". Именно в этой главе заметен переход Мартина от инженера и руководителя в консультанты. Приводимые примеры сменяются с рабочих на консультирующие и тон книги заметно меняется. Почитайте - поймете.
Итого - эта книга обязательна к прочтению всем участникам производственных цепочек в сфере ИТ. Скрам мастер, программист, аналитик, тестировщик, тимлид, продакт - я рекомендую ее всем. Она поможет вам лучше понять природу деятельности ИТ. Я не рекомендую эту книгу тем, кто работает вне ИТ - будет скучно и непонятно. Дальше взял читать "Шум" Дэниэла Канемана.
Дочитал "Идеальный программист" Роберта Мартина. Читал две недели. Роберт Мартин - известный инженер и консультант в области ИТ-организаций. Он подписывал https://agilemanifesto.org/. Его почему-то периодически зовут Дядя Боб. Может быть у него просто есть племянники.
Книга - один из его известнейших трудов, наравне с "Чистым кодом" и "Чистой архитектурой". "Идеальный программист" - самая человекопонятная из них, поэтому я выбрал именно ее. Кроме этого, мне хотелось узнать, что такое "идеальный программист". Если такой специалист реально существует, то за определением стоит идти к человеку уровня Мартина.
Ответ оказался предельно прост. Как я уже читал в книгах Питерсона, Франкла и Перлза, любой человек характеризуется ответственностью. Настоящий профессионал у Мартина характеризуется ответственностью и знанием программирования. Именно эти понятия и поясняются на протяжении всей книги.
Ответственный программист не раздает пустых обещаний, умеет говорить "нет", умеет соглашаться, занимается развитием и изучает свою предметную область.
Профессиональный программист тренируется в мастерстве, выдает качественный продукт, развивает отношения с коллегами и умеет сотрудничать.
Все это подкрепляется большим количеством прикладных примеров из практики автора. Обсуждаются как абстрактные концепты ("ответственность"), так и конкретика ("программирование ночью").
Как специалисту в процессах, мне было интересно почитать размышления Мартина про экспертные оценки сроков выполнения задач в интеллектуальном труде. Для тех кто не в курсе - это очень мутная тема и там нет четкого ответа "как правильно". Именно в этой главе заметен переход Мартина от инженера и руководителя в консультанты. Приводимые примеры сменяются с рабочих на консультирующие и тон книги заметно меняется. Почитайте - поймете.
Итого - эта книга обязательна к прочтению всем участникам производственных цепочек в сфере ИТ. Скрам мастер, программист, аналитик, тестировщик, тимлид, продакт - я рекомендую ее всем. Она поможет вам лучше понять природу деятельности ИТ. Я не рекомендую эту книгу тем, кто работает вне ИТ - будет скучно и непонятно. Дальше взял читать "Шум" Дэниэла Канемана.
👍16🤔1
Хотелоь бы подискутировать, провалидировать мысли.
Имхо ORM в целом работают плохо. В веб-приложениях, интенсивно работающих с базой, часть бизнес-логики (условия, джойны, группировки) неизбежно встроена в SQL-запросы (а не только существует в коде приложения), поэтому в случае ORM происходит автогенерация сложных SQL, которая по любому работает через жопу, неоптимально, да еще и плохо дебажится. DBAшники не менее чем в 50% своих выступлений упомянают примеры SQL, порожденных ORM-ками (там обычно зло ацкой сотоны из чорного ада).
Это конечно дело вкуса, но из моего опыта мне всегда было проще выразить запрос в сыром виде, а потом уже накручивать логику на результат, чем всё делать сразу через хитроописанную взаимосвязь сущностей. Ну а для сложных отчетов, понятно, ORM - это просто ппц.
С другой стороны, query builderы (не ORM, а просто построители запросов) часто помогают в случае, когда есть форма с миллионом необязательных галочек и инпутов, и строить сырой запрос конкатенацией - можно тронуться умом и допустить секьюрити проблемы.
Поэтому лично я для себя пришел к такому выводу: везде стоит писать сырые запросы, кроме тех случаев, когда надо запрос собирать из частей. Но и в этом случае использвать условный Squirrel (query builder для Go), а не условный Gorm (ORM для Go). Да, писанины немного больше, но код становится при этом более понятный и поддерживаемый.
В мире Go вообще не оч принято использовать ORM, фреймворки и т.д., пара лишних строк кода - это всего лишь хорошее медитативное занятие (c)
Имхо ORM в целом работают плохо. В веб-приложениях, интенсивно работающих с базой, часть бизнес-логики (условия, джойны, группировки) неизбежно встроена в SQL-запросы (а не только существует в коде приложения), поэтому в случае ORM происходит автогенерация сложных SQL, которая по любому работает через жопу, неоптимально, да еще и плохо дебажится. DBAшники не менее чем в 50% своих выступлений упомянают примеры SQL, порожденных ORM-ками (там обычно зло ацкой сотоны из чорного ада).
Это конечно дело вкуса, но из моего опыта мне всегда было проще выразить запрос в сыром виде, а потом уже накручивать логику на результат, чем всё делать сразу через хитроописанную взаимосвязь сущностей. Ну а для сложных отчетов, понятно, ORM - это просто ппц.
С другой стороны, query builderы (не ORM, а просто построители запросов) часто помогают в случае, когда есть форма с миллионом необязательных галочек и инпутов, и строить сырой запрос конкатенацией - можно тронуться умом и допустить секьюрити проблемы.
Поэтому лично я для себя пришел к такому выводу: везде стоит писать сырые запросы, кроме тех случаев, когда надо запрос собирать из частей. Но и в этом случае использвать условный Squirrel (query builder для Go), а не условный Gorm (ORM для Go). Да, писанины немного больше, но код становится при этом более понятный и поддерживаемый.
В мире Go вообще не оч принято использовать ORM, фреймворки и т.д., пара лишних строк кода - это всего лишь хорошее медитативное занятие (c)
👍6🫡1
Дженерики в Go в действии
Наконец-то заапрувили proposal по включению универсальных функций для работы со слайсами https://pkg.go.dev/golang.org/x/exp/slices в стандартную библиотеку. Насколько я понимаю, это будет уже в GO 1.21.
Господи боже мой, теперь можно будет поискать элемент в слайсе через стандартную библиотеку!!!!11111одинодинодин
Отсортировать слайс любого ordered типа одним вызовом без костылей
Сравнить два слайса
и т.д.
Я джва года ждал! Да что там, джесять лет! Кто там говорил, что дженерики в го не нужны?
Наконец-то заапрувили proposal по включению универсальных функций для работы со слайсами https://pkg.go.dev/golang.org/x/exp/slices в стандартную библиотеку. Насколько я понимаю, это будет уже в GO 1.21.
Господи боже мой, теперь можно будет поискать элемент в слайсе через стандартную библиотеку!!!!11111одинодинодин
Отсортировать слайс любого ordered типа одним вызовом без костылей
Сравнить два слайса
и т.д.
Я джва года ждал! Да что там, джесять лет! Кто там говорил, что дженерики в го не нужны?
🔥7
продолжаю учить английский, записывая видосы
https://www.youtube.com/watch?v=Q7gncqWvJW4
https://www.youtube.com/watch?v=Q7gncqWvJW4
YouTube
Make PostgreSQL query monitoring in 30 min with Golang and Graylog
You can easily make your own powerful query monitoring in half an hour. Information about every query at any period of time.
https://github.com/anton-okolelov/pgquerywatcher
https://github.com/anton-okolelov/pgquerywatcher
🔥4👍2😁2❤1
Если кто еще не видел, на что способен GPT4: https://www.youtube.com/watch?v=outcGtbnMuQ
пишет и дебажит бота, анализ картинок, по наброску делает сайт, считает налоги с учетом всех деталей, может делать это в стихах
пишет и дебажит бота, анализ картинок, по наброску делает сайт, считает налоги с учетом всех деталей, может делать это в стихах
YouTube
GPT-4 Developer Livestream
Join Greg Brockman, President and Co-Founder of OpenAI, at 1 pm PT for a developer demo showcasing GPT-4 and some of its capabilities/limitations.
Join the conversation on Discord here: discord.gg/openai. We'll be taking audience input from #gpt4-demo-suggestions.
Join the conversation on Discord here: discord.gg/openai. We'll be taking audience input from #gpt4-demo-suggestions.
❤4🤔1
Media is too big
VIEW IN TELEGRAM
Нейросеть пытается текстом нарисовать "девятый вал" Айвазовского. Получается что-то очень странное )))
Forwarded from Job for Go, Rust Developers
Уважаемая аудитория, у нас апдейт
Добры молодцы и девицы, у нас новина!
Из-за частых челобитных от вас об использовании в наших писаньях да лубочных представленьях басурманских словес, над писарями пестун наказал выписать толмача и впредь баять токмо на родном языке.
Челом бьём, вече NEWHR (Новый вербовщик)
Добры молодцы и девицы, у нас новина!
Из-за частых челобитных от вас об использовании в наших писаньях да лубочных представленьях басурманских словес, над писарями пестун наказал выписать толмача и впредь баять токмо на родном языке.
Челом бьём, вече NEWHR (Новый вербовщик)
👍8
Статья от моего камарада Анатолия. Вот это заморочился мужик!! А-хре-неть!!!
https://vc.ru/life/671075-pol-eto-lava-istoriya-razrabotki-prototipa-interaktivnoy-svetodiodnoy-igrovoy-platformy
https://vc.ru/life/671075-pol-eto-lava-istoriya-razrabotki-prototipa-interaktivnoy-svetodiodnoy-igrovoy-platformy
vc.ru
Пол — это лава: история разработки прототипа интерактивной светодиодной игровой платформы — Личный опыт на vc.ru
Anatoliy B Личный опыт 24.04.2023
🔥9👍4❤2💩1
МОСКВА, 27 апреля. /ТАСС/. Президент РФ Владимир Путин согласился с необходимостью развивать собственные протоколы связи взамен зарубежных TCP/IP для обеспечения технологического суверенитета и независимости страны.
https://tass.ru/politika/17633161
https://tass.ru/politika/17633161
TACC
Путин поддержал создание российских протоколов связи, альтернативных зарубежным
Глава государства провел мероприятие в индустриальном парке "Руднево", где обсуждали особенности развития отечественных беспилотных летательных систем
🤡15😢5🔥3👍1👀1
Принципы S.O.L.I.D. - говно, потому что невнятные, и требуют толкователя.
Я в этой индустрии десятилетия, и регулярно натыкаюсь на очередное объяснение или, наоборот, уточняющий вопрос. Недавно опять в твиттере наткнулся на "а что для вас SRP?".
На Хабре наверно уже 100 статей, одна другой хуже. Всегда по одному сценарию: кто-то пишет, как он понял, а ему суют в панамку, что на самом-то деле подразумевалось совсем другое. Очень похоже на толкование Библии, прям один в один.
Пользуюсь ли я SOLID? Не знаю. Я пользуюсь опытом. Уж точно не сверяюсь после каждой строчки кода, а удовлетворяет ли это, например, букве O.
Я в этой индустрии десятилетия, и регулярно натыкаюсь на очередное объяснение или, наоборот, уточняющий вопрос. Недавно опять в твиттере наткнулся на "а что для вас SRP?".
На Хабре наверно уже 100 статей, одна другой хуже. Всегда по одному сценарию: кто-то пишет, как он понял, а ему суют в панамку, что на самом-то деле подразумевалось совсем другое. Очень похоже на толкование Библии, прям один в один.
Пользуюсь ли я SOLID? Не знаю. Я пользуюсь опытом. Уж точно не сверяюсь после каждой строчки кода, а удовлетворяет ли это, например, букве O.
👏27👍3❤2🌚2👎1
Кстати, да, паттерны - тоже сомнительная штука. Никакие паттерны не сделают из джуна синьора.
Даже наоборот, как начнут паттерны везде пихать на ровном месте - код вообще не понять.
2+2 складывают через три пизды и 10 абстракций.
Понимание того, где гибкость нужна, где нет - имхо не особо формализуемо.
Т.е. джуну они не помогут, а синьор и так справится. Почерпнет из своего опыта и опыта коллег с помощью нейросети в черепной коробке.
Даже наоборот, как начнут паттерны везде пихать на ровном месте - код вообще не понять.
2+2 складывают через три пизды и 10 абстракций.
Понимание того, где гибкость нужна, где нет - имхо не особо формализуемо.
Т.е. джуну они не помогут, а синьор и так справится. Почерпнет из своего опыта и опыта коллег с помощью нейросети в черепной коробке.
👍18😁2👏1🎉1🌚1
Просили покритиковать какой-нибудь язык. А я не хочу, хочу посравнивать Angular и Go. Да, я знаю, что ангуляр - не язык, а фреймворк, да еще и фронтенд, и сравнивать их тупо, но я все равно буду :) Ну, я же испытываю эмоции при использовании, значит их можно сравнить.
Ну так вот. Когда-то, миллион лет назад, я жёстко хейтил язык Go за его примитивность и невыразительность. Например, если посмотреть на тот же Rust: Rust и Go - это как макбук и деревянные счёты. На го писать противно - слишком тупой язык. Я правда так думал.
Однако время шло, и судьба меня закинула сначала писать бекенд на Go, а потом, что ещё страннее, параллельно писать фронтенд на Ангуляре.
И вот мои наблюдения. То, что ты пишешь на Go, ты понимаешь полностью. Взял полено, выточил перочинным ножиком из него Буратино. Максимально просто. На ангуляре же ты машешь волшебной палочкой в надежде, что случайно всё сработает, и потом пытаешься понять, почему всё так странно выходит. То носа нет, то руки из жопы.
Например, сообщения об ошибках. Я ненавижу в Go в каждой строке кода вручную проверять каждый чих. Но зато ни одного сюрприза точно не будет: если ты не понял, где ошибка, значит сам долбоёб, некого винить.
В Ангуляре это жесть. Компонент может молча не отрисоваться, потому что ты в модуле в магическом месте не подключил другие магические модули. Или подключаешь к компоненту свой scss файл, и ошибся в пути. Получшь ошибку типа "include не сработал" (не помню точный текст) без указания строки кода или хоть какого-то намёка на причину проблемы.
Вообще, концепция конфигурации вместо программирования я теперь считаю сомнительной. Явное всё же лучше неявного.
Модули ангуляра придумал враг людей, ацкая сотона. Зато простейшая программа выглядит солидно: ты там что-то вечно декларируешь, импортируешь, компонуешь и тд., сразу видно, что умный. В го наоборот, чувствуешь себя тупым, код выглядит так себе, но всё, блять, понятно и работает.
Ну так вот, если Ангуляр и соизволит выдать ошибку, то это будет стектрейс на 100 строк, состоящий на 99% из магических обёрток.
В Go же ты сам явно определяешь, где как и что выводить. А магия и обертки там не приняты.
Скорость компиляции.
Go компилирует код мгновенно. Я хз, как это работает, но это волшебство. ×10 к скорости разработки.
Ангуляр же - пока переведёт из тайпскрипта в js, пока разберётся в своей магии, пока разогреет компьютер до состояния сковородки - пройдёт вечность.
Кстати, в go много бессмысленной писанины, и это раздражает, но с появлением copilot это всё за тебя пишет робот. Ты только пишешь if, а он уже добавляет err != nil, пишет в лог или там возвращает ошибку дальше. Магия, какой она должна быть.
Ну и последнее. Зависимостей в го поменьше. Раз в миллион где-то.
На го не принято использовать фреймворки, орм и любую другую магию - только точечно нужные библиотеки. Поэтому завендорить зависимости - норма жизни.
Кстати, декларируемая сверхспособность ангуляра "все есть из коробки" не такая уж и сверх. Календарь на диапазон дат - хер тебе, автокомплит, который бы из коробки нормально все делал - хер тебе, и тд. Условная валидация полей тоже, вручную. Всё надо дорабатывать или тянуть извне. И нафига это всё?
У меня всё. Подписывайтесь на наш канал, в следующей серии буду сравнивать jQuery и Haskell
Ну так вот. Когда-то, миллион лет назад, я жёстко хейтил язык Go за его примитивность и невыразительность. Например, если посмотреть на тот же Rust: Rust и Go - это как макбук и деревянные счёты. На го писать противно - слишком тупой язык. Я правда так думал.
Однако время шло, и судьба меня закинула сначала писать бекенд на Go, а потом, что ещё страннее, параллельно писать фронтенд на Ангуляре.
И вот мои наблюдения. То, что ты пишешь на Go, ты понимаешь полностью. Взял полено, выточил перочинным ножиком из него Буратино. Максимально просто. На ангуляре же ты машешь волшебной палочкой в надежде, что случайно всё сработает, и потом пытаешься понять, почему всё так странно выходит. То носа нет, то руки из жопы.
Например, сообщения об ошибках. Я ненавижу в Go в каждой строке кода вручную проверять каждый чих. Но зато ни одного сюрприза точно не будет: если ты не понял, где ошибка, значит сам долбоёб, некого винить.
В Ангуляре это жесть. Компонент может молча не отрисоваться, потому что ты в модуле в магическом месте не подключил другие магические модули. Или подключаешь к компоненту свой scss файл, и ошибся в пути. Получшь ошибку типа "include не сработал" (не помню точный текст) без указания строки кода или хоть какого-то намёка на причину проблемы.
Вообще, концепция конфигурации вместо программирования я теперь считаю сомнительной. Явное всё же лучше неявного.
Модули ангуляра придумал враг людей, ацкая сотона. Зато простейшая программа выглядит солидно: ты там что-то вечно декларируешь, импортируешь, компонуешь и тд., сразу видно, что умный. В го наоборот, чувствуешь себя тупым, код выглядит так себе, но всё, блять, понятно и работает.
Ну так вот, если Ангуляр и соизволит выдать ошибку, то это будет стектрейс на 100 строк, состоящий на 99% из магических обёрток.
В Go же ты сам явно определяешь, где как и что выводить. А магия и обертки там не приняты.
Скорость компиляции.
Go компилирует код мгновенно. Я хз, как это работает, но это волшебство. ×10 к скорости разработки.
Ангуляр же - пока переведёт из тайпскрипта в js, пока разберётся в своей магии, пока разогреет компьютер до состояния сковородки - пройдёт вечность.
Кстати, в go много бессмысленной писанины, и это раздражает, но с появлением copilot это всё за тебя пишет робот. Ты только пишешь if, а он уже добавляет err != nil, пишет в лог или там возвращает ошибку дальше. Магия, какой она должна быть.
Ну и последнее. Зависимостей в го поменьше. Раз в миллион где-то.
На го не принято использовать фреймворки, орм и любую другую магию - только точечно нужные библиотеки. Поэтому завендорить зависимости - норма жизни.
Кстати, декларируемая сверхспособность ангуляра "все есть из коробки" не такая уж и сверх. Календарь на диапазон дат - хер тебе, автокомплит, который бы из коробки нормально все делал - хер тебе, и тд. Условная валидация полей тоже, вручную. Всё надо дорабатывать или тянуть извне. И нафига это всё?
У меня всё. Подписывайтесь на наш канал, в следующей серии буду сравнивать jQuery и Haskell
❤20😁11👏5🤡5👍3
В программировании нет вообще никаких непреложных истин. Даже самые очевидные правила могут иметь контекст, в которых их применять нельзя. К сожалению в 99% организаций есть прям заповеди, обязательные к исполнению. И есть правила, которые считаются правилами хорошего тона (как не сморкаться в занавеску). Однако всегда бывают ситуации, когда лучше все-таки сморкаться.
Вот примеры.
DRY
Например, DRY - don’t repeat yourself. Хорошее полезное правило, но его можно довести до маразма. Из того что я встречал на практике: есть два разных по бизнес-смыслу раздела, которые начинались с простого CRUD, и многие части (и фронта и бека) выглядели во многом абсолютно одинаково. Если их объединить с помощью общей высосанной из пальца абстракции и тем самым избавиться от небольшого дублирования кода, то потом (очень скоро) можно будет сойти с ума, потому что эти две вещи скоро разъедутся, обрастая кастомными фичами, и абстракция будет только вредить. Нельзя абстрагировать неабстрагуемое, даже если DRY нарушен.
«[Немного] дублирования обходится гораздо дешевле, чем неправильная абстракция» — Сэнди Мец
Т.е. DRY - хороший принцип, но бывают исключения.
KISS
Keep it simple, stupid. Всем хотелось бы держать программу простой, но иногда приходится всё усложнить, чтобы добиться ускорения разработки, уменьшения количества ошибок и т.д. Например, KISS может войти в прямое противоречие с тем же DRY: код с дублированием зачастую проще понимать (меньше абстракций и зависимостей), зато это огромное поле для ошибок (забыл поправить в третьем файле) и замедление добавления новых фич.
В фунции не должно быть более чем X строк, длина строки должна быть не более чем Y и т.д. (правила линтера)
Обычно этот X придумывается от балды. В таких случаях хочется спросить, почему именно столько, а не на одну больше или на две меньше. И обычно время от времени появляется вполне валидный код, который по каким-то причинам не влезает, и люди извращаются как могут, переписывают через дичь, чтобы как-то пайплайн протащить.
Мы пишем только на таком-то языке
И начинаются пляски с бубном вокруг PHP, на котором пытаются завести highload-решения. Это выливается в интереснейшие инженерные задачи, как из говна и палок сделать самолёт. Бесконечные темы для докладов на конференциях.
и тысячи таких
У каждого программиста между ушей есть нейросеть, которой он пользуется. Нельзя рассматривать его как бездумного робота.
Если кто-то тупой и постоянно творит дичь, то не надо добавлять правил и следить за их исполнением, тупого надо просто увольнять. Зачем вам тупой???. Если это опытный программист, и в большинстве случаев поступает разумно, то не надо его ограничивать всякой хернёй - это уменьшение эффективности, да еще и снижение мотивации
Вот примеры.
DRY
Например, DRY - don’t repeat yourself. Хорошее полезное правило, но его можно довести до маразма. Из того что я встречал на практике: есть два разных по бизнес-смыслу раздела, которые начинались с простого CRUD, и многие части (и фронта и бека) выглядели во многом абсолютно одинаково. Если их объединить с помощью общей высосанной из пальца абстракции и тем самым избавиться от небольшого дублирования кода, то потом (очень скоро) можно будет сойти с ума, потому что эти две вещи скоро разъедутся, обрастая кастомными фичами, и абстракция будет только вредить. Нельзя абстрагировать неабстрагуемое, даже если DRY нарушен.
«[Немного] дублирования обходится гораздо дешевле, чем неправильная абстракция» — Сэнди Мец
Т.е. DRY - хороший принцип, но бывают исключения.
KISS
Keep it simple, stupid. Всем хотелось бы держать программу простой, но иногда приходится всё усложнить, чтобы добиться ускорения разработки, уменьшения количества ошибок и т.д. Например, KISS может войти в прямое противоречие с тем же DRY: код с дублированием зачастую проще понимать (меньше абстракций и зависимостей), зато это огромное поле для ошибок (забыл поправить в третьем файле) и замедление добавления новых фич.
В фунции не должно быть более чем X строк, длина строки должна быть не более чем Y и т.д. (правила линтера)
Обычно этот X придумывается от балды. В таких случаях хочется спросить, почему именно столько, а не на одну больше или на две меньше. И обычно время от времени появляется вполне валидный код, который по каким-то причинам не влезает, и люди извращаются как могут, переписывают через дичь, чтобы как-то пайплайн протащить.
Мы пишем только на таком-то языке
И начинаются пляски с бубном вокруг PHP, на котором пытаются завести highload-решения. Это выливается в интереснейшие инженерные задачи, как из говна и палок сделать самолёт. Бесконечные темы для докладов на конференциях.
и тысячи таких
У каждого программиста между ушей есть нейросеть, которой он пользуется. Нельзя рассматривать его как бездумного робота.
Если кто-то тупой и постоянно творит дичь, то не надо добавлять правил и следить за их исполнением, тупого надо просто увольнять. Зачем вам тупой???. Если это опытный программист, и в большинстве случаев поступает разумно, то не надо его ограничивать всякой хернёй - это уменьшение эффективности, да еще и снижение мотивации
👍25