Есть язык, который находится под каждым слоем кода, на любом языке программирования. И он ждет, пока его обнаружат… Перевод и адаптация статьи Эрика Жируа из сообщества Better programming на Medium.
Когда я писал эту статью, количество поисковых запросов в стиле “какой язык программирования учить” превышало 517 миллионов (!). На каждой странице из списка выдачи рассказывается о преимуществах того или иного языка над остальными, и в 90% случаев вам порекомендуют одно и то же, вроде Python, JavaSctipt (или что-то из топ-3 авторитетных рейтингов ЯП. Актуальный рейтинг июля —
здесь ;)
Позволю себе дерзость и официально выражу несогласие со всеми 517 миллионами результатов и скажу бы, что первый язык программирования, который вам стоит выучить — это
логика.
Недостаточно просто знать, как писать код. Рынок переполнен выпускниками различных курсов, из-за чего должность junior-разработчика по сути перестала существовать. Чтобы преуспеть в этих реалиях, вам нужно не только писать код, но и отличаться логическим складом ума.
Мой первый урок компьютерных наук
Первое знакомство с компьютерными науками у меня случилось на факультативе в десятом классе. Я пришел на урок и испытал чувство восторга: в классе стояла куча коробок с мороженым и баночек с сиропами. Когда мы заняли свои места, учительница объявила:
“Сегодня мы будем делать сандеи (
десерт из мороженого и сиропов - прим. ред.). Но с одним условием: вам нужно написать точные инструкции по приготовлению десерта, и я буду им следовать”.
“
Не вопрос”, — подумал я, — “
это будет легко”. Всего за минуту я набросал идеальную инструкцию:
Положить три шарика малинового мороженого в чашку
Влить две столовые ложки шоколадного сиропа в эту чашку
Добавить взбитые сливки в чашку
Добавить кондитерскую посыпку и вишню на верхушку сандея
Затем моя учительница — выполняя роль “компьютера” — в точности следуя инструкциям разыграла самую колкую постановку из виденных мною. Она начала яростно “нападать” на картонную коробку с мороженным, но прочная крышка осталась невредимой.
“Ладно, для начала снимите крышку,” — сказал я, в надежде побыстрее получить десерт.
“Ты не смог правильно написать для меня инструкции, поэтому, к сожалению, я не смогла приготовить для тебя сандей, СЛЕДУЮЩИЙ!”
Быстрая перемотка к попытке №2
Открыть коробку с малиновым мороженым, сняв крышку
Положить три шарика малинового мороженого в чашку
Открыть шоколадный сироп и добавить две столовые ложки в эту чашку
Открыть взбитые сливки и добавить немного в чашку
Добавить кондитерскую посыпку и вишню на верхушку сандея
Я был уверен, что справился в этот раз.
Учительница сняла крышку, набрала три шарика мороженого и положила из в чашку.
Наконец-то, мой сандей вот-вот будет готов! Затем она открыла шоколадный сироп и положила две столовые ложки в чашку. Но не две ложки сиропа — просто ложки, без него! Мои инструкции опять получились недостаточно точными. Когда все закончилось, я получил чашку с мороженым, двумя металлическими ложками, тучей взбитых сливок и примерно 300 шариками кондитерской посыпки.
Кажется, в этот момент мне все стало понятно: компьютер — это сущность, которая руководствуется чистой логикой. Он не понимает контекста и не делает предположений. Он выполняет строгий набор инструкций и следует им до последней буквы.
Окончательная инструкция по приготовлению сандея получилась ужасно многословной, но это было необходимо:
Если еще не открыты, открыть упаковку всех перечисленных объектов: Малиновое мороженое, Шоколадный сироп, Кондитерская посыпка и Взбитые сливки
Взять чашку с полки и поставить перед собой
Взять ложку для мороженого и, по одному за раз, набрать и положить три шарика мороженого в чашку. Когда все выполнено, положить ложку на стол.
Взять ложку для шоколадного сиропа, если ее еще нет в вашем распоряжении.
Затем набрать ложку шоколадного сиропа и вылить его в чашку. Проделать это действие дважды.
Убрать шоколадный сироп на полку, когда это будет сделано.
Перевернуть бутылку со взбитыми сливками вверх дном, и прижать пальцем кнопку возле носика бутылки на три секунды, затем вернуть бутылку в исходное положение.
Насыпать 40 гранул кондитерской посыпки поверх мороженого и шоколадного сиропа в чашке, затем вернуть шейкер с посыпкой в в исходное положение.
Достать одну вишенку из банки с вишнями и аккуратно положить ее на вершину сандея.
Передать студенту сандей и десертную ложку.
Последняя команда в инструкции была очень важна, так как без нее учительница начинала есть сандей сама.
Это реальность программирования — нужно давать максимально точные инструкции компьютеру. В сущности, все языки программирования состоят из инструкций.
Карьера в разработке программного обеспечения
Разработка ПО находится на том этапе развития, на котором разговор о ней как об отдельно взятой отрасли кажется слишком общим. Да и должность “разработчик ПО” в свете этого звучит размыто.
Два разработчика с разными наборами скиллов могут быть одинаково востребованы на рынке труда, что подсказывает, что для успешной карьеры в разработке нужно нечто большее, чем просто скилл программирования.
У опытных разработчиков есть общая черта, обособленная от программирования —
логика.
Лучшие разработчики сильны в критическом мышлении. Это существенно, потому что большинство проектов по разработке ПО представляет собой плохо задокументированный разношерстный кошмар. Чтобы собрать все данные и заполнить пробелы, понадобится человек с критическим мышлением. Поэтому те специалисты, которые не способны связать факты в единое целое, плетутся в хвосте.
Все это подводит к еще одному очень важному утверждению:
Основы компьютерных наук — и сейчас, и в будущем — первичны. Они важнее, чем способность писать код.
Популярные языки появляются и исчезают. Фреймворки устаревают, и компании
реагируют на меняющиеся запросы рынка, комбинируя стек используемых технологий. Что остается без изменений? Основы основ.
Как развить логическое мышление
Логику и критическое мышление можно и нужно развивать. Советую уделить внимание следующему:
1. Изучайте эффективность алгоритмов в средах выполнения
Известная как Big-O нотация используется для описания сложность алгоритмов. Если вы в состоянии оценить код в терминах Big O, проанализировать соотношение количества выполняемых действий и потраченного времени, считайте, что вы сделали первый шаг в правильном направлении.
2. Изучайте структуры данных
Структура данных — основа каждой сложной программы. Знать, какой тип лучше использовать в том или ином случае, — важный навык. Структуры данных напрямую связаны со сложностью алгоритмов, ведь выбор неправильной структуры может положить конец работе программы.
3. Читайте/смотрите/слушайте
Ну а чтобы разобраться в основах, читайте книги о концепциях проектирования, лучших практиках, стиле разработки кода. Тем, кто изучает программирование, настоятельно рекомендуется почитать:
- “Приёмы объектно-ориентированного проектирования. Паттерны проектирования” (Э. Гамма Р. Хелм Р. Джонсон Дж. Влиссидес),
- “Рефакторинг. Улучшение существующего кода” (М. Фаулер),
- “Совершенный код” (С. Макконнелл)
- “Чистый код” (Б. Мартин)
- “Программист-прагматик” (Э. Хант)
- “Алгоритмы: построение и анализ” (Т. Кормен, Ч. Лайзерсон, Р. Ривест и К. Штайн)
4. Практикуйтесь!
Нельзя стать хорошим виолончелистом без сотен часов практики. Ежедневная практика — ключ к успеху в программировании. Сегодня есть масса онлайн-платформ, на которых можно найти тысячи заданий, требующих понимания структур данных и алгоритмов (HackerRank, LeetCode, CodeWars и другие).
Задачи по программированию на Java, от простых до сложных, есть на JavaRush. Их в курсе — более 1200. А еще — минипроекты и задачи-игры.
|
Для меня самый эффективный способ работы с такими платформами — подумать над уникальным подход к задаче и повесить свое решение на Github. Затем посмотреть на топовые решения подобной задачи и проанализировать подходы других программистов. Это и подводит нас к последнему совету:
5. Анализируйте чужой код
Главная ошибка в изучении программирования и на начальных этапах работы — самоизоляция. Программная разработка — сфера, которая во многом зависит от коллективных усилий. Мы вместе создаем стандарты, делаем ошибки, и со временем (опять же, методом проб и ошибок) понимаем, что работает лучше всего. Если уделять время чтению кода опытных разработчиков, оно окупится. Просто убедитесь, что код на самом деле хороший.
Заключение
Личный совет: никогда не стыдитесь того, чего (еще) не знаете. Как сказано выше, эта отрасль огромная, количество языков — невероятное, информации — море. Нужно много времени и усилий, чтобы сформировать хотя бы общее представление о программировании, еще больше — чтобы набраться опыта, и еще в разы больше, чтобы стать настоящим профи. Когда у меня наконец-то это получится, я сообщу :)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ