Pull to refresh

Из чего состоит «абстрактный разработчик»?

Reading time 4 min
Views 3.6K
Эта статья является результатом моих умозаключений в процессе самообразования по профессии — программист, разработчик. Два понятия близки по значению, но всё же разработчик это более высокий уровень, это человек умеющий принимать стратегические решения, как правило на начальном этапе создания программного продукта. А программист выступает в роли исполнителя, работает на тактическом уровне в решении поставленных задач. Самый нижний уровень — кодер, человек просто пишущий исходный.

Представим себе некоего «абстрактного» разработчика/программиста который создаёт программный продукт. Будем рассматривать его не как живого человека, а как некоторое облако знаний, накопившихся в его голове за годы работы. Наш абстрактный программист — профессионал практически во всех областях, это наш идеал к которому нужно стремиться. Недостижимый идеал! Но как сформировать облако знаний в своей голове? В каком порядке эти знания должны поступать? Как эти знания классифицировать?

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

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

  • Algoritm — алгоритмы и структуры данных. Математические методы работы с информацией в целом, методы поиска и обработки данных;
  • Bugtrack — системы контроля (отслеживания) ошибок и постановки задач. Да, когда программа уже готова и ВНЕЗАПНО в ней появляться баги, нужно уметь это зафиксировать и сосздать задачу на решение проблемы. Существуют как теоретические методики, так и конкретные программные продукты, которыми нужно уметь пользоваться;
  • Database — базы данных. Здесь описываются как теоретические основы баз данных, так и конкретные программные продукты и языки запросов для работы с базами данных;
  • Encryption — компьютерная безопасность, шифрование. Довольно широкий раздел посвящённый методам защиты програмного обеспечения, шифрования важных данных. Ведь информационная безопасность начинается с написания надёжных программ;
  • Environment — интегрированная среда разработки (IDE). Здесь рассматриваются различные рабочие среды разработки в которых собственно и создаётся программный код. Богатство возможностей некотрых из них настолько широки, что написаны целые книги по работе с ними;
  • Format — форматы файлов. Нужно понимать, что программы во многих случаях в работают с файлами на компьютере. Разные файлы хранятся на диске по-разному и часто нужно знать структуру определённого формата файла, чтобы задать программе инструкции по работе с ним. Этой категории делятся мало внимания авторами книг;
  • Graphics — графика. Я сомневался, выносить это понятие в отдельную категорию или нет. Вопрос очень весомый так как визуальное восприятие преобладает над другими органами чувств. Сюда входят методики отрисовки изображений на экране монитора;
  • Language — язык программирование. Всё многообразие существующих языков, независимо от парадигмы программирования. Для многих язык программирования является отправной точкой в выборе специализации;
  • Library — библиотеки и фреймворки. Сюда входят все «полуфабрикаты», которые любят использовать программисты для приготовления своих блюд. Полезность их использование очевидна, а сложность и многообразие возрастают год за годом;
  • Pattern — шаблоны проектирования. Описание различных подходов и практик в написании программ. Рассматриваются разнообразные парадигмы программирования, часто не привязанные к чему-то конкретному, но опираясь на семейства языков программирования;
  • Platform — аппаратная платформа. Некоторым разработчикам никогда не понадобиться опускаться на столь «низкий» уровень. В других же случаях, например при разработке для микроконтроллеров, без знания железа — никуда. В системном программировании, тоже иногда нужно понимать как взаимодействует железо с софтом;
  • Protocol — протокол передачи данных. Сети и Интернет прочно вошли в нашу жизнь. Многие программы используют разнообразные механизмы передачи данных между компьютерами. Одни программисты учатся грамотно использовать существующие механизмы удалённого взаимодействия, другие разрабатывают свои протоколы передачи данных;
  • Regular — регулярные выражения. Различные «фокусы» и трюки в обработке данных. Оригинальные методы в решении неких задач;
  • System — операционная система. Всю что нужно знать при написании программ под определённую ОС. Обращаясь к API, программа должна каким-то образом взаимодействовать со средой в которой она выполняется;
  • Testing — тестирование. Завершающий этап в цикле разработки программного обеспечения. Создание методики тестирования и выявление недопустимых багов до официального выпуска программного продукта позволит избежать проблем в будущем;
  • Version — системы контроля версий. Для многих программирование, это работа не на окончательный результат, а это процесс, процесс вечный. Программист в одиночку или группой развивает программный продукт, пробует разные фичи, экспериментирует — всё это относительно безопасно, ведь в случае чего система контроля версий позволит вернуть всё как было.

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

UPDATE Решил добавить ещё две категории в свою классификацию знаний программиста. Итак:

  • Server — серверные и облачные технологии. Сюда входит вся область знаний касаемо серверов в программном плане, а также навыки использования «облаков» в своих работах, также имеется ввиду новый тренд — SaaS;
  • Virtual — технологии виртуализации. Хотя инструментов создания виртуальных машин не так уж много, но в некоторых случаях ими полезно уметь пользоваться, например, для тестирования в виртуальной машине своих программ для разных ОС;
Tags:
Hubs:
-3
Comments 26
Comments Comments 26

Articles