Заметки начинающего программиста
Ключевые знания и заметки для начинающего программиста, неважно какой стек технологий вы выберите. Эти знания всегда пригодятся в разработке.
Начальные навыки и знание
Сейчас не обязательно оканчивать профильный вуз, чтобы стать программистом. Можно пройти курсы, а при большом желании можно научиться программировать самостоятельно. Но, минуя технические вузы, студенты не получают необходимый фундамент для развития в программировании, поэтому мы рекомендуем пройти обучение в высшем или среднем специальном учебном заведении. Конечно, глубокие знания математики и физики не главные критерии при приеме на работу, но открывают большие перспективы и горизонты для программиста, знайте это.
- Высшая математика
- Алгоритмы
- Теория вероятности
- Дискретная математика
- Линейная алгебра
- Геометрия (для веб-дизайнеров и создателей игр)
- Информатика
- Уверенный пользователь ПК
Ценные качества для программиста
Вам нужны не только математические и логические знания, но и умения находить информацию и быть само организованным. Так как опыт показывает, что после образовательных учреждений вы должны сами учиться.
- Умение решать задачи
- Аналитический склад ума
- Упорство
- Умение работать в команде
- Хорошая концентрация
- Усидчивость
- Алгоритмизированный подход
- Ответственность
- Коммуникабельность
- Инициативность
Теперь уточним по литературе.
Топ-10 книг по программированию для начинающих
Программист-прагматик. Путь от подмастерья к мастеру (Эндрю Хант, Дэвид Томас)
Оригинальное название: The Programmatic Programmer from From Journeyman to Master by Andrew Hunt and David Thomas
Если вы не читали эту книгу, скорее всего, на форумах и специализированных ресурсах вы неоднократно встречали цитаты из неё. Образ программиста-прагматика в этой книге настолько чёткий и идеализированный, что… его впору назвать романтиком, как бы парадоксально это ни звучало. Тем не менее, советы из книги — дельные и актуальные невзирая на её солидный возраст. Не знаю, с чем сравнить “Программист-прагматик” в мире книги по программированию. Ближайшие аналоги вне этого мира — “Ветхий завет” или какая-нибудь супер-крутая поваренная книга. В “Прагматике” всё очень конкретно и максимально применимо на практике. Порой доходит до банальностей (например, в разделе про эффективное общение собраны элементарные правила делового этикета), но порой советы из книги незаменимы, особенно если у начинающего разработчика нет терпеливого и внимательного ментора. Таковы подсказки о повторяемости кода, создании прототипов, оценках. Или напоминание о невозможности создать совершенную программу. Есть там и полезные технические моменты, касающиеся, например, отладки кода, модульного тестирования или скорости алгоритмов…словом то, что нужно для подготовки к карьере программиста.
Рефакторинг Улучшение существующего кода (Мартин Фаулер)
Оригинальное название Refactoring: Improving the Design of Existing Code by Martin Fowler, with Kent Beck
Если вы попросите кого-то перечислить лучшие книги по программированию всех времён, которые помогли сделать карьеру, кто-нибудь обязательно упомянет “Рефакторинг”. Кто-то может сказать, что эта книга устарела, и в чём-то будет прав. Она писалась в те времена, когда рефакторинг ещё не был повсеместным правилом, и некоторые истины в ней очевидны для начинающих программистов сегодняшнего дня. Тем не менее, приёмы рефакторинга расписаны в ней настолько хорошо и подробно (местами, я бы даже сказал, многословно), что каждый новичок найдет в ней что-то полезное. Несколько лет назад вышло обновленное издание книги, и там были добавлены новые приемы, что просто отлично. К тому же примеры в этой книге написаны на Java. Из недостатков отмечу разве что многословность. Тем не менее, книгу рекомендую.
Чистый код (Роберт Мартин)
Оригинальное название Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
Эта книга хоть и поновее предыдущей, но уже тоже стала классикой книг по программированию. “Дядя Боб”, как иногда кличут Роберта Мартина во всемирной программистской тусовке является одним из авторов манифеста Agile, а также некоторых принципов современного “чистого” программирования, например, SOLID. Одним из главных лейтмотивов книги можно считать…эмпатию или просто хорошее отношение ко всем, кому придется работать с вашим кодом (в том числе и вам самому в будущем). На этом простом принципе и здравом смысле строятся большинство правил “Чистого кода”. Большинство правил и советов кажутся очень правильными, из тех, которые интуитивно крутятся в голове, но четко сформулировать их непросто. Впрочем, с некоторыми мыслями автора можно поспорить: он порой чрезвычайно категоричен. Например, он пишет, что хороший код не нуждается в комментировании. Тем не менее книга обязательна к прочтению.
Эффективная работа с унаследованным кодом (Майкл Физерс)
Оригинальное название Working Effectively with Legacy Code by Michael Feathers
К этому жизнь вас не готовила… Нет, правда: если вы только учитесь, то не представляете, какая это боль — работать с базами унаследованного кода, который, вероятно, писал ещё дедушка Билла Гейтса. Этот код часто написан совсем не так, как вы привыкли, а задокументирован настолько плохо, что иногда хочется найти его автора и… Увы: жизнь Java-программиста на больших проектах очень часто связана именно с поддержкой legacy. Эта книга может помочь с техническими аспектами работы с древним кодом, а кроме того, поможет вам смириться со своей участью. И да, я серьезно. Эта книга вам пригодится, если вы твердо нацелились на аутсорсинговую или продуктовую компанию с большими проектами.
Head First. Паттерны проектирования (Эрик Фримен, Берт Бейтс, Кэти Сьерра, Элизабет Робсон)
Оригинальное название Head First Design Patterns: A Brain-Friendly Guide by Eric Freeman, Bert Bates, Kathy Sierra, Elisabeth Robson
Шаблоны проектирования, эти логичные правила хорошего тона, которые если их не изучать со временем и так придут в голову (или нет…) и которые превращаются буквально в суперсилу начинающего программиста, если к ним начать присматриваться как можно раньше. Да, на первых порах полезно покрутить относительно сложный персональный проект и попробовать разбить его на подзадачи самостоятельно… и в конце-концов найти тот самый паттерн. Однако когда речь идет о работе, времени на эксперименты не всегда хватает. Когда я попал на стажировку я очень мало знал о паттернах: учась на JavaRush я попросту проскочил все эти фабрики-синглтоны-инъекции-зависимости, сочтя, что и так разберусь, когда будет надо. Однако разобраться нужно было очень быстро, и именно книга “Head First. Паттерны проектирования” мне в этом помогла. Она легко написана, наполнена иллюстрациями и юмором… мне кажется что подача для темы “шаблоны проектирования” очень важна: ее можно подать оооочень скучно, а можно — так, как в Head First. Отличное дополнение к “Чистому коду” и/или “Рефакторингу”!
Архитектура компьютера и общие компьютерные науки
Насколько важно будущему программисту разбираться в архитектуре компьютера, знать, как устроены операционные системы, а как — базы данных? Не факт, что эти знания вам пригодятся в работе непосредственно. Но они определённо помогут вам продемонстрировать увлеченность ИТ-сферой и ИТ-эрудицию. И самое главное: если вы знаете, как всё устроено, это поможет вам решать задачи лучше. Инфа 100%. Так что вот вам ещё две книги в помощь.
Код (Чарльз Петцольд)
Оригинальное название Code: The Hidden Language of Computer Hardware and Software by Charles Petzold
Первое издание “Код” увидело мир ещё в начале двухтысячных, но на деле она могла появиться и раньше, и позже — и была бы всё так же актуальна. Дело в том, что в этой книге работа компьютера объяснена на очень-очень низком уровне, начиная с того, как работают те самые нули и единицы, и самый первый технический пример — это схема фонарика, который можно считать простейшим однобитным компьютером… Нет, вы не думайте, что в книге все очень примитивно. На самом деле ровно наоборот… Там описаны схемы компьютеров, с командами, работа памяти и операционных систем по самой сути. Пожалуй, именно после её прочтения я понял, как работают компьютеры. Пускай архитектура и набор команд процессора меняется, а пропускная способность памяти увеличивается, по сути вычислительные машины работают ровно так же. Нужны ли эти знания Java-программисту? Непосредственно в работе они пригодятся очень немногим. Но косвенно мне в работе часто помогало то, что я понимал как всё это работает на самом деле.
Введение в компьютерные науки (Гленн Брукшир, Деннис Брилов)
Оригинальное название Computer Science: An Overview by Glen Brookshear and Dennis Brylow
Эта книга попала ко мне ещё в университете, когда я изучал основы компьютерных наук. Только мне достался перевод шестого издания, а в настоящее время актуальным является 13-е издание. Книга представляет собой базовый курс по компьютерным наукам, который уже много лет читается в университетах США и других стран. Охват материала в ней очень широк: архитектура машин, системы счисления, обработка данных, операционные системы, принципы построения баз данных, структуры данных, файловые структуры и так далее. Не все разделы книги написаны одинаково хорошо. Например, некогда меня очень смутил разделы про методы проектирования и базы данных, а вот разделы про системы счисления, побитовые вычисления, архитектуру ПК и структурам данных мне очень зашли. Самое классное в книге — огромное количество упражнений с ключами. Такая книга, помимо студентов, пожалуй, нужна в первую очередь самоучкам без технического образования, чтобы восполнить пробелы и получить представление о компьютерных науках в целом.
Алгоритмы и структуры данных. Та ещё напасть!
Учитывая насколько высокоуровневым стало современное программирование, знание алгоритмов утратило первостепенную важность. Теперь достаточно применить нужную библиотеку и не ломать голову над тем, как лучше отсортировать массив. Однако ломать голову в работе вам всё-таки придётся, и не раз. Помните пункт “умение выбрать лучшее решение из возможных” из требований к начинающему программисту? Так вот, что бы кто ни говорил, я считаю хорошую алгоритмическую подготовку отличной прокачкой для поиска оптимальных решений. Посему, следующие две книги — о них. Об алгоритмах.
Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих Адитья Бхаргава
Оригинальное название: Grokking Algorithms: An illustrated guide for programmers and other curious people by Aditya Y. Bhargava
Сам автор в начале книги пишет, что алгоритмы дались ему не сразу, и он старался писать “Грокаем алгоритмы” так, чтобы она читалась просто. Рассчитана она на начинающих программистов, то есть тех, кто может написать “hello, world” и знает, что такое int, строка, цикл, ветвление и массив. Ну и может вывести массив на экран. Требуемое знание математики — приблизительно на уровне 6-7 класса средней школы без изысков. И это — первый серьезный плюс книги. Она не пытается представить читателя студентом-математиком, как многие издания на тему. То есть если вы боитесь математики, алгоритмов, уже пытались учить последние и ничего не поняли, эта книга прекрасно подойдет для вашей реабилитации в собственных глазах. Второй позитивный момент — в книге рассмотрено то, что вполне может пригодиться на практике (понимание этого — уж точно). Начинается она с объяснения сути бинарного поиска и эффективности — буквально на пальцах и со множеством картинок. Третий — в книге много вопросов и упражнений (примеры кода — на Python, но это не так уж и важно). Момент который для кого-то может быть позитивным, а для кого-то — негативным: книга не строит из себя всеохватный справочник. Скажем, из общепринятых для изучения алгоритмов здесь есть только два — неэффективный алгоритм вставки и эффективный алгоритм быстрой сортировки. Почему бы автору не рассмотреть другие алгоритмы, скажем, пузырька или слияния — не знаю. На самом деле алгоритм слияния в книге упоминается, но кратко, без разбора и только в сравнении с быстрой сортировкой. С остальными темами всё точно так же. Есть основы, которые разобраны очень хорошо, но порой очень хочется более углубленного продолжения, а его попросту нет. Одним словом перед нами очень базовая книга, после которой, скорее всего, захочется найти книгу, в которой всё расписано посерьезнее. Например, следующую.
Алгоритмы на Java (Роберт Сэджвик, Кэвин Уэйн)
Оригинальное название: Algorithms by Robert Sedgewick and Kevin Wayne
На самом деле эта книга может как очаровать, так и отпугнуть. Отпугнуть хотя бы своим объемом в…очень много страниц и определённой академичностью. Поэтому если в к ней, академичности, не склонны, или не чувствуете себя уверенно в математике ( старшие классы, простейшие элементы высшей математики для инженеров), то с этой книги лучше не начинать. Математических терминов там не так уж и много, но сам подход предполагает такое мышление. А вот после предыдущей книги — почему бы и нет. Она даст ориентир. Первая глава местами — обобщение знаний по Java и определение некоторых структур данных. Её лучше читать выборочно, а вот вторую и третью главу не помешает изучить достаточно подробно. Остальные — также полны интересной и основательной информации о графах и строках. Я бы сказал, такие вещи ОЧЕНЬ помогают в формировании программистского мышления. Касательно изложения — чувствуется, что автор — преподаватель, но привык работать с людьми по большей мере заинтересованными и подготовленными. Так что наберитесь терпения и читайте. А также решайте задачи, их тут хватает. Кстати, на Coursera вы можете найти курс по алгоритмам, созданный авторами книги.
Знай свой фреймворк
И, напоследок еще одна книга. И снова — полезная.
Spring в действии (Крейг Уоллс)
Оригинальное название: Spring in Action by Craig Walls
Очень известная книга с не менее известной обложкой с “мужиком в юбке”, который на самом деле не в юбке. Откровенно говоря, изучение Spring по одной только книге — очень непростая задача, даже если стараться сразу всё пробовать на практике. Кстати, понять, как это сделать после прочтения той или иной главы бывает крайне непросто. Я работал с этой книгой когда попал на стажировку в компанию, и вот при таком использовании она очень помогает. Мало того, я даже сегодня, уже работая программистом, постоянно к ней возвращаюсь. Короче говоря, получить общее представление о главном джавовом фреймворке с её помощью можно.
По опыту хочу сказать, что если ваш ребенок заинтересовался программированием то, лучше дать ему возможность попробовать. Ибо, с 13-ти лет, если бы я учился, уже давно жил бы заграницей и создавал топ-приложения на Android и iOs.
Вот ссылки на курсы для детей:
Если ваш ребенок любит майнкрафт то пусть попробует этот сайт.
Также есть:
Также есть и другие курсы уже для подростков и взрослых по программированию.