Как стать автором
Обновить

Программирование — не отстой! По крайней мере, не должно быть им

Время на прочтение 5 мин
Количество просмотров 8.8K
Разработка веб-сайтов *
Перевод
Перевод статьи из блога Enfranchised Mind.

Недавно мне на глаза попалось два текста, на которые я просто не мог не ответить. Первый, самый ужасный, — это статья на Daily WTF «Программирование — отстой! Или что-то вроде того». Второй — пост о том, почему функциональное программирование не получает распространения.

Читать дальше →
Всего голосов 104: ↑95 и ↓9 +86
Комментарии 64

Auto dependency injection в Javascript

Время на прочтение 5 мин
Количество просмотров 9.8K
JavaScript *Программирование *ООП *
Из песочницы

Вступление


Как все мы знаем javascript это язык в котором очень просто выстрелить себе в ногу. Работая с этим языком уже почти пять лет, я не раз сталкивался с тем, что javascript предоставляет очень скудные инструменты для создания абстракций высокого уровня. А, создавая полноценные MVVM/MVP приложения, сталкиваешься с тем что, основной проблемой является трудность сохранить код и абстракцию в чистоте, не говоря уж о полноценном следовании SOLID принципам.

Со временем я пришел к пониманию, что один из основных паттернов который смог бы мне помочь -это Dependency Injection. И я решил поэкспериментировать с ним в JS.
Конечно, JS не предоставляет инструментов для полноценного следования этому паттерну (элементарное отсутствие тех же рефлекшенов), поэтому я решил поставить для себя несколько Acceptance Criteria, которых я хотел бы достигнуть адаптировав этот паттерн к такой уникальной среде как JS.
Читать дальше
Всего голосов 14: ↑8 и ↓6 +2
Комментарии 20

Генератор абстракций — видеообзор

Время на прочтение 1 мин
Количество просмотров 36K
Программирование *C++ *

Генератор абстракций (видеообзор)


Привет, Хабрахабр!
Не для широких масс, но для любителей программирования и графики решился я опубликовать сей пост.
image
Читать дальше →
Всего голосов 111: ↑97 и ↓14 +83
Комментарии 40

Программисты и человеческий фактор

Время на прочтение 7 мин
Количество просмотров 13K
Разработка веб-сайтов *Программирование *

Введение

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

технарь

Миф о технаре

Итак, я бросаю вызов утверждению, что программист — технарь. Не в частном смысле, а в общем. То есть, я не пытаюсь доказать, что нельзя найти программиста, который является технарем. Я утверждаю, что свойство «технарь» для программиста ни необходимо, ни достаточно.
Читать дальше →
Всего голосов 44: ↑10 и ↓34 -24
Комментарии 21

Тестирование через абстрактные классы в TestNG

Время на прочтение 7 мин
Количество просмотров 8.9K
Тестирование IT-систем *Java *TDD *
Туториал

Вступление


Вы всё ещё тестируете с помощью JUnit и не обращаете внимания на TestNG? Тогда мы идём к вам.

Одним из преимуществ TestNG является возможность создания тестовых массивов данных для одного или нескольких тестов. Но мало кто использует такое преимущество от @DataProvider как пустой набор тестовых данных. В чём оно выражается?

Допустим у нас есть некий тест testData(String value) и метод datas обеспечивающий DataProvider. Если datas вернёт нам массив из 3-х элементов, то testData выполнится 3 раза. Но если datas вернёт нам пустой массив, то testData не выполнится ни разу
Картинки


Давайте попробуем воспользоваться данной особенностью.

Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 9

Абстракции без накладных расходов: типажи в Rust

Время на прочтение 11 мин
Количество просмотров 15K
Программирование *Rust *
Перевод
В предыдущем посте (англ.) мы затронули два столпа дизайна Rust (поскольку во внутренней речи я постоянно склоняю название языка, дальше я буду использовать русскоязычное название «раст», что мне кажется более органичным — прим. перев.):
  • безопасное использование памяти без сборщика мусора,
  • многопоточность без гонок данных.

Этот пост начинает рассказ о третьем столпе:
  • абстракции без накладных расходов.

Одна из мантр C++, которая делает его таким подходящим для системного программирования — принцип абстракции с нулевой стоимостью:
Реализации C++ подчиняются принципу нулевой стоимости: ты не платишь за то, что не используешь [Страуструп, 1994]. Более того: то, что ты используешь, кодируется наилучшим образом.

– Бьёрн Страуструп

Читать дальше →
Всего голосов 39: ↑37 и ↓2 +35
Комментарии 38

Начинаем любить Go

Время на прочтение 5 мин
Количество просмотров 26K
Open source *Программирование *Go *
Recovery mode
Перевод
Если что, это вольный перевод статьи из блога Jeremy Mikkola.

Эта статья о том, как некоторое время спустя я распробовал и таки полюбил язык Go (аки golang).

Жалобы

Еще год назад у меня было полно жалоб на тот или иной аспект Go. В основном я жаловался на то, что при том, что ты не можешь использовать Go как «настоящий системный язык» (в плане написать-на-нем-операционку), тебе все равно приходится думать о том, о чем обычно приходится думать в системных языках: например, использовать тут указатель или нет. Система типов лежит в непродуктивном ущелье между достаточной строгостью, чтобы стать «автоматичной» (привет адептам Haskell!) и достаточной динамичностью, чтобы не отвлекать (как в Python). Какое-то время я тупил на таких вещах, как проход по юникодовой строке не символами, а байтами, и всякое такое. Я обвинял Go в том, что он так-то не всегда следует своему принципу простоты, так как в нем есть много разных узких штук, вроде make(). И конечно же я жаловался на то, что при работе с Go постоянно приходится повторять блоки if err != nil { return err }.

Поначалу я точно не мог назвать себя фанатом Go.

В техническом плане я согласен с тем, что большинство моих жалоб корректны. Я согласен с тем, что систему типов можно было бы придумать и покруче, а от указателей не помешало бы немного абстрагироваться. Но как только я начинаю понимать, что (не все, но многие) проблемы, на которые я жаловался, на самом деле вроде как даже и не непрягают. В действительности это напоминало нытье на целый лес, из-за пары некрасивых деревьев. В повседневном использовании языка большинство вещей, о которых я так волновался, вообще не давали о себе знать. Я ни разу не встречал баг, так или иначе связанный с проходом по строке. В реальном коде ты почти не кастишь interface{} так часто, как хотелось бы тем ребятам, которые дрочат на системы типов. Ах да, нет беды в том, чтобы вызывать make() в одном месте и new() в другом. Больше всего я ругался на те архитектурные решения языка, которые усложняли создание абстракций. Ты не можешь просто так сделать структуру данных, которая станет альтернативой к встроенным структурам данных (привет кодогенерации!). Без обобщений ты не сможешь строить большие обобщенные абстракции. Скорее всего, это сделано намеренно.
Читать дальше →
Всего голосов 61: ↑43 и ↓18 +25
Комментарии 73

«Страшные» абстракции Haskell без математики и без кода (почти). Часть I

Время на прочтение 31 мин
Количество просмотров 46K
Программирование *Haskell *Функциональное программирование *
Туториал
— Для чего нужны монады?
— Для того, чтобы отделить чистые вычисления от побочных эффектов.
(из сетевых дискуссий о языке Haskell)

Шерлок Холмс и доктор Ватсон летят на воздушном шаре. Попадают в густой туман и теряют ориентацию. Тут небольшой просвет — и они видят на земле человека.
— Уважаемый, не подскажете ли, где мы находимся?
— В корзине воздушного шара, сэр.
Тут их относит дальше и они опять ничего не видят.
— Это был математик, – говорит Холмс.
— Но почему?
— Его ответ совершенно точен, но при этом абсолютно бесполезен.
(анекдот)

Когда древние египтяне хотели написать, что они насчитали 5 рыб, они рисовали 5 фигурок рыб. Когда они хотели написать, что насчитали 70 людей, они рисовали 70 фигурок людей. Когда они хотели написать, что насчитали в стаде 300 овец, они… — ну, в общем, вы поняли. Так и мучились древние египтяне, пока самый умный и ленивый из них не увидел нечто общее во всех этих записях, и не отделил понятие количества того, что мы подсчитываем, от свойств того, что мы подсчитываем. А потом другой умный ленивый египтянин заменил множество палочек, которыми люди обозначали количество, на значительно меньшее количество знаков, короткой комбинацией которых можно было заменить огромное количество палочек.

То, что сделали эти умные ленивые египтяне, называется абстракцией. Они подметили нечто общее, что свойственно всем записям о количестве чего-либо, и отделили это общее от частных свойств подсчитываемых предметов. Если вы понимаете смысл этой абстракции, которую мы сегодня называем числами, и то, насколько она облегчила жизнь людям, то вам не составит труда понять и абстракции языка Haskell — все эти непонятные, на первый взгляд, функторы, моноиды, аппликативные функторы и монады. Несмотря на их пугающие названия, пришедшие к нам из математической теории категорий, понять их не сложнее, чем абстракцию под названием «числа». Для их понимания совершенно не требуется знать ни теорию категорий, ни даже математику в объёме средней школы (арифметики вполне достаточно). И объяснить их тоже можно, не прибегая к пугающим многих математическим понятиям. А смысл абстракций языка Haskell точно такой же, как и у чисел — они значительно облегчают программистам жизнь (и вы пока даже не представляете, насколько!).
Читать дальше →
Всего голосов 53: ↑49 и ↓4 +45
Комментарии 36

Пишем свой язык программирования, часть 1: пишем языковую ВМ

Время на прочтение 12 мин
Количество просмотров 28K
Высокая производительность *Open source *Виртуализация *Софт Мозг
Туториал

Введение


Доброго времени суток всем хабрачитателям!

Итак, пожалуй стоит сказать, что целью моей работы, на основе которой будет написан ряд статеек было пройти весь путь создания полнофункционального ЯП самому с 0 и затем поделиться своими знаниями, наработками и опытом с интересующимися этим людьми.

Я буду описывать создание языка, который описал ранее тут.

Он заинтересовал многих и вызвал бурную дискуссию в комментариях. Следовательно — тема интересна многим.

Думаю, что сразу стоит выложить информацию о проекте:

Сайт (будет заполнен документацией чуть позже).
Репозиторий

Чтобы самому потрогать проект и увидеть все в действии, лучше скачать репозиторий и запускать все из папки bin. В релиз я не спешу выкладывать последние версии языка и среды выполнения, т.к. мне порой бывает просто лень это делать.

Кодить я умею на C/C++ и на Object Pascal. Проект я писал на FPC, т.к. на мой взгляд этот язык гораздо проще и лучше подходит для написание подобного. Вторым определяющим фактором стало то, что FPC поддерживает огромное количество целевых платформ и пересобрать проект под нужную платформу можно с минимумом переделок. Если вы по непонятным мне причинам не любите Object Pascal, то не спешите закрывать пост и бежать кидаться камнями в комментарии. Этот язык весьма красив и нагляден, а кода я буду приводить не так уж и много. Только то, что нужно.

Итак, начну пожалуй я своё повествование.
Читать дальше →
Всего голосов 34: ↑27 и ↓7 +20
Комментарии 26

Пишем свой язык программирования, часть 2: промежуточное представление программ

Время на прочтение 4 мин
Количество просмотров 15K
Высокая производительность *Open source *Виртуализация *Софт Мозг
Туториал
image

Введение


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

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

В первой части (линк: habr.com/post/435202) я описал этапы проектирования и написания языковой ВМ, которая будет выполнять наши будущие приложения на нашем будущем языке.
В этой статье я планирую описать основные этапы создания промежуточного языка программирования, который будет собираться в абстрактный байткод для уже непосредственного выполнения на нашей ВМ.

Думаю, что не помешает сразу привести ссылки на сайт проекта и его репозиторий.

Сайт
Репозиторий
Читать дальше →
Всего голосов 26: ↑20 и ↓6 +14
Комментарии 1

Прототипируем кодом. Лекция на FrontTalks

Время на прочтение 14 мин
Количество просмотров 1.9K
Блог компании Яндекс Интерфейсы *Прототипирование *
С праздниками, друзья! Готовясь к началу нового рабочего года, мы завершаем серию материалов с конференции FrontTalks 2018. Это лекция Андрея Саломатина filipovskii_off — разработчика из компании Polychops. Андрей предлагает сбалансированный подход к прототипированию: чтобы из ремесленников, которые выполняют заказы, превратиться в исследователей — научиться работать с неопределённостью и, возможно, сохранить рассудок даже без четкого плана.


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

Чего бы нам хотелось вместо этого? Пользователь, который опишет эту темную комнату, который знает ее гораздо лучше, чем мы сами.
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 0

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

Время на прочтение 6 мин
Количество просмотров 10K
Высокая производительность *Open source *Виртуализация *Компиляторы *Мозг
Туториал
image

Введение


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

Для начала, по устоявшимся традициям, я приведу ссылки на предыдущие статьи:

Часть 1: пишем языковую ВМ
Часть 2: промежуточное представление программ

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

Также мне стоит разместить сразу ссылку на статью о проекте, который был написан мной ранее и на основе которого идет весь этот разбор полётов: Клац сюды. С ним пожалуй стоит ознакомиться первым делом.

И немного о проекте:

Небольшой сайт проекта
GitHub репозиторий

Ну и также скажу сразу, что все написано на Object Pascal, а именно — на FPC.

Итак, начнем.
Читать дальше →
Всего голосов 30: ↑23 и ↓7 +16
Комментарии 22

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

Время на прочтение 3 мин
Количество просмотров 11K
Высокая производительность *Open source *Виртуализация *Компиляторы *Мозг
image

Доброго времени суток тем, кто решил ознакомиться с моей очередной статьёй.

Первым делом выкладываю ссылки на предыдущие части:
Часть 1: пишем языковую ВМ
Часть 2: промежуточное представление программ
Часть 3: Архитектура транслятора. Разбор языковых структур и математических выражений

Также стоит выложить ссылки на репозиторий и на небольшую обзорную статью, в которой я вкратце описал проделанную работу целиком.

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

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

Начнем творить…
Читать дальше →
Всего голосов 23: ↑20 и ↓3 +17
Комментарии 0

Mash, основы языка

Время на прочтение 5 мин
Количество просмотров 5.1K
Open source *Виртуализация *Компиляторы *Мозг Изучение языков
Туториал
image

Предисловие


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

Если у вас есть желание попробовать его в действии самому — скачивайте репозиторий проекта, в нем вы сможете найти собранную версию проекта или же собрать её самостоятельно, для своей ОС.

В данной статье будет описан небольшой мануал по проекту и рассмотрен синтаксис языка.
Читать дальше →
Всего голосов 15: ↑9 и ↓6 +3
Комментарии 24

Настоящее программирование для гуманитариев с нуля в… 3DS Max

Время на прочтение 12 мин
Количество просмотров 6.6K
Изучение языков
Из песочницы

Программирование с нуля


статья расcчитана прежде всего на "гуманитариев".


Исполняемая среда и 


Почему 3DS Max?


Предлагаю немного необычный, но действенный, на мой взгляд способ знакомства с практическим программированием для “гуманитариев". 


Статья будет очень простой и доступной но для основательности попробуем начать с “истории анатомии" :


 Что есть программирование? 


  • написание программ! 

Программ чего? 


  • Программа это последовательность инструкций!

Инструкций кому?
 - В конечном итоге процессору компьютера или смартфона, т.е. физическому, реальному устройству.


Теоретически все верно, но процессор понимает только машинный код, фактически поток цифр или, если уж совсем анатомично, — электрических сигналов “высокого” (например 3 вольта) и “низкого” (1 вольта) напряжения, которое “понимается" схемотехникой процессора как нули и единицы, бинарные сигналы.


В физику полупроводников лезть не станем, но кому интересно — гуглите “полупроводники и логические элементы" )


Ничто не мешает реализовать и “десятинарные” сигналы и десятичную математику но это громоздко и не экономично. Хотя в телекоммуникациях очень много именно “троичных" элементов и математики.


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


Мы и сейчас “припаиваем" оперативную память, видеокарту или жесткий диск, да даже флэшку к своим компьютерам, но благодаря “дядьке Фон Нейману” делаем это без паяльника.


Ища более продуктивные пути взаимодействия с компьютером люди придумали сперва перфокарты а потом и просто доску с ключами-тумблерами “keyboard” для ввода данных в компьютер.


Но главная проблема — непонятность машинных кодов для человека!

Читать дальше →
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 6

Закон дырявых абстракций

Время на прочтение 8 мин
Количество просмотров 18K
Блог компании Selectel Программирование *Сетевые технологии *IT-стандарты *
Перевод

Текст, который установил «закон дырявых абстракций», был написан в 2002 году. Почему я перевожу его спустя почти 20 лет? Он до сих пор не потерял своей актуальности и достоин прочтения. Протокол TCP не получил лучшую альтернативу, а закон дырявых абстракций лишь укрепился в жизни разработчиков и рискует стать аксиомой. Добавлю, что я не пересчитывал все указанные в тексте временные рамки, так что учитывайте некоторый «сдвиг во времени».
Читать дальше →
Всего голосов 26: ↑23 и ↓3 +20
Комментарии 19

Абстракции в глазах смотрящего

Время на прочтение 7 мин
Количество просмотров 4.4K
Блог компании VDSina.ru Программирование *Управление разработкой *Карьера в IT-индустрии
Перевод

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

К сожалению, маловероятно, что эти споры будут когда-нибудь решены, по одной простой причине — универсального правильного ответа не существует. Простота кода в глазах смотрящего. Точнее, она сильно зависит от способности читающего воспринимать абстракции. То, что одному кажется чрезвычайным усложнением, идеально выразительно и понятно для другого. И оба имеют полное право на восхваление/порицание кода, а любые изменения идут одному из них в ущерб.
Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Комментарии 2

Свою квалификацию программиста можно повысить, если разбираться в деталях разных технологий

Время на прочтение 7 мин
Количество просмотров 12K
Блог компании ITSumma Программирование *Учебный процесс в IT Карьера в IT-индустрии
Перевод

Фрагмент комикса с простым объяснением, что такое числа с плавающей запятой

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

Всё это очень важно. Но я хочу поговорить о другом способе — изучить в деталях работу систем, которые вы используете! Лично для меня это основной способ повышения квалификации.

Дело в том, что многие программисты используют технологии не задумываясь, как они работают. И это нормально. Люди выполняют поставленные задачи. От них не требуют понимания всей сути, потому что детали отвлекают от главной задачи и зачастую ничем не помогают в её выполнении.
Читать дальше →
Всего голосов 31: ↑28 и ↓3 +25
Комментарии 9

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

Время на прочтение 3 мин
Количество просмотров 39K
Программирование *Анализ и проектирование систем *Проектирование и рефакторинг *

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

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

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

Читать далее
Всего голосов 137: ↑112 и ↓25 +87
Комментарии 123

Как мы избавились от 80% своего кода, повысив скорость разработки и уменьшив количество ошибок

Время на прочтение 12 мин
Количество просмотров 62K
Блог компании М.Видео-Эльдорадо Совершенный код *Серверная оптимизация *Управление разработкой *
Перевод


Оптимизация кода и развитие микросервисной архитектуры занимает значительную часть жизни команды разработчиков МВидео-Эльдорадо. Тем любопытней изучить опыт коллег за рубежом. Предлагаем вашему вниманию очередной пост на тему: «А как там у них».
Читать дальше →
Всего голосов 98: ↑90 и ↓8 +82
Комментарии 101
1