Гохан Озгозен: Чтение чужого кодекса - отличный способ узнать новое

Я поговорил с Гоханом Озгозеном, внештатным разработчиком из Soshace.com, который поделился со мной своим программным путем и страстью к веб-разработке, а также дал несколько советов о том, как добиться успеха в качестве фрилансера.

Гохан Озгозен имеет более чем семилетний опыт веб-разработки, он работал в банковской и телекоммуникационной отраслях, а затем выбрал фриланс, потому что он чувствовал, что это было сложнее, и давал ему ряд возможностей учиться и играть с новыми технологиями. . Гохан владеет Java, JavaScript и Python. В этом интервью он рассказывает о своем опыте работы, проблемах, с которыми он ежедневно сталкивается в качестве фрилансера, о мужестве, которое потребовалось ему, чтобы вырваться из офисных оков, и призывает всех никогда не переставать учиться.

Привет, Гохан! Начнем с твоего рассказа. Как вы попали в программирование?

Я родился в Стамбуле, был старшим сыном инженера и фармацевта. В Турции все студенты должны сдавать национальные тесты, которые проводятся ежегодно, чтобы поступить в среднюю школу или университет. Для поступления в школу нет требований к количеству баллов, вместо этого вы должны набрать больше баллов, чем другие ученики, чтобы обеспечить себе место в школе. Это сделало мое детство очень напряженным! Я был амбициозным человеком, помню, как плакал после того, как узнал, что на одном из тестов я был вторым лучшим учеником! Тем не менее, мне удалось попасть в 1000 лучших учеников на национальных экзаменах, которые гарантировали мне место в лучших школах. Я учился в средней школе естественных наук, где поощряются только количественные исследования. Я попал в программирование, потому что тогда мне было очень интересно решать головоломки с помощью прикладной математики и программирования. Так я изучил Java. Это был JDK 4. Помните, это было более 15 лет назад!

Пройдя тест на поступление в университет, я оказался перед дилеммой. Одна часть меня хотела стать врачом, потому что хотела узнать, как устроено человеческое тело. Другая часть меня хотела стать компьютерным ученым, потому что я хотел узнать, как работают эти машины. В конце концов, я решил, что моей настоящей страстью было понять, «как все работает», поэтому я решил, что инженерное дело больше подходит моему персонажу.

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

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

Чем вы занимались до того, как присоединились к Soshace?

Когда я учился в колледже, меня пригласили на стажировку в ведущую GSM-компанию Турции под названием Turkcell. Я проходил там стажировку по Java и оказался в среде, где более 200 инженеров работали над одним амбициозным проектом. Это было мобильное веб-приложение b2b, в котором все клиенты взаимодействуют друг с другом для выполнения своих повседневных обязанностей. Инженеры по требованиям, инженеры по тестированию, разработчики, архитекторы, дизайнеры и консультанты работали вместе. Я многому у них научился, и взамен они продлили мой контракт на стажировку до тех пор, пока я не закончу колледж. В день выпуска мне предложили постоянную должность, и я ее устроил. Я улучшил свои навыки Java, особенно в создании решений в условиях большой нагрузки с большой гибкостью, необходимой от наших бизнес-аналитиков.

Через несколько лет я решил, что мне пора сменить проект, потому что я слишком долго работал над одним и тем же проектом. Хотя я узнавал что-то новое каждый день, скорость снижалась. Я очень свободно владел Java, Javascript, разработкой мобильных приложений и имел хорошее резюме.

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

Поэтому я подал заявку в банк под названием Akbank (который был назван самым дорогим брендом Турции в 2015 году). Меня приняли и я там работал старшим Java-разработчиком. Моей задачей было разработать собственное промежуточное программное обеспечение для ежедневной оркестровки миллионов запросов. Применение проверок безопасности, обеспечение бизнес-требований и ведение журналов. Я также разработал там некоторые собственные фреймворки и приложения, потому что у меня было немного свободного времени, и я хотел предоставить некоторые решения, с которыми я столкнулся в повседневной работе. Через некоторое время мои небольшие приложения стали популярными в банке, особенно приложение для поиска, которое позволяло сотрудникам мгновенно искать и находить фрагмент кода благодаря созданным мной алгоритмам обратной индексации.

Через несколько лет я оказался перед другой дилеммой. Одна часть меня хотела поехать за границу и работать в более крупных компаниях, а другая часть хотела изучать новые технологии и создавать с их помощью продукты. В банковской среде из соображений стабильности люди склонны выбирать не очень современные технологии. Здесь началась моя карьера фрилансера.

Поэтому я выбрал фриланс. Я работал в десятках небольших компаний и даже отдельных лиц, разрабатывая программное обеспечение для их нужд. Всю свою жизнь я проработал в крупных организациях, и это был для меня новый опыт. Мне пришлось быстро изучить новые технологии, найти решения, улучшить свои коммуникативные навыки и навыки решения проблем, попытаться общаться с клиентами таким образом, чтобы я мог понять, чего они «на самом деле» хотят, и предлагать альтернативные решения, если я чувствую, что они хотят на самом деле невозможно. Я разрабатывал мобильные приложения для ресторанов, создавал сайты для юридических компаний и сайты электронной коммерции. Еще я создал себе мобильное приложение. Я работал инженером технической поддержки, чтобы улучшить свои коммуникативные навыки, когда мне приходилось общаться с клиентами со всего мира. Мне приходилось приспосабливаться к изменениям, мне приходилось решать сложные задачи по информатике, общаясь с нетехническими людьми. Наконец, я нашел Soshace, и вот где я с радостью сижу в этот момент своей жизни!

Какие языки программирования, фреймворки вы знаете? Как вы их узнали?

Я знаю Java, Python и Javascript. Я выучил Java самостоятельно, когда учился в старшей школе, а затем улучшил свои навыки в ходе профессиональной карьеры. Я разрабатывал различные проекты, написанные на Java, с использованием фреймворков Spring, Hibernate, Apache Camel, Apache Struts. Все фреймворки существуют для того, чтобы предоставить заранее определенное решение повторяющихся проблем в цикле разработки программного обеспечения. Таким образом, после определенного этапа в карьере инженера-программиста освоить новую структуру можно, просто внимательно изучив документацию, прочитав книги и применив эту информацию к бизнес-приложению, которое используется множеством людей. Вот как я изучил эти фреймворки. Улучшайся, если я это знаю, узнавай, если я этого не знаю.

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

Если вы работаете над веб-приложениями, вам необходимо изучить JavaScript и его фреймворки. Мне пришлось выучить Angular по просьбам моих клиентов. Я действительно считаю, что он отлично подходит для определенного диапазона требований, и это очень сильный фреймворк, который может обрабатывать множество рутинных задач, которые в противном случае были бы чрезвычайно утомительными.

Моя стратегия обучения, как правило, заключается в следовании официальной документации, чтению книг. Получив определенный уровень знаний, я хожу на конференции, знакомлюсь с новыми людьми, которые хорошо разбираются в этих технологиях. Также чтение чужого кода - отличный способ узнать что-то новое. Я не редко обнаруживаю, что делаю что-то не так в течение длительного времени! Я переживаю эти моменты прозрения, следуя чужому кодексу. Я думаю, что этот опыт будет полезен и другим разработчикам.

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

Какие технологии вам нравятся больше всего?

Моим любимым технологическим стеком был бы Java- Spring -Hibernate-Hazelcast- Apache Solr - Angular - MySQL или Oracle DB.

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

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

Я провел значительную часть своего времени в больших офисах, работая с множеством разных инженеров. Это, конечно, очень хороший опыт, однако влечет за собой накладные расходы. Иногда вы просто хотите делать то, что хотите. Офисная бюрократия и ограничения компании могут снизить вашу производительность. Я хотел изучать новейшие технологии, создавать новые продукты. Некоторых клиентов действительно не волнует, как вы разрабатываете решения для их нужд, пока это работает. Другие предъявляют строгие требования к техническому стеку. Но я хотел быть гибким в удовлетворении потребностей обоих этих типов клиентов. Я решил работать с людьми со всего мира. Я могу работать с инженером из России, инженером-испытателем из Португалии для клиента из США. Все это здорово, и есть чему поучиться! Это нелегкое решение, но в конце концов оно очень полезно.

Я бы посоветовал начинающим фрилансерам сначала подготовиться. Техническая подготовка необходима для поддержки клиентов с их потребностями. Кроме того, удаленная работа не так проста, как кажется. Вы должны тщательно планировать свои встречи, расписание. Ваша рабочая среда, оборудование и образ мышления должны быть профессиональными. Здесь мало места для ошибок. Вы должны задавать правильные вопросы, вы должны быть профессионалом. В офисной среде вы можете сказать своему руководителю, что ваш офисный компьютер не работает, поэтому вы не можете выполнить свою задачу. Но за удаленную рабочую среду это полностью ВАША ответственность. Вы не можете просто сказать: «Мой компьютер не работает, извините, я не могу выполнить эту задачу вовремя». Вы должны планировать такие вещи. У вас должно быть резервное подключение к Интернету, резервное оборудование. Вы должны быть доступны все время. Это дает клиентам ощущение, что «вы там».

С какими трудностями вы сталкиваетесь, работая фрилансером? В чем основные различия между фрилансером и офисной работой?

Мне пришлось прочитать пару книг на эту тему, просто чтобы подготовиться. Я очень тщательно спланировал записную книжку, чтобы записывать свои ежедневные, еженедельные и ежемесячные задачи. Когда я разговариваю с клиентом, одно предложение вроде «… кстати, мы должны сделать это завтра» будет означать новую задачу. Вы должны все время брать на себя ответственность, делать заметки и следить за ними самостоятельно. Даже клиент может забыть об этой задаче, но вы должны напомнить ему об этом. Вы должны создать логические границы в своем доме. Должна быть отдельная комната, посвященная вашей работе. Ваша семья, друзья и даже ваши домашние животные должны знать, что если вы работаете, это серьезно. В офисе вы можете собраться за углом и немного поговорить о погоде. У вас нет такой роскоши для удаленной работы. Если вы работаете, вы берете за это плату с клиента. Если вы занимаетесь чем-то другим, это недопустимо.

Опишите свой обычный рабочий день.

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

Планируете ли вы переехать в другое место, например, в Штаты?

Здесь я должен быть очень честным. Я был в США и других странах Европы, и мне бы очень понравилось переехать туда на какое-то время в моей жизни. Однако мои родители стареют, и переезд куда-нибудь подальше будет означать, что я потеряю с ними связь. Я чувствую, что брошу их, если однажды уйду. Конечно, они могут приехать в гости, или я могу навестить их снова, но я снова чувствую, что я в долгу перед всем, что они сделали для меня в моей жизни. Может быть, где-нибудь достаточно близко, например, через несколько часов полета будет лучше для переезда :)

Каковы ваши карьерные устремления и карьерные цели?

В своей карьере я работал с инженерами, которые хотели когда-нибудь стать менеджером. Напротив, мне очень нравится то, что я делаю, и быть менеджером, отказавшись от технической стороны дела, не сделает меня счастливым. Я представляю, что все еще занимаюсь технической стороной дела, ежедневно разрабатывая программный код. По крайней мере, мне было бы приятно посоветоваться с молодыми инженерами, которые это делают. Я хочу продолжать совершенствовать свои навыки, осваивать новые навыки, чтобы улучшить свой инструментарий, и работать с лучшими из лучших, чтобы учиться у них. Я также люблю работать над побочными проектами, возможно, однажды я смогу основать свою собственную компанию по созданию программного обеспечения, которое решает некоторые повседневные проблемы. Для инженера нет ничего лучше, чем создание чего-то, что решает проблемы людей. Вы можете посмотреть на него и сказать: «Я создал это».

Какой проект был для вас самым сложным?

Я отвечу на этот вопрос двумя примерами.

Наиболее техническая проблема:

Когда я работал в Turkcell, мы создали рекламную кампанию, которая длилась всего 1 час. Загвоздка заключалась в том, что все флагманские телефоны в течение ограниченного времени стоили всего 1 доллар. По сути, это была раздача, однако эта рекламная кампания вызвала огромный трафик на наш сайт. Покупатели добавляли товары в корзину и пытались приобрести флагманские смартфоны за 1 доллар. Для нас было сложной задачей одновременно отвечать на огромное количество запросов, следя за тем, чтобы мы не перепродали (было ограничение на количество телефонов, которые мы могли продать) и чтобы мы не мешали клиентскому опыту. В конце концов, нам пришлось создать решение, состоящее из нескольких блокировок базы данных и блокировок кеша памяти. Население Турции составляет 80 миллионов человек, и более половины из них имеют активное подключение к Интернету. Продажа флагманских телефонов за 1 доллар была действительно большой задачей, чтобы веб-сайт не переставал отвечать.

Самое сложное:

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

Каким вы видите будущее веб-разработки?

Для каждого проекта есть определенные задачи, которые необходимо выполнить, независимо от того, о чем идет речь. Безопасность, ведение журнала, разбиение на уровни, обмен сообщениями и т. Д. Современные фреймворки пытаются решить эту проблему с помощью простых и элегантных решений. Я считаю, что с помощью искусственного интеллекта эти повторяющиеся задачи на самом деле будет обрабатывать ИИ. Появятся умные IDE и фреймворки, которые могут писать за вас код. Если вы изучите проект, который был написан 10 лет назад, вы почувствуете, что «весь этот раздел можно выполнить с помощью одной строчки кода». Я верю, что эта модель будет продолжаться.

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

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

Вы сказали, что способны писать полные учебники по криптографии или технологиям Java. Как вы начали заниматься криптографией и почему, по вашему мнению, имеете право писать об этом?

На последнем году обучения в колледже мой дипломный проект был посвящен созданию системы LDAP с поддержкой 3D-аутентификации с аппаратным обеспечением автономного генератора токенов. Я модифицировал программное обеспечение LDAP с открытым исходным кодом, чтобы включить 3D-аутентификацию (open-LDAP) с помощью небольшого устройства-генератора токенов. В то время банки и другие приложения, оптимизированные для обеспечения безопасности, использовали эти устройства, так как смартфоны не очень распространялись, не у всех клиентов банков были смартфоны, способные генерировать токены. Я использовал алгоритмы безопасной криптографии для генерации и синхронизации генераторов токенов. Это было сложной задачей, потому что каждый раз, когда пользователь нажимает кнопку на генераторе, генерируется новый уникальный ключ для входа в LDAP или банковский счет. Эти токены должны быть проверены на стороне сервера и должны иметь встроенный TTL. Благодаря своим знаниям в этой области я работал в группе безопасности банка, занимаясь разработкой общедоступных API-интерфейсов, которые еще больше расширили мои знания. Применяя критерии OWASP и лучшие практики безопасности более 5 лет, я чувствую себя комфортно, обсуждая алгоритмы криптографии и лучшие практики, основанные на примерах использования приложений.

Люди склонны полагать, что если они используют SSL, все будет достаточно безопасно, что является большой ошибкой. Существуют различные другие типы атак, которые позволяют злоумышленникам получить конфиденциальные данные клиентов. Я планирую написать статьи о том, какие криптографические методы могут применяться для таких случаев, как шифрование на стороне клиента, сквозное (точка-точка) шифрование, безопасное хеширование паролей клиентов, использование безопасных открытых ключей для шифрования RSA, безопасное хранение и распространение ключей и принципы проектирования помощников, чтобы избежать атак человека посередине.

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

Как вы стали сотрудничать с Soshace? Какие собеседования вам нужно было пройти, чтобы вас приняли?

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

Опишите, пожалуйста, как вы получили работу через Soshace. Как клиент выбрал вашу кандидатуру? Какие советы вы можете предложить фрилансерам, которые готовятся к своему первому собеседованию с удаленными клиентами?

После моего одобрения Soshace, в короткий промежуток времени, я получил интервью с клиентом. Мой набор навыков полностью соответствовал их требованиям, так что это был гладкий процесс. Я объяснил свои предыдущие знания и навыки и объяснил, почему я могу профессионально справляться с их повседневными задачами. Я хорошо общаюсь с клиентами, раньше сам привлекал фрилансеров для разных проектов. Я бы посоветовал фрилансерам улучшить свои коммуникативные навыки, задавая правильные вопросы, очень важно понимать потребности клиента. Очень немногие люди на 100% подходят для данной задачи, поэтому желание узнать то, чего вы не знаете, имеет решающее значение. Кроме того, во время собеседований очень важно открыто говорить о вещах, о которых вы еще не знаете. Другое дело - рассматривать интервью как способ оценки клиента. Я имею в виду, что да, клиент оценивает ваши навыки и совместимость, но как фрилансер вы обязаны оценить клиента и принять решение для себя. Сказать «да» - серьезное обязательство, поэтому фрилансерам следует изучить свои способности, прежде чем брать на себя такие профессиональные обязательства.

Чем вы увлекаетесь, чем занимаетесь в свободное время? Если вам нравится читать, какая ваша любимая книга по веб-разработке или любому конкретному языку программирования, например Java?

О, я люблю читать. Я всегда читаю несколько книг одновременно, одну для отвлечения ума и для удовольствия. Это может быть научно-фантастический роман или комикс. Все, что я могу прочитать, не повредив клетки своего мозга :) Кроме того, мне нравится читать книги об абстрактных идеях или истории. Что-то, что я могу узнать и подумать после окончания сеанса чтения. Это книги, которые мне нравится читать, пока у меня свежий ум и я хочу думать о некоторых проблемах, о которых я никогда не думал. Наконец, я всегда читаю книги, связанные с моей профессией. Будь то общая книга по программированию или что-то о фреймворке / языке, в котором я хотел бы улучшить свои навыки. Я бы посоветовал прочитать «Эффективная Java для разработчиков Java», «Программист-прагматик» и «Чистый код». Кроме того, «Программирование - это искусство» Кнута - отличная книга для просмотра, хотя она немного толстовата, но тем не менее ее хорошо читать. В настоящее время я читаю книгу о библиотеке Kafka для быстрого асинхронного обмена сообщениями; роман о ролевой игре под названием «Родина» (я знаю, что этот роман не очень приемлем для человека в моем возрасте :)) и книгу под названием «Маленькая инструкция по жизни», которая мне очень нравится.

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

Я копирайтер на Soshace.com, платформе для найма веб-разработчиков: нанять разработчика или подать заявку на удаленную работу. Если у вас есть интересная история, напишите мне в Twitter @ MaryVorontsov, я буду рад услышать от вас и поделиться вашей историей.