четверг, 16 июля 2015 г.

Что надо знать начинающему программисту

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

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

1. Вам надо хорошо познакомиться с объектно-ориентированным языком общего назначения - это может быть C++, Java, C#. Само понимание ООП на сегодня важно.
Опять же, вы можете оказаться в команде, которая разрабатывает программу для микроконтроллеров и там (в силу ограничений) можно опуститься до программирования на ассемблере или Си. Но такие случаи крайне редко встречаются. Хотя тоже может быть очень интересно.

2 . Алгоритмы - с ними хорошо бы познакомиться, почитать про них, но в реальной жизни они настолько сильно зависят от предметной области, что лично я рассматриваю их изучение исключительно для тренировки мозгов. Но основные вещи узнать и запомнить придется. На мой взгляд, самыми удачными книгами являются Н. Вирт "Алгоритмы и структуры данных", Томас Х. Кормен "Алгоритмы. Вводный курс" или "Алгоритмы. Построение и анализ". Можно еще посмотреть Роберт Седжвик "Алгоритмя на С++".

3. Базы данных. Обязательно SQL. Остальные - по желанию. Сегодня NoSQL (Not Only SQL) базы данных пробивают себе дорогу, но специфика их применения сильно зависит от задачи. Само собой не только базы данных, но и взаимодейтвие с ними из того языка, который вы выберете для себя. Идеология работы с базами данных из разных языков достаточно похожа, так что поняв суть в одном языке легко переберетесь на другой.

4. HTTP (хорошо понимать TCP/IP). На сегодня без HTTP интернет-разработка для вас закрыта. Вы никогда не поймете сути, если будете пытаться игнорировать знания HTTP.
Классной штукой явяется RFC - Request for Comments - огромный список всевозможных протоколов для обмена информацией в Интернет. Я иногда погружаюсь в чтение списка и почти всегда нахожу достаточно любопытные вещи.

5. Какую-нибудь веб-технологию для какого-то языка. PHP не советую - он легко научит неправильному веб-программированию. Лучше Java или .NET (C#).

6. XML - эту технологию надо очень хорошо понимать, включая XSD, XPath, XSLT, DOM/SAX, Она используется во многих областях.

7. Многопоточность. Причем глубокое и серьезное понимание важности этой области приходит не сразу.

Дальше начинается предметная область (и набор инструментов под конкретную платформу/язык) со своими тараканами и скелетами.
Если вы пишете игры, то для вас может оказаться важным хорошее знание графических систем. Сетевые игры могут потребовать глубокого понимание протоколов передачи данных.
Если вы занимаетесь автоматизацией торговли, построением логистических систем, систем учета, то базы данных, сложные логические построения, которые потребуют систем управления правилами, бизнес-процессами может стать необходимостью.
Если вы сталкиваетесь с интеграцией систем, то вы столкнетесь с веб-сервисами, которые потребуют знание XML и HTTP.
Если вас привлекает интерфейс пользователя в веб, то копайтесь в HTML, CSS, JavaScript, ReST и других специализированных компонентах.

Комментариев нет:

Отправить комментарий