Как стать автором
Поиск
Написать публикацию
Обновить
1120.76

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Кружок робототехники VS технический центр

Время на прочтение5 мин
Количество просмотров3.7K

Обучать детей техническому мастерству, либо программированию можно по-разному. Я нашёл наиболее эффективный способ, при котором вовлеченность детей в процесс максимальна и вы остаётесь не с пустыми карманами.

Читать далее

Почему в мире так много отстойного ПО

Время на прочтение5 мин
Количество просмотров11K
Мы буквально окружены отстойным программным обеспечением. Пенсионные фонды спотыкаются об написанные десятки лет назад пакетные скрипты с ошибочными допущениями. Из кредитных организаций утекает более сотни миллионов номеров социального обеспечения и других конфиденциальных данных. И это ещё не говоря о куче забагованного и раздражающего ПО, создаваемых и мелкими поставщиками, и крупными корпорациями.

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

Чтобы понять причину этого, нам сначала нужно понять, как соотносится навык разработчика с полезностью ПО, которое он создаёт для решения определённой задачи.
Читать дальше →

Настройка CI/CD скриптов миграции БД с нуля с использованием GitLab и Liquibase

Время на прочтение20 мин
Количество просмотров26K

Добрый день, уважаемые читатели. Совсем недавно мне пришлось осваивать новую для себя область CI/CD, настраивая с нуля доставку скриптов миграции базы данных в одном из проектов. При этом было тяжело преодолеть самый первый этап "глаза боятся", когда задача вроде бы ясна, а с чего начать, не знаешь. Однако вопрос оказался на поверку значительно проще, чем казалось изначально, давая при этом неоспоримые преимущества ценой нескольких часов работы и не требуя никаких дополнительных средств, кроме обозначенных в заголовке.

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

Читать далее

Как отладить программу, к которой у тебя нет доступа

Время на прочтение5 мин
Количество просмотров7.5K

Фото: Intricate Explorer, Unsplash

Сегодня я вспомнил один из любимых «программистских мифов», который вполне может быть городской легендой, и свою собственную версию «чёрного ящика», который требовал отладки.

Городская легенда повествует о радиоактивных железнодорожных вагонах из Украины, вызывавших баги в компьютерной системе, прочитать её можно здесь.

Разбираемся с «чёрными ящиками» и c тем, какими они бывают сегодня


«Чёрный ящик» — это популярная концепция программирования, предполагающая, что мы находимся снаружи системы или компонента, не имея прямого доступа к коду. Это может быть вызвано различными факторами:

  • Вы работаете со сторонним ПО, разработчики которого просто не раскрывают код.
  • Вы взаимодействуете с API, внутренняя логика которого абстрагирована.
  • У вас нет необходимых полномочий для доступа к Git-репозиторию.
  • Даже система с полным доступом может де-факто стать «чёрным ящиком» из-за своей сложности.
  • Сотрудник, обладавший всеми ключами и знаниями, внезапно уволился/пропал/умер.
  • Легаси-система состоит из .dll, которая «всегда работала» на сервере, и не была подключена к системе контроля версий. Чтобы просто посмотреть на код, её нужно декомпилировать, если это возможно, конечно.
Читать дальше →

Почему программисты добавляют новые функции, но не убирают лишние?

Время на прочтение6 мин
Количество просмотров19K

В этой конструкции Lego крыша поддерживается блоком в одном углу здания. Когда сверху кладут кирпич, крыша падает на фигурку человечка. Как решить эту проблему? Источник: научная работа Адамс и др., Nature vol. 592 (2021)

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

Конечно, ожирение сайтов и софта сопровождается повышением производительности компьютеров. И в каком-то смысле стимулирует этот рост производительности. То есть налицо цикл положительной обратной связи, грех жаловаться. Но всё-таки возникает вопрос: что же мешает разработчикам удалять лишние функции? Частичный ответ мы находим в научной работе «Люди систематически упускают субтрактивные изменения», опубликованной 7 апреля 2021 года в журнале Nature. Этот феномен проявляется не только в программировании, но и в решении других задач: при улучшении различных объектов, идей или ситуаций, и в целом в жизни людей.
Читать дальше →

Современный Javascript: всё, что вы пропустили за последние 10 лет

Время на прочтение7 мин
Количество просмотров15K
JavaScript прошел долгий путь с тех пор, как я знал его как букву «D» в DHTML. Для всех, кто, как я, не хотел использовать новейший синтаксис, который может потребовать полифиллов или транспилятора, я написал эту шпаргалку, чтобы вы познакомились со всеми достоинствами, которые широко поддерживаются в современных браузерах.

Содержание

  • Array functions
  • const/let
  • Nullish coalescing ?? and Optional chaining?.. operators
  • Async/Await
  • Стрелочные функции ()=>{}
  • for...of
  • for await...of
  • Classes
  • get/set
  • function default parameters
  • function named parameters
  • function rest… parameter
  • Destructuring
  • Shorthand functions aka Methods
  • Promise.all
  • Template literals
  • Proxy
  • Module import/export
  • Читать ещё

(Исправления по качеству перевода, пожалуйста, присылайте в личку)
Читать дальше →

Личный опыт: подготовка к магистратуре JetBrains в Университете ИТМО и первые впечатления

Время на прочтение6 мин
Количество просмотров6.4K

Всем привет! На связи Антон Клочков, студент первого курса корпоративной магистратуры JetBrains «Разработка программного обеспечения» на базе Университета ИТМО. Я хочу рассказать, как выбирал программу, и главное — оправдались ли мои ожидания.

Читать далее

Транзакции. Часть 1. Конспект книги «Designing Data-Intensive Applications»

Время на прочтение12 мин
Количество просмотров13K

Эта статья является конспектом книги «Designing Data-Intensive Applications».

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

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

В этом конспекте рассмотрим примеры возможных проблем и изучим алгоритмы, которые используют БД для их предотвращения. Рассмотрим вопрос управления конкурентным доступом, обсудим различные виды возникающих состояний гонки, а также реализацию в базах различных уровней изоляции.

Читать далее

Инструменты для аудита CSS

Время на прочтение6 мин
Количество просмотров9.4K


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

Существуют некоторые инструменты, облегчающие выполнение указанных задач. Но давайте начнем с того, что понимается под «аудитом» CSS.

Аудит CSS — задача не из легких


Как правило, оценка качества кода включает в себя его анализ в поиске багов и других проблем, например, проблем с производительностью. Для большинства языков программирования концепция аудита кода проста: она работает или не работает. Но CSS — это особенный язык, большая часть ошибок которого игнорируется браузером. Один и тот же стиль можно применять совершенно по-разному. Это обуславливает сложность аудита CSS. И «сложность» — это еще мягко сказано.
Читать дальше →

SCALA 3

Время на прочтение6 мин
Количество просмотров6.9K

После 8 лет работы 28 000 коммитов, 7 400 пул реквестов, 4 100 закрытых issues — Scala 3 наконец-то вышла. С момента первого коммита 6 декабря 2012 года более ста человек внесли свой вклад в проект. Сегодня Scala 3 включает в себя последние исследования в области теории типов, а также отраслевой опыт Scala 2. Мы увидели, что хорошо (или не очень хорошо) работает для сообщества в Scala 2. На основе этого опыта мы создали третью итерацию Scala — простую в использовании, изучении и масштабировании.

Программирование и писательство

Время на прочтение3 мин
Количество просмотров5.9K
Год назад я приостановил свой путь в программировании и начал писать роман думая, что моя новая деятельность сильно отличается от предыдущей. Спустя много написанных слов, но чаще переписанных, я почти уверен в обратном: программирование больших систем и написание романов имеют много общих черт и схожие процессы.

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

Однако между этими двумя видами деятельности существует гораздо более глубокая связь: хорошая программа и хороший роман — это сумма хорошо работающих местных и глобальных элементов. Хороший код должен состоять из хорошо написанных и читаемых отдельных элементов, но в целом различные части программы должны быть ортогональными, согласованными и четко взаимодействовать друг с другом. Роман также должен быть хорош на тех же двух уровнях — микро и макро. Предложения должны быть хорошо написаны, но общая структура и взаимосвязь между частями также имеют решающее значение.
Читать дальше →

Чем меня не устраивает гексагональная архитектура. Моя имплементация DDD – многоуровневая блочная архитектура

Время на прочтение7 мин
Количество просмотров9.2K


* В данной статье примеры будут на TypeScript


Краткое предисловие


Что такое DDD (Domain Driven Design) вопрос обширный, но если в кратце (как Я это понимаю) — это про перенос бизнес логики, как она есть, в код, без углубления в технические детали. То есть в идеале, человек, который знает за бизнес процессы, может открыть код и понять, что там происходит (так кстати часто бывает в 1С).


Всё это сопровождается кучей разных рекомендаций по технической реализации вопроса.


Для лучшего понимания статьи советую прочитать материалы, касающиеся DDD.

Читать дальше →

CatBoost и ML-конкурсы

Время на прочтение8 мин
Количество просмотров5K

Эта статья основана на данных конкурса, который компания Driven Data опубликовала для решения проблем с источниками воды в Танзании. Краткий анализ данных, подготовка данных и бэйзлайн модель с использованием CatBoost. Целевая аудитория - те, кто хотят начать свой путь в ML-соревнованиях.

Читать далее

Ближайшие события

Не начинайте учиться кодингу с Python, начните с языка C

Время на прочтение4 мин
Количество просмотров61K


Python удивителен своей способностью продвигать программирование. Он как будто является подтверждением популярной идеи «если вы знаете английский, то должны знать, как писать код». Благодаря синтаксису, напоминающему английский язык, парадигме отступов и огромному количеству библиотек другие языки по сравнению с Python начинают выглядеть бесполезными.

Python — язык программирования по умолчанию для «самой сексуальной профессии 21-го века». Да, громкие слова о данных по-прежнему сохраняют за data science репутацию «сексуальной работы», хотя современные обстоятельства уже не полностью поддерживают это утверждение. Языку Python удалось добиться того, что он позволяет решать большинство проблем data science.

Кроме того, Python также популярен в блокчейне, DevOps и кибербезопасности.

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

Несмотря на всё это и вопреки всей привлекательности Python, он не подходит для начинающих в программировании. Лучшим вариантом является C.

В этой статье я расскажу о том, почему в качестве опорной точки вместо Python следует использовать C.
Читать дальше →

7 шагов к открытию своего детского технического центра / Сможет каждый

Время на прочтение16 мин
Количество просмотров15K

Уже 4 года я занимаюсь техническим развитием детей в России. Начиналось всё с открытия небольшого кружка роботехники и со временем переросло в комплексный детский технический центр. Сегодня я подготовил для вас инструкцию к запуску собственного детского центра.

Читать далее

Планирование редакции Rust 2021

Время на прочтение9 мин
Количество просмотров5.5K

Мы рады объявить третью редакцию языка Rust — Rust 2021, которая выйдет в октябре. Rust 2021 содержит несколько небольших изменений, которые, тем не менее, значительно улучшат удобство использования Rust.


Что такое Редакция?


Релиз Rust 1.0 установил "стабильность без застоя" как основное правило Rust. Начиная с релиза 1.0, это правило звучало так: выпустив функцию в стабильной версии, мы обязуемся поддерживать её во всех будущих выпусках.


Однако есть случаи, когда возможность вносить небольшие изменения в язык бывает полезной — даже если у них нет обратной совместимости. Самый очевидный пример — введение нового ключевого слова, которое делает недействительными переменные с тем же именем. Например, в первой версии Rust не было ключевых слов async и await. Внезапное изменение этих слов на ключевые слова в более поздних версиях привело бы к тому, что, например код let async = 1; перестал работать.


Редакции — механизм, который мы используем для решения этой проблемы. Когда мы хотим выпустить функцию без обратной совместимости, мы делаем её частью новой редакции Rust. Редакции опциональны и должны прописываться явно, поэтому существующие пакеты не видят эти изменения, пока явно не перейдут на новую версию. Это означает, что даже последняя версия Rust по-прежнему не будет рассматривать async как ключевое слово, если не будет выбрана версия 2018 или более поздняя. Этот выбор делается для каждого пакета как части Cargo.toml. Новые пакеты, созданные cargo new, всегда настроены на использование последней стабильной редакции.

Читать дальше →

Многоразовый шаблон логирования на Python для всех ваших приложений в Data Science

Время на прочтение4 мин
Количество просмотров7.7K

Идеальный способ отлаживать и отслеживать приложения — хорошо определённые, информативные и удобно структурированные логи. Они являются необходимым компонентом любого — малого, среднего или крупного — проекта на любом языке программирования, не только на Python. Не используйте print() или корневой логгер по умолчанию, вместо этого настройте логирование на уровне проекта. К старту нового потока курса по Data Science, мы перевели статью, автор которой решил поделиться своим шаблоном для логирования. Не лишним будет сказать, что этот шаблон пришёлся по душе многим специалистам — от дата-сайентистов профессионалов и до разработчиков ПО разного уровня.

Читать далее

Цифровая геология, или пусть машины думают и находят золото для нас в Западной Сибири без геологических данных

Время на прочтение3 мин
Количество просмотров4.6K

Эта статья является продолжением двух предыдущих: Ударим биспектром по бездорожью, или как найти золото в Сибири, в которой мы рассмотрели геологическую модель месторождения золота на территории Новосибирской области и Ищем рудное золото на острове Сумбава, Индонезия, в которых мы построили геологически обусловленную модель машинного обучения для поиска золота или других рудных минералов по всему Тихоокеанскому рудному поясу, используя для геологического моделирования открытые данные на платформе Google Earth Engine (GEE).


Убедившись в сходстве геологических моделей Сибири и Индонезии, применим классификатор для рудного золота Западной Сумбавы, Индонезия для Сибири. Так мы получим геологически корректный детальный прогноз золоторудности для Сибири, не используя вообще никаких геологических данных для этого региона.


Читать дальше →

С помощью Python создаём математические анимации, как на канале 3Blue1Brown

Время на прочтение6 мин
Количество просмотров37K

Вы наверняка когда-то испытывали трудности в понимании математических концепций алгоритмов машинного обучения и для лучшего понимания темы пользовались обучающим ресурсом 3Blue1Brown. 3Blue1Brown — известный математический YouTube-канал, который ведёт Грант Сандерсон. Многим нравится 3Blue1Brown за прекрасные объяснения Гранта и великолепные анимации.

21 мая стартует новый поток курса о математике для Data Science. Специально к его запуску мы делимся переводом, в котором автор решил рассказать, как делать анимации, подобные анимациям на канале 3Blue1Brown, чтобы вы могли иллюстрировать свои идеи и рассуждения о математике и не только.

Читать далее

Преобразуем проект на Python в исполняемый файл .EXE

Время на прочтение3 мин
Количество просмотров448K

С помощью Auto PY to EXE можно с лёгкостью преобразовывать файлы .py в файлы .exe. Благодаря этому ваш проект на Python будет работать как десктопное приложение и вы сможете запускать приложение на других машинах без необходимости установки Python.

В этой статье я расскажу, как преобразовать проект на Python в исполняемый файл. Решение будет работать вне зависимости от количества файлов .py в приложении. Стоит учесть, что Auto PY to EXE работает только с Python 3.5 или выше.
Читать дальше →

Вклад авторов