Какие программы нужно знать программисту. Быть на «ты» с компьютером

23.05.2019

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

Быть на «ты» с компьютером

Это самый простой и базовый навык, присущий каждому программисту. Он предусматривает живой интерес к компьютерным технологиям, который уже, в свою очередь, порождает те или иные вопросы у будущего специалиста: для начала - как поставить «винду»? Как найти и взломать модную игрушку? А что такое BIOS, хостинг, ядро системы, ООП? – и понеслось...

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

К чему все это? А к тому, что мир информационных технологий – это мир игрушек, с которыми должно хотеться играть. Именно с интереса к этим «игрушкам» все и начинается. Если его нет, нет и программиста.

Английский

Без английского не обойтись. Чтобы выучить язык программирования, продется перелопатить много литературы, видео-уроков и документации. Почти все (99%) первоисточники написаны на английском языке. Если его не знать, то спектр материалов для изучения сузиться в разы. Соответственно скорость изучения языка программирования значительно снизиться.

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

Разговорный уровень, понимание английского на слух – это дополнительные бонусы. Под словосочетанием «знать английский язык» иметься в виду знать так называемый «технический английский язык». То есть нужно понимать специализированные статьи и документацию, а это далеко не то же самое, что «живое» общение с иностранцами.

Математика

Математика – вопрос не столь однозначный, как изучение английского. Точнее будет сказать, что логическое и абстрактное мышление должны быть на довольно высоком уровне. Математика в ВУЗе или в школе развивает упомянутые навыки, поэтому математическое образование – это большой плюс. Но тем не менее есть множество программистов, которые не имеют математического образования. Есть даже такие, которые не имеют высшего образования вообще. Это говорит о том, что логику и абстрактное мышление можно выработать не только математическими конструкциями.

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

Общительность

Общительность – одно из ключевых свойств хорошего программиста. Дело в том, что большинство серьезных проектов пишется в команде - это и удобнее, и быстрее. Если хотите работать на более-менее серьезную «контору», с людьми нужно уметь общаться, договариваться, дискутировать и соглашаться. Также нужно будет уметь ладить с начальством, которое иногда будет разбираться в программировании лучше вас, а иногда не будет понимать в этом деле вообще ничего.

Есть некий миф, мол, отшельничество и замкнутость – это неотъемлемая часть натуры программиста. В большинстве своем программисты весьма интересные и коммуникабельные люди. А отшельничество – это некий образ присущий всем гениям независимо от профессии, будь-то программист, лингвист, доктор и т. д.

Гибкий ум

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

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

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

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

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

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

Люди, которые задумываются о том, должны понять, что основных знаний самого языка будет не совсем достаточно. Для получения хорошей работы и достойной оплаты необходимо разбираться в ООП, которое используется в написании популярных фреймворков и CMS. Работы с - следующий этап того, что нужно знать программисту PHP.

В настоящее время будет достаточно ознакомиться с работой самой распространенной из баз данных - MySQL. Настоящий специалист также вряд ли сможет обойтись без языков верстки HTML и CSS. Несмотря на то, что PHP - это язык сервера, он связан именно со сборкой веб-старниц, написанных на HTML. Также понадобится и знание синтаксиса JavaScript и понимание работы распространенных фреймворков - JQuery или ExtJS. Сейчас несложно осваивать все эти современные инструменты с помощью многочисленных блогов и онлайн-курсов.

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

Как стать программистом? Что нужно выучить? Ответ вроде прост: пойти в университет и там тебя научат. Но если вы спросите любого программиста он скажет что то чему там обучают, хоть иногда даже и бывает интересно, но почти бесполезно и совсем мало имеет общего с реальной работой.

Программирование - это что-то вроде грамоты

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

Эти операторы - как буквы алфавита, а функции ввода/вывода Read () и Write () - как первые слова, «мама» и «папа», с которых ребенок начинает постигать мир.

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

У писателей все намно-о-о-го проще. У них даже, наоборот, приветствуется, когда у автора - свой стиль, а сюжет - запутанный и непредсказуемый.

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

Но есть одно существенное отличие: сценаристы уже не могут переписать сюжет снятой серии. В лучшем случае, если зритель что-то недопонял, они прояснят это в следующей серии.

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

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

Я встречал ребят, которые заучили программирование, даже какие-то книжки из этой области прочли и принялись искать работу, но при этом не написали ни одной своей программы. Вы можете себе представить писателя, который, едва освоив грамоту и не написав ни одного рассказа, уже хочет устроиться в редакцию? Он вообще даже не знает, понравится ли ему это занятие и сможет ли он достигнуть успеха, но уже подсчитывает зарплату! Тем не менее, многие такие горе-программисты все же находят себе работу. Выполняют они ее скверно, но всегда существует круг таких задач, где высокое качество не так уж и важно.

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

Оk, если программирование - это «как грамота», то что тогда еще нужно знать и уметь, чтобы стать «писателем»?

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

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

Все это выходит за рамки самого программирования и, по-хорошему, нуждается в каком-то своем, отдельном термине. Лично я для большей ясности называю «программерией» - это как Программная инженерия , но более широкий термин, охватывающий важное для нас: процессы разработки; умение программировать свой мозг, чтобы, например, «входить в поток»; умение работать в команде или составлять резюме - в общем, всё, чем мы занимаемся.

Основы программерии

Мне очень повезло, потому что я почти сразу же, как только увлекся программированием, прочел потрясающую книгу - «Совершенный Код» . Она меня поразила тем, что это была не книга о каком-нибудь языке программирования или о технологии, как все то, что мне попадалось ранее, а книга о самом Программировании как таковом. Это, наверное, первая книга, которая попыталась заполнить пробелы, остающиеся после прочтения учебников по алгоритмам, технических руководств и документации.

И она сразу же начинается с метафор которые помогают точнее передать суть нашей работы. Вы уже узнали о Литературной метафоре, когда программирование сравнивается с писательством, но есть ещё популярная метафора сравнивающая программирование со строительством домов , или даже созданием самолётов.

Неслучайно она победила, в опросе «Если бы вы могли вернуться в прошлое, когда были еще начинающим девелопером, то какую книгу по программированию вы посоветовали бы себе прочитать?».

Затем появились другие хорошие книги о программерии:

И множество других достойных, но в целом они охватывают глубже определённые области.

По сути, вся эта алхимия программирования на самом деле состоит из таких вещей с которыми мы работаем постоянно и нужно понимать:

  • Основы компьютерной техники: основы Булевой алгебры, двоичная и шестнадцатирядная системы счисления.
  • Устройство компьютера: процессор, оперативная память, стек, жесткий диск, графическая карта, шина, периферия (т. е. клавиатура, мышь).
  • Ассемблер процессора и С - их тоже нужно знать хотя бы немного.
  • Собственно базовая грамота: синтаксис, как объявлять переменную, функцию, как писать условный оператор if, приоритет операторов, как организовать цикл, как получить ввод от пользователя и как ему вывести. Структурное программирование - как писать без goto, используя циклы и рекурсию. Это легкотня на самом деле, пятнадцать операторов выучиваются быстро. Почти все используемые сегодня языки программирования наследуются от С (C++, Java, C#, PHP, JavaScript), так что переучивать их не придется. Поэтому, кстати, не особо важно, с какого из этих языков вы начнете обучение.
  • Алгоритмизация: линейный поиск перебором, бинарный поиск, пузырьковая сортировка, быстрая сортировка и т. д. Оценка сложности алгоритмов.
  • Структуры данных: строки, очередь, стек, одно- и двусвязный список, массивы и т. д.
  • Декомпозиция, абстракция и проектирование программы: объектно-ориентированное программирование, SOLID, шаблоны проектирования, UML-диаграммы.
  • Основы функционального программирования: как писать без деструктивного присваивания и циклов, работа с коллекциями в функциональном стиле.
  • Знание платформы, библиотек, технологий: Java Core, работа с файлами, работа с Сетью, работа с массивами, строками и коллекциями, работа с памятью и сборка мусора. Обо всем этом есть толстые книги от самих создателей технологии (например, «Эффективная Java»).
  • Стандарты и протоколы сети: TCP, UDP, HTTP, HTML, XML, JSON, MIME, RFC.
  • Умение писать чистый код: как правильно называть переменные и классы, как форматировать код, как правильно писать комментарии (точнее, как их не писать:-)). Понимание приходит после прочтения книги Clean Code.
  • Умение работать с кодом: рефакторинг (книга Фаулера), хоткеи IDE для рефакторинга, умение читать и сопровождать старый код.
  • Инженерные практики: юнит-тесты, экстремальное программирование (XP), непрерывная интеграция, системы управления версиями (Git, SVN).
  • Управление проектом и организация процесса: Waterfall, Agile, SCRUM, Kanban, баг-трекеры, оценка времени на задачу.
  • Soft skills: умение общаться с заказчиком и ладить в команде, побороть отсутствие мотивации, выбрать приоритеты.
  • Базы данных: SQL, реляционные, документо- и граф-ориентированные БД, ACID, теорема CAP, оптимизация запросов.
  • Операционные системы: Linux, установка и настройка программ на нем, командная строка.
  • Масштабирование и высокие нагрузки, мониторинг, логинг, отказоустойчивость.
  • Криптография, защита от атак.
  • Юзабилити, сбор требований.
  • Знание английского языка, умение четко и лаконично писать документацию.
  • Умение правильно формулировать вопросы и самостоятельно находить ответы на них.
  • Умение учиться и при этом постоянно самосовершенствоваться.
  • Умение обучать других, понятно объяснять и даже выступать перед публикой на конференциях…
  • и при этом не слетать с катушек.

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

Думается, что любого начинающего программиста интересуют ответы на следующие вопросы:

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

Ответам на эти и некоторые другие вопросы как раз и посвящен данный пункт нашего учебника. Итак.

Программирование (от англ. programming ) – это процесс создания компьютерных программ.

Для того, чтобы иметь возможность общаться с компьютером и создавать программы, нужно знать один или несколько языков программирования. Благодаря языкам программирования человек получает возможность писать программы и ставить перед компьютером конкретные задачи, которые тот впоследствии решает в соответствии с заданными условиями.

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

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

Понятное дело, у всех людей данные качества и возможности развиты по-разному. Поэтому однозначно ответить на вопрос, сложно ли стать хорошим программистом, довольно затруднительно. Кто-то сможет без проблем освоить программирование самостоятельно не выходя из дома, а кто-то без посторонней помощи вообще не сможет начать процесс обучения даже при наличии всех учебников. В любом случае нужно помнить, что хорошими программистами не рождаются - ими становятся. При этом не нужно думать, что стать лучшим программистом - это значит с отличием окончить соответствующий ВУЗ. Есть довольно много примеров, когда целеустремленные самоучки во многом превосходят дипломированных специалистов. Это связанно с тем, что самоучки с большим желанием изучают интересующую их область и в случае возникновения трудностей не бегут к своим учителям или преподавателям, а пытаются самостоятельно одолеть проблему, упорно рассматривая различные возможности и варианты решения, листая страницы учебника или же бороздя просторы Интернета в поисках ответов на специализированных сайтах и форумах. К слову, по данным исследований страховой компании GoCompare почти четверть из богатейших людей планеты по версии журнала Forbes за последние 20 лет либо совсем не учились в университете, либо покинули его еще до получения диплома. При чем большинство из них, как раз и являются представителями IT-области! Вот лишь несколько примеров имен таких людей: Билл Гейтс - компания Microsoft, Марк Цукерберг - соцсеть Facebook, Стив Джобс - компания Apple, Майкл Делл - компания Dell Computer Corporation, Ларри Элисон - компания Oracle Corporation, Ян Кум - WhatsApp.

Языков программирования много и не все они достаточно легки для изучения. В интернете можно найти не мало различных рейтингов сложности языков и их популярности. В любом случае желательно начинать с достаточно распространенного и востребованного языка программирования, который по многочисленным отзывам не сложен в изучении, а также имеет достаточно много рускоязычных учебных пособий, задачников, видеоуроков, примеров кода и программ. Одним из таких языков является JavaScript , основам которого и посвящен данный учебник.

Однако одного чтения для изучения языка программирования не достаточно. Большую часть времени нужно посвящать именно набору кода и практическому решению различных задач. Нужно разрабатывать как можно больше программ, начиная с самых простых и заканчивая сложнейшими алгоритмами, посвящая этому 85 -90% своего учебного времени. И вообще, хорошим программистам всегда мало знаний в той области программирования, в которой они являются специалистами. Поэтому они постоянно ищут что-то новое не только в своей области, но и в смежных областях, тем самым непрерывно совершенствуясь и расширяя свой кругозор. Так что запасайтесь терпением, пробуйте, делайте шаг назад, но не сдавайтесь и делайте два шага вперед, и тогда у вас наверняка все получится!

Быстрый переход к другим страницам

  • Что нужно знать начинающему программисту?
10 марта 2016 в 09:56

Что должен уметь программист, чтобы получить работу в сфере финансов

  • Блог компании ITI Capital ,
  • Разработка веб-сайтов

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

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

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

Языки

Одним из самых популярных в сфере финансов языков программирования на протяжение многих лет является C. Его нужно знать не только для поддержки устаревшего кода, но также для организации работы с API в системах электронных торгов и обмена данными с провайдерами.

«Основным языком Уолл-Стрит» называют C++, поскольку самое главное для трейдинговых систем - это скорость. Какой бы хорошо продуманной и отлаженной ни была торговая программа, если в какой-то момент она потратить лишние миллисекунды на «сбор мусора», то это может привести к серьезным убыткам. Тоже самое касается и биржевой инфраструктуры - всевозможных шлюзов передачи данных и «коннекторов» к различным системам.

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

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

Для этих задач очень хорошо подходит C++ и чистый C. Бывает и так, что быстрые роботы создаются и чуть ли не на ассемблере - здесь стоит упомянуть механизмы прямого чтения-записи данных в память сетевой карты, минуя стандартные механизмы работы через драйверы, а также работу с «супербыстрым программируемым железом» вроде FPGA.

По данным создателя ресурса QuantStart и профессионального трейдера Майкла Халлс-Мура, сегодня senior-программист с 5-7-летним опытом работы на C++ может зарабатывать в Лондоне £500-700 в день. В российских компаниях специалисты по C++ также очень востребованы. Кроме того, таких разработчиков часто привлекают профессиональные трейдеры, которые могут создать успешную торговую стратегию, но нуждаются в помощи того, кто мог бы ее запрограммировать.

C# и Java также довольно давно используются различными финансовыми институтами. В основном, крупными банками для их трейдинговой инфраструктуры. Эти языки используются для создания фронтенд-интерфейсов и обработки данных.

На российском финансовом рынке очень ценятся специалисты, знающие C++ и C# - в нашем блоге ранее мы рассказывали , который благодаря этим инструментам смог найти работу в финансовых компаниях, а затем занялся созданием собственных торговых систем. Вот, что герой материала советовал изучить программистам, которые хотели бы в будущем получить работу в сфере финансов:

Тем, кто начинает свой путь в трейдинге или как-то заинтересован в этой области, я бы посоветовал обратить свое внимание на высокоуровневые платформы и языки, такие как.NET и Java. Последняя очень популярна на западных фондовых рынках, у нас пока меньше, но есть хорошие перспективы более широкого распространения этого языка. Это значит, что Java-программисты, будут востребованы в финансовых компаниях, фондах и брокерах. Все-таки.NET - довольно закрытая платформа, которая к тому же имеет целый ряд ограничений. Для low-latency и HFT-торговли она подходит не очень хорошо.

Но и на.NET и на Java можно довольно быстро создавать законченные программные продукты. Главный минус - они бывают не самыми быстрыми (если счет идет на микросекунды).


Для прототипирования квантовых моделей в хедж-фондах и «квантовых» трейдерских подразделений в банках часто применяют скриптовые языки, вроде Python, MATLAB и R.

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

Клиент-серверные системы

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

Поэтому разработчикам торговых приложений необходимо хорошо разбираться в классах сокетов для C: socket(), bind(), poll() и select(). Работать с ними напрямую практически никогда не нужно, поскольку для этого уже есть множество готовых библиотек, однако понимать, как устроено взаимодействие с ними просто необходимо.

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

Потоки

Создание клиент-серверных систем и многопоточное программирование в финансовой сфере идут рука об руку. Все это подразумевает, к примеру, написание стандартного TCP-сервера, сервера балансировки нагрузки, сервера высокой производительности - разработчик, который хочет заниматься созданием софта в финансовой компании должен уметь это делать. Неплохо также понимать, что такое классы pthreads(), fork(), mutexes и идея семафора в целом. В случае применения Java также нужно разбираться в существующих для этого языка методов синхронизации.

Базы данных

В основе систем для финансовой сферы лежат базы данных, поэтому разработчикам необходимы глубокие знания SQL. Знания простых операторов выбора будет недостаточно - довольно часто в ходе работы придется возиться с созданием процедур хранения, разбираться с индексами, и т.д. Кроме того, необходимо понимать разницу между table-level, page-level и row-level блокировками.

UNIX
Трейдинговые системы обычно используют платформу UNIX (часто это Solaris и Linux). Для Windows, как правило, создаются торговые терминалы с графическими интерфейсами, для разработки же «движка» трейдингового софта используют UNIX.

Это означат, что разработчикам просто необходимо понимать, что такое команды tail, sed, grep, awk, tr и top. Еще лучше, если специалист умеет работать с either vi, vim или emacs и не пугается проблем, вызванных неверной конфигурацией $LD_LIBRARY_PATH.

Навыки отладки

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

Заключение

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

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

P. S. В команду разработчиков ITinvest для проектной работы над