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

Я начал свой путь около 5 лет назад с C ++ в единственном курсе программирования, который я прошел на 300-м уровне бакалавриата по электротехнике и электронике в Университете Ковенант, Нигерия. После этого курса я перешел в веб-разработку, изучая JavaScript, CSS и HTML, я всегда был любопытным человеком, поэтому я начал изучать программирование на стороне сервера с использованием PHP и MySQL. Чтобы не отставать от технического сообщества, я изучил фреймворки и собрал стек, который использовал в первую очередь. В тот момент я почувствовал, что у меня есть основной стек MongoDB, Express, Angular и Nodejs, который я использовал для создания веб-приложений, и я почувствовал, что пришло время подать заявку на работу.

Мое первое собеседование

Ко мне обратилась компания, и мне прислали задание по кодированию, которое нужно выполнить за 48 часов. Я ожидал увидеть вопрос типа «Создать RESTful API …… ..?» Но, к своему удивлению, я увидел вопрос о структуре данных двоичного дерева, о котором я тогда не знал, поэтому решил пропустить его.

Второй вопрос касался написания алгоритма (сортировка, поиск), мне нравится думать, что я очень умен, поэтому я подумал о способе решения этой проблемы и написал код, который прошел все тесты за несколько часов (я чувствовал себя зверьком 💪🏽). Третий вопрос заключался в том, чтобы на самом деле создать часть приложения с использованием ES5 ООП, которую я знал, поэтому я быстро ее запустил и представил задачу.

Через несколько дней я получил онлайн-интервью и почувствовал себя свежим горячим хлебом, который кто-то хотел купить. Интервьюер (старший инженер компании) сидел со мной, чтобы обсудить мой запрос кода. Даже не увидев моего резюме, он сказал: «Ты самоучка, да?» Я ответил, и мы начали. Он начал с моего проекта ООП и сказал мне, что я не придерживаюсь ни одного из принципов проектирования SOLID (я даже не знал, что это было), все быстро стало для меня реальностью. Затем он обратился к моему алгоритму и сказал, что временная сложность экспоненциальна, но легко может быть «log n» (что, черт возьми, такое временная сложность?). Теперь он понял, почему я не коснулся двоичного дерева, и я сказал: «Я использую JavaScript, но двоичные деревья написаны на Java и C» (я провел неубедительный поиск в Интернете и увидел, что большинство примеров были на Java с использованием ключевое слово «Class», поэтому я пришел к выводу, что это не было в JavaScript), он засмеялся и закончил интервью. Я был сломлен.

Мое возрождение

Я взял себя в руки после нескольких дней сомнений, что знаю что-либо, и начал исследовать то, о чем он говорил. Именно тогда я посмотрел лекцию профессора Эрика Гримсона в Массачусетском технологическом институте 6.0001 об эффективности программ. Я наконец нашел временную сложность и нотацию большого O, я начал курс с самого начала и изучал Python по пути, решая их наборы задач. Только на этом основании я изучил рекурсию (Ханойские башни и т. Д.), Алгоритмы поиска и сортировки (слияние, пузырь, деление пополам и т. Д.) И понимание эффективности. Я обнаружил кое-что из того, чего мне не хватало, поэтому я продолжил и прошел CS50 Гарварда с замечательным Дэвидом Маланом, который так хорошо все объяснил. Я добавил понимание того, как код, который я пишу, компилируется в машинный код, структуры данных и взял программирование на C в процессе.

Так я познакомился с тем, чему меня учили студенты, изучающие информатику во время учебы в университете, поэтому я пошел дальше самостоятельно, чтобы узнать больше. Это привело меня к осознанию того, что если вы понимаете, как язык программирования компилирует ваш код и его синтаксис, то изучение нового языка программирования вовсе не является сложной задачей, а изучение нескольких языков для написания одного и того же некачественного и неэффективного кода не делает ты лучше.

Вы можете думать, что ваша программа по-прежнему работает так, как вы ее пишете, и это потому, что компьютеры стали быстрее, но поверьте мне, эти миллисекунды складываются, когда вы начинаете иметь дело с быстро растущим объемом данных.

Заключительные слова

Если бы я мог вернуться к началу, я бы начал с понимания принципов CS и способности мыслить с помощью вычислений, прежде чем изучать какой-либо язык.

Если вы собираетесь поступить в университет и ваша мечта стать инженером-программистом, пожалуйста, изучайте компьютерные науки, не позволяйте никому говорить вам: «Область слишком узкая, изучайте инженерное дело, тогда вы переключитесь на информатику в магистратуре». ложь, о которой вы можете пожалеть. Если вы уже прошли это и уже разрабатываете приложения, пожалуйста, изучите принципы CS, все станет намного понятнее