В общем, ситуация такая — я школьник, через год буду студентом. Хочу поступать учиться на программиста, ну и сам пока учусь потихоньку и на курсы хожу. И сейчас читаю про разные направления, пробую всё — пытаюсь понять, чем именно мне нравится больше всего и будучи студентом уже стараться искать работу в конкретной области. Но не хватает некоторой систематизации знаний о направлениях в программировании. Поэтому буду весьма благодарен, если программисты помогут составить более-менее полный список направлений с краткими описаниям. Чтобы сократить область поиска, напишу, о каких областях мне бы хотелось узнать в первую очередь:
1. Встраиваемые системы. Насколько это перспективно? Видел на одном форуме мнение, что embedded в будущем станет менее востребованным, хотя самому мне так не кажется — ведь это и смартфоны, и роботы, и ip камеры и много чего ещё
2. Вирусная аналитика. Совсем недавно это направление попало в моё поле зрения. Хотелось бы просто больше узнать о навыках и знаниях, нужных вирусному аналитику и о том, какие существуют смежные направления.
3. Шифрование, криптография, ЦОС. Насколько практично изучение этих вещей? Я имею ввиду, для того, чтобы работать в крупной компании, а не в каком-нибудь НИИ.
4. Поиск уязвимостей на сайтах (а вообще может быть и, например, в онлайн играх и проч.). В частности, пробую находить XSS, пока ни на одном крупном сайте не нашёл, только на паре не сильно известных сайтов
5. Функциональное программирование. Ну там, Haskell, Erlang. С одной стороны, видел много статей, в которых этот самый хаскель и ФП вообще расхваливались, да и самому мне идеи их нравятся, да только много кто считает, что в теории-то они хороши, но на практике никуда с ними не устроишься. Неужели всё так плохо? И ещё, в каких конкретно направлениях использование ФЯ действительно оправдано?
Вообще интересно ещё низкоуровневое программирование, ковыряние с железом (с паяльником дружу, обжимать умею :)
Сразу оговорюсь, не особо интересна разработка мобильных приложений и фронтенда в вебе. Ну и 1С-ки всякие.
На счёт опыта и навыков:
Python (писал программку для автоматической настройки ip-камеры, сейчас пишу программу ля отправки видео с камеры на сервер, параллельно разбираясь с Django, чтобы писать для этой программы серверную часть)
C++ (ничего готового пока не сделал, сейчас начал писать кейлоггер и простенького сетевого червя — исключительно в (само)образовательных целях, распространять не буду)
Pascal/Delphi (писал программку-переводчик с английского на русский, которая брала слова и их перевод из текстового файла и ещё одну — тест с выбором ответа, берущий вопросы и ответы из текстового файла, спрашивающий у пользователя фамилию и имя, вычисляющий оценку и записывающий в другой файл фамилию, результат и дату — но это давно было, сейчас паскаль как-то подзабросил)
Потихоньку начал учить fasm под Linux, поверхностно знаком с HTML/CSS, очень поверхностно с JavaScript.
Чуть не забыл — интересны в первую очередь свободные технологии — поэтому .NET и Flash, например, не сильно привлекают. Но это не самый важный критерий.
P. S. Изначально хотел попросить более общий список направлений, но так вышло, что в процессе формулирования вопроса пронял, что просить перечислять вообще все направления — слишком нагло, поэтому постарался определить, в направлениях в каких областях мне бы хотелось больше всего узнать.
embedded - это микроконтроллеры, промышленное оборудывание.... такие вот штуки. Смартфоны давно уже не входят в эту категорию. Тут нужно хорошое понимание того как работает железо, Си, ассемблер и все такое прочее. Хороших специалистов в этой области выпускается с каждым годом все меньше и меньше
вирусная аналитика - без понятия, но я так понимаю что вы должен неплохо разбираться в том, как эти самые вирусы писать. Скажем попробуйте написать тестовый вирус с использованием полиморфного кода. Заодно разберетесь как работать с потоком инструкций в рантайме... штука довольно занимательная... но я если честно так и не потиг сей пласт в свое время.
Шифрование, криптография... рано или поздно в любом направлении сталкнетесь хотя бы с базовыми вещами. Как минимум будете слышать всякие штуки типа SHA12, RSA, SSL и т.д. с чем бы вы в итоге не работали (разве что в embedded меньше этого, хотя я не могу точно сказать).
Что до функционального программирования... это парадигма программирования, на ряду с процедурным и объектно-ориентированным. Это как бы не привязано к направлению разработки. Более того, масса языков совмещают в себе все эти парадигмы или дают возможность писать в том стиле, в котором вы хотите (например PHP, Haskel, Pyhon, Java с 8-ой версии вроде как лямбда-вычисления поддерживает)...
Короче... просто занимайтесь тем, что вам интересно. Языки программирования, технологии и т.д. выбираются исходя из задачи, которая кажется вам интересной. Да и перейти из одной области в другую относительно непложно, особенно когда вы еще не обременены заботой о семье и детях.
Ну а хороший специалисты будут востребованы всегда.
На счёт ФП — да, я знаю, что, например, Python поддерживает его, но одно дело, что я могу писать в функциональном стиле свои небольшие проекты, и другое дело, когда я буду устраиваться на работу. Интересно с этой точки зрения — пишут ли реально в чисто функциональном стиле, или используют только отдельные его возможности в гибридных языках.
embedded - это не только промышленное оборудование, но и всяческая бытовуха, от гиковых гаджетов, до вполне себе реально полезных iBeacon или RFID. Спецы в этой области ценятся на рынке выше, чем "простые" ИТ-шники, но и знаний нужно на порядок больше (электроника + ИТ).