Главная страница

Сам_себе_программист._Как_научиться_программировать_и_устроиться. Guide to Programming Professionally


Скачать 3.94 Mb.
НазваниеGuide to Programming Professionally
Дата25.02.2023
Размер3.94 Mb.
Формат файлаpdf
Имя файлаСам_себе_программист._Как_научиться_программировать_и_устроиться.pdf
ТипGuide
#954463
страница15 из 15
1   ...   7   8   9   10   11   12   13   14   15
Глава 24. Ваша первая работа
программистом
Остерегайтесь словосочетания «реальный мир».
Обращение к нему говорящего — это всегда предложение не спорить с подразумеваемыми им допущениями.
Эдсгер В. Дейкстра
Заключительная часть этой книги посвящена тому, чтобы помочь вам в вашей ка- рьере . Чтобы получить первую работу на должности программиста, нужно при- ложить дополнительные усилия, но если вы последуете моему совету, у вас не возникнет с этим сложностей. К счастью, после того, как вы получите свою пер- вую работу и наберетесь немного опыта, при поиске следующей работы менед- жеры по персоналу уже сами будут обращаться к вам.
Выберите путь
Когда вы подаете заявку на должность программиста, от вас ожидают владения определенным набором технологий, который изменяется в зависимости от конкретной области. Хотя во время обучения программированию вполне мож- но быть универсалом (программистом, который занимается всем подряд), да и получить работу , будучи универсалом, тоже можно, вам все же стоит сконцен- трироваться на той области программирования, которая вам нравится больше всего и в которой вы хотите стать экспертом. Это упростит получение работы мечты.
Мобильная и веб-разработка — одни из самых популярных направлений для программистов. В них есть два вида специальностей: front-end и back-end .
Front-end приложения это та часть, которую вы видите, — например, графиче- ский интерфейс веб-приложения. Back-end — это то, чего вы не видите; часть, обеспечивающая графический интерфейс данными. Названия программист- ских вакансий будут выглядеть примерно так: «Программист Python (back- end)». Это значит, нужен кто-то занимающийся back-end программированием веб-сайта и знакомый с Python. Описание вакансии будет содержать список тех- нологий, с которыми должен быть знаком идеальный кандидат, а также некото- рые дополнительные навыки.
В некоторых компаниях есть отдельные команды, одна из которых занима- ется front-end разработкой, а другая — back-end. Где-то нанимают только разра- ботчиков полного стека (full stack developer) — программистов, которые одина- ково хорошо работают и с front-end, и с back-end; впрочем, это касается только компаний, занимающихся созданием сайтов или приложений.
Существует множество других областей программирования, в которых можно работать, таких как обеспечение безопасности, инженерия платформ и наука о данных. Описания вакансий на сайтах поиска работы могут пригодить- ся при изучении требований в различных областях программирования. Раздел
Job Board на сайте Python (www.python.org/jobs) — поможет вам в этом. Озна- комьтесь с требованиями и технологиями в новых вакансиях, чтобы понять,

199
Получение работы на что вам стоит обратить внимание для повышения собственной конкуренто- способности.
Получите начальный опыт
Прежде чем вас возьмут на работу программистом, вы должны будете получить соответствующий опыт. Но как это сделать, если без опыта никуда нельзя устро- иться? Эта проблема решается несколькими способами. Вы можете начать дея- тельность в области открытого программного обеспечения, создав свой проект или занявшись любым из тысяч open source проектов на GitHub .
Другой вариант — стать программистом-фрилансером. Создайте профиль на сайте наподобие Upwork и начните подавать заявки на мелкие работы. Со- ветую найти знакомого, которому нужно написать программу — пусть он заре- гистрируется на Upwork, официально наймет вас, а после оставит отличный отзыв. Пока у вас не будет хотя бы одного хорошего отзыва на сайтах типа
Upwork, получить заказ будет проблематично. Как только люди увидят, что вы справились с заданием, получение работы значительно упростится, ведь у вас уже будет кредит доверия.
Запишитесь на собеседование
Обретя опыт программирования при работе фрилансером либо в open source, можете записываться на собеседование. Самый эффективный способ — исполь- зовать сайт LinkedIn . Если у вас нет учетной записи в LinkedIn, заведите ее и начните работать с потенциальными работодателями по сети. В верхней части своего профиля кратко опишите себя, выделив программистские навыки. На- пример, многие пишут здесь что-то вроде «Языки программирования: Python,
JavaScript», чтобы специалистам по набору персонала было легче найти их учет- ные записи по ключевым словам. Обязательно укажите свой опыт в open source или фрилансе в качестве последнего места работы.
Когда вы заполните профиль, начинайте связываться с менеджерами по тех- ническому персоналу — их в LinkedIn очень много. Менеджеры по персоналу по- стоянно ищут молодые таланты, так что они будут жаждать пообщаться с вами.
Как только они примут ваш запрос, поинтересуйтесь, нет ли у них открытых ва- кансий.
Собеседование
Если менеджер по персоналу сочтет вас подходящим кандидатом на открытую должность, он отошлет вам сообщение в LinkedIn, пригласив на собеседование по телефону. Это собеседование будет проходить с менеджером по персоналу, так что оно вряд ли будет техническим, хотя некоторые менеджеры по персона- лу задавали мне технические вопросы, ответы на которые выучили на предыду- щих собеседованиях. Разговор будет идти о технологиях, которыми вы владеете, вашем предыдущем опыте, а также о том, сможете ли вы адаптироваться к корпо- ративной культуре компании.
Если вы хорошо себя проявите, вас пригласят на второй раунд — техническое собеседование по телефону, — во время которого вы будете общаться с членами

200
Часть V
команды инженеров. Они будут задавать те же вопросы, что и во время первого собеседования, но в этот раз также предложат вам пройти технический тест. Ин- женеры сообщат адрес сайта, на котором опубликованы вопросы по программи- рованию, и попросят ответить на них по телефону.
Если вы справитесь, вам должны назначить третье собеседование, кото- рое обычно проводится лично в офисе компании. Там вы снова встретитесь с инженерами, которые расспросят вас о ваших навыках и предложат пройти еще кое-какие технические тесты. Вас могут попросить остаться на обед, что- бы проверить, как вы взаимодействуете с командой. В третьем раунде и про- водят знаменитые тесты с белой доской или листом бумаги и просят накидать программу. Если компания, в которой вы проходите собеседование, прибегает к таким тестам, вас попросят решить несколько программистских задач. Сове- тую купить доску и предварительно попрактиковаться, поскольку решать зада- чи на доске гораздо сложнее, чем на компьютере .
Подготовьтесь к собеседованию
В большинстве случаев на собеседованиях по программированию все внимание уделяется двум вещам — структурам данных и алгоритмам. Поэтому для успешно- го его прохождения улучшите свои навыки в этих областях компьютерной нау- ки. К тому же это поможет вам стать лучшим программистом.
Вы можете еще больше сузить спектр вопросов, если посмотрите на ситу- ацию со стороны интервьюера . Подумайте о том, в каком он положении; ин- тервьюеры говорят, что программное обеспечение не бывает совершенным, и они правы. У вашего интервьюера наверняка полно работы, и он не желает посвящать много времени отбору кандидатов. Будет ли он пытаться придумать оригинальные вопросы? Скорее всего, нет. Вместо этого он наберет в поиске
Google «вопросы по программированию для собеседования» и будет задавать вам первые же, которые найдет. Из-за этого вопросы на собеседованиях раз за разом повторяются, появились даже ресурсы , где можно потренироваться от- вечать на них! Я настоятельно рекомендую ресурс LeetCode — там я нашел все вопросы, которые мне когда-либо задавали на собеседованиях по программи- рованию.
Глава 25. Работа в команде
Нельзя создавать отличное программное обеспечение без отличной команды, а большинство программистских команд напоминают неблагополучные семьи.
Джим Маккарти
Будучи программистом-самоучкой, привыкаешь программировать в одиночку.
Но как только вы начнете работать в компании, вам нужно будет научиться вза- имодействовать с командой. Даже если вы создадите собственную компанию, в конце концов, вы наймете дополнительных программистов, и тогда все же при- дется научиться работать в команде. Программирование — командный вид спор- та, и, как и во всяком командном виде спорта, здесь нужно уметь ладить со сво-

201
Получение работы ими товарищами по команде. В этой главе представлены советы по успешной работе в командной среде.
Освойте базис
При приеме на работу от вас ожидают хорошего владения навыками, описанны- ми в этой книге. Ее недостаточно просто прочесть — вы должны быть экспертом в представленных концепциях. Ваши товарищи по команде не будут в восторге, если им постоянно придется помогать вам с основами.
Не задавайте вопросы, ответы на которые можете
найти в Google
Как программисту-самоучке, вам нужно будет много чего изучить — и у вас по- явится множество вопросов. Задавать вопросы — это отличный способ учить- ся, но убедитесь, что вы задаете правильные вопросы. Задавайте вопрос, толь- ко если потратили минимум пять минут, пытаясь самостоятельно найти ответ в
Google. Если вы задаете слишком много вопросов, ответы на которые могли бы найти сами, это будет раздражать ваших товарищей по команде.
Изменение кода
Тем, что вы читаете эту книгу, вы доказали, что стремитесь к постоянному са- мосовершенствованию. К сожалению, не все в вашей команде будут разделять энтузиазм относительно улучшения программистских навыков. У многих про- граммистов нет желания продолжать учиться — их устраивает и неоптимальное решение задач.
Некачественный код особенно распространен в стартапах, где оперативное написание кода часто важнее качества. Если вы оказались в подобной ситуации, действуйте осторожно. Редактирование чьего-то кода может больно ударить по эго автора. Даже хуже, если вы будете тратить много времени на изменение чу- жого кода, у вас не останется времени на работу над новыми проектами, и со сто- роны может показаться, что вы трудитесь недостаточно усердно. Лучший способ избежать таких неприятностей — это осторожно спросить на собеседовании об инженерной культуре в компании. Если вы по-прежнему попадаете в такие ситуа- ции, прислушайтесь к Эдварду Йордану: «Если вы считаете, что менеджмент не в курсе того, что происходит, или ваша организация производит низкокачествен- ное программное обеспечение, за которое вам стыдно, — уходите».
Синдром самозванца
Все программисты порой ощущают себя перегруженными, и вне зависимости от того, насколько усердно вы работаете, вам будут попадаться вещи, которых вы не знаете. Будучи программистом-самоучкой, особенно легко почувствовать, что вы не дотягиваете по уровню, когда кто-то просит вас сделать что-то, о чем вы никогда не слышали. Или вы можете обнаружить, что в программировании существует множество концепций, которые вам не понятны — такое случается со всеми, не только с вами.

202
Часть V
Я удивился, когда мой друг из Стэнфордского университета со степенью ма- гистра по компьютерным наукам сказал мне, что тоже чувствует подобное. Он сказал, что каждый в его программе сталкивался с синдромом самозванца. При этом было два вида реакции: люди либо покорно признавали, что они чего-то не знают, и начинали этому учиться, либо делали вид, что во всем прекрасно разби- раются (что на самом деле было не так) и не собирались учиться. Помните, что вы оказались там, где оказались, благодаря тяжелому труду, и нет ничего плохого в том, что вы не знаете всего — никто не знает. Просто смиренно и беспрерывно изучайте все, чего не понимаете, и тогда вас будет не остановить.
Глава 26. Дальнейшее обучение
Разница между лучшими программистами и просто хорошими является существенной. Показатели креативности, скорости,
изобретательности или способности быстро решать проблемы первых на порядок лучше при любом способе измерения.
Рэндалл Э. Стросс
В статье Дэвида Биттоу «НПП: Не переставай программировать» дается отлич- ный совет насчет получения работы инженера-программиста. Название говорит само за себя — не переставай программировать. Статью можно найти на сайте
medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2. Если вы сое- дините НПП с моим акронимом НПУ — не преставай учиться — у вас обязательно получится выдающаяся карьера. В этой главе я расскажу о некоторых програм- мистских ресурсах, которые мне показались полезными.
Классика
Существует несколько книг по программированию, которые считаются обяза- тельными к прочтению.

«Программист-прагматик» Энди Ханта и Дэвида Томаса;
• «Приемы объектно-ориентированного проектирования. Паттерны проек- тирования» Эриха Гаммы, Ральфа Джонсона, Джона Влиссидеса и Ричарда
Хелма (шаблоны проектирования — важная тема, которую у меня не было возможности раскрыть);

«Совершенный код» Стива Макконнелла;
• «Компиляторы: принципы, технологии и инструменты» Альфреда Ахо,
Джеффри Ульмана, Моники Лам и Рави Сети;
• «Алгоритмы: построение и анализ» Томаса Кормена, Чарльза Лейзерсона,
Рональда Ривеста и Клиффорда Штайна.
Онлайн-курсы
Онлайн-уроки — еще один способ улучшать навыки программирования. Все мои рекомендации по этой теме можно найти на сайте theselftaughtprogrammer.io/
courses.

203
Получение работы
Платформа Hacker News
Hacker News — это социально-новостная платформа, расположенная на сайте технологического бизнес-инкубатора Y Combinator по адресу news.ycombinator.
com. Здесь можно следить за последними трендами и технологиями.
Глава 27. Следующие шаги
Полюби ту скромную профессию, которой ты овладел, и будь доволен ею.
Марк Аврелий
Прежде всего — спасибо вам за покупку этой книги. Я надеюсь, она помогла вам стать лучше в программировании. Теперь, когда вы закончили, пришло время приниматься за дело. Куда отправиться дальше? Структуры данных и алгоритмы.
Заходите на сайт LeetCode и практикуйтесь в алгоритмах. А затем снова практи- куйтесь! В этой главе я выкладываю заключительные мысли о том, как вы може- те продолжить совершенствоваться в программировании (сразу, как только за- кончите практиковаться в алгоритмах).
Найдите себе наставника
Наставник выведет ваши навыки программирования на новый уровень. Одна из наиболее неприятных деталей в обучении программированию заключается в том, что вы можете выполнять множество вещей неоптимальным способом и даже не догадываться об этом. Ранее я упоминал, что с этим можно бороться при помощи обзоров кода. Наставник может анализировать ваш код, помогая вам усовершенствовать процесс написания кода, а также советовать книги и объяс- нять программистские концепции, которые вам не понятны.
Копайте глубже
В программировании есть термин «черный ящик», обозначающий нечто, что вы используете, при этом не понимая, как оно работает. Когда вы только на- чинаете программировать, для вас все — черный ящик. Один из главных спосо- бов стать лучше в программировании — открывать каждый найденный черный ящик и пытаться понять, как он работает. Один мой друг рассказал о моменте восторга (Бинго!), когда он понял, что командная строка сама по себе является программой. Когда я говорю «копать глубже», я подразумеваю открытие чер- ного ящика.
Написание этой книги помогло мне копнуть глубже. Я столкнулся с опреде- ленными концепциями, которые, как я полагал, были мне понятны, и не мог их объяснить. Мне пришлось копнуть глубоко. Не останавливайтесь на одном отве- те, прочтите все объяснения, которые сможете отыскать. Задавайте вопросы в
Интернете и читайте различные мнения.
Еще один способ копать глубже — создавать вещи, которые вы хотите понять лучше. Есть проблемы с пониманием управления версиями? На досуге создайте простую систему управления версиями. Выделение времени на подобные дела —
грамотная инвестиция. Это улучшит понимание всего, с чем бы вы ни испыты- вали сложности.
Другие советы
Однажды я набрел на фо рум, где обсуждались различные способы стать лучше в программировании. Ответ, набравший больше всего голосов, звучал так: зани- майтесь чем-то помимо программирования. Мне это показалось правильным — чтение книг вроде «Кода таланта» Дэниела Койла позволило мне стать лучшим программистом благодаря тому, что автор излагает именно то, что вам нужно для овладения любым навыком. Следите за вещами, не связанными с программи- рованием, которые можно использовать в этой области.
Последний совет, который мне хотелось бы вам дать, — проводите как мож- но больше времени за чтением кода других людей. Это один из лучших способов улучшить свои навыки программиста. Во время обучения старайтесь поддержи- вать баланс между чтением и написанием кода. Чтение чужого кода поначалу бу- дет сложным, но это важно, ведь вы можете очень многому научиться у других программистов.
Я надеюсь, вы получили от чтения этой книги настолько же сильное удоволь- ствие, как я получил от ее написания.
Желаю удачи в вашем дальнейшем путешествии.

205
__init__
, метод, 112
__repr__
, метод, 129, 134
A
abs()
, функция, 130
and
, ключевое слово, 33
append()
, метод, 60, 91, 128
B
back-end, 198
bash, 141
bool
, тип данных, 24
C
Courier, шрифт, 20
CSS, 171
CSV-файлы, 99
D
def
, ключевое слово, 44, 48, 95, 112,
128, 173
del
, ключевое слово, 68
E
elif
, инструкция, 37
else
, инструкция, 35
F
FIFO, 181
FizzBuzz, 185
 oat
, тип данных, 24
 oat()
, функция, 47
for
, цикл, 87
front-end, 198
G
Git, 14, 162
git diff
, команда, 169
GitHub, 162, 194, 199
grep
, команда, 149, 153
H
HTML, 171
I
IDE, 194
if-else
, инструкция, 36, 48
if
, инструкция, 35
IndentationError
, ошибка, 29
IndexError
, исключение, 61
int
, тип данных, 24
int()
, функция, 47
is
, ключевое слово, 130
J
JavaScript, 23, 171
L
LIFO, 178
LinkedIn, 199
Linux, 14, 141, 146
N
NameError
, исключение, 52
O
or
, ключевое слово, 34
P
peek()
, метод, 178
PEP, 194
Pip, 159
PyCharm, 194
R
randint()
, функция, 94
rmdir
, команда, 145
Ruby, 117
S
self
, параметр, 112, 113
Stack Overflow, 107
Предметный указатель

206
Предметный указатель str
, тип данных, 23
str()
, функция, 47
sudo
, команда, 148, 196
SVN, 162, 195
SyntaxError
, 28
U
Ubuntu, 14
Unix, 14
URL, 173
V
ValueError
, 48
W
while
, цикл, 87
with
, инструкция, 98
Z
ZeroDivisonError
, 29
А
Абстракция, 120
Алгоритм, 185
Анаграмма, 187
Арифметика, 26, 29
Астериск, 155
Б
База данных, 195, 197
Безопасность, 196
Бесконечный цикл, 88
Библиотека, 46
Буквы, 27
В
Веб-сайт, 14, 158, 162, 171
Ветвь, 39, 54
Вещественные числа, 24
Встроенные функции, 46
Выполнение, 15, 35, 40, 43, 59, 83
Выражение, 31, 33, 133, 152
Вычитание, 31
Г
Гипертекст, 171
Д
Данные, 23, 58, 97, 110, 118, 165, 193
Деление, 29
Деление по модулю, 30
Длина, 46
Ж
Жадное регулярное выражение, 155
З
Зависимости, 159
И
Игра, 102
Изменяемый тип данных, 61, 65
Импорт, 93
Имя, 25, 44, 67, 93, 113, 119, 148
Индекс, 60
Инструкция, 39, 88
Интервьюер, 200
Интернет, 15, 142
Интерфейс, 14, 141
Исключения, 29, 54
Итерирование, 83, 185
Итерируемый объект, 60, 81
К
Карьера, 198
Каталог, 98, 143, 159, 162
Клиент, 118
Ключевое слово, 22
Код, 35, 87
Кодовая база, 162
Командная строка, 141
Композиция, 125
Компьютер, 14, 97, 102, 143, 200
Конвенция (соглашение), 112, 194
Конкатенация, 74, 83
Константа, 25
Контейнер, 58, 59, 63, 65, 69
Кортеж, 63, 70, 73
Круглые скобки, 22, 44, 45, 63
Л
Логический, 24, 42

207
Предметный указатель
М
Метаданные, 159, 172
Метод, 59, 75, 128
Модуль, 93
Н
Наследование, 122
Нежадное регулярное выражение, 155
Неизменяемый тип данных, 63, 74
О
Обзор кода, 196
Оболочка, 17, 28, 195
Обратный слеш, 22, 80
Объект, 23
Объектно-ориентированное программирование, 111
Объявление, 25
Операнд, 31
Оператор, 29
Ортогональность, 193
Остаток, 30, 185
Отладка, 193
Отладчик, 195
Отступы, 23
Ошибки, 28
П
Пакет, 158
Палиндром, 187
Папка, 95
Параметр, 44, 47, 97
Парсинг, 173
Переменная, 25, 51, 89, 117
Переменная класса, 127
Переменная экземпляра, 112
Переопределение метода, 124
Подчеркивание, 27, 44, 102, 112, 119, 155
Полиморфизм, 120
Приватные переменные, 119
Присваивание, 25
Программное обеспечение, 14, 141,
158, 162, 192
Процедурное программирование, 108
Псевдокод, 35
Публичные переменные, 119
Путь к файлу, 97, 151
Р
Работа, 198
Разделитель, 100
Разработчики, 14, 158
Разрешения, 148
Реализация, 119
Репозиторий, 162
Ресурсы, 200
С
Сервер, 14, 16, 141, 142, 195
Синтаксис, 45, 50, 63, 66, 81, 86, 98,
112, 113, 147, 166, 187
Синтаксическая ошибка, 28
Скрепер, 173
Словарь, 177
Создание экземпляра, 113
Список, 59, 71
Срезы, 105, 187
Строка, 23, 120
Строка документации, 56
Т
Теги, 172
Тело, 39, 112, 123
У
Увеличить, 26
Уменьшить, 26
Умножение, 31, 75
Условный, 35
Ф
Файл, 99, 166
Фреймворк, 158
Функциональное программирование, 110
Функция, 44
Ц
Целое число, 24
Ч
Частное, 30
Э
Экземпляр, 111
Элементы, 60–61, 83, 152
https://eksmo.ru/b2b/
1   ...   7   8   9   10   11   12   13   14   15


написать администратору сайта