Что нужно, чтобы стать хорошим программистом?
Программирование?
Программирование имеет различные определения. Проще говоря, это процесс перевода некоторой логики в машиночитаемый вид. За прошедшие годы он сильно изменился: сначала вам нужно было написать 100 строк кода для выполнения простейших операций, а теперь даже некоторые сложные операции можно объединить в несколько строк кода. Время, необходимое программисту, чтобы что-то сделать, с годами резко сократилось. Сообщества программистов по всему миру все еще проделывают большую работу, чтобы уменьшить усилия, которые должен приложить конечный программист, чтобы заставить что-то работать.
Библиотечные функции
Это, конечно, очень хорошо. Всякий раз, когда я хочу отсортировать список элементов, мне не нужно искать подходящий алгоритм сортировки и реализовывать его на моем языке. Я могу просто вызвать уже существующую функцию сортировки, которая выбрала наиболее эффективную реализацию, которую можно реализовать на этом конкретном языке. Это экономит много времени с моей стороны и помогает уменьшить избыточность кода.
Современные языки, такие как Python, позволяют каждому загружать свои собственные библиотеки, поэтому у нас нет существующих библиотек и функций почти для всех регулярно используемых логик в программировании. Таким образом, я могу потратить большую часть своего времени на поиск лучшего решения моей проблемы, а не ломать голову над тем, как реализовать ту же логику в виде кода.
Замечательно. Но…
Хотя у этих библиотек много преимуществ, есть и огромная проблема, вызванная этим. Мы создаем поколение программистов, у которых меньше концептуальных знаний, которые в основном делают вещи, используя эти библиотеки и фреймворки, не зная точно, как код работает внутри. Их главная забота — заставить вещи работать, а не знать, как именно они работают. Мы хотим сократить время, затрачиваемое на выполнение чего-то, что нам не важно, как оно делает то, что делает.
Почему это проблема?
Человек становится успешным программистом, придумывая быстрые, эффективные и масштабируемые решения проблемы, которую он пытается решить. И вы можете продолжать оптимизировать свое решение, только если знаете, что происходит внутри. Например, когда вы просматриваете онлайн-руководства по машинному обучению, большинство руководств сосредоточено на том, как концепция может быть реализована на языке, а не на том, как эта концепция работает внутри. Две строки кода Python, которые создают модель машинного обучения с использованием дерева решений, не имеют значения. Что имеет значение, так это концепция того, что такое дерево решений и какие сценарии для него подходят.
Ваш навык заключается не в том, чтобы написать эти две строчки кода, а в том, чтобы найти правильный подход к проблеме и найти хорошее решение. И для этого вам понадобится хорошее понимание концепций, а не просто опыт их реализации. Через некоторое время, если в данных произойдут какие-то изменения, а результаты будут не такими точными, как раньше, вам нужно будет изучить это изменение и определить, какое изменение в данных вызвало эту проблему, и вы сможете исправить правильный параметр, чтобы получить результаты снова в норме.
Вывод
Чтобы иметь возможность поддерживать себя в этом конкурентном мире, если вы хотите выделиться из толпы, пришло время задать себе вопрос о том, над чем вы работаете. Задайте себе самые основные вопросы о концепции и посмотрите, сможете ли вы объяснить ее должным образом, как вы объяснили бы пятилетнему ребенку. Если вы можете сделать это убедительно, то Вуаля!! Вы уже отличный программист.