Завышение квалификации в резюме — распространённая практика. Многие устраиваются на работу программистами, не имея практического опыта. Однако, активный вклад в Open Source проекты свидетельствует о реальных навыках. Вопрос о том, когда человек становится программистом, сложен. Можно считать, что это происходит, когда его программы используются другими людьми. В любом случае, программист — это человек, владеющий необходимым инструментарием и компетенцией.
Что значит быть программистом?
Сегодня создать приложение, игру или сайт можно и без глубоких знаний программирования. Однако, такие программы часто уязвимы и плохо масштабируемы. Это объясняет, почему простого написания кода недостаточно. Пример: разработчик, допустивший утечку пользовательских данных из-за ошибки в коде, не может считаться настоящим программистом, если он не умеет работать с базами данных и не обеспечил защиту от SQL-инъекций, храня данные в незашифрованном виде.
Базовые знания для профессионала
Уровень 1: Базовая информатика: измерение информации, системы счисления (двоичная и шестнадцатеричная), комбинаторика, векторная алгебра. Математика — фундаментальная база.
Уровень 2: Знание хотя бы одного языка программирования. No-code решения ограничены и негибки.
Уровень 3: Работа с сетью и понимание принципов работы интернета. Необходимо уметь деплоить проекты на удалённые серверы. Профессионалы обычно знают несколько языков программирования, каждый из которых подходит для решения специфических задач (например, JavaScript для web-разработки, Python для Data Science и Machine Learning). В качестве первого языка рекомендуется язык со статической типизацией и компиляцией (Java или C++), хотя можно начать с любого.
Уровень 4: Продвинутые знания ПК: работа компьютера на всех уровнях (от процессора до переустановки ОС), виртуализация, системные вызовы. Программа компилируется или интерпретируется в машинный код (нули и единицы), исполняется операционной системой, которая выделяет виртуальную память.
Уровень 5: Работа в терминале. Это эффективный способ взаимодействия с компьютером, особенно для низкоуровневых задач. Навыки навигации по директориям, открытия файлов в текстовом редакторе (Vim или Nano), использования команд wget и grep.
Дополнительные навыки
Второй язык программирования: Желательно, чтобы он отличался от первого, расширяя понимание различных парадигм программирования (объектно-ориентированное и функциональное). Для глубокого понимания функциональной парадигмы рекомендуется Lisp или Haskell.
Стиль кода: Важно соблюдать стиль кода для удобства других разработчиков.
Написание тестов: Тестирование экономит время и предотвращает ошибки.
Чтение чужого кода: Понимание качественного и читаемого кода.
Алгоритмы и структуры данных: Понимание работы алгоритмов и структур данных (массивы, стеки, очереди) критически важно.
Основы Computer Science: Глубокое изучение алгоритмов, структур данных (деревья, сортировки) и других тем после написания нескольких программ.
Гуглинг: Эффективный поиск информации.
Слепая печать: Ускоряет работу.
Git: Система контроля версий.
IDE: Знание сред разработки (VS Code, Brackets и др.).
Путь программиста — постоянное обучение. Важно не только писать код, но и понимать его работу на всех уровнях. Сочетание базовых знаний, практических навыков и умения учиться — залог успеха.