YouIT

Что необходимо минимально знать каждому хорошему программисту?

713   0   1   0 | Добавлено 196 дней назад  

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

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

“Хороший программист это тот программист, который твердо владеет фундаментальными знаниями.”

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

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

Структуры данных и Алгоритмы

Важно понимать принципы построения и работы таких структур данных как Массив (Array), Стек (Stack), Очередь (Queue), Cписок (List), Хеш-таблица (Hashtable), Дерево (Tree), Граф (Graph). Необходимо ориентироваться в различных подвидах перечисленных структур. Например, не помешает знать, что списки существуют односвязные и двусвязные, а графы бывают ориентированные и неориентированные. Также знать когда и какую структуру данных или ее подвид необходимо использовать для самого оптимального выполнения решаемой задачи.

К основным алгоритмам, которые необходимо понимать всем программистам, относятся линейный поиск, бинарный поиск, быстрая сортировка, сортировка слиянием, поиск в глубину и в ширину. Необходимо знать основные битовые операции, уметь писать рекурсивные алгоритмы. Также необходимо понимать Big O нотацию и знать разницу между O(1), O(log n), O(n), O(n квадрат 2).

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

Принципы ООП и ФП

Владение принципами объектно-ориентированного программирования или ООП сложно переоценить. Абстракция, Инкапсуляция, Наследование и Полиморфизм. Четыре принципа которые хороший программист должен уметь легко разъяснить любому встречному человеку (не обязательно техническому) без долгих раздумий и сомнений. Помимо этих принципов, также необходимо понимать разницу между агрегацией и композицией, знать принципы сильного сцепления (High Cohesion) и слабой связанности (Low coupling), а также принцип Модульности (Modularity).

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

SOLID и шаблоны проектирования

Принципы SOLID чрезвычайно важны, так как их знание позволяет значительно сузить количество неправильных способов проектирования программного кода. Аббревиатура SOLID используется для обозначения пяти принципов проектирования программных систем, таких как принцип единой ответственности, принцип открыт/закрыт, принцип подстановки Лисков, принцип разделения интерфейсов и принцип инверсии зависимостей.

Шаблоны проектирования решают ту же проблему, что и принципы SOLID – направляют программиста в правильную сторону при проектировании кода. Из огромного количества существующих шаблонов в первую очередь можно выделить те 23 шаблона, которые были впервые описаны в книге банды четырех. Многие из этих шаблонов повсеместно применяются при разработке ПО. Знание шаблонов как и знание алгоритмов позволяет не изобретать велосипед при написании кода. Также шаблоны дают программистам возможность общаться между собой на “одном языке”. К ключевым шаблонам, которыми точно необходимо владеть, можно отнести следующие:

  • Синглтон
  • Фабричный метод
  • Адаптер
  • Прокси
  • Стратегия
  • Декоратор
  • Фасад

Выводы

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


Похожие статьи

Комментарии (0)

Авторизируйтесь для участия в дискуссии

Google Facebook ВКонтакте
работа программиста качество кода IT-компания обучение программированию карьера собеседование C# сертификация джуниор алгоритмы ООП энтерпрайз .NET тестирование javascript программирование эстимейты roadmaps информатика фан быстродействие базы данных