Connect with us

Разработка

Григорий Петров: Объектно-Ориентированное программирование

Но самое главное во всей этой истории: понимание, почему при взгляде на чужой код хочется все выкинуть и переписать. Очень часто это совсем не потому, что код плохой. А потому, что его писал другой человек.

Григорий Петров

Опубликовано

/

     
     

Я уже много раз рассматривал гипотезу о работе нашего мозга, который любит строить и использовать модели окружающего мира. Это даже не одна гипотеза, а целый ряд наблюдений: как люди рождаются, растут, изучают окружающий мир и взаимодействуют с ним. Одна из гипотез предполагает, что многие механизмы моделирования у нас встроенные. К примеру, есть подозрение, что у младенцев существуют готовые механизм моделирования и распознавания лиц, социальных ситуаций, выделения “действующего лица” (actor) и его цели (intent).

Если вы посмотрите на две точки и линию под ними, то увидите “лицо”. Как в этом смайлике: “:)”. Встроенный механизм этого, возможно, заложен у нас на генетическом уровне. Похожий механизм, известный как “мифологическое сознание”, это выделение “действующих лиц” и их “целей”. Люди по своей природе социальны, эти механизмы позволяют ребенку понять, как работает социум и стать его частью. Когда ребенок видит другого человека, то он воспринимает этого человека как “действующее лицо”, а его действия воспринимает как имеющие какую-то “цель”. Механизмы довольно простые и распространяются не только на живых людей, но и на окружающий мир. Ребенок нескольких месяцев от роду уже способен различать, что квадратик на экране “гонится” за треугольником, а круг треугольнику “помогает”.

Действующие лица и их мотивы

Мозг – не компьютер, в нем, скорее всего, нет жестко изолированных друг от друга программ. Мифологическое сознание не только позволяет ребенку понять работу нашего общества и верить в деда мороза. Эти же механизмы влияют на наш язык и на модели окружающего мира. Во фразе “машина едет к дому” этот механизм формирует образ одушевленного действующего лица, машины, которая движется с определенной целью. “Дождь идет”. “Солнце светит”. “Кофеварка сломалась мне на зло!”. Все эти привычные фразы раскрашивают окружающий мир осознающими себя существами, совершающими действия с какими-то целями.

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

Декомпозиция

Объектно-ориентированное программирование является одним из способов борьбы со сложностью. Сначала мы видим в коде повторяющиеся штуки и начинаем давать им имена. Затем мы видим группы штук, которыми мы оперируем вместе, и даем имя такой группе. После чего группа становится объектом. А через некоторое время у этого объекта появляются методы. Если не повезет – класс, наследование и миксины.

А теперь следите за руками. Наши модели мира используют “действующих лиц”. Наш язык использует “действующих лиц”. И тут нам нужно именовать в программе объекты, с которыми что-то происходит! Логично предположить, что мозг будет использовать для этой сложной задачи уже существующие, обкатанные и более-менее хорошо работающие механизмы. “файл.открыть()”, “окно.закрыть()” – все вот это.

А теперь сюрприз. Механизм, который позволяет ребенку понять, что квадратик “гоняется” за треугольником, а секретарше, что “кофемашина на нее обиделась” – не то чтобы очень точный инструмент. И если для окружающего мира у нас есть жизненный опыт, прочитанные книги, пример других людей – то в случае программы, в отсутствии фундаментального образования, программист предоставлен самому себе. Как сгруппировать объекты? Какие у них будут отношения друг с другом? Окно будет регистрироваться в области нотификаций, или область нотификаций будет добавлять в себя окно?

А это важно?

Кто вокруг кого вращается

А теперь еще один сюрприз – важно. В зависимости от того, как выбраны объекты и взаимодействия между ними, сложность системы может отличаться кардинально. Давайте вспомним известную шутку с солнечной системой. На анимации ниже объекты движутся друг относительно друга одинаково. Но в одном случае в центре внимания объект “Земля”, относительно которого рассматриваются остальные участники движения, а в другом случае это “Солнце”.

Нарисованная справа Марсом траектория как бы намекает нам, что неудачно выбранные объекты могут привести к печальным последствиям. Я сам могу вспомнить множество случаев, когда при разработке Windows приложений все начиналось с объекта “главное окно”. Который со временем начинал обрастать все большей и большей функциональность, пока, наконец, не превращался в чудовищный клубок запутанных связей, обеспечивающий работу нескольких десятков других окон, фоновых потоков, дочерних процессов и множества других шутки. Поддерживать, а тем более развивать такие программы было очень тяжело.

Программист художник, он так видит

Программирования – очень молодая отрасль. Множество программистов – самоучки. “Лучшие практики” разработки сменяют друг друга раз в пару лет. Полагаю, что не открою Америку, если скажу, что программисты по-разному группируют объекты и методы их взаимодействия. А потом им тяжело читать и поддерживать код друг друга. Чужая ментальная модель – она как чужая одежда. Иногда жмет, иногда свисает, а иногда просто не налезает.

Если мы хотим, чтобы программисты работали в команде и могли поддерживать код друг друга, то важно ментальные модели синхронизировать. Большую роль в этом играют opinionated фреймворки, которые жестко диктуют состав и отношения объектов внутри программы. Когда все разработчики используют один, выбранный тим лидом фреймворк – это хорошо. Почетное второе место занимает стандарт кодирования, в котором команда записывает общие моменты, о которых разработчики договорились друг с другом. Найм разработчиков с похожим бэкграундом также играет нам на руку.

Но самое главное во всей этой истории: понимание, почему при взгляде на чужой код хочется все выкинуть и переписать. Очень часто это совсем не потому, что код плохой. А потому, что его писал другой человек. Если научиться понимать физиологические причины такого неприятия, то можно спокойно работать самой разношерстной командой. Ведь со сложностью можно бороться разными способами.

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
1 Comment

1 Comment

  1. iBeginner4

    25.02.2017 at 23:52

    хорошо

You must be logged in to post a comment Login

Leave a Reply

Новости

Интересные материалы: 23.01

Сегодня у нас мобильные облака, карьера разработчика Xamarin и новые библиотеки.

Леонид Боголюбов

Опубликовано

/

Весь день мы собираем лучшие материалы о разработке и маркетинге технологий, стартапов, мобильных приложений и игр для iOS и Android из самых разных источников:

Комментарии
Продолжить чтение

Медиа

Podlodka #43: Профессия – архитектор

Продолжаем разбираться, что ждет разработчика после достижения сеньорности.

AppTractor

Опубликовано

/

Автор:

Podlodka

Переход в менеджмент мы уже обсудили, и в этот раз на очереди другой популярный вариант – карьера архитектора. Сергей Орлов, архитектор из Avito, помогает нам вникнуть в суть этой роли, определить её область ответственности и требуемый багаж знаний.

Комментарии
Продолжить чтение

Дизайн и прототипирование

Создание шрифта с нуля за 24 часа

Графический дизайнер Джеймс Барнард бросил себе вызов – он захотел за 24 часа создать шрифт и отправить его в Google Fonts. Как он это сделал и что узнал в процессе — в нашем переводе статьи Джеймса.

Анна Гуляева

Опубликовано

/

Я большой фанат One Day Builds Адама Сэвиджа. В начале дня у него есть только материалы, а в конце он становится обладателем чего-то, что он хотел.

Поэтому я бросил себе вызов: создать с нуля абсолютно новый шрифт и отправить его в Google Fonts за 24 часа.

В старом блокноте у меня были эскизы нескольких букв. Я хотел создать узкий шрифт без засечек, который можно будет использовать на постерах или на других больших изображениях. Во время работы в Men’s Health я использовал шрифты вроде Tungsten или Heron, которые выглядят ужасно в тексте, но отлично смотрятся в заголовках или промоматериалах (которые и были моей основной работой). Это был стиль, который я и хотел создать.

Очень грубые наброски

13:00, среда

Я отправился в Adobe Illistrator с двумя-тремя буквами, которые были у меня в эскизах. Я создал сетку из пяти строк – для линии нижних выносных, базовой линии, линии строчных, линии прописных и линии верхних выносных букв. Затем я определил ширину прописных букв и толщину основного штриха.

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

  • Линия строчных = 2 × высота линии верхних выносных / высота линии нижних выносных
  • Ширина основного штриха = ¼ ширины прописной буквы
  • Ширина строчной буквы = ¾ ширины прописной буквы

Вот как это выглядит на иллюстрации

Сначала я создал буквы O и B. Я решил, что эти буквы будут иметь не форму овала, а форму скругленного угла. Многие буквы будут выглядеть, как высокий прямоугольник, но O, B и D будут иметь скругленные углы вместо овалов.

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

Мой шрифт был очень простым, но с одним «украшением». Любая апертура, то есть, срез концов полуовала, должна была быть отрезана под углом. Самыми сложными буквами стали G и K.

Затем я приступил к строчным буквам. Это было сложнее, но с установленными правилами работать было проще. Я использовал больше «украшений», особенно в верхних выносных и нижних выносных элементах. Самыми сложными стали буквы f, g, a и e, так как они были абсолютно новыми.

21:00, среда

Я перешёл к другим символам, таким как восклицательный и вопросительный знаки. Я стал работать быстрее и успел создать около 35 знаков.

Утро четверга

Утром я довольно быстро закончил цифры от 0 до 9 и начал создавать файл с шрифтом. Это было совершенно новым опытом. Мой знакомый каллиграф Иэн Барнард посоветовал для этого программу Glyphs. Я скачал программу, посмотрел несколько обучающих видео и понял, что неверно создал файл в Illustrator. Поэтому мне пришлось вставлять каждый символ вручную и подгонять его под правила программы.

10:00, четверг

Я начал заниматься интервалами и кернингом. Это было ужасно долго. Прежде чем заняться этим, нужно освоить множество сочетаний клавиш в программе. И перед кернингом вам нужно сделать интервал как можно ближе к тому, что вы хотите видеть в итоге. Для этого нужно измерить ширину отверстия в букве О и разделить ее на три. Такой интервал стоит поместить слева и справа от буквы.

11:00, четверг

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

Используя сочетания клавиш, я изменил каждое расстояние между буквами, которое меня не устраивало. Самым очевидным является сочетание V и A, но в этом тексте есть и такие сочетания, о которых я и подумать не мог.

Затем я конвертировал текст в прописные буквы и сделал то же самое для них.

12:59, четверг

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

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

Название шрифта? Odibee Sans (произносится как oh-dee-bee), то есть, One Day Build — ODB.

Заключение

Я отправил Odibee Sans в Google в мае 2017, и он все ещё находится в очереди на добавление. Команда предложила мне пока уделить время дизайну шрифта, хотя они признали, что это противоречит духу проекта.

Я поработал над шрифтом ещё один день. Я добавил все нужные знаки, а также внёс изменения примерно в 30 символов.

Более того, сейчас в шрифте существует более 1500 кернинговых пар, что стало значительным улучшением шрифта. А также я создал сайт: odibeesans.com.

Комментарии
Продолжить чтение

Разработка

Как сделать собственный VR-шлем за $100

Максим Кутте, 16-летний разработчик, создал свой open source шлем виртуальной реальности.

Леонид Боголюбов

Опубликовано

/

Меня зовут Максим Кутте. Мне 16 лет и я со своими друзьями, Йонасом Сессоном и Габриелем Комбе, сделал свой собственный шлем виртуальной реальности. Он стоил нам всего 100 долларов.

Благодаря моему учителю, я начал программировать в 13. Каждый понедельник и вторник вместо кафе я с друзьями ходил в его класс.

Я потратил один год на создание простой 8-битной операционной системы и участие в конкурсе роботов.

Затем я заинтересовался виртуальной реальностью. И мы с друзьями решили, что неплохо было бы создать собственный мир в VR, в котором мы могли бы проводить время после школы. Но Oculus  тогда стоил 700 долларов, и мы решили создать собственный шлем.

VR для всех

Напечатанная на 3D принтере запчасть

Причиной всего стало аниме под названием Sword Art Online. Его главный герой находится в ролевой виртуальной реальности – и так я влюбился в VR. Я хотел понять все ее аспекты.

Я купил самые дешевые компоненты, которые мог, и начал, изучая основы физики и математики виртуальной реальности (правильное ускорение, первообразные, кватернионы…) А потом мы заново изобрели VR. Я написал WRMHL, а затем с Габриелем FastVR. Объединив все это вместе, мы получили гарнитуру стоимостью $100.

Полностью открытая гарнитура для VR и комплект для разработки

Чтобы ускорить время разработки, мы сделали FastVR – SDK с открытым исходным кодом для разработчиков, который легко понять и кастомизировать. Он работает следующим образом:

  • Главный компьютер шлема вычисляет его позицию в пространстве
  • Позиция из шлема отправляется в WRMHL и часть вычислительной мощности процессора тратится на обработку этого сообщения
  • Затем FastVR извлекает данные и использует их для рендеринга VR-игры

Все, что вам надо – сделать на основе открытых исходников шлем.

Почему open source

Я хочу сделать VR мейнстримом. Поэтому я обратился к Уссаме Аммару, одному из соучредителей The Family. Я обсудил с ним создание компании и запуск на Kickstarter.

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

Мы отправились в Кремниевую долину, и Уссама познакомил меня с главным архитектором в Oculus, Атманом Бринштоком. И они дали мне ценный совет: сделай все это open source.

Следующий шаг

Есть еще много технических моментов, которые мы хотим улучшить.

Сейчас мы работаем над автономной VR-гарнитурой –  у нас уже есть как упрощенная версия с более дешевым 3D-трекингом.

Все это мы скоро выпустим.

Как начать

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

 

Комментарии
Продолжить чтение

Наша рассылка

Каждому подписавшемуся - "1 час на UI аудит": бесплатный ускоренный курс для разработчиков!

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Вакансии

Популярное

X

Спасибо!

Теперь редакторы в курсе.