Сам_себе_программист._Как_научиться_программировать_и_устроиться. Guide to Programming Professionally
Скачать 3.94 Mb.
|
Глава 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/ |