Есть ли какой-то универсальный набор знаний, который необходим каждому? Посмотрим, как опытные разработчики отвечают на провокационный вопрос: «Что должен знать каждый программист?»
Алексей Хворост, менеджер разработки СКБ Контур:
Если отвечать прямо на поставленный вопрос, то ответ простой: ничего (неизвестно, какие навыки тебе пригодятся завтра).
Более правильная формулировка вопроса: что должен уметь каждый программист?
И на этот вопрос можно ответить более конструктивно:
- Уметь думать, выстраивать логическую цепочку рассуждений. Это действительно важно, мы выстраиваем стратегию поиска сотрудников от этой позиции.
- Иметь открытую жизненную позицию: быть открытым к новому, к изменениям.
- Расширять кругозор. Это можно проиллюстрировать так: хорошим программистом можно было быть вчера, сегодня надо потрудиться, чтобы им стать.
Андрей Баканов, руководитель отдела разработки MS CRM в ИТ-компании Navicon:
Часто мне приходится сталкиваться с тем, что новички, набравшись поверхностных знаний и считая себя при этом способными без особых трудностей разработать приложение, надолго погружаются в решение первой же вставшей перед ними проблемы. Такая излишняя самоуверенность может затормозить работу всей команды. И следует из отсутствия базовых и фундаментальных знаний для разработчика:
Устройство и принципы работы операционной системы
Любым прикладным приложением управляет операционная система. Она предоставляет основные ресурсы для его работы: и процессорное время, и управление памятью, и возможности для работы с потоками и примитивы их синхронизации. На основе прав доступа приложение может получить доступ к возможностям операционной системы, а не наоборот. Поэтому знания об операционной системе — база, без которой я не позволяю стажерам браться за реализацию прикладных проектов.
Знания о структурах данных и базовых алгоритмах
Сюда входят сортировки и поиски, списки, связанные списки, деревья. Если вы пользуетесь списком или стеком, но при этом не понимаете, как он работает, вы не можете быть доподлинно уверены, что используете верный алгоритм. А вот полноценное осознание смысла каждого вашего интуитивного действия поможет без труда писать эффективные алгоритмы на любом языке программирования.
Глубокие знания о сетевой инфраструктуре
Как компьютер может взаимодействовать с другими компьютерами? Что такое сетевой протокол? Как устроены наиболее часто используемые протоколы? Чем отличается транспортный протокол от прикладного? Что такое «порты» и какую функцию они выполняют?
Основные подходы к разработке настольных и веб-приложений и различия между ними (в исполнении и требованиях к ресурсам)
Каждый разработчик должен уметь их перечислить даже в ночи: книги Банды Четырех и Мартина Фаулера — настольные руководства, друзья и товарищи. Знание основ проектирования приложений, паттернов и антипаттернов позволяет заложить расширяемые каркас приложения и необходимую гибкость в изменении или добавлении новых функций.
Понимание принципов и видов тестирования
Это обязательный этап, когда из приложения появляется продукт, относительно которого нельзя уверенно сказать, какие элементы работают при каких условиях. Знание способов выявления дефектов, принципов и правил использования юнит-тестирования, интеграционного тестирования позволит писать приложения с необходимым качеством и всегда иметь ответ на вопрос «Готов ли продукт к релизу?»
Только владея всеми перечисленными знаниями, можно браться за сложные задачи, причем уже независимо от используемого языка программирования.
Пётр Щегольсков, ведущий программист, кадровый портал Rjob.ru:
Объектно-ориентированное программирование (ООП)
Большинство современных языков используют парадигму ООП и ее принципы: наследование, инкапсуляция и полиморфизм.
Шаблоны проектирования
В программировании часто приходится решать однотипные задачи, и знание шаблонов сильно сокращает затраты времени на их разработку. К тому же не приходится изобретать очередной велосипед.
Реляционные и нереляционные (NoSQL) базы данных
Любой проект так или иначе работает с базами данных.
Системы контроля версий GIT, SVN и т.д.
Если программист работает в команде, а это почти всегда так и происходит, без этих инструментов ему не обойтись.
Стандарты кодирования
Например, PSR. Код читает не только машина, но и человек. Любой программист, который будет работать с кодом потом, сможет в нем быстро и легко разобраться.
Несколько языков программирования
Это нужно и для расширения кругозора, и для выбора оптимального инструмента решения задачи. Идеальный вариант — досконально овладеть одним языком, а с остальными — лишь ознакомиться, узнать их ключевые особенности и сферы применения.
Технический английский
Все языки программирования, кроме 1С, используют только латинский шрифт для написания кода, а значит, именовать переменные, функции и классы следует только на английском языке. Кроме того, это позволит читать англоязычные мануалы и статьи и быть в курсе последних мировых трендов и технологий.
Олег Лекшин, ведущий инженер-консультант компании ИВК:
Очень важно уметь автоматизировать процесс разработки — уверенно пользоваться системами контроля версий, средствами автоматизированного тестирования, средствами сборки. Прочитать про «continuous integration в Wikipedia» — тоже неплохо.
Если понравилась статья, ставьте лайк и подписывайтесь на канал.
Почитайте похожие материалы:
Pac-Man: я дошел до 130 тысяч скачиваний и меня забанили
Как новичку попасть в компанию мечты
Crap! Какой язык программирования заставляет ругаться чаще?
Зачем IT-специалисту личный бренд?
Как построить личный бренд IT-специалисту
Если вы хотите почитать статьи и материалы в нашем блоге, переходите на наш сайт.