Сам_себе_программист._Как_научиться_программировать_и_устроиться. Guide to Programming Professionally
Скачать 3.94 Mb.
|
Глава 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. Графический интерфейс пользователя (ГИП): часть операционной системы, которую вы видите, когда смотрите на экран компьютера. Операционная система: программа, которая является посредником между фи- зическими компонентами компьютера и вами. Открытый исходный код: характеристика программного обеспечения, кото- рое не принадлежит компании или отдельному лицу, но вместо этого поддержи- вается группой добровольцев. Сервер: компьютер или компьютерная программа, которая выполняет такие за- дачи, как хостинг веб-сайта. Практикум Составьте расписание на день, которое предусматривает практику программи- рования. |