Скрытый под слоем кода, томится язык, жаждущий быть выученным.
На момент написания этой статьи запрос «программирование какой язык изучать первым» выдаёт 517 миллионов поисковых результатов. Каждый из этих сайтов будет нахваливать один определённый язык, и 90% из них, в конечном итоге, порекомендуют Python или JavaScript.
Без долгих прелюдий, я хотел бы официально декларировать, что все эти 517 миллионов сайтов неправы и заявить, что язык, который надо изучать первым — фундаментальная логика.
Просто знать как кодить уже не достаточно. Рынок настолько насыщен выпускниками институтов и курсов, что позиция джуниора практически перестала существовать*. Чтобы преуспеть в сегодняшнем мире, вы должны и кодить, и иметь продвинутое фундаментальное логическое
* здесь и далее, пожалуйста, помните, что это перевод, и ситуация на рынке труда у автора и в вашей стране может быть различной (как и другие нюансы), что, однако, само по себе не делает оригинальную статью хуже — прим. перев.
Мой первый урок Информатики
Моё первое знакомство с информатикой было факультативом, который я взял в 10 классе. В первый же день, зайдя в аудиторию, я был восхищён, увидев перед собой большое количество ведёрок мороженого и разнообразных топпингов. После того как все расселись, учительница провозгласила:
«Сегодня мы будем дегустировать самостоятельно приготовленные пломбиры. Но с одним условием: вы должны составить список конкретных инструкций, как приготовить десерт, а я — буду им следовать»
«Без проблем, — подумал я, — этот урок не будет долгим». Где-то через минуту я набросал отличный рецепт для мороженного моей мечты:
- Зачерпнуть и положить три шарика малинового мороженного в миску
- Открыть шоколадный соус и добавить две столовые ложки в эту же миску
- Добавить взбитые сливки в миску
- Посыпать всё это сахарными палочками и полжить вишенку сверху
Моя учительница — «компьютер» в этой милой метафоре — разыграла более саркастично-буквальное, чем я видел когда-либо раньше, представление. Она стала рьяно тыкать ведёрко мороженного ложкой для шариков, даже не прикоснувшись к крышке.
«Хорошо-хорошо, но сначала нужно его открыть!» — воскликнул я, пытаясь получить угощение поскорее.
«Ты не написал этого в инструкции, а я не смогла приготовить тебе мороженое. СЛЕДУЮЩИЙ!»
Промотаем время до попытки №2
- Открыть малиновое мороженое, убрав крышку
- Зачерпнуть и положить три шарика малинового мороженного в миску
- Открыть шоколадный соус и добавить две столовые ложки в эту же миску
- Добавить взбитые сливки в миску
- Посыпать всё это сахарными палочками и полжить вишенку сверху
Ну сейчас-то точно проблем не должно быть. Я даже на всякий случай убедился, что все ингредиенты для изготовления моего кулинарного шедевра открыты.
Учительница убрала крышку, зачерпнула и положила три шарика мороженного в миску. «Наконец-то мой прекрасный пломбир начал воплощаться в реальности!» Затем она открыла шоколадный соус и добавила две столовые ложки в миску. Не «добавила шоколадный соус из двух столовых ложек» — вы не подумайте — она, конечно же, положила в миску сами ложки. Без соуса в них. Опять я не удосужился расписать всё точно. После того, как остальное было исполнено в том же духе, я получил на руки миску с мороженным и двумя столовыми ложками, еле заметными под морем взбитых сливок. Сверху была пара сахарных палочек.
Кажется в этот момент до меня наконец-то дошло: компьютер — логика в вакууме. Он не знает об окружающих обстоятельствах и не делает предположений. Он выполняет только чётко сформулированные инструкции и следует им слово-в-слово.
Мой конечный результат был итогом длинной, но необходимой череды проб и ошибок:
- Открой, если этого ещё не сделано, каждую из следующих упаковок: малиновое мороженое, шоколадный соус, взбитые сливки, сахарные палочки.
- Достань миску и поставь перед собой
- Возьми ложку для мороженного и один за другим положи три шарика малинового мороженого в миску. Положи ложку для мороженного на место.
- Возьми банку с шоколадным соусом, зачерпни соус и вылей в миску содержимое столовой ложки. Повтори действие с зачёрпыванием и выливанием соуса ещё один раз. Положи ложку и банку на место.
- Возьми и переверни вверх ногами упаковку взбитых сливок и, держа её над миской, поливай ими мороженное 3 секунды, после чего верни упаковку на место.
- Возьми банку сахарных палочек, высыпь около сорока палочек в миску и положи банку на место.
- Возьми одну вишенку из миски с вишенками и положи её сверху на мороженное.
- Передай ученику миску с готовым пломбиром и ложку.
Последний пункт был особенно важен, так как без него, в предпоследний раз учительница просто начала есть моё мороженое.
Но это и есть программирование. Напряжённое создание тщательного набора инструкций для компьютера. По существу, это то к чему сводится каждый язык программирования — к составлению инструкций.
Карьера в программировании
Программирование достигло той точки, когда его сложно обсуждать как единую индустрию, так же как сложно использовать единственное слово «программист» в качестве описания вакансии. Два разработчика могут быть одинаково востребованными рынком, зная абсолютно разные языки, а значит, умение разрабатывать важнее знания конкретного языка. Универсальный атрибут, присущий всем успешным разработчикам — фундаментальная логика.
Лучший программист — способный посмотреть на код под новым углом. И это принципиально важно, потому что большинство программных продуктов — набор из недокументированных осколков плохого кода. Их постоянно нужно собирать вместе, заделывая бреши по мере необходимости. Людям, не способным соединить разрозненные точки единой линией, придётся вечно быть на вторых ролях.
Всё это подводит меня к ещё одной декларации, на этот раз болдом: фундаментальные знания всегда были и будут первостепенны для программиста.
Языки приходят и уходят. Фреймворки устаревают, а компании реагируют на спрос, меняя стек используемых технологий. Есть ли вещь, которая никогда не изменится? Да — фундаментальные знания, которые потому и называются фундаментальными, что лежат в основе всего!
Как улучшить фундаментальные знания
Фото Кристофера Йешке на Unsplash
Если ищете отправную точку для улучшения фундаментального логического
Знай сложность своей программы
Так же именуемую Big O «сложностью алгоритма» называют зависимость времени на выполнение программы от размера её входных данных (n). Держать руку на пульсе используемых алгоритмов — важный шаг.
Знай свои структуры данных
Структуры данных лежат в основе любой современной программы. Знание того, какую структуру использовать в каком случае, является самостоятельной дисциплиной. Структуры данных напрямую связаны со сложностью рантайма и выбор неправильной структуры может привести к фундаментальным проблемам с производительностью. Поиск элемента в массиве равен O(n), что говорит о дороговизне использования массивов в качестве входных данных. Поиск по хэш-таблице — O(1), а значит, в этом случае время поиска значения не зависит от количества элементов.
Ко мне на собеседование приходили люди, утверждавшие, что по массиву искать быстрее, чем по хэш-таблице. Это был вернейший признак, что нанимать их не стоит — знай свои структуры данных.
Читай / смотри / слушай
Такие сайты, как Udemy, Pluralsight и CodeAcademy — отличный выбор для изучения новых языков программирования. Но для основ обратитесь к книгам по общим принципам, практикам и стилям кодирования. Наиболее рекомендуемые книги — это «Паттерны Проектирования», «Рефакторинг. Улучшение существующего кода», «Совершенный Код», «Чистый код» и «Программист Прагматик». Наконец, каждый разработчик должен держать копию «Алгоритмов» под рукой.
Практикуйся!
Не получится приготовить яичницу, не разбив яиц. Такие сайты, как HackerRank, CodeWars, CoderByte, TopCoder и LeetCode предлагают тысячи интересных задачек для проверки знаний о структурах данных и алгоритмах. Попытайте счастья в решении приглянувшейся проблемы, выложите свой вариант на Github, а после посмотрите, как к ней подступились другие. Что подводит нас к последнему пункту:
Читай чужой код
Самая большая ошибка, которую только можно сделать идя по пути разработки — совершать этот путь в одиночку. Разработка программного обеспечения — это в значительной степени командная работа. Мы вместе создаём стандарты, вместе делаем ошибки и, наперекор всем неудачам, вместе становимся лучше. Время потраченное на чтение чужого кода окупится сторицей. Только убедитесь, что это хороший код.
Ну а лучший совет, который я могу дать — никогда не стыдитесь, что чего-то пока не знаете. Как уже было сказано, наша отрасль огромна, а количество технологий необъятно. Требуется много времени и усилий, чтобы выстроить общую картину, ещё больше, чтобы стать профессионалом в чём-то конкретном, и на порядок больше, чтобы отточить мастерство в своей области. Я дам вам знать, когда сам добьюсь этого.
Автор: germn