вторник, 1 октября 2013 г.

Черновик. Интервью для блога как MVP...

30.09.2013 18:13, Vsevolod Leonov пишет:
Пожалуйста, по возможности отвечайте в тексте после вопросов. Как мы это делали раньше.


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

Тут я вас разочарую. "Широкого диапазона" - не представлю. Все мои знания и умения - узкоспециализированы и вертятся вокруг одного - "текстовый редактор" (процессор) и "немножко" обработка текста (в "широком" смысле). Популярных аббревиатур типа COM, CORBA, SAX, SQL, DOM, Ajax и т.п. - я НЕ ЗНАЮ. Слышал, но НЕ ЗНАЮ. Также не знаю НИЧЕГО относящегося к Web  и распределённым вычислениям. Также - я ничего не знаю про БД вообще и SQL в частности.

Если я что-то и делал - всё вертится вокруг "текстового редактора" и "немного" обработки текста.

Что я знаю?

Я конечно же знаю Delphi. И программирую на нём 18-ть лет. Я знаю его как свои "четыре пальца" ("как говорил наш трудовик").

Я знаю его компонентную модель, VCL, DataAware, TAction, Docking.  И многие их подводные камни.

Я имею представления о WinAPI, GDI и немного GDI+.

Также я конечно немного знаю всякие Basic'и. GWBasic, Turbo-Basic, Quick-Basic, VBA.

Я немного знаю FORTH. Я даже написал FORTH-машину для БК 0010.01. И пытался на ней написать свой графический редактор (очень меня тогда вдохновил AutoCAD с его AutoLISP).

Но! Классического FORTH - я в общем-то не знаю.

Также я немного (со словарём) знаю C++ и STL. Я понимаю, что STL - входит в стандарт C++. Но я НЕ ЗРЯ выделяю его отдельно. Я видел "много" людей, которые владеют C++, но "не знают" STL Или "принципиально" его не используют.

Я же считаю STL - образцом АРХИТЕКТУРЫ и "пищи для ума". Потому его и выделяю особо. И я считаю, что отсутствие чего-то подобного STL - это конечно минус Delphi. Все пишут собственные "велосипеды". Начиная с 90-х. TIntegerList реализаций - я насмотрелся всяких. И в RX и в ElPack.

Немного знаю asm 386. И мой код на Delphi использует всякие ассемблерные вставки "для производительности". Хотя в нынешних реалиях это звучит глупо.

Неплохо когда-то знал asm PDP-11. Ту самую FORTH-машину - именно на нём писал.

Когда-то знал FORTRAN. Писал на нём всякие расчётные задачи типа "расчёта реального соленоида", а также всяких колебательных контуров с применением метода Рунге-Кутта.

Писал когда-то на AutoLISP. Всякие "заточки" для AutoCAD под "советские ГОСТы".

Знаю несколько "доморощенных" скриптовых языков.

Немного знаю Objective-C. Даже поучаствовал в двух проектах на нём. Написал собственный рендериг документов из проприетарного формата под CoreText.

Многие безосновательно скептически рассматривают Delphi как среду разработки масштабных приложений. Насколько естественные ограничения RAD-средства мешали Вам реализовывать Ваши задачи и как Вы их преодолевали?
Я не вижу "особенных ограничений RAD". Все ЯВУ - "примерно похожи".

Недавно Вы с Вашим коллегой Максимом Крыловым опубликовали большую статью о применении Delphi совместно с UML. С точки зрения ООП, насколько Delphi является удачным представителем технологии данного класса?
Статья не была особенно "удачна". "Хорошего" отклика она не получила. Но скажу. UML и "кодогенерация" - ХОРОШО ложатся на ВСЕ языки (ЯВУ) с ООП (о чём классики - не устают повторять. С их "лозунгами"). Delphi - не лучше и не хуже. Да и на языки БЕЗ ООП - они тоже - неплохо ложатся. У нас - есть примеры.

Как-то раз Вы упомянули, что «создали Delphi 1.5». Что Вы под этим подразумеваете?
Ну мы сделали свой MVC-like фреймворк. Сделали свою библиотеку параметризуемых контейнеров. Сделали набор wizard'ов/дизайнеров. Сделали описание кода на UML. Сделали подключение СОБСТВЕННЫХ скриптов к Delphi. Сделали множество расширений к DUnit в конце-концов.

Сделали кстати "кодогенерацию" из объектов в TDataModule.

Написали собственную реализацию подсчёта ссылок.

Сделали собственный контроль за утечками памяти и объектов.

Написали собственную реализацию Immutable-строк. И ВОБЩЕ - "пришли к мысли", что "строки должны быть атомарны". Независимо от "ведущих производителей".

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

Вы знаете практически все достаточно популярные технологии программирования. Не было ли соблазна отказаться от Delphi и перейти на другой инструмент?

Кроме Delphi - я "знаю" только Objective-C и xCode. На фоне Delphi - он меня пока "не впечатляет". Скажем так - он "другой". Для других задач. И для другой платформы.
Возможно, Вы слышали нарекания в адрес возможностей Delphi. Как профессионалу, достаточно сложно «не принимать обвинения» на свой счёт. Что Вы обычно отвечаете критикам?
Я стараюсь не слушать подобную критику. Я вообще стараюсь не ввязываться в "священные войны". Все ЯВУ - "примерно одинаковы".

Как теоретик и практик, расскажите, пожалуйста, о какой-нибудь замысловатой проблеме или масштабной задаче, которую Вы решили при помощи изощренной техники в Delphi?
Я написал на Delphi собственный текстовый редактор (процессор). Ещё в 97-м году. "Сравнимый" по функционалу с Word 6 и "немного" с Word 97. Он существует до сих пор и активно используется. И дорабатывается уже многими людьми.

Сделал собственный бинарный XML-like формат документов. Который обрабатывается SAX-like и DOM-like средствами.

Также я написал MVC-like фреймворк.

Также библиотеку параметризуемых контейнеров "в духе STL" (правда без STL-like итераторов).

Также бы сделан собственный подсчёт "симметричный" ссылок, где "интерфейсы можно смешивать с объектами".

Об этом всё - я писал в блоге.

Также я сделал возможность вызова локальных функций из глобального контекста (а-ля - "анонимные функции"). Об этом я тоже писал. Когда-то я это считал "удачей". Сейчас (в свете грядущих 64-х бит) - считаю НЕУДАЧЕЙ.

Вернёмся назад, к началу Вашей профессиональной карьеры. Это был «hello, world»? Какой компьютер, какой язык программирования?
Это НЕ БЫЛ "hello world".

Это был WordStar-like текстовый редактор.

Один из моих наставников сказал мне - "хватит играть - пиши редактор, ну как WordStar например".

Компьютер - PC.

Язык - "совсем немного" GWBasic, "немного" - Turbo-Basic. А потом - Turbo-Pascal (3.0, 4.0, 5.0 etc).

Ваш блог (18delphi.blogspot.com) намекает, что Вы начали использовать Delphi с первой её версии. А что было до этого?
Turbo-Pacasl 3.0 (с WordStar-like) интерфейсом, Turbo-Pacal 4.0 (с типа "оконным интерфейсом"), Turbo-Pacal 5.0(где я), Turbo-Pascal 5.5 (с интерфейсом "почти" Turbo-Vision) (где я задавался вопросом - "а зачем эта объектность нужна", хотя и прочитал к тому времени Барбару Лисков "Применение абстракций и спецификаций в разработке ПО" и Хоор "Обработка записей"), Turbo_Pascal 6.0 (с интерфейсом Turbo-Vision), Turbo-Pascal 7.0.

За всю эволюцию Delphi что из новых возможностей вызвало наиболее яркие эмоции?
Delphi 1.0 И его "компонентная модель". Это ЯРКОЕ ПЯТНО. Это - ВЗРЫВ и ВСПЫШКА. Ничего подобного - я БОЛЕЕ - не видел. Хотя я и до этого видел Turbo-Vision, Super-Vision (это было - СУПЕР!!! Ребята из конторы "Аверс" - "натянули" на текстовую библиотеку Turbo-Vision графическую оболочку. НЕ ПОПРАВИВ - НИ ЕДИНОЙ строчки оригинального кода. Это были - МАСТЕРА своего дела). Видел так же Vitamin-C и Turbo-Professional ("объектность" кода, без "объектности компилятора"), Object-Professional и Data Entry Workshop (от Turbo-Pover).

Но Delphi 1.0! Это - ВЗРЫВ.

OpenTools API. И всё такое...

Более ярких пятен - я не видел (ну кроме UML и "кодогенератора от Макса").

Ну дальнейшие версии Delphi - порадовали "интерфейсами и подсчётом ссылок", TAction (!), TFrame. НО это не было так ЯРКО.

Если бы Вы работали в Embarcadero и у Вас был бы выбор, какое направление взять, что из самой Delphi (IDE, компилятор, компонентная база) над чем бы хотелось поработать?
Компонентная база. В частности FireMonkey. Мне "кажется", что я ЗНАЮ как его улучшить (хотя я ЗНАЮ, что многим - мои методы улучшения могут не понравиться). UML. Тесты. ТЕСТЫ. Тесты как фреймворк и ТЕСТЫ как тесты к СУЩЕСТВУЮЩЕМУ коду.

Вы никогда не задумывались о карьере «индивидуального» разработчика, независимого и самостоятельно определяющего, чем заниматься?
Задумывался и не раз. Но! Каждый раз когда я задумывался - я приходил к ОДНОМУ и ТОМУ же выводу. В ОДИНОЧКУ - тем чем я занимаюсь - ЗАНИМАТЬСЯ - невозможно. Если пытаться САМОМУ "рулить" процессом - очень скоро надо БРОСАТЬ программирование и начинать заниматься СОВЕРШЕННО другими вещами. А я - НЕ ХОЧУ этого - посему - "от добра - добра не ищут".

Вам не кажется, что Вы немного overskilled относительно даже весьма продвинутого и искушенного разработчика? Рутина на заедает?
Заедает.. Но без неё - НИКУДА.. Без "рутины" - нельзя жить "не оторвавшись от байтов" (как писал Джоэл). Надо "ходить по земле". Иногда надо и НЕДЕЛЮ (а то и ДВЕ потратить "копаясь" в отладчике и ища "тривиальную" ошибку).

И ещё (да не обидится на меня работодатель). Я несколько раз подавал своё резюме в разные организации. Получал что-то вроде - "вы overqualified относительно той позиции, что претендуете". Так что мне кажется, что это - "отмазка"...

После нескольких подобных раз - Я ПОНЯЛ, что в моей организации - ТЕХНОЛОГИЧЕСКИЙ ПРОЦЕСС построен на БОЛЕЕ ЧЕМ  высоком уровне.

Насколько Ваш процесс разработки отличается от классического «Form1, Button1…»?
Отличается. Сильно. Я программирую в терминах "прецедентов" и "аспектов". Я начинаю программировать задачу с ТЗ. Рисую прецедент (или его реализацию). Детализирою требования ВНУТРИ прецедента. Выделяю АСПЕКТЫ. Нахожу - УЖЕ запрограммированные части. И/или использую их или выделяю из УЖЕ написанного кода существующее, или пишу новое. Опять же - отталкиваясь от UML. Под МНОГОЕ - я сразу же пишу ТЕСТЫ. Или ПРОШУ коллег написать их. Это не TDD! НО - где-то похоже.

И далее - я РИСУЮ ВСЮ реализацию на UML (если конечно я пишу что-то новое, а не "правлю застарелые ошибки"). Если UML мне чего-то не позволяет - я правлю мета-модель и кодогенерацию, а потом только возвращаюсь к реализуемой задаче.

Поговорим о Вашем блоге. Что мотивирует Вас, крайне занятого человека делиться опытом?
Скажем так. Когда я "начинал" - я думал примерно следующее - "вот я вам сейчас открою глаза". Немного после я - ПОНЯЛ, что есть ДВЕ категории читателей - те которые "не доросли" и для которых многие вещи, которые "мне кажутся очевидными" - совсем неочевидны, и те, которые "переросли меня", которые читают и говорят - "а где мотивация того, что вы делаете".
Всю жизнь мечтал написать книгу о программировании. Так что - ТЕПЕРЬ я рассматриваю блог, как "площадку" для материалов книги.

Скажите честно, можно ли Вас чем-нибудь удивить в мире IT? Или средства разработки для Вас уже – полностью прочитанная книга?