Обновить
145.13

Ненормальное программирование *

Извращения с кодом

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

Обучение программированию 2019, или в поисках идеальной программы: Последовательность

Время на прочтение8 мин
Охват и читатели6.1K

МУРОМ


Здравствуйте, меня зовут Михаил Капелько. Занимаюсь профессиональной разработкой ПО. Увлекаюсь разработкой игр и обучением программированию.


Предисловие


Осенью 2019-го я в третий раз участвовал в курсе обучения ребят 10-15 лет программированию в качестве одного из преподавателей. Наши курсы проходили с середины сентября по середину декабря. Каждое занятие было в субботу с 10:00 до 12:00. Подробнее о структуре каждого урока и деталях создаваемой на курсе игры можно узнать из статьи за 2018-й год.


Лично для себя я выделил две основные цели, к которым иду с помощью курсов:


  • создать удобный инструмент для создания простейших игр, понятный заинтересованным людям в возрасте от 10 лет;
  • создать программу обучения программированию, позволяющая заинтересованным людям в возрасте от 10 лет самостоятельно делать простейшие игры.
Читать дальше →

Иллюзия иммутабельности и доверие как основа командной разработки

Время на прочтение14 мин
Охват и читатели4.9K
Вообще я C++ программист. Ну так получилось. Подавляющее большинство коммерческого кода, который я написал за свою карьеру, — это именно C++. Мне не очень нравится такой сильный перекос моего личного опыта в сторону одного языка, и я стараюсь не упускать возможности написать что-нибудь на другом языке. И мой текущий работодатель внезапно такую возможность предоставил: я взялся сделать одну не самую тривиальную утилиту на Java. Выбор языка реализации был сделан по историческим причинам, да я и не возражал. Java так Java, чем менее мне знакомо — тем лучше.

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

Тестирование белого ящика

Время на прочтение19 мин
Охват и читатели43K

Разработка программ высокого качества подразумевает, что программа и её части подвергаются тестированию. Классическое модульное (unit) тестирование подразумевает разбиение большой программы на маленькие блоки, удобные для тестов. Либо, если разработка тестов происходит параллельно с разработкой кода или тесты разрабатываются до программы (TDD — test driven development), то программа изначально разрабатыватся небольшими блоками, подходящими под требования тестов.


Одной из разновидностей модульного тестирования можно считать propery-based testing (такой подход реализован, например, в библиотеках QuickCheck, ScalaCheck). Этот подход основан на нахождении универсальных свойств, которые должны быть справедливы для любых входных данных. Например, сериализация с последующей десериализацией должна давать такой же объект. Или, повторная сортировка не должна менять порядок элементов в списке. Для проверки таких универсальных свойств в вышеупомянутых библиотеках поддерживается механизм генерации случайных входных данных. Особенно хорошо такой подход работает для программ, основанных на математических законах, которые служат универсальными свойствами, справедливыми для широкого класса программ. Есть даже библиотека готовых математических свойств — discipline — позволяющая проверить выполнение этих свойств в новых программах (хороший пример повторного использования тестов).


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


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

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

От Торонто до Томска: подведение итогов и планирование будущих семинаров по микроэлектронике в России

Время на прочтение4 мин
Охват и читатели4.4K
Видите японского робота-собачку слева от девушки Ирины? Этот робот из компьютерного музея у офиса Гугла управлялся встроенным процессором MIPS R4000. Дальний потомок этого процессора, MIPS microAptiv UP, станет темой нескольких докладов на семинаре по обмену опытом преподования электроники, который пройдет в Томске на следущей неделе. Ядро MIPS microAptiv UP, в своем бесплатном варианте, MIPSfpga, стало удобной морской свинкой для студенческих экспериментов по микроархитектуре процессорных ядер и созданию систем на кристалле.

Важная часть экспериментов с MIPSfpga случилась в России, на Украине и в Казахстане в течении двух прошлых лет — про это рассказала на конференции в Торонто Сара Харрис, профессор Университета Лас-Вегаса. В семинарах на эту и смежные темы проектирования чипов (Nanometer ASIC) приняли участие МГУ, МФТИ, МИФИ, МИЭТ, ИТМО и другие ведущие университеты.

Сейчас эксперимент продолжается: в этом месяце, помимо конференции в Томске, в Россию приезжает Роберт Оуэн, известный консультант по университетским образовательным программам в области микроэлектроники. За последние 23 года Роберт Оуэн посетил сотни университетов в Европе, Азии, Америке и даже Африке, как представитель Texas Instruments, ARM, Xilinx и Imagination. Он помогал университетам поставить программы в области DSP, микроконтроллеров, встроенных процессоров и систем на кристалле.

Вся эта деятельность — не абстрактное образование ради образования. На технологиях разработки микросхем с использованием языков описания аппаратуры Verilog и VHDL и использовании синтезируемых ядер стоит бизнес таких российских компаний как ЭЛВИС-НеоТек и Байкал Электроникс, о которых расскажет в лекции на этой неделе никто иной как Чубайс.



Про эти и другие мероприятия из прошлого и будущего подробнее под катом.
Читать дальше →

Программисты жизни

Время на прочтение3 мин
Охват и читатели12K

Скетч-шоу «Нереальная история»

С самого нашего первого крика при рождении и до последнего вздоха в конце жизни нас программируют. Родители, друзья, учителя и даже врачи. Нас окружают правила и законы, алгоритмы и различные руководства. Я хочу выделить один комментарий к моей последней публикации от пользователя Zoomerman:
Программист — человек, создающий программы.
Программист выстраивает цепочку событий, используя доступное множество ресурсов.
Программы бывают компьютерные, музыкальные, поведенческие, обучающие и т.д.
Программа начинает создаваться в тот момент, когда человек определяет начальную и конечную точки процесса.
И если менеджер говорит «у меня есть товар, хочу его поменять на деньги» — он превращается в программиста и строит алгоритм этого процесса.
Для меня программист — это не каста и не профессия. Программист — это состояние ума.
Читать дальше →

Концепция жизни программы

Время на прочтение4 мин
Охват и читатели14K

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


design


Когда появляется программа? Скорее всего, программа появляется в голове у проектировщика/разработчика, можно назвать это design-time. Но так как этот момент не поддаётся контролю компьютера (пока), то предположим, что моментом появления программы является момент создания минимального запускаемого (о подробном смысле этого термина стоит поговорить отдельно) исходного кода.

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

Перепиливаем JDBC DB2 под .NET

Время на прочтение7 мин
Охват и читатели4.6K
В очень странное время мы живем .NET становится кроссплатформенным, JAVA становится слаще. Но пока мы вместе движемся в общее светлое будущее есть много унаследованных решений которые необходимо поддерживать. И пока это удается с помощью лобзика и напильника…
Читать дальше →

За что ругают Golang и как с этим бороться?

Время на прочтение5 мин
Охват и читатели78K
Написав несколько проектов на Go, я оглянулся назад. Посмотрел на язык, на его плюсы и минусы. В этой статье хотелось бы поговорить о том, за что критикуют Go. Конечно же, речь пойдет об отсутствии ООП как такового, перегрузки методов и функций, обобщенного программирования и исключений. Действительно ли это доставляет столько проблем? Или это проблема подхода разработки? Я поделюсь своим опытом решения этих вопросов.
Читать дальше →

NW+Edge.js+Fiddler или сказ о стыкуемости нестыкуемого

Время на прочтение4 мин
Охват и читатели4.9K
Привет всем.
Не так давно прочел статью Что нам стоит сайт распарсить. Основы webdriver API и вспомнил, что давно собирался довести хотя бы до относительно рабочего состояния одну забавную задумку. Руки все-таки дошли, а значит пора поведать, что же получилось.
Есть такая замечательная программа — Fiddler, позволяющая перехватывать и модифицировать http/https запросы. Есть замечательная штука под названием NW.js, она же node-webkit, позволяющая тыр… парсить разнообразные сайты в том числе. Вы красивы, я прекрасен — почему бы нам не подружиться?
Собственно, затея вот в чем: можно было бы, конечно, отдельно поднять Fiddler, написать в нем логику и гонять через него трафик с node-webkit-но это не так интересно. А значит, будем совмещать все под одной крышей, благо у Fiddler есть библиотека на C# — FiddlerCore.
Под ноду есть отличный модуль — Edge.js. Это такая хитрая штука, которая позволяет исполнять код C# (и не только). Есть под ноду? Замечательно, можно завести и под nw.js, благо даже мануал есть — да вот же он!

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

Введение в высокочастотный трейдинг (HFT)

Время на прочтение1 мин
Охват и читатели9.3K
Что такое HFT, или рассказ о том, в какие дебри могут завести программиста интерес к финансовым рынкам, и хобби в виде написания роботов для алгоритмического трейдинга. Доклад на Таллинском Devclub.

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

Время на прочтение4 мин
Охват и читатели35K
Когда вы приглашаете программиста для собеседования и выполнения тестового задания, это может оказаться интересным опытом и для вас, и для него. Большинство собеседований заканчивается тем, что менеджер по подбору персонала обещает «оставаться на связи», но иногда соискатель просто попадает в точку. В такие моменты вы обдумываете, не нанять ли его еще до того, как он успеет покинуть здание. Мы в Alconost перевели для вас статью шароварщика Брайана Келли именно о таких удачных случаях.

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

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

Возможное использование виртуальности для создания программ в будущем

Время на прочтение7 мин
Охват и читатели9.4K
Я верю, что программисты могут работать более продуктивно в виртуальной реальности (ВР). Почему? Во-первых, программист сможет работать, будучи окружённым трёхмерной средой разработки вместо двумерных мониторов. Во-вторых, взаимодействие с ВР более естественно и свободно, чем работа с мышью и клавиатурой.

Я опишу преимущества ВР, два уже существующих прототипа устройств, которые могут помочь программистам, и что ожидает ВР в области программирования.
Читать дальше →

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

Dagaz: Вновь об XSLT

Время на прочтение7 мин
Охват и читатели8.1K
Ранее я уже писал небольшую статью о программировании на XSLT, но она носила несколько синтетический, учебный характер. В самом деле, если кому-то вдруг и понадобиться найти одну из возможных расстановок «8 ферзей», для решения этой задачи найдётся с десяток других, более удобных, языков, чем XSLT. Я часто использую XSLT в работе, но эти примеры его использования какие-то скучные и не особо интересные. Совсем недавно я нашёл для этого языка более забавное применение. Именно об этом, а также о том «как я докатился до мысли такой» я и собираюсь рассказать. 
Читать дальше →

Ненормальное программирование в InterSystems Caché

Время на прочтение13 мин
Охват и читатели6.4K
Возможно не все, кто знаком с InterSystems Caché, знают о расширениях Студии по работе с исходным кодом. На самом деле в ней можно создать свой тип исходного кода, компилировать его в интерпретируемый (INT) и объектный код, и даже в некоторых случаях обеспечить и code completion. Т.е. теоретически можно реализовать поддержку в Студии любого языка программирования, который будет исполняться СУБД не хуже Caché ObjectScript. В этой статье я опишу простой пример, как реализовать возможность писать программы на некотором подобии JavaScript в Caché Студии. Если интересно, добро пожаловать под кат.
Читать дальше →

Запрет запуска копии стороннего приложения

Время на прочтение4 мин
Охват и читатели27K
Робот сжигающий копии блокнотаМногие программисты программного обеспечения сталкивались с задачей запрета запуска копий приложения. Это делается с различными целями и зависит от ситуации. Существует даже отдельный термин для решения данной задачи — Mutex.

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

Визуальный язык ДРАКОН и его применение в ракетно-космической отрасли, медицине и других областях. Видео доклада В. Паронджанова

Время на прочтение2 мин
Охват и читатели33K
Википедия о ДРАКОНе.

ДРАКОН иногда называют правильными блок-схемами. Но в первую очередь он отлично подходит для записи алгоритмов.
Внутри НПЦ АП (Научно-производственный центр автоматики и приборостроения) ДРАКОН используется с помощью закрытой технологии ГРАФИТ-ФЛОКС.

За рамками НПЦ АП есть открытые общедоступные среды, на которых можно писать реальные программы на так называемых гибридных языках, например: ДРАКОН-Си, ДРАКОН-JavaScript, ДРАКОН-Java, ДРАКОН-C#, ДРАКОН-Python, ДРАКОН-Tcl, ДРАКОН-ASM и т.д.



Доклад представлен на Международной научно-технической конференции «Системы и комплексы автоматического управления летательных аппаратов», посвящённой 105-летию со дня рождения академика АН СССР Н.А. Пилюгина. Конференция проводилась 21 мая 2013 в Институте проблем управления РАН.

Текстовая версия доклада (более подробная)
Дополнительная информация о ДРАКОНе

Пишем интерпретатор для своего эзотерического языка (часть 2)

Время на прочтение5 мин
Охват и читатели1.7K
Напомню, что в предыдущей статье я поставил задачу написать интерпретатор для надстройки над Brainfuck. Естественно, что для начала нужно было реализовать сам Brainfuck, и только затем переходить к надстройке. Благо в предыдущей статье эта часть была реализована. Собственно опишем то, что следует реализовать в этой части:
  1. Понятие функции(процедуры).
  2. Комментарии.

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

Обратная польская запись на языке ассемблера с синтаксисом AT&T

Время на прочтение4 мин
Охват и читатели6.7K
Данная программа изначально была написана как небольшая лабораторная работа по курсу машинно-ориентированного программирования программирования, но в последствии появилась мысль представить её сообществу. Именно потому что алгоритм реализован не на языке ассемблера с синтаксисом Intel, а на языке ассемблера с синтаксисом AT&T.
Читать дальше →

Как я делаю ИИ-анализатор контента по инструкциям ChatGPT (Часть 1)

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели10K

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

Это реальная история, не байт.

Читать далее

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