Задний план

Учитывая мое прошлое, мне задал этот вопрос новый подопечный, у которого нет степени CS. У меня необычный бэкграунд. Я получил степень в области Ag Ec: управление бизнесом и маркетингом в Корнельском университете. Я начал бизнес после выпуска вместе с родителями, чтобы помочь им с их финансовыми трудностями, и взял на себя роль отдела продаж, управления запасами и обслуживания клиентов. Через три года мне стало скучно, и я искал умственный вызов. Именно тогда я познакомился с программированием и Интернетом. Это было прекрасное чувство — ничего не взять и сделать что-то. Я был увлечен и полон решимости внести положительный вклад в этой области. Оглядываясь назад, я понял, что выбор этой профессии был лучшим выбором в моей жизни. Я надеюсь, что смогу помочь людям, увлеченным и заинтересованным в разработке программного обеспечения, добиться успеха.

Что нужно

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

Стремление к непрерывному обучению и любознательность

Если вы решите продолжить карьеру в области разработки программного обеспечения, вы должны быть готовы постоянно учиться и проявлять любопытство. Вы не можете быть удовлетворены тем, что успешно создали продукт, услугу или компонент на языке X. Это только начало. На самом деле копайте глубже в библиотеки этого языка и стремитесь овладеть этим языком. Как только вы освоите этот язык, выберите другой. Языки входят в моду и выходят из моды, поэтому вы хотите изучать другие языки в разных семействах программирования, чтобы лучше понять, как применять определенные языки программирования (императивный, функциональный, декларативный и т. д.) к конкретным задачам и разнообразить свои наборы навыков. Если вы хотите сразу же получить работу, вам нужно выучить язык, который является новым и быстро развивается. Изучение нового и будущего языка выравнивает игровое поле. Вам не обязательно работать с человеком, который имеет 20-летний опыт программирования на C или Java. Если язык набирает обороты, ваши шансы на получение работы и быстрый финансовый рост увеличиваются в геометрической прогрессии. Программирование смарт-контрактов является примером. На разных платформах программирования смарт-контрактов появляются новые языки и платформы: Ethereum, Tron, EOS, NEO и т. д. В идеале вы выбираете язык или платформу, которые будут доминировать. Однако вначале вам придется выучить их все. Самое приятное в начале — это то, что через 2 года вы станете частью группы с наибольшим опытом. Кроме того, если вы студент, дайте себе работу над проектами (в свободное время), которыми вы увлечены. Когда я смотрю на резюме из определенных школ, каждый ученик выглядит так, как будто их прессовали одной и той же формочкой для печенья. Часто имеют те же курсы и классные проекты, что и все их одноклассники. Это не сулит кандидату ничего хорошего, потому что показывает готовность делать только то, что требуется, а не способность идти дальше. Как работодатели, мы ищем единорогов (разработчиков, которые могут выдавать в 5-10 раз больше, чем «обычный» разработчик). Трудно отделить людей, которые действительно увлечены своим ремеслом, и тех, кто просто заинтересован в том, чтобы найти стабильную работу после школы, когда ваше резюме выглядит как все в вашем классе. Способ, которым вы отделяете себя, заключается в том, чтобы найти область программного обеспечения, в которой вы увлечены, вносить улучшения, создавать библиотеки, которые решают проблемы, которые не решаются, или создавать новый сегмент рынка, который не существует, но нуждается в этом.

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

Самый важный аспект, связанный с обучением на протяжении всей жизни, — это группа друзей, которые также заинтересованы в том, чтобы больше узнать в интересующей вас области. До эры Интернета (BIE) вам приходилось изучать программирование, покупая кучу книг и читая их от корки до корки, пробуя примеры. Иногда примеры не работали, а иногда автор плохо объяснял какую-то область языка. Было трудно найти помощь и других людей, с которыми можно было бы связаться. Сегодня все иначе. Встречи, клубы по интересам сотрудников, доски объявлений, Stack Overflow, YouTube и т. д. — все это ресурсы, которые вы можете использовать для быстрого улучшения своих навыков. Но самое главное из них — иметь хороших друзей, которые умнее тебя. В моем путешествии по машинному обучению мне посчастливилось иметь друзей (Кунал Патель, Алиреза Дирафун, Лоран Симон, Рафай, Ахмир, Мохаммад, Инь Канг, Мейсон Бретан и т. и статистика, а также робототехника. Поскольку они были моими друзьями, они были чрезвычайно терпеливы, когда я просидел с ними час или больше, отвечая на свои вопросы. Я бы не смог получить столь глубокое понимание машинного обучения, глубоких нейронных сетей и робототехники за короткий промежуток времени (5 месяцев) без их помощи. Работодатели ищут страсть и любовь к программированию/технологиям. Обучение на протяжении всей жизни — один из способов показать это.

Будьте бдительны при написании понятного, безопасного, производительного и поддерживаемого кода

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

Как найти эти шаблоны кода?

Большинство из этих шаблонов уже вокруг вас. В кодовой базе компании, а также популярные и проверенные решения с открытым исходным кодом, такие как: Google AOSP, Facebook с открытым исходным кодом, Apache Server, React, многие библиотеки и платформы машинного обучения и т. д. Вы также можете читать книги и статьи, связанные с программным обеспечением. дизайн, шаблоны (Gang of Four), создание поддерживаемого кода и понимание уязвимостей безопасности в коде. Не думайте, что вы знаете достаточно, потому что вы никогда не будете знать достаточно.

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

Глядя на код, вы получите шаблоны, но то, что вы узнаете, будет случайным в зависимости от того, где вы смотрите. Вам нужно будет сосредоточить свои усилия на написании более производительного и безопасного кода. Здесь поможет поиск в Google. Узнайте, как масштабируются системы и как код может создавать узкие места. Узнайте и поймите, как уязвимости безопасности проявляются в коде. Поймите, как логически отделить часто меняющиеся части кода от более стабильных частей. Как только вы запомните хорошие методы кодирования, вам нужно убедиться, что вы держите свой разум открытым.

Быть открытым

Работа в сфере разработки программного обеспечения — это область, которая постоянно меняется. Вы можете получить мастерство в области (например, распределенные COM, CORBA, EJB), которая очень быстро устаревает. Вы должны быть непредвзятыми, чтобы видеть, что происходит, и быть готовыми адаптироваться, меняться и приобретать. Это требует постоянного дискомфорта. Иногда вы будете чувствовать себя очень глупо, когда будете задавать вопросы инженерам, которые на 10–15 лет моложе вас, и они дадут вам ответ в течение нескольких минут. Дело в том, что эти минуты сэкономили вам часы или, в худшем случае, недели. А экономия недель позволяет узнать больше и сэкономить больше недель. Ваши знающие друзья будут отличаться от вас происхождением, сексуальной ориентацией, расой, религией, убеждениями или ценностями. Все в порядке. Не просто учитесь у них техническим вещам, но учитесь понимать их ценности и убеждения. Кроме того, убедитесь, что вы помогаете им в максимально возможной степени. Вам нужно будет быть начеку, чтобы увидеть, когда ваши друзья нуждаются в помощи. Слушайте их, научитесь улавливать тонкие намеки по их выражению лица, голосу или позе, намекающие на то, что они, возможно, борются или сталкиваются с проблемой в той области, в которой вы можете помочь. Поймите, что у вас есть вещи, которым вы научились в жизни, и с которыми вы также можете помочь им. Не бойтесь проявлять любовь и сочувствие к тем друзьям, которые вас окружают. Не будьте эгоистичны и просто говорите о своих планах или потребностях. Узнайте об окружающих вас людях и отдайте им все свое сердце. Это поможет вам создать прочную сеть, на которую вы можете положиться в плане помощи, укрепления или роста.

Заключительное заявление

Надеюсь, я не отпугнул вас от мысли о карьере программиста. Это один из лучших. Люди (если только вы не столкнетесь с редким высокомерным мудаком) действительно приятные и одни из лучших людей, которых мне посчастливилось встретить. Если вы сможете понять то, что я сказал вам выше, все в вашей карьере будет интересным и сложным. И последнее: как только вы станете экспертом, поделитесь своими знаниями с миром, опубликовав свои знания в блогах, на YouTube или выступив на конференциях. Ты можешь это сделать.