Как стать автором
Обновить
45.88
Wunder Fund
Мы занимаемся высокочастотной торговлей на бирже

Как стать хорошим инженером

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров6.1K
Автор оригинала: Madmeg

На протяжении многих лет я встречаю инженеров-программистов, которым недостаёт страсти к программному обеспечению. Такая ситуация — это совершенно неправильно. Их главная цель — побольше заработать, что совершенно нормально, но если человеку не хватает страсти и амбиций — он, неизбежно будет чувствовать, что к нему относятся с пренебрежением, и, в итоге, будет писать плохой, несовершенный код. С другой стороны многие уверены в том, что могут плыть по течению своей карьеры, не изучая ничего нового, придерживаясь устаревших и иногда вредных взглядов.

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

Какими качествами должен обладать хороший инженер?

Сначала мы должны разобраться с тем, кто же это такой — «инженер»:

«Инженеры, используя научные принципы, анализирую, проектируют, изобретают, программируют, строят и создают что-либо для решения самых разных задач и для того, чтобы сделать мир лучше».

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

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

Понимание принципов своей сферы деятельности

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

Смысл важности наличия хороших фундаментальных знаний заключается в том, что эти знания являются неотъемлемой частью того, чем занимается инженер. Плохое понимание основ не оправдывает даже то, что человеку, вроде бы, это понимание и не нужно. Например, если некто, в основном, занимается веб-приложениями — ему, всё равно, важно понимать то, как работает протокол HTTP — даже если напрямую с ним этот человек и не взаимодействует. Разобравшись с базой, на этом фундаменте можно построить понимание других вещей — таких, как веб-технологии. Так будет гораздо правильнее, чем если сразу «прыгнуть» на самый верх, где большинство базовых принципов скрыто за абстракциями.

Постоянное обучение

Самое главное на пути к тому, чтобы стать «хорошим инженером», это — постоянное наблюдение за новыми разработками и изобретениями, которые появляются в выбранной инженером сфере деятельности. Это очень важно не только для того, чтобы не отставать от прогресса, но и чтобы критически оценивать новое, чтобы видеть те плюсы и минусы, которые с ним связаны.

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

Понимание ограничений инструментов и технологий

Это очень важно — особенно тогда, когда дело доходит до выбора подходящего инструмента для решения какой-то задачи. Очень важно понимать и принимать сильные и слабые стороны инструмента или языка программирования. Слишком многие инженеры-программисты закрывают глаза на изъяны языков, стремясь к собственной выгоде, а не к тому, чтобы выбрать то, что лучше всего подойдёт для некоего проекта.

То же касается и инженеров, которые возводят инструмент или язык программирования на пьедестал, так как полагают, что это, по объективным причинам, нечто такое, что можно назвать «самым лучшим».

Применение знаний на практике

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

Хороший инженер постоянно практикуется в том, что изучает.

Как стать более квалифицированным инженером

Учитесь мыслить критически

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

Если вы хотите научиться критически мыслить — можете заглянуть на этот полезный ресурс.

Читайте больше книг

Чтение — это прекрасный способ приобретения больших объёмов знаний по своему профилю. В сфере программной инженерии существует великое множество книг по самым разным темам. Но то, что написано в этих книгах, не надо считать истиной в последней инстанции. Здесь, как и в других случаях, пригодится критическое осмысление прочитанного. Обычно я, читая, задаю себе вопросы. Ести ли какие-то проблемы с этим подходом? Есть ли лучший способ это сделать? Что я сделал бы по-другому? Или даже: «Нет ли в книге ошибок?».

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

Вот несколько хороших списков рекомендованной литературы (для инженеров-программистов), которые пригодятся тем, кто не может решить — что им читать:

Применяйте полученные знания в реальных проектах

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

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

Вот как можно применить на практике то, что вы узнали:

  • Создавайте маленькие прототипы. Если вы изучаете новый фреймворк, язык или концепцию — создайте компактный PoC-проект. Например, если вы изучаете индексирование баз данных — реализуйте простую поисковую систему и сравните производительность различных стратегий индексирования.

  • Решайте реальные проблемы. Найдите небольшую проблему на работе или в жизни и попытайтесь решить её, воспользовавшись полученными знаниями.

  • Учите других тому, что узнали. Один из лучших способов улучшить понимание того, что вы узнали — объяснить это кому-то ещё. Напишите пост в блоге, заметку в Twitter, или просто поговорите об этом с коллегой или другом.

Регулярно применяя знания на практике, вы перейдёте от теоретического понимания вопроса к практическому опыту. Это приведёт к постоянному повышению уровня вашей компетенции.

Оценивайте свою работу с критической точки зрения

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

Цель критики собственной работы не в том, чтобы слишком строго к себе относиться, а в том, чтобы сформировать у себя установку на постоянное самосовершенствование. Инженерное дело — это обучение длиною в жизнь, и самые лучшие инженеры — это те, кого никогда полностью не устраивают их знания и возможности. Сформировав привычку самооценивания, вы будете непрестанно улучшать свои навыки и со временем будете становиться всё лучше и лучше.

Рекомендации для инженеров-программистов

В размышлениях о том, с чего начать, и что почитать, легко потеряться. Поэтому — вот список того, что я рекомендую почитать и сделать.

Книги

  • Высоконагруженные приложения. Программирование, масштабирование, поддержка.

  • Алгоритмы: построение и анализ.

  • Writing a C compiler.

  • Математика для Data Science. Управляем данными с помощью линейной алгебры, теории вероятностей и статистики.

  • Elements of Information Theory (тут много математики).

Проекты

  • Компилятор — напишите компилятор для языка по своему выбору. Взгляните на LLVM или на JVM.

  • Эмулятор — напишите эмулятор процессора. Начните с простого CPU — вроде 8086 (рекомендация с @gizmobly).

  • Игровой движок или движок для рендеринга графики — напишите графический программный продукт, используя OpenGL или Vulcan.

  • Программа для просмотра и редактирования памяти — напишите программу, которая может взаимодействовать с памятью другой программы.

  • HTTP-сервер — напишите HTTP-сервер, в идеале — на низкоуровневом языке.

Постарайтесь избегать разработки сайтов и других подобных проектов. Они многому вас не научат. Выберите проект из списка, изучите тему, а потом создайте этот проект.

Итоги

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

Лучшие инженеры никогда не прекращают учиться, ставят под сомнение собственные предположения, стремятся к совершенству во всём, что делают. Они применяют то, что узнают, к реальным проблемам, объективно анализируют результаты собственного труда и эффективно сотрудничают с другими людьми.

Инженерное дело — это путешествие длиною в жизнь, путешествие, которое требует любопытства, дисциплины и стремления профессионально расти. Если вы будете придерживаться этих принципов — вы станете не просто «хорошим» — вы станете великим инженером.

О, а приходите к нам работать? 🤗 💰

Мы в wunderfund.io занимаемся высокочастотной алготорговлей с 2014 года. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки.

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

Сейчас мы ищем плюсовиков, питонистов, дата-инженеров и мл-рисерчеров.

Присоединяйтесь к нашей команде

Теги:
Хабы:
+18
Комментарии4

Публикации

Информация

Сайт
wunderfund.io
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
xopxe

Истории