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

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


Скачать 3.94 Mb.
НазваниеGuide to Programming Professionally
Дата25.02.2023
Размер3.94 Mb.
Формат файлаpdf
Имя файлаСам_себе_программист._Как_научиться_программировать_и_устроиться.pdf
ТипGuide
#954463
страница2 из 15
1   2   3   4   5   6   7   8   9   ...   15
Глава 13. Четыре столпа объектно-
ориентированного программирования ...........................................................117
Инкапсуляция ........................................................................................................................ 117
Абстракция ............................................................................................................................. 120
Полиморфизм ........................................................................................................................ 120
Наследование ........................................................................................................................ 122
Композиция ........................................................................................................................... 125
Словарь терминов ................................................................................................................. 126
Практикум .............................................................................................................................. 126
Глава 14. Еще об объектно-ориентированном программировании .................127
Переменные класса и переменные экземпляра ............................................................... 127
Магические методы .............................................................................................................. 129
Ключевое слово is ............................................................................................................... 130
Словарь терминов ................................................................................................................. 131
Практикум .............................................................................................................................. 131
Глава 15. Практикум. Часть II ...........................................................................132
Карты ...................................................................................................................................... 132
Колода ..................................................................................................................................... 134
Игрок ...................................................................................................................................... 135
Игра ......................................................................................................................................... 135
«Пьяница» .............................................................................................................................. 137
Часть III. Введение в инструменты программирования .....................................141
Глава 16. bash .................................................................................................141
Выполнение примеров......................................................................................................... 142
Запуск bash ............................................................................................................................. 142
Команды ................................................................................................................................. 142
Последние команды .............................................................................................................. 143
Относительные и абсолютные пути .................................................................................. 143
Навигация .............................................................................................................................. 144
Флаги ....................................................................................................................................... 146
Скрытые файлы .................................................................................................................... 146

8
Содержание
Вертикальная черта .............................................................................................................. 146
Переменные окружения ...................................................................................................... 147
Пользователи ......................................................................................................................... 148
Узнайте больше ..................................................................................................................... 148
Словарь терминов ................................................................................................................. 148
Практикум .............................................................................................................................. 149
Глава 17. Регулярные выражения ....................................................................149
Настройка .............................................................................................................................. 150
Простое совпадение ............................................................................................................. 151
Совпадение в начале и в конце ........................................................................................... 152
Поиск совпадений с несколькими символами ................................................................. 153
Совпадения цифр .................................................................................................................. 154
Повторение ............................................................................................................................ 155
Управляющие символы ........................................................................................................ 157
Инструмент для создания регулярных выражений ......................................................... 158
Словарь терминов ................................................................................................................. 158
Практикум .............................................................................................................................. 158
Глава 18. Системы управления пакетами .........................................................158
Пакеты .................................................................................................................................... 158
Pip ............................................................................................................................................ 159
Виртуальные окружения ...................................................................................................... 161
Словарь терминов ................................................................................................................. 161
Практикум .............................................................................................................................. 161
Глава 19. Управление версиями ......................................................................162
Репозитории .......................................................................................................................... 162
Начинаем ................................................................................................................................ 163
Помещение и извлечение данных...................................................................................... 164
Пример помещения данных ................................................................................................ 165
Пример извлечения данных................................................................................................ 167
Откат версий ......................................................................................................................... 168
Команда git diff ............................................................................................................... 169
Дальнейшие шаги.................................................................................................................. 170
Словарь терминов ................................................................................................................. 170
Практикум .............................................................................................................................. 171
Глава 20. Практикум. Часть III ..........................................................................171
HTML ...................................................................................................................................... 171
Парсинг контента с сайта Google Новости ...................................................................... 173
Словарь терминов ................................................................................................................. 176
Практикум .............................................................................................................................. 176
Часть IV. Введение в информатику ..................................................................177
Глава 21. Структуры данных ............................................................................177
Структуры данных ................................................................................................................ 177
Стеки ....................................................................................................................................... 177
Изменение порядка символов строки при помощи стека ............................................. 179
Очереди .................................................................................................................................. 180
Очередь за билетами ............................................................................................................ 182
Словарь терминов ................................................................................................................. 184
Практикум .............................................................................................................................. 184
Глава 22. Алгоритмы .......................................................................................185
FizzBuzz ................................................................................................................................... 185
Последовательный поиск .................................................................................................... 186

Палиндром ............................................................................................................................. 187
Анаграмма .............................................................................................................................. 187
Подсчет вхождений символов ............................................................................................ 188
Рекурсия ................................................................................................................................. 189
Словарь терминов ................................................................................................................. 190
Практикум .............................................................................................................................. 191
Часть V. Получение работы .............................................................................192
Глава 23. Лучшие практические советы по программированию .......................192
Написание кода — крайнее средство ................................................................................. 192
НПС ......................................................................................................................................... 192
Ортогональность .................................................................................................................. 193
У каждого фрагмента данных должно быть одно представление ................................. 193
У функции должна быть одна задача ................................................................................. 193
Если на это уходит много времени, вероятно, вы совершаете ошибку ....................... 194
Делайте все самым лучшим способом ............................................................................... 194
Соблюдайте соглашения ...................................................................................................... 194
Используйте мощную IDE .................................................................................................... 194
Логирование .......................................................................................................................... 195
Тестирование ......................................................................................................................... 195
Анализ кода ............................................................................................................................ 196
Безопасность ......................................................................................................................... 196
Словарь терминов ................................................................................................................. 197
Глава 24. Ваша первая работа программистом ................................................198
Выберите путь ....................................................................................................................... 198
Получите начальный опыт .................................................................................................. 199
Запишитесь на собеседование ............................................................................................ 199
Собеседование ....................................................................................................................... 199
Подготовьтесь к собеседованию ........................................................................................ 200
Глава 25. Работа в команде .............................................................................200
Освойте базис ........................................................................................................................ 201
Не задавайте вопросы, ответы на которые можете найти в Google ............................ 201
Изменение кода ..................................................................................................................... 201
Синдром самозванца ............................................................................................................ 201
Глава 26. Дальнейшее обучение .....................................................................202
Классика ................................................................................................................................. 202
Онлайн-курсы ........................................................................................................................ 202
Платформа Hacker News ...................................................................................................... 203
Глава 27. Следующие шаги .............................................................................203
Найдите себе наставника ..................................................................................................... 203
Копайте глубже ...................................................................................................................... 203
Другие советы ........................................................................................................................ 204
Предметный указатель ....................................................................................205

10
Глава 1. Вступление
Большинство хороших программистов делают свою работу не потому, что ожидают вознаграждения или признания, а потому, что получают удовольствие от программирования.
Линус Торвальдс
Я изучал политологию в Университете Клемсона. Подумывая заняться инфор- матикой, в первый учебный год я даже записался на курс «Введение в програм- мирование», но быстро бросил его. Это было слишком сложно. Живя в Сили- коновой долине после окончания университета, я решил, что нужно научиться программировать. Год спустя я работал в eBay на должности инженера-програм- миста второй категории (выше начального уровня, но ниже старшего инжене- ра-программиста). Я не хочу, чтобы у вас создалось впечатление, будто это было легко. Это было невероятно трудно. А в промежутках между швырянием вещей в стену это было еще и очень весело.
Я начал свой путь постижения программирования с популярного языка Python.
Впрочем, моя книга не направлена на обучение программированию на определен- ном языке. Основное внимание в ней уделяется тому, чему прочие ресурсы вас не научат. Речь идет о тех вещах, которыми мне пришлось овладеть самостоятель- но. Эта книга задумывалась не для тех, кому нужно обычное введение в програм- мирование, чтобы писать код на досуге, в качестве хобби. Она написана для тех, кто планирует заниматься программированием профессионально. Независимо от того, хотите ли вы стать инженером-программистом, предпринимателем или ис- пользовать полученные навыки в другой профессии, эта книга написана для вас.
Изучение языка программирования — лишь часть битвы; чтобы говорить на языке компьютерных ученых, вам понадобятся и другие навыки. Я научу вас все- му, что постиг на пути от новичка до профессионального программиста. Я напи- сал эту книгу, чтобы обрисовать начинающим кодерам общий контур того, что
ЧАСТЬ I
Введение
в программирование
Я посвящаю эту книгу своим родителям,
Эбби и Джеймсу Альтхоф, за то, что всегда поддерживали меня.

11
Введение в программирование им необходимо знать. Будучи программистом-самоучкой, я не знал, что имен- но мне нужно прочитать и узнать. Книги по введению в программирование все одинаковые. Они предлагают читателям лишь основы программирования на
Python, либо на Ruby, а затем отправляют вас восвояси. Отклики, которые я слы- шал от людей, закончивших читать подобные книги, звучали так: «И что мне де- лать теперь? Я еще не программист, но не знаю, чему учиться дальше». Эта кни- га — мой ответ на подобный вопрос.
Как построена эта книга
Многим темам, охваченным всего в одной главе этой книги, посвящены целые отдельные книги. У меня не было цели детально раскрывать все темы, которые вам нужно знать. Моей целью было дать вам карту – набросок всех навыков, ко- торыми нужно овладеть, чтобы начать программировать профессионально. Эта книга состоит из пяти частей.
Часть I. Введение в программирование. Вы напишете свою первую про- грамму как можно скорее, надеюсь, прямо сегодня.
Часть II. Введение в объектно-ориентированное программирование.
Я освещаю различные парадигмы программирования, фокусируясь на ООП. Вы создадите игру, которая продемонстрирует вам возможности программирова- ния. После этого раздела вы «подсядете» на программирование.
Часть III. Введение в инструменты программирования. Вы научитесь ис- пользовать различные инструменты, чтобы поднять свою производительность на новый уровень. К этому моменту вы уже влюблены в программирование и хо- тите стать лучше. Вы узнаете больше о своей операционной системе, о том, как использовать регулярные выражения для повышения своей производительно- сти, как устанавливать программы и пользоваться ими, а также как взаимодей- ствовать с другими инженерами при помощи управления версиями.
Часть IV. Введение в информатику. Эта часть представляет собой краткое введение в информатику. Я касаюсь здесь двух важных тем: алгоритмов и струк- тур данных.
Часть V. Получение работы. В заключительном разделе речь пойдет о луч- ших методах программирования, получении места инженера-программиста, ко- мандном взаимодействии и профессиональном совершенствовании. Я даю со- веты о том, как пройти собеседование, работать в команде, а также насчет того, как усовершенствовать свои навыки в будущем.
Если у вас нет опыта программирования, перед каждым разделом вы должны самостоятельно практиковаться в этом, и как можно больше. Не пытайтесь чи- тать мою книгу слишком быстро, вместо этого используйте ее как руководство, практикуясь столько, сколько нужно в перерывах между разделами.
Сначала эндшпиль
Я учился программировать способом, полностью противоположным тому, ко- торый обычно практикуется при изучении информатики, и я структурировал книгу, следуя этому подходу. Традиционно ученики проводят много времени, изучая теорию; так много, что многие выпускники школ компьютерных наук

12
Часть I
не знают, как программировать. В своем блоге «Почему программисты не уме- ют… программировать?» Джефф Этвуд пишет: «Как и меня, автора тревожит тот факт, что 199 из 200 соискателей программистских вакансий вообще не умеют писать код. Повторяю: они вообще не способны написать какой-либо код». Это подтолкнуло Этвуда к созданию задачи по кодингу FizzBuzz — теста на знание программирования, используемого на собеседованиях для отсеи- вания кандидатов. Большинство людей проваливают этот тест, вот почему в моей книге читатель тратит столько времени на получение навыков, кото- рые пригодятся ему на практике. Не волнуйтесь, вы научитесь проходить тест FizzBuzz.
В книге «Искусство учиться» Джош Вайцкин, прославленный в фильме «В по- исках Бобби Фишера», описывает, как он учился играть в шахматы в обратном по- рядке. Вместо того чтобы постигать первые ходы, он начал с изучения эндшпи- ля (когда на доске остается лишь несколько фигур). Эта стратегия позволила ему лучше понять игру, и позже он выиграл множество чемпионатов. Точно так же и я полагаю, что было бы более эффективно в первую очередь научиться программи- ровать, а затем, когда вы уже будете до смерти хотеть знать, как там все устроено, приниматься за теорию. Вот почему я не затрагиваю теорию информатики вплоть до четвертой части книги, да и там свожу ее к минимуму. Хотя теория важна, она станет еще ценнее, когда у вас появится опыт программирования.
Вы не одиноки
Изучение программирования за пределами учебного заведения становится все более распространенным явлением. Опрос, проведенный в 2015 году Stack
Overflow (онлайн-сообществом программистов), показал, что 48 % респонден- тов не имеют ученой степени в области компьютерных наук
1
Преимущество самообучения
Когда меня приняли на работу в компанию eBay, я попал в одну команду с про- граммистами из Стэнфорда, Университета Калифорнии и Дьюка, у которых были степени по информатике, а также с двумя докторами наук. В 25 лет было страшно осознавать, что мои 21-летние товарищи по команде знают о програм- мировании и об информатике в 10 раз больше меня.
Как бы ни было страшно работать с людьми, у которых есть степень бакалав- ра, магистра или доктора по информатике, никогда не забывайте, что у вас есть, как я люблю это называть, «преимущество самообучения». Вы читаете эту книгу не потому, что вам так сказал преподаватель, вы читаете ее потому, что у вас есть стремление учиться, и это стремление — наибольшее преимущество из тех, что у вас есть. Кроме того, не забывайте, что некоторые наиболее успешные люди об- учались программированию самостоятельно. Стив Возняк, основатель Apple, — программист-самоучка. Как и Маргарет Гамильтон, получившая Президентскую медаль Свободы за работу над программой «Аполлон» НАСА, Дэвид Карп, осно- ватель Tumblr, Джек Дорси, основатель Твиттера, и Кевин Систром, основатель
Instagram.
1 www.infoworld.com/article/2908474/application-development/stack-over ow-survey- nds-nearly-half-have-no- degree-in-computer-science.html

13
Введение в программирование
Почему вы должны программировать
Программирование поможет вашей карьере независимо от выбранной профес- сии. Обучение программированию расширяет ваши возможности. Мне нравит- ся придумывать новые идеи, и у меня всегда есть проекты, над которыми я хочу работать. Как только я научился программировать, я смог сесть и реализовать свои идеи, не утруждаясь поиском кого-то, кто сделал бы это за меня.
Программирование поможет вам стать лучше во всем, что вы делаете. Шут- ки в сторону. Существует не так много областей, в которых не пригодились бы идеально отработанные навыки решения задач. К примеру, недавно мне при- шлось заниматься утомительным вопросом поиска жилья на Крейгслисте
2
, и я смог написать программу, которая сделала эту работу за меня и отослала мне результаты по электронной почте. Знание программирования навсегда изба- вит вас от решения рутинных задач.
Если вы действительно хотите стать инженером-программистом, знай- те, что спрос сейчас растет, а квалифицированных специалистов недостаточ- но для заполнения доступных вакансий. К 2020 году будет примерно миллион рабочих мест, связанных с программированием
3
. Даже если ваша цель не со- стоит в том, чтобы становиться программистом, работодатели в таких обла- стях, как наука и финансы, тоже начинают отдавать предпочтение кандида- там с опытом в программировании.
Продолжайте этим заниматься
Если у вас нет опыта в программировании и вы чувствуете себя неуверенно, я хочу, чтобы вы знали: вам это по силам. Относительно программистов сущес- твует распространенное заблуждение, будто все они по-настоящему хороши в математике. Это не так. Чтобы научиться программировать, не нужно быть ма- тематическим гением, но все же это тяжелая работа. К счастью, большую часть материала, описанного в этой книге, легче освоить, чем вы думаете.
Чтобы улучшить свои навыки программирования, вы должны практико- ваться каждый день. Единственное, что не даст вам двигаться дальше, это не- желание придерживаться учебного процесса, так что давайте рассмотрим пару способов, которые помогут вам продолжить работу.
Когда я только начинал, я составлял расписание и следил за тем, чтобы прак- тиковаться каждый день — это помогало мне оставаться сосредоточенным.
Если вам нужна дополнительная помощь, Тим Феррисс, эксперт по произво- дительности труда, рекомендует следующую технику поддержки мотивации: от- давайте деньги другу и члену семьи, указывая, что они должны вернуть вам их по- сле достижения определенной цели в установленные вами сроки, а в противном случае пожертвовать организации, которая вам не нравится.
Оформление этой книги
Главы этой книги опираются друг на друга. Имейте в виду, что я стараюсь избе- гать повторного объяснения понятий. Когда я в первый раз ввожу новые терми-
2
 (Craigslist) —            . –
. .
3
www.wsj.com/articles/computer-programming-is-a-trade-lets-act-like-it-1407109947?mod=e2fb

14
Часть I
ны, они выделяются жирным шрифтом. Каждое такое слово определено в конце каждой главы в словаре терминов. Также в конце глав есть задания для развития навыков программирования вместе со ссылками на их решения.
Технологии, используемые в этой книге
В этой книге представлены технологии, позволяющие как можно больше погру- зиться в практику программирования. Я стараюсь быть технологическим «агности- ком», сосредоточиваясь на концепциях вместо технологий.
В некоторых случаях мне пришлось выбирать между множеством различ- ных технологий. В главе 19 «Управление версиями» (для тех читателей, кото- рые не знакомы с управлением версиями, я все объясню позже) я описываю основы использования системы Git . Я выбрал ее, поскольку считаю отрасле- вым стандартом для управления версиями. Я использую Python для большин- ства примеров в программировании, потому что это широко изучаемый язык и его просто читать, даже если вы им никогда не пользовались. Кроме того, практически в каждой отрасли на разработчиков Python наблюдается огром- ный спрос.
Чтобы следовать примерам в этой книге, вам понадобится компьютер .
У компьютера есть операционная система, программа-посредник между физи- ческими компонентами компьютера и вами. То, что вы видите, когда смотрите на экран, называется графическим интерфейсом пользователя или ГИП, и это часть вашей операционной системы.
Для настольных компьютеров и ноутбуков есть три распространенных опе- рационных системы: Windows, Unix и Linux . Windows — операционная система
Microsoft. Unix была создана в 1970-х годах. Современная операционная система корпорации Apple основана на Unix. С этого момента, когда я использую сло- во «Unix», я имею в виду операционную систему корпорации Apple. Linux явля- ется операционной системой с открытым исходным кодом, она используется большинством мировых серверов . Сервер — это компьютер или компьютерная программа, выполняющая задачи вроде хостинга (расположения) веб-сайта . От- крытый исходный код подразумевает, что программное обеспечение не при- надлежит компании или отдельному лицу и его можно изменить или заново распространить. Linux и Unix принадлежат к Unix-подобным операционным
системам, из чего следует, что они очень похожи. Эта книга предполагает, что вы используете компьютер под управлением операционной системы Windows,
Unix или Ubuntu (популярной версии Linux).
Скачивание файлов примеров
Скачать все файлы примеров из этой книги вы можете по ссылке eksmo.ru/files/
self_taught_programmer_althoff.zip. Распакуйте скачанный файл с помощью про- граммы-архиватора, например WinZip или WinRAR, и вы увидите структуру па- пок, названных согласно номерам глав в этой книге. В папке Глава 02 вы найдете файлы примеров из главы 2 и т.д.
В тексте книги рядом с листингами кода указаны имена файлов. Так, пример программы «Привет, мир!» из главы 2 вы найдете в файле Python_ex1.py в папке
Глава 02.

15
Введение в программирование
Словарь терминов
FizzBuzz: тест на программирование, используемый на собеседованиях для от- сеивания кандидатов.
Linux: операционная система с открытым исходным кодом, используемая на большинстве серверов по всему миру.
Unix: операционная система, созданная в 1970-х годах. Операционная система macOS корпорации Apple основана на Unix.
Unix-подобные операционные системы: Unix и Linux.
Windows: операционная система корпорации Microsoft.
Графический интерфейс пользователя (ГИП): часть операционной системы, которую вы видите, когда смотрите на экран компьютера.
Операционная система: программа, которая является посредником между фи- зическими компонентами компьютера и вами.
Открытый исходный код: характеристика программного обеспечения, кото- рое не принадлежит компании или отдельному лицу, но вместо этого поддержи- вается группой добровольцев.
Сервер: компьютер или компьютерная программа, которая выполняет такие за- дачи, как хостинг веб-сайта.
Практикум
Составьте расписание на день, которое предусматривает практику программи- рования.
1   2   3   4   5   6   7   8   9   ...   15


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