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.
Я не вижу "особенных ограничений RAD". Все ЯВУ - "примерно похожи".Многие безосновательно скептически рассматривают Delphi как среду разработки масштабных приложений. Насколько естественные ограничения RAD-средства мешали Вам реализовывать Ваши задачи и как Вы их преодолевали?
Статья не была особенно "удачна". "Хорошего" отклика она не получила. Но скажу. UML и "кодогенерация" - ХОРОШО ложатся на ВСЕ языки (ЯВУ) с ООП (о чём классики - не устают повторять. С их "лозунгами"). Delphi - не лучше и не хуже. Да и на языки БЕЗ ООП - они тоже - неплохо ложатся. У нас - есть примеры.Недавно Вы с Вашим коллегой Максимом Крыловым опубликовали большую статью о применении Delphi совместно с UML. С точки зрения ООП, насколько Delphi является удачным представителем технологии данного класса?
Ну мы сделали свой MVC-like фреймворк. Сделали свою библиотеку параметризуемых контейнеров. Сделали набор wizard'ов/дизайнеров. Сделали описание кода на UML. Сделали подключение СОБСТВЕННЫХ скриптов к Delphi. Сделали множество расширений к DUnit в конце-концов.Как-то раз Вы упомянули, что «создали Delphi 1.5». Что Вы под этим подразумеваете?
Сделали кстати "кодогенерацию" из объектов в TDataModule.
Написали собственную реализацию подсчёта ссылок.
Сделали собственный контроль за утечками памяти и объектов.
Написали собственную реализацию Immutable-строк. И ВОБЩЕ - "пришли к мысли", что "строки должны быть атомарны". Независимо от "ведущих производителей".
Сделали собственную возможность вызова локальных функций из глобального контекста.
Кроме Delphi - я "знаю" только Objective-C и xCode. На фоне Delphi - он меня пока "не впечатляет". Скажем так - он "другой". Для других задач. И для другой платформы.Вы знаете практически все достаточно популярные технологии программирования. Не было ли соблазна отказаться от Delphi и перейти на другой инструмент?
Я стараюсь не слушать подобную критику. Я вообще стараюсь не ввязываться в "священные войны". Все ЯВУ - "примерно одинаковы".Возможно, Вы слышали нарекания в адрес возможностей Delphi. Как профессионалу, достаточно сложно «не принимать обвинения» на свой счёт. Что Вы обычно отвечаете критикам?
Я написал на Delphi собственный текстовый редактор (процессор). Ещё в 97-м году. "Сравнимый" по функционалу с Word 6 и "немного" с Word 97. Он существует до сих пор и активно используется. И дорабатывается уже многими людьми.Как теоретик и практик, расскажите, пожалуйста, о какой-нибудь замысловатой проблеме или масштабной задаче, которую Вы решили при помощи изощренной техники в Delphi?
Сделал собственный бинарный 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).
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.Ваш блог (18delphi.blogspot.com) намекает, что Вы начали использовать Delphi с первой её версии. А что было до этого?
Delphi 1.0 И его "компонентная модель". Это ЯРКОЕ ПЯТНО. Это - ВЗРЫВ и ВСПЫШКА. Ничего подобного - я БОЛЕЕ - не видел. Хотя я и до этого видел Turbo-Vision, Super-Vision (это было - СУПЕР!!! Ребята из конторы "Аверс" - "натянули" на текстовую библиотеку Turbo-Vision графическую оболочку. НЕ ПОПРАВИВ - НИ ЕДИНОЙ строчки оригинального кода. Это были - МАСТЕРА своего дела). Видел так же Vitamin-C и Turbo-Professional ("объектность" кода, без "объектности компилятора"), Object-Professional и Data Entry Workshop (от Turbo-Pover).За всю эволюцию Delphi что из новых возможностей вызвало наиболее яркие эмоции?
Но Delphi 1.0! Это - ВЗРЫВ.
OpenTools API. И всё такое...
Более ярких пятен - я не видел (ну кроме UML и "кодогенератора от Макса").
Ну дальнейшие версии Delphi - порадовали "интерфейсами и подсчётом ссылок", TAction (!), TFrame. НО это не было так ЯРКО.
Компонентная база. В частности FireMonkey. Мне "кажется", что я ЗНАЮ как его улучшить (хотя я ЗНАЮ, что многим - мои методы улучшения могут не понравиться). UML. Тесты. ТЕСТЫ. Тесты как фреймворк и ТЕСТЫ как тесты к СУЩЕСТВУЮЩЕМУ коду.Если бы Вы работали в Embarcadero и у Вас был бы выбор, какое направление взять, что из самой Delphi (IDE, компилятор, компонентная база) над чем бы хотелось поработать?
Задумывался и не раз. Но! Каждый раз когда я задумывался - я приходил к ОДНОМУ и ТОМУ же выводу. В ОДИНОЧКУ - тем чем я занимаюсь - ЗАНИМАТЬСЯ - невозможно. Если пытаться САМОМУ "рулить" процессом - очень скоро надо БРОСАТЬ программирование и начинать заниматься СОВЕРШЕННО другими вещами. А я - НЕ ХОЧУ этого - посему - "от добра - добра не ищут".Вы никогда не задумывались о карьере «индивидуального» разработчика, независимого и самостоятельно определяющего, чем заниматься?
Заедает.. Но без неё - НИКУДА.. Без "рутины" - нельзя жить "не оторвавшись от байтов" (как писал Джоэл). Надо "ходить по земле". Иногда надо и НЕДЕЛЮ (а то и ДВЕ потратить "копаясь" в отладчике и ища "тривиальную" ошибку).Вам не кажется, что Вы немного overskilled относительно даже весьма продвинутого и искушенного разработчика? Рутина на заедает?
И ещё (да не обидится на меня работодатель). Я несколько раз подавал своё резюме в разные организации. Получал что-то вроде - "вы overqualified относительно той позиции, что претендуете". Так что мне кажется, что это - "отмазка"...
После нескольких подобных раз - Я ПОНЯЛ, что в моей организации - ТЕХНОЛОГИЧЕСКИЙ ПРОЦЕСС построен на БОЛЕЕ ЧЕМ высоком уровне.
Отличается. Сильно. Я программирую в терминах "прецедентов" и "аспектов". Я начинаю программировать задачу с ТЗ. Рисую прецедент (или его реализацию). Детализирою требования ВНУТРИ прецедента. Выделяю АСПЕКТЫ. Нахожу - УЖЕ запрограммированные части. И/или использую их или выделяю из УЖЕ написанного кода существующее, или пишу новое. Опять же - отталкиваясь от UML. Под МНОГОЕ - я сразу же пишу ТЕСТЫ. Или ПРОШУ коллег написать их. Это не TDD! НО - где-то похоже.Насколько Ваш процесс разработки отличается от классического «Form1, Button1…»?
И далее - я РИСУЮ ВСЮ реализацию на UML (если конечно я пишу что-то новое, а не "правлю застарелые ошибки"). Если UML мне чего-то не позволяет - я правлю мета-модель и кодогенерацию, а потом только возвращаюсь к реализуемой задаче.
Скажем так. Когда я "начинал" - я думал примерно следующее - "вот я вам сейчас открою глаза". Немного после я - ПОНЯЛ, что есть ДВЕ категории читателей - те которые "не доросли" и для которых многие вещи, которые "мне кажутся очевидными" - совсем неочевидны, и те, которые "переросли меня", которые читают и говорят - "а где мотивация того, что вы делаете".Поговорим о Вашем блоге. Что мотивирует Вас, крайне занятого человека делиться опытом?
Всю жизнь мечтал написать книгу о программировании. Так что - ТЕПЕРЬ я рассматриваю блог, как "площадку" для материалов книги.
Скажите честно, можно ли Вас чем-нибудь удивить в мире IT? Или средства разработки для Вас уже – полностью прочитанная книга?