Размышления о будущем программирования


Недавно в ЖЖ увидел у одного человека запись о современных технологиях. В какой-то степени мысль совпала с моими, над которыми думал уже долгое время.

Размышления о будущем программирования

Мои идеи в большей степени подходят к веб-программированию. Вот главные пункты:

Визуальная IDE

Расставление элементов страницы должно быть визуальным способом, драг-энд-дропом. При этом, нужно использовать идеи БЭМ-подхода — нужна модульная система. На странице расставляются модули, которые можно менять как и в визуально (заполняя формы), так и в виде кода.

Против говнокода, который возможно будет делать визуальный редактор — создать какие-то эвристические оптимизаторы, или просто генерировать код как-то нормально. Есть же WYSIWYG-редакторы, которые делают нормальный код. Вот в том же БЭМ есть оптимизатор для CSS: меня поразило то, что он может делать структурную оптимизацию, без последствий для результата. Cтруктурная оптимизация как раз и нужна.

В самом деле — неужели кто-то думает, что в будущем мы так и будем продолжать писать код? Мне кажется, процесс очевиден: мы идем от низкоуровневого кода (ассемблер) к более высоким абстракциям. И это нас приближает к всеобщей визуализации программирования. А в-некоторой-степени-визуальные современные ИДЕ только упрощают разработку, делая код более наглядным. Никто не пишет серьезные проекты в блокноте, да и Sublime Text не настолько удобен, чем например, PHPStorm.

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

Меня удивляет, что сколько лет существует программирование, а очень часто люди каждый раз придумывают велосипеды, и с нуля пишут всякие штуки, которые писали уже много людей до них. Мне кажется, много вещей можно выделить в отдельные компоненты, которые можно использовать повторно. Для этого они должны быть настраиваемые, с четкими зависимостями от других компонентов, в общем следовать принципам SOLID из ООП. Хороший пример недавно нашел — объекты из одного css-фреймворка. Хорошо настраиваются, при этом имеют фиксированую строгую структуру, их можно повторно использовать. И это подходит не только к всяким компонентам, как меню, всплывающие окна и т. д. Такой подход можно применять по возможности ко всему, к чему это может подойти.

В этом же пункте надо упомянуть Паттерны проектирования — их нужно сделать максимально удобными для использования. Кроме простой теории, нужно их сделать отдельными компонентами, которые так же можно использовать практически. Плюс визуальная часть, в ИДЕ. Получается, нужно тебе применить к коду паттерн «Фабрика» — ты просто выбираешь его из списка, настраиваешь, а ИДЕ сама ставит код куда нужно, создает все необходимые файлы, и после всего этого дает отчет о результате — а дальше продолжаешь работать ты.

Сами паттерны не нужно брать только стандартные, их можно развивать, или делать более низкоуровневыми и т. д. А практическую часть паттернов, код — делать для разных языков (асинхронные или нет), для разных вариантов использования (в зависимости от архитектуры проекта) и т. д.

Тут, кстати, отдельно нужно выделить системы управления пакетами. Суть их в том, что ты не загружаешь компонент, вручную копируешь в свою систему, и настраиваешь все зависимости. Этим всем сама занимается система пакетов. Так вот такая штука совсем недавно пришла в мир веб-разработки — bower.io. Библиотеки теперь могут ставиться всего одной-двумя командами в консоли. Там же можно и проверить есть ли новая версия. Параллельно упомяну для node.js и PHP.

Экосистема

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

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

Нужно выработать какие-то правила, стандарты, чтобы разработчики могли сами пополнять базу знаний (компоненты, паттерны). Чтобы могли развивать ту же ИДЕ, как сделали Adobe для их редактора Brackets — он написан используя знакомые всем веб-разработчикам HTML, CSS, JS ☺

Картинку нашел на Дрибббле.