Знания и навыки, полезные для каждого программиста

Полезный список, включающий все (или почти все) навыки, полезные программисту.

Фундаментальные знания

Компьютерные науки — это без преувеличения огромная область знаний. Образование в колледже и университете направлено на создание широкой базы знаний, которая в свою очередь даст навыки в в поиске новой для себя информации. Но если мы говорим об информатике, изучая что-то одно, автоматически появляется необходимость в изучении ещё целого ряда вещей. Такой список может расти и шириться до бесконечности, но ориентировочный перечень необходимых знаний и навыков всё-таки существует:

Введение в комбинаторику и оптимизацию.

Хотя бы поверхностное знание теории графов, методов оптимизации, дерева поиска и поиска графов. Перечисление и исчисляемость объектов, метод “звёзд и полос”. Большая часть из списка поможет в совершенствовании основных (уже выработанных) навыков в программировании.

Линейная алгебра.

Свойства матрицы (сложение,  умножение, их  свойства,  коммутативность и ассоциативность), диагонализация матрицы (полезна при вычислении больших матричных величин), базовое понятие о том,  что такое собственный вектор и собственное значение. Сингулярное разложение и его применение в сжатии данных. Для более глубокого понимания пригодится знание в области сложных векторных пространств, Эрмитовой матрицы и Эрмитового оператора.

Статистика и вероятность.

Теорема Байеса, различные модели вероятности и случаи их применения. Цепь Маркова, её отношения с комбинаторикой и некоторыми методами исчисления. Ковариантность и отношения между переменными. Оценивание, интервалы и критерии значимости тоже будут полезны.

Функции и математическая индукция.

Хорошее понимание функций имеет решающее значение, особенно учитывая, что исчисление “большого и малого О” производится с помощью функций. Математическая  индукция помогает осознать, что поиск результата неизбежно будет связан с методом решения “в лоб”.

Сложные алгоритмы.

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

Инструменты.

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

Аппаратное обеспечение.

На сегодняшний день большинство программистов пишет код на персональных компьютерах, даже если этот код предназначен для серверного или виртуального компьютера. Следовательно, неминуемо будут возникать проблемы по части железа и чаще всего придётся устранять их самостоятельно, поскольку от вашей оперативности в данном вопросе может зависеть судьба всего проекта. Важно понимать, что неполадка может быть вызвана сбоем не в программе, а как раз таки в аппаратной части. К примеру, своевременное обновление оперативной памяти может значительно ускорить процесс разработки и выполнения алгоритма программы. Оборотная сторона медали: теперь все ваши родственники и знакомые будут обращаться к вам в случае возникновения любых проблем с компьютером :)

Личностные качества / навыки:

Коммуникабельность.

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

Навык устойчивости к состоянию неудовлетворенности и разочарования.

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

Наличие чувства юмора.

Если к работе относиться немного проще, она станет проще. Чувство юмора можно поставить на один уровень с чувством ответственности. Одно не должно мешать другому, пускай юмор и ответственность дополняют друг друга.

Другие статьи по теме

Эффективное самообучение в IT-сфере. Что мы делаем не так?

Что должен знать программист без профильного образования

Перевод: Дарья Шевелева

Источник

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик С#
от 200000 RUB до 400000 RUB
Senior Java Developer
Москва, по итогам собеседования
Java Team Lead
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ