Есть язык, который находится под каждым слоем кода, на любом языке программирования. И он ждет, пока его обнаружат… Перевод и адаптация статьи Эрика Жируа из сообщества Better programming на Medium. Один язык, чтобы править всеми - 1Когда я писал эту статью, количество поисковых запросов в стиле “какой язык программирования учить” превышало 517 миллионов (!). На каждой странице из списка выдачи рассказывается о преимуществах того или иного языка над остальными, и в 90% случаев вам порекомендуют одно и то же, вроде Python, JavaSctipt (или что-то из топ-3 авторитетных рейтингов ЯП. Актуальный рейтинг июля — здесь ;) Позволю себе дерзость и официально выражу несогласие со всеми 517 миллионами результатов и скажу бы, что первый язык программирования, который вам стоит выучить — это логика. Недостаточно просто знать, как писать код. Рынок переполнен выпускниками различных курсов, из-за чего должность junior-разработчика по сути перестала существовать. Чтобы преуспеть в этих реалиях, вам нужно не только писать код, но и отличаться логическим складом ума.

Мой первый урок компьютерных наук

Первое знакомство с компьютерными науками у меня случилось на факультативе в десятом классе. Я пришел на урок и испытал чувство восторга: в классе стояла куча коробок с мороженым и баночек с сиропами. Когда мы заняли свои места, учительница объявила: “Сегодня мы будем делать сандеи (десерт из мороженого и сиропов - прим. ред.). Но с одним условием: вам нужно написать точные инструкции по приготовлению десерта, и я буду им следовать”. “Не вопрос”, — подумал я, — “это будет легко”. Всего за минуту я набросал идеальную инструкцию: Положить три шарика малинового мороженого в чашку Влить две столовые ложки шоколадного сиропа в эту чашку Добавить взбитые сливки в чашку Добавить кондитерскую посыпку и вишню на верхушку сандея Затем моя учительница — выполняя роль “компьютера” — в точности следуя инструкциям разыграла самую колкую постановку из виденных мною. Она начала яростно “нападать” на картонную коробку с мороженным, но прочная крышка осталась невредимой. “Ладно, для начала снимите крышку,” — сказал я, в надежде побыстрее получить десерт. “Ты не смог правильно написать для меня инструкции, поэтому, к сожалению, я не смогла приготовить для тебя сандей, СЛЕДУЮЩИЙ!”

Быстрая перемотка к попытке №2

Открыть коробку с малиновым мороженым, сняв крышку Положить три шарика малинового мороженого в чашку Открыть шоколадный сироп и добавить две столовые ложки в эту чашку Открыть взбитые сливки и добавить немного в чашку Добавить кондитерскую посыпку и вишню на верхушку сандея Я был уверен, что справился в этот раз. Учительница сняла крышку, набрала три шарика мороженого и положила из в чашку. Наконец-то, мой сандей вот-вот будет готов! Затем она открыла шоколадный сироп и положила две столовые ложки в чашку. Но не две ложки сиропа — просто ложки, без него! Мои инструкции опять получились недостаточно точными. Когда все закончилось, я получил чашку с мороженым, двумя металлическими ложками, тучей взбитых сливок и примерно 300 шариками кондитерской посыпки. Кажется, в этот момент мне все стало понятно: компьютер — это сущность, которая руководствуется чистой логикой. Он не понимает контекста и не делает предположений. Он выполняет строгий набор инструкций и следует им до последней буквы. Окончательная инструкция по приготовлению сандея получилась ужасно многословной, но это было необходимо: Если еще не открыты, открыть упаковку всех перечисленных объектов: Малиновое мороженое, Шоколадный сироп, Кондитерская посыпка и Взбитые сливки Взять чашку с полки и поставить перед собой Взять ложку для мороженого и, по одному за раз, набрать и положить три шарика мороженого в чашку. Когда все выполнено, положить ложку на стол. Взять ложку для шоколадного сиропа, если ее еще нет в вашем распоряжении. Затем набрать ложку шоколадного сиропа и вылить его в чашку. Проделать это действие дважды. Убрать шоколадный сироп на полку, когда это будет сделано. Перевернуть бутылку со взбитыми сливками вверх дном, и прижать пальцем кнопку возле носика бутылки на три секунды, затем вернуть бутылку в исходное положение. Насыпать 40 гранул кондитерской посыпки поверх мороженого и шоколадного сиропа в чашке, затем вернуть шейкер с посыпкой в в исходное положение. Достать одну вишенку из банки с вишнями и аккуратно положить ее на вершину сандея. Передать студенту сандей и десертную ложку. Последняя команда в инструкции была очень важна, так как без нее учительница начинала есть сандей сама. Это реальность программирования — нужно давать максимально точные инструкции компьютеру. В сущности, все языки программирования состоят из инструкций.

Карьера в разработке программного обеспечения

Разработка ПО находится на том этапе развития, на котором разговор о ней как об отдельно взятой отрасли кажется слишком общим. Да и должность “разработчик ПО” в свете этого звучит размыто. Два разработчика с разными наборами скиллов могут быть одинаково востребованы на рынке труда, что подсказывает, что для успешной карьеры в разработке нужно нечто большее, чем просто скилл программирования. У опытных разработчиков есть общая черта, обособленная от программирования — логика. Лучшие разработчики сильны в критическом мышлении. Это существенно, потому что большинство проектов по разработке ПО представляет собой плохо задокументированный разношерстный кошмар. Чтобы собрать все данные и заполнить пробелы, понадобится человек с критическим мышлением. Поэтому те специалисты, которые не способны связать факты в единое целое, плетутся в хвосте. Все это подводит к еще одному очень важному утверждению: Основы компьютерных наук — и сейчас, и в будущем — первичны. Они важнее, чем способность писать код. Популярные языки появляются и исчезают. Фреймворки устаревают, и компании реагируют на меняющиеся запросы рынка, комбинируя стек используемых технологий. Что остается без изменений? Основы основ.

Как развить логическое мышление

Логику и критическое мышление можно и нужно развивать. Советую уделить внимание следующему:

1. Изучайте эффективность алгоритмов в средах выполнения

Известная как Big-O нотация используется для описания сложность алгоритмов. Если вы в состоянии оценить код в терминах Big O, проанализировать соотношение количества выполняемых действий и потраченного времени, считайте, что вы сделали первый шаг в правильном направлении.

2. Изучайте структуры данных

Структура данных — основа каждой сложной программы. Знать, какой тип лучше использовать в том или ином случае, — важный навык. Структуры данных напрямую связаны со сложностью алгоритмов, ведь выбор неправильной структуры может положить конец работе программы.

3. Читайте/смотрите/слушайте

Изучать программирование на Java, конечно же, нужно на JavaRush :)
Ну а чтобы разобраться в основах, читайте книги о концепциях проектирования, лучших практиках, стиле разработки кода. Тем, кто изучает программирование, настоятельно рекомендуется почитать:
  • “Приёмы объектно-ориентированного проектирования. Паттерны проектирования” (Э. Гамма Р. Хелм Р. Джонсон Дж. Влиссидес),
  • “Рефакторинг. Улучшение существующего кода” (М. Фаулер),
  • “Совершенный код” (С. Макконнелл)
  • “Чистый код” (Б. Мартин)
  • “Программист-прагматик” (Э. Хант)
  • “Алгоритмы: построение и анализ” (Т. Кормен, Ч. Лайзерсон, Р. Ривест и К. Штайн)

4. Практикуйтесь!

Нельзя стать хорошим виолончелистом без сотен часов практики. Ежедневная практика — ключ к успеху в программировании. Сегодня есть масса онлайн-платформ, на которых можно найти тысячи заданий, требующих понимания структур данных и алгоритмов (HackerRank, LeetCode, CodeWars и другие).
Задачи по программированию на Java, от простых до сложных, есть на JavaRush. Их в курсе — более 1200. А еще — минипроекты и задачи-игры.
Для меня самый эффективный способ работы с такими платформами — подумать над уникальным подход к задаче и повесить свое решение на Github. Затем посмотреть на топовые решения подобной задачи и проанализировать подходы других программистов. Это и подводит нас к последнему совету:

5. Анализируйте чужой код

Главная ошибка в изучении программирования и на начальных этапах работы — самоизоляция. Программная разработка — сфера, которая во многом зависит от коллективных усилий. Мы вместе создаем стандарты, делаем ошибки, и со временем (опять же, методом проб и ошибок) понимаем, что работает лучше всего. Если уделять время чтению кода опытных разработчиков, оно окупится. Просто убедитесь, что код на самом деле хороший.

Заключение

Личный совет: никогда не стыдитесь того, чего (еще) не знаете. Как сказано выше, эта отрасль огромная, количество языков — невероятное, информации — море. Нужно много времени и усилий, чтобы сформировать хотя бы общее представление о программировании, еще больше — чтобы набраться опыта, и еще в разы больше, чтобы стать настоящим профи. Когда у меня наконец-то это получится, я сообщу :)