Что следует знать каждому разработчику

И стоит ли возводить в абсолют.
29 августа 2016150479Юлия Фролова4406225

Есть ли какой-то универсальный набор знаний, который необходим каждому? Посмотрим, как опытные разработчики отвечают на провокационный вопрос: «Что должен знать каждый программист?»

Алексей Хворост, менеджер разработки СКБ Контур:

Если отвечать прямо на поставленный вопрос, то ответ простой: ничего (неизвестно, какие навыки тебе пригодятся завтра).
Более правильная формулировка вопроса: что должен уметь каждый программист?
И на этот вопрос можно ответить более конструктивно:

  1. Уметь думать, выстраивать логическую цепочку рассуждений. Это действительно важно, мы выстраиваем стратегию поиска сотрудников от этой позиции.
  2. Иметь открытую жизненную позицию: быть открытым к новому, к изменениям.
  3. Расширять кругозор. Это можно проиллюстрировать так: хорошим программистом можно было быть вчера, сегодня надо потрудиться, чтобы им стать.

Андрей Баканов, руководитель отдела разработки MS CRM в ИТ-компании Navicon:

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

Устройство и принципы работы операционной системы
Любым прикладным приложением управляет операционная система. Она предоставляет основные ресурсы для его работы: и процессорное время, и управление памятью, и возможности для работы с потоками и примитивы их синхронизации. На основе прав доступа приложение может получить доступ к возможностям операционной системы, а не наоборот. Поэтому знания об операционной системе — база, без которой я не позволяю стажерам браться за реализацию прикладных проектов.

Знания о структурах данных и базовых алгоритмах
Сюда входят сортировки и поиски, списки, связанные списки, деревья. Если вы пользуетесь списком или стеком, но при этом не понимаете, как он работает, вы не можете быть доподлинно уверены, что используете верный алгоритм. А вот полноценное осознание смысла каждого вашего интуитивного действия поможет без труда писать эффективные алгоритмы на любом языке программирования.

Глубокие знания о сетевой инфраструктуре
Как компьютер может взаимодействовать с другими компьютерами? Что такое сетевой протокол? Как устроены наиболее часто используемые протоколы? Чем отличается транспортный протокол от прикладного? Что такое «порты» и какую функцию они выполняют? 

Основные подходы к разработке настольных и веб-приложений и различия между ними (в исполнении и требованиях к ресурсам) 
Каждый разработчик должен уметь их перечислить даже в ночи: книги Банды Четырех и Мартина Фаулера — настольные руководства, друзья и товарищи. Знание основ проектирования приложений, паттернов и антипаттернов позволяет заложить расширяемые каркас приложения и необходимую гибкость в изменении или добавлении новых функций.

Понимание принципов и видов тестирования
Это обязательный этап, когда из приложения появляется продукт, относительно которого нельзя уверенно сказать, какие элементы работают при каких условиях. Знание способов выявления дефектов, принципов и правил использования юнит-тестирования, интеграционного тестирования позволит писать приложения с необходимым качеством и всегда иметь ответ на вопрос «Готов ли продукт к релизу?»

Только владея всеми перечисленными знаниями, можно браться за сложные задачи, причем уже независимо от используемого языка программирования.

Пётр Щегольсков, ведущий программист, кадровый портал Rjob.ru:

Объектно-ориентированное программирование (ООП)
Большинство современных языков используют парадигму ООП и ее принципы: наследование, инкапсуляция и полиморфизм.

Шаблоны проектирования
В программировании часто приходится решать однотипные задачи, и знание шаблонов сильно сокращает затраты времени на их разработку. К тому же не приходится изобретать очередной велосипед.

Реляционные и нереляционные (NoSQL) базы данных
Любой проект так или иначе работает с базами данных. 

Системы контроля версий GIT, SVN и т.д. 
Если программист работает в команде, а это почти всегда так и происходит, без этих инструментов ему не обойтись.

Стандарты кодирования
Например, PSR. Код читает не только машина, но и человек. Любой программист, который будет работать с кодом потом, сможет в нем быстро и легко разобраться.

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

Технический английский
Все языки программирования, кроме 1С, используют только латинский шрифт для написания кода, а значит, именовать переменные, функции и классы следует только на английском языке. Кроме того, это позволит читать англоязычные мануалы и статьи и быть в курсе последних мировых трендов и технологий. 

Олег Лекшин, ведущий инженер-консультант компании ИВК:

Очень важно уметь автоматизировать процесс разработки — уверенно пользоваться системами контроля версий, средствами автоматизированного тестирования, средствами сборки. Прочитать про «continuous integration в Wikipedia» — тоже неплохо.  

 

Популярные статьи

Новые комментарии