Привет. Эта статья является частью серии, в которой мы говорим с профессиональными разработчиками программного обеспечения, спрашиваем их, каково это зарабатывать на жизнь написанием кода, и, возможно, попутно получим некоторое представление об индустрии разработки программного обеспечения.
Сегодня мы разговариваем с Джо К. Хехтом, также известным как «TJoe». Джо сейчас набирает код во влажных высотах Флориды, хотя в ходе интервью я узнал, что он уроженец Техаса, родился и вырос не более чем в пяти милях от того места, где я сейчас живу. Мир разработки гораздо более сплочен, чем вы можете себе представить!
Table of Contents
Привет, Джо, очень приятно с тобой поговорить, спасибо, что нашли время
Замечательная идея! Как я уже сказал, я очень рад участвовать.
Ваше имя очень хорошо известно в сообществе Delphi. Для тех немногих, кто вас не знает, как бы вы кратко описали, кто вы и чем занимаетесь?
Наемный программист — есть Delphi — будет отлаживать.
Какие продукты Embarcadero вы используете а) чаще всего б) регулярно?
РАД Студия! Я использую как Delphi, так и C ++ Builder. У меня есть все версии, которые когда-либо были выпущены, установлены и готовы к работе.
У меня довольно много клиентов, рассматривающих возможность обновления устаревших версий, желающих модернизировать существующие приложения и кроссплатформенность для поддержки macOS и мобильных платформ.
Безусловно, я рекомендую RAD Studio как лучший инструмент кроссплатформенной разработки на планете для выполнения своей работы. Embarcadero действительно пошел «ва-банк» для пересечения платформ, как для компиляторов, так и для визуальных элементов управления. Они проделали потрясающую работу на рынке, где нет других инструментов сравнения.
Как и / или почему вы стали разработчиком?
Изначально я занимался коммерческой полиграфией. Когда Apple Laserwriter впервые стал доступен, нам потребовалось специальное программное обеспечение для печати на ПК. Я начал с BASIC и быстро перешел на C. Я уже был очень впечатлен продуктами Borland Sidekick и Superkey, поэтому, когда Borland прислал мне письмо о Turbo Pascal, я сразу же начал работать, и наша производительность резко возросла. Остальное уже история. Наша настольная издательская программа TypeStudio получила награду журнала PC Magazine, и разработка программного обеспечения быстро стала намного более успешной, чем наш полиграфический бизнес.
Что больше всего помогло вам стать разработчиком?
Мой плацдарм для развития пришел с моим первым модемом. Я нашел форумы Borland Compuserve, где работают известные члены TeamB. Я быстро многому научился, читая сообщения, а затем начал помогать другим на форумах.
Я твердо верю, что потратив немного времени на ответы на сообщения на форуме (даже те, которые вам не интересны), часто можно обнаружить множество скрытых жемчужин кодирования. Форумы технических дискуссий, вероятно, являются лучшим способом найти хорошие ответы, поскольку за плохими ответами обычно следуют ответы, указывающие на какие-либо недостатки.
Вы думаете, что когда-нибудь перестанете быть разработчиком? Если да, то что будет дальше?
Если бы не RAD Studio, я бы подумал о другой профессии. Я использую множество различных инструментов разработки и компиляторов на нескольких платформах. Для долгосрочной разработки ваша IDE становится вашим домом, а RAD Studio — единственный найденный мной инструмент, который действительно делает процесс разработки чрезвычайно приятным. В нем есть все необходимое, он очень отзывчивый, хорошо продуманный и настраиваемый.
Что заставило вас начать использовать Delphi / C ++ Builder?
Мне было очень тяжело писать программы для Windows с нуля, используя Borland Pascal для Windows. Свою первую копию Delphi я получил, когда работал в Borland. Это был потрясающий опыт — стать свидетелем первой серьезной точки и снимать визуальную среду разработки. Это было невероятно быстро и полностью изменило парадигму программирования Windows на RAD (быстрая разработка приложений). Зачем использовать что-нибудь еще?
Я начал использовать C ++ Builder в Borland, когда он был разработан. Это было на десятилетия впереди своего времени (и до сих пор). Я также использовал Kylix (версия C ++ Builder для Linux), о которой до сих пор говорят программисты Linux.
Если бы вы могли дать какой-нибудь совет студенту, который подумывает о карьере разработчика программного обеспечения, что бы это было?
Старайтесь не «чрезмерно специализироваться» в определенной области. В наши дни специализация — это что-то для сердца, а не карьера. Разработка программного обеспечения стала очень быстро развивающейся отраслью, которая быстро переходит на использование новейших технологий дня. В объявлениях о вакансиях часто указываются десятки требований, требующих набора навыков.
Заявите о себе на онлайн-форумах и читайте сообщения. Вы многому научитесь, прочитав биржи, размещенные в сообществах разработчиков.
Табуляция… или пробелы?
Пространства! Это вопрос о методах форматирования кода (упрощенном благодаря отличному модулю завершения кода RAD Studio)?
Несколько ключевых правил успеха, которым я стараюсь следовать:
«Никогда тогда без начала». Блокировка кода критически важна для трассировки в процессе отладки и обеспечивает хороший уровень «ясности кода поздно ночью».
«Никогда не творите без бесплатного». Идите вперед и напишите свой код освобождения всякий раз, когда вы выделяете ресурс. Позже вы можете заблокировать его, переместить, прокомментировать (или что-то еще), просто убедитесь, что вы это написали. Если вы переместите код освобождения далеко, неплохо задокументировать в коде распределения, где он был размещен (и почему).
Разделите длинный набранный код каждой «мыслью» в процессе. Это может быть так же просто, как добавление пустой строки или, желательно, комментария.
Какой самый лучший день у вас как разработчика?
Я проснулся в сильной лихорадке, мне приснился сон, в котором я решил сложную проблему, которая мучила нас в течение многих лет. Я закодировал его, и решение во сне оказалось правильным.
Что самое плохое в работе разработчика?
Работа в этой «другой» IDE (конечно)!
Создание архитектуры большого решения, затем его кодирование и обнаружение, что в конце концов оно не работает и требует совершенно другого подхода.
Какой самый крутой совет по разработке вы знаете?
Если вы действительно осторожны, вы можете написать код, который почти точно переносится между Паскалем и другими языками на основе C (за исключением некоторых небольших изменений синтаксиса, которые можно автоматизировать). Я портирую много кода в обоих направлениях на C и Паскаль и обратно. Я считаю, что Delphi «компилирует и запускает» настолько быстро, что часто бывает быстрее разработать код в Delphi, а затем портировать код Pascal на C для окончательной доставки.
Работа из дома, работа из офиса, работа в открытом / общем пространстве? Что ты предпочитаешь и почему? Вы можете выбирать?
Я предпочитаю кодирование на круизных лайнерах!
За исключением того, что я отлично провел время в кампусе Borland’s Scott’s Valley, я успешно работал удаленно с 1985 года.
Я использую ноутбуки высокого класса с большими экранами и как минимум с двумя мониторами. У меня есть небольшой портфель с двумя Mac Mini, которые я использую для обслуживания виртуальных машин в средах разработки, а также небольшую проводную сеть и различные платы, планшеты и телефоны ARM для «мобильной разработки» (без каламбура).
Имея хороший инвертор мощности, я программировал все лето, посещая систему национальных парков США, и дважды жил на своей лодке с семьей, кодируя удаленно более двух лет.
Расскажите нам что-нибудь интересное, чего мы не знаем.
Кампус Borland был наполнен энергичным духом товарищества и яркими персонажами.
Я получил прозвище «Tjoe», данное мне Биллом «One Eye» Фишером.
Примечательные упоминания:
Андерс «Если вы последуете тому, что я говорю» Хейлсберг
«Ллойд на свободе»
«Стив Т»
«ИКС»
«Дешевый импортный Андерс» (чтобы различать двух Андерсов)
Лино «Привет, босс» Тадрос (который, по последним подсчетам, теперь владеет старым кампусом Borland).
Если бы вы могли взмахнуть волшебной палочкой «исправить технологическую индустрию», что бы вы изменили?
Разместите Delphi в классах!
Получу ли я три желания?
Конфиденциальность, безопасность и обновления компьютеров — большие проблемы. Подписка должна быть выбором, а не правилом. Требовать номер вашего мобильного телефона для получения информации о продукте — чистое зло, и базы данных, отслеживающие каждый наш вздох, должны быть навсегда стерты.
Вы были в Кремниевой долине? Если да, то как это было? Если нет, то хотели ли вы когда-нибудь?
Мое пребывание в долине Скотта в кампусе Borland оставило одни из самых теплых воспоминаний в нашей семье. Сотрудники Borland были фантастичны для всех нас! Пейзаж был непревзойденным. Это был поистине бесценный опыт и яркое событие в нашей жизни. К сожалению, нам пришлось уехать из-за чрезвычайных обстоятельств, но мы несколько раз возвращались, чтобы навестить наших друзей, и вернемся с радостью.
Вы когда-нибудь встречали известных / хорошо известных технических деятелей? Кто это был? Как прошло?
Я имел огромное удовольствие встретиться, поработать и даже подружиться с некоторыми из великих деятелей индустрии.
Стив Тейшейра, Лино Тадрос, Дэнни Торп, Аллен Бауэр, Дэвид Интерсимоне и мы не можем забыть всех членов «Borland TeamB».
Несомненно, на ум приходит Андерс Хейлсберг (отец Дельфи). У нас были очень случайные отношения (я не работал с ним напрямую), но время от времени мы встречались. Он был очень милым, искренним и очень любезным (даже для моих глупых вопросов по Delphi). К сожалению, это я открыл дверь, когда Билл Гейтс, как известно, подъехал на лимузине и увез Андерса. Он все еще должен мне датский флаг из-за проигранной маленькой ставки. Я действительно планирую когда-нибудь собрать этот флаг.
Если бы вы могли убедить кого-то рассмотреть Delphi или C ++ Builder, каким был бы ваш метод, как бы вы это сделали?
Мог? Бы? Я активно пытаюсь убедить людей использовать Delphi и C ++ Builder при любой возможности.
Я много работаю с API-интерфейсом для клиентов MSVC, поэтому включаю проект RAD Studio в задание. Клиенты смотрят проект, спрашивают о нем и часто комментируют, насколько круто выглядит тестовый код (в сравнении). Кажется, им нравятся блоки комментариев, вставляемые C ++ Builder, когда вы щелкаете, чтобы добавить новое событие, и им также нравится именование событий. Все очень чисто.
На конференциях я часто оставляю свой ноутбук открытым и работаю над проектами RAD Studio (даже на обоих фестивалях Linux), и всегда мне всегда задают вопросы о продукте. Вы можете быть удивлены, узнав, сколько людей Linux, посещающих эти конференции, также кодируют в Windows. Я зацепил нескольких.
Убедить программистов на C ++ взглянуть на C ++ Builder совсем несложно. Просто покажите им IDE! Пользователи Visual Studio неизменно удивляются скорости и простоте использования настоящей системы разработки RAD, а программисты Linux часто сразу признают, что у них есть виртуальная машина Windows (поэтому я показываю им FMX Linux). Оно работает!
Пользователи Delphi часто уклоняются от C ++, когда им следует принять обновление. Мир полон отличного кода C, который можно сделать доступным для Delphi с помощью обновления.
Точно так же для Delphi написано множество замечательных компонентов, которые также работают в C ++ Builder.
Для меня вопрос не в Delphi ИЛИ C ++ Builder, а в том, как лучше всего использовать их вместе.
Какой технический продукт вы хотите изобрести / спроектировать и почему?
Формат PDF (Portable Document File).
Я очень люблю разрабатывать программное обеспечение для типографики, обработки изображений и публикации.
PDF чрезвычайно сложен и был разработан в первую очередь как формат только для чтения, имея очень плохие возможности редактирования и преобразования. «Формат переносимого документа» должен быть легко переносимым не только для просмотра. Для импорта, редактирования и преобразования PDF-файлов часто требуются особые инструменты (например, наш продукт UberPDF).
Если бы вы могли снова прожить свою жизнь, вы бы все равно стали разработчиком? Почему?
Я родился для программирования!
Когда я был маленьким ребенком в 1960-х годах, когда большинство людей на самом деле не знали, что такое компьютер, меня оценили и сказали, что я «стану великим программистом». Эта оценка стала семейной шуткой — пока я не стал великим программистом.
Сколько кофе вы пьете в день и достаточно ли этого?
Джо недавно перешел на «чашку чая, пожалуйста, без сахара».
Я полностью отказался от кофе после десятилетий «всегда включенного, всегда свежего колумбийского кофе, доступного 24 часа в сутки, 7 дней в неделю».
Вы ночной ястреб, который кодирует до позднего вечера, утренний человек, который встает рано и прямо в рабочее время, или вы придерживаетесь какого-то обычного рабочего времени?
Ночной ястреб! Я люблю кодить ночью, в темноте. Классно, тихо, а контраст экрана отличный! Сроки также подходят моим европейским клиентам.
За свою карьеру вы когда-нибудь «тянули ночь напролет», чтобы иметь дело с чем-то, что абсолютно необходимо сделать?
О боже! Да!!! Много раз. Однажды я отработал для клиента 121 час в неделю.
Опишите некоторые из лучших проектов, которые вы реализовали как разработчик.
Я был ведущим инженером 7-го уровня, разрабатывал графические игровые движки, используемые как 7- м уровнем, так и Disney Interactive для нескольких популярных игр, включая «Эйс Вентура», «Боевой зверь», серию «Приключения в Тунленде» Хауи Манделя, «Тимон и Pumbaa’s Jungle Games », а также несколько игр Monte Python. Это была очень интересная и требовательная позиция. Находясь под прицелом, чтобы получить название, мы переключались ролями с кодеров на редакторов аудио-видео и начинали работать с талантами. Было вполне нормально работать с кем-то вроде Дэвида Гилмора из Pink Floyd или Хоуи Манделя над записью звуковой дорожки. Ребята из Монте-Пайтона в реальной жизни были нарезками (им не нужен был сценарий — они так жили).
Какой самый глупый вопрос вам задают (ни один из них не в счет!)
Когда я говорю, что «специализируюсь на программировании графики», меня часто спрашивают: «Вы делаете футболки?».
Расценки на работу с клиентами? Если вы это сделаете, не раскрывая ничего, что могло бы вызвать у вас дискомфорт, какой процесс вы используете?
Да, я обычно цитирую работы для клиентов.
Код, необходимый для выполнения работы, либо прост, либо требует дополнительных исследований, оценки или технико-экономического обоснования.
Я предоставляю заказчику план с объяснением минимального и ожидаемого времени, необходимого для известных частей работы, рекомендую ограничения на время, затрачиваемое на исследования и оценку, и устанавливаю ограничения «не продолжать дальше» для случаев, связанных с неизвестной осуществимостью.
Я очень искренен в отношении того, что я могу гарантировать, чего не могу гарантировать, предполагаемых входных и выходных данных для работы, и я очень уверен, что ни одна из функций не может быть каким-либо образом рационализирована в рамках существующей заявки на вакансию.
Как не дать клиентам / руководителям программ / менеджерам «расползаться по функциям»?
Я поощряю появление хорошо продуманных функций! Вот как создаются исключительные функции!
Разработка программного обеспечения часто представляет собой непрерывный художественный процесс, в ходе которого вы придумываете решения проблем, с которыми сталкиваетесь. Эти решения часто превращаются в отличные кусочки головоломки, которые могут стать низко висящими фруктами для новых и интересных функций, которые можно рекомендовать клиенту.
Опишите для вас типичный сеанс программирования. Как это началось? Вы делаете перерывы? Есть ли у вас какие-нибудь ритуалы / привычки, чтобы сопровождать это?
Во-первых, избавьтесь от отвлекающих факторов и устройтесь поудобнее.
Я всегда начинаю свой день программирования с небольшой «разминки», создавая пустой проект и проводя своего рода небольшой эксперимент, опробуя новый компонент или играя с функцией IDE, которую я хочу изучить.
Затем просмотрите свой предстоящий сеанс кодирования (чтобы помочь обновить, где вы находитесь в процессе), подготовьте все исследования, необходимые для вашего сеанса, и попытайтесь разбить сеанс на логические «шаги завершения» (где вы будете делать перерывы).
Если во время кодирования вы столкнетесь с трудной для решения проблемой, требующей размышлений, подумайте о том, чтобы сделать перерыв (и небрежно подумайте о проблеме и возможных решениях).
Наконец, когда вы заканчиваете сеанс, всегда добавляйте строку комментария, объясняя, где вы заканчиваете, отмечайте любые нерешенные проблемы, что будет дальше и всегда делайте резервную копию своей работы!
Вы слушаете музыку, пока пишете код? Если да, то не могли бы вы назвать нам несколько треков / исполнителей / выступлений?
Нет. Пока я кодирую, я не обращаю внимания на свое окружение. Я могу кодировать в полную силу на переполненной палубе Лидо круизного лайнера в 17:00. Я люблю музыку, играю на гитаре, предпочитаю классический рок, джаз и блюз. Среди любимых исполнителей — Led Zeppelin, The Beatles, Дайана Кролл и почти все, кто исполняет блюзовые каверы. Польки тоже люблю!
Используете ли вы какие-либо методы или техники, такие как Agile, Scrum, Kanban, TDD? Если да, то почему? Если нет, то почему?
Знаете ли вы, что у TMS Software есть отличный компонент канбан-доски?
Канбан хорошо подходит для разработки программного обеспечения, его просто и легко реализовать.
Кроме того, рекомендуемые методы, обсуждаемые в книге Стива МакКоннелла «Завершенный код», Microsoft Press, хорошо послужили мне на протяжении многих лет.
Вы отслеживаете ошибки? Если да, что посоветуете?
Обязательно отслеживаю баги!
Я придерживаюсь старой школы, поэтому, если клиент не прислал систему отслеживания, я сохраняю ее очень простой, используя (самое большее) трехуровневую систему комментирования.
Комментарии в верхней части модуля, комментарии в разделах интерфейса кода и реализации, а также файл bugs.txt, содержащий обзор для их отслеживания.
Если что-то станет сложным, я могу использовать имеющееся у меня приложение-шаблон Kanban.
Какой самый лучший совет по программированию вы получили?
От Аннеке Ли (Borland): «Не переусердствуйте, пытаясь изучить все — дело не в том, что вы знаете, а в том, насколько хорошо вы можете использовать свои ресурсы, чтобы найти ответ, когда он вам нужен».
От Хизер Латум (Borland): Выделите несколько минут, чтобы каждый день опробовать один компонент Delphi.
Какой самый лучший вопрос вам когда-либо задавали на собеседовании и как вы с ним справлялись?
Вопросы с подвохом на собеседовании! Я делаю обзор того, как решить проблему (без выработки точного ответа). Если требуется точный ответ, я объясняю, что точные ответы работают, и спрашиваю, готовы ли они начать работу или цикл выставления счетов.
Было ли у вас когда-нибудь техническое интервью, которое проходило очень гладко — если да, что вы посоветуете другим? Если у вас было провальное интервью, что пошло не так, и вам нужно обнять?
Мое любимое интервью было на Borland! Все прошло идеально на всех уровнях. Это было похоже на сбывшуюся мечту.
Самая большая катастрофа была для большого контракта на отладку, который был записан на белую доску. Я дал слишком много информации о том, как именно я собирался решать различные проблемы с кодированием компании (они использовали решения без меня).
Следующая самая большая катастрофа произошла на большом собеседовании по поводу контракта, который я действительно хотел, и они хотели меня. Я получил подавляющее одобрение всех, кроме одного (директора). Возможно, у нее был плохой день, поскольку я почувствовал от нее какие-то негативные флюиды и трение. Мне следовало проявить инициативу, чтобы изменить ситуацию, просто за счет дополнительного взаимодействия с ней, но вместо этого я рассчитывал на успех (и проиграл) по правилу большинства.
Совет: не переодевайтесь, не раздайте свои карты и постарайтесь идентифицировать себя с кем-либо, кто может помешать вашему успеху.
Хороший разработчик программного обеспечения:
Пишет четкий и лаконичный код, хорошо структурированный и простой для понимания.
Использует хорошо названные переменные, процедуры и аргументы.
Код документа, в котором не совсем понятно его назначение.
Всегда смотрит в будущее, чтобы в будущем использовать дизайн имеющегося кода.
Плохой разработчик программного обеспечения:
Пишет небрежный, запутанный, плохо структурированный код, который трудно понять.
Использует короткие переменные, процедуры и аргументы с загадочными именами.
Не оставляет возможности для дальнейшего улучшения.
iPhone, Android, прочее — а почему?
Все они у меня есть. Лично. Я бы предпочел «другое», хотя его вряд ли можно использовать.
IPhone ограничивает, Android больше похож на жизнь на Диком Западе.
Мы живем в день, когда наши телефоны должны работать как безопасный мобильный компьютер, который можно подключить к полноразмерному монитору и клавиатуре и использовать в качестве настольного компьютера.
Настоящая настольная ОС Microsoft Windows способна работать на этих крошечных устройствах ARM, даже запускать приложения x86 в режиме эмуляции, и в большинстве случаев может обеспечить разумное взаимодействие с пользователем. Я использовал это.
Неудивительно, что 4-ядерная плата с частотой 2 гигагерца и несколькими гигабайтами оперативной памяти действительно может обеспечить достаточно хорошее качество работы на рабочем столе.
Конечно, небольшая плата ARM не является ракетой для серьезной обработки чисел, но в настоящее время мы должны иметь возможность легко переносить огромные вычислительные задачи в облако.
Я отправил двоих детей сделать коллаж с Windows RT на планшетах ARM. Это сработало отлично, и детям они понравились. У меня все еще есть эти планшеты, и я все еще хорошо работаю.
Настроенный рабочий стол Linux может быть почти волшебным на ARM.
Очень жаль, что [намного] больше работы не было вложено в систему Ubuntu Touch. Миру действительно нужна отличная мобильная ОС, платформа которой не «принадлежит».
Для разработчика: ПК против Mac? Почему?
Что, нет варианта Linux Desktop?
Я в первую очередь разработчик Windows, мне нравятся Widows, но меня совсем не устраивают направления, в которых работает ОС.
Mac отлично справляется с обслуживанием виртуальных машин всех типов, однако я совсем не большой поклонник OSX.
Правда? Я запускаю Linux в качестве хоста рабочего стола, запускаю Windows на виртуальной машине и получаю доступ к OSX через VNC.
Чем вы хотите, чтобы вас запомнили?
Помощь программистам и жестокая честность.
Хорошо или плохо, я не имею в виду никакого вреда и желаю, чтобы от этого исходило только хорошее.
Я теряю клиентов из-за проверки кода красной ручкой. Клиенты понимают правду, однако у меня было несколько человек, которые действительно желали подтверждения плохой практики.
Какой фильм для разработчиков, хакеров, техников и компьютерщиков лучший?
Мне нравятся документальные фильмы об истории и науке. Мне действительно понравились Звездные врата (и фильм, и сериал). Мне подарили настоящую военную куртку Stargate SG-1, и меня иногда отдают честь, когда я ношу ее на публике.
Ни одного разработчика нельзя увидеть без:
Delphi, Beyond Compare и NotePad ++. Что еще вам действительно нужно?
О, C ++ Builder! Получите обновление до RAD Studio!
Если бы о вашей жизни сняли фильм, кого бы вы хотели сыграть?
Глен Кэмпбелл или Джимми Пейдж.
У вас есть книга, продукт или услуга, которые вы хотели бы упомянуть?
У Далии Прасникара [Embarcadero MVP] есть две очень достойные книги, которыми должен владеть каждый программист Delphi: « Delphi Event-based and Asynchronous Programming » и « Delphi Memory Management for Classic and ARC Compilers ».
« Дизайн компонентов Delphi » Дэнни Торпа является обязательным (даже для пользователей C ++ Builder). Даже если вы не разрабатываете компоненты, в книге можно найти множество жемчужин.
Книга Стива МакКоннелла, Microsoft Press, « Код завершен », помогла мне научиться грамотно разрабатывать и форматировать код, чтобы минимизировать ошибки.
« Beyond Compare » от Scooter Software — незаменимый продукт, доступный для всех настольных платформ, который также прекрасно интегрируется с редактором RAD Studio. Получите полную версию продукта и научитесь его использовать!
TMS Software [технологический партнер Embarcadero] предоставляет почти бесконечный список отличных компонентов для RAD Studio. Компоненты хорошо спроектированы, имеют отличную поддержку и часто обновляются. У них также есть «пропуск на полный доступ», который дает вам все, что есть в каталоге TMS. Скажи им, что тебя послал Ти-Джо!
У вас есть веб-сайт, который люди могут посетить?
Какой способ связи с потенциальными клиентами вы предпочитаете?
https://code4sale.com/email/JoeHecht/
Какое превосходное интервью! Спасибо, что поговорил со мной, Джо.