Современные интернет-сайты, игры и приложения, которыми пользуются миллионы людей, стали очень большими и сложными. Над ними работают целые команды программистов с различными специализациями, создающие разные части одного большого продукта.
Разработчиков условно можно разделить на две группы — backend и frontend. Первые занимаются разработкой «внутренностей» системы: её архитектуры, базы данных и программной логики. Вторые — интерфейсами, с которыми непосредственно взаимодействуют пользователи.
Вы смотрите на машину снаружи: она блестящая, привлекательная, но без двигателя она не работает. Мотор спрятан где-то под капотом, однако именно он заставляет автомобиль двигаться — и обладает весьма сложным устройством. Красивая машина, которая плохо ездит, никому не нужна. Backend-разработчики работают для того, чтобы их «машины» — сайты, игры или приложения — становились быстрее, лучше и дольше не ломались.
В backend-разработке часто возникают проблемы, которые нужно решать срочно. Это как ехать на большой скорости по трассе и потерять колесо, — а остановиться при этом нельзя. Хороший программист скажет: все садитесь на правую сторону, потому что у нас нет левого колеса, а ты, Паша, бери «запаску» и прикручивай!
Сегодня в мире существуют десятки языков программирования и их диалектов, которые активно используются при разработке программного обеспечения. В каждом из этих языков используется свой синтаксис и правила. Но опытному программисту не составляет большого труда освоить новый язык. Гораздо важнее хорошо понимать общие принципы, алгоритмы и подходы к разработке.
В языках программирования есть своя поэзия: иногда ты смотришь на страницу, на ней выводится 30 строк кода одновременно, ты видишь это как стихотворение и всё понимаешь. А иногда это больше похоже на триллер: приходится вдумываться в каждую строчку, и в конце всё равно остаются недосказанность и вопросы. Всё зависит от автора и от того, как он пишет свою «книгу» — свой код. Если он делает это хорошо, люди с удовольствием будут ее читать и показывать другим, а компьютер «снимет» по ней хорошую «экранизацию».
В коде часто можно встретить странные вещи, которые разработчики называют «костылями». Иногда в коде бывает написано: «x = 45», — и комментарий предыдущего разработчика: «Не знаю, почему, но без этого не работает».
Язык имеет всего восемь команд, каждая из которых записывается одним символом. Исходный код программы на Brainfuck представляет собой последовательность этих символов без какого-либо дополнительного синтаксиса.
Программа на языке Brainfuck, печатающая «Hello World!»:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++ .>+.+++++++..+++.>++.<<+++++++++++++++.>.+++. ------.--------.>+.>.
Backend-программист должен обладать хорошим структурным и абстрактным мышлением, любить математику, дружить с логикой, знать несколько языков программирования, современные парадигмы программирования и паттерны проектирования.
Хороший программист должен по-настоящему любить своё дело и быть здоровым перфекционистом. В этой профессии нельзя просто сесть и написать код: всегда нужно оценивать результат, понимать, насколько оптимально и одновременно изящно решена задача, проверить всё несколько раз и только потом отправлять свой код в общее хранилище.
В работе программиста есть и своя магия — каждый день ты творишь волшебство, создавая что-то новое, с головой уходишь в программный код, колдуя над непонятными строками, символами и знаками, чтобы в результате получилась программа, которая работает и приносит пользу.
Кроме магии, у программиста должно быть ещё и огромное терпение. В этой сфере нельзя просто произнести заклинание и сразу получить результат. Чтобы сотворить что-то жизнеспособное, нужно долго и упорно работать, часто даже не видя конечного результата.
Backend-разработчику нужно иметь хорошее фундаментальное техническое образование. Качественное образование дают МФТИ, МГТУ, МГУ, ИТМО или МИФИ. Но многое зависит от человека, от его желания и интереса. При наличии желания хорошее образование можно получить и в менее престижных вузах.
Отсутствие профильного образования приведет к тому, что, когда у человека что-то не заработает, он просто не поймет, почему. Специализация очень важна: есть алгоритмы, структуры данных, понятие конечного автомата. Люди без специального образования не знают этого, и у них возникает много вопросов. Для разработчика важен особый навык — не знать всё подряд (это априори невозможно), а знать о существовании определенных вещей, о том, где их найти и как использовать.
Mail.Ru Group запустила программу бесплатного дополнительного образования «Технопарк» для студентов МГТУ им. Баумана, в рамках которой можно получить все необходимые для backend-разработчика теоретические знания и практические навыки.
Опираясь на академические исследования, с одной стороны, и практический опыт, с другой, автор собрал из самых эффективных методик и наиболее эффективных принципов ясное прагматичное руководство. Каков бы ни был ваш профессиональный уровень, с какими бы средствами разработки вы не работали, в этой книге вы найдете нужную информацию, она заставит вас размышлять и поможет создать совершенный код.
В книге описываются простые и изящные решения типичных задач, возникающих в объектно-ориентированном проектировании. Кроме того, книга одновременно решает две насущные задачи. Во-первых, здесь демонстрируется роль паттернов в создании архитектуры сложных систем. Во-вторых, применяя содержащиеся в справочнике паттерны, проектировщик сможет с легкостью разрабатывать собственные приложения.
Книга Седжвика и Уэйна «Алгоритмы на Java» является классическим справочным руководством, в котором содержится необходимый объем актуальных знаний для программиста в области алгоритмов, накопленных за последние несколько десятилетий.