alexgroup-studio.ru – Программы, безопасность, обзоры, новости

Программы, безопасность, обзоры, новости

Языки программирования понятие виды примеры. Направления в программировании

Разделение языков на универсальные и специализированные .
Все популярные языки можно поделить на универсальные и специализированные. Универсальные языки используются для решения разных задач. Специализированные языки предназначены для решения задач одного, максимум нескольких, видов задач.(например, работы с базами данных, web-программирования или написание скриптов для администрирования операционных систем).

Виды специализированных языков :

1.Языки для работы с базами данных :
а)Языки, входящие в состав промышленных клиент-серверных систем управления базами данных.(СУБД) (PL-SQL в СУБД Oracle, Transact-SQL в Microsoft SQL Server)
б)Языки являющиеся частью других видов СУБД (Visual FoxPro, Microsoft Access, Paradox и т.п.)

2. Языки предназначенные для web-программирования .
а) Языки, исполняющиеся на сервере, поддерживающего Web-сайт.(РНР, Perl, VBScript)
б) Языки, исполняющиеся на браузере (программе просмотра) клиента JavaScript, JScript, VBScript

3.Языки для математических расчетов

4.Языки для автоматизации работы определенных программных продуктов. (VBA в Microsoft Office)

6.Специализированные языки других видов.
К универсальным языкам можно отнести языки Visual C++, Visual C++.Net, Visual C#.Net, Visual J#.Net, Java, Delphi, Borland C#, Borland C++ Builder.
Хотя чаще всего специализированные языки происходят от универсальных языков например PHP, Perl и JаvаScript произошли от языка С++, VBScript и VBA произошли от языка Visual Bаsic"а, отличия между специализированными и универсальными языками очень значительны.
Специализированные языки, чаще всего используются для написания не очень больших программ, поэтому они оптимизированы на быстрое написание программ и уменьшение размера исходного кода, и в меньшей степени на уменьшение ошибок, использование объектно-ориентированное программирования и разделения кода на модули. А универсальные языки, как правило, используются для создания больших и очень больших проектов, поэтому в них все сделано, чтобы уменьшить количество ошибок и облегчить проектирования программ, облегчение разработки крупных программ.

Основное отличие специальных языков от универсальных:
1) В них меньше объектно-ориентированных средств и средств доступа технологий COM+, DCOM, CORBA, к функциям API операционных систем;
2)Меньше средств многопоточного программирования и распределенного программирования;
3)Используются только динамические типы (т.е. тип переменной определяется в зависимости от её значения, а не при объявление переменной), а не статические. Единственное исключение: в версии 9 языка Visual FoxPro можно использовать и статические типы переменных.
Структура современных языков программирования.
Универсальные языки (и языки производные от них)
I) Производные от языка С++
1. На основе С++:
1.1 Borland C++, Watcom C++ (устарели)
1.2 Microsoft Visual C++
1.3 Microsoft Visual C++ .Net
1.4 Borland C++ Builder
1.5 Borland C++ Builder .Net
1.6 JavaScript (специализированный язык, для разработки страниц в Интернете)

2. На основе Java :
2.1 Java и Java2
2.2 Microsoft Visual J++
2.3 Microsoft Visual J# .Net
3. На основе C#:
3.1 Microsoft Visual C# .Net
3.2 Borland C# Builder.Net
II) Производные от языка Pascal
1 Borland Pascal, Turbo Pascal (устарели)
2 Modula, Oberon, Component Pascal, Active Oberon, Zonnon (сейчас непопулярны)
3 Borland Delphi
4 Borland Delphi .Net
III) Производные от языка Basic
1 Microsoft Visual Basic
2 Visual Basic for Application
3 VBScript (специализированный язык, для разработки страниц в Интернете)
4 Microsoft Visual Basic .Net
Специализированные языки
I) Языки программирования, предназначенные для Интернета:
1. PHP
2. Perl
3. JavaScript
4. VBScript
II) Языки программирования в системах управления базами данных
1. В локальных и файл – серверных СУБД
1.1 Microsoft Visual FoxPro (В одноименной СУБД)
1.2 Visual Basic for Application (В СУБД Access)
2. Клиент – серверных промышленных СУБД
1.1 PL-SQL (В СУБД Oracle)
1.2 Transact – SQL (В СУБД Microsoft SQL Server)
Язык Java разработан фирмой Sun, а JavaScript разработан фирмой Nescafe,и по большому счету это два разных языка, но поскольку их синтаксис очень похож, будем считать, что язык JavaScript произошел от Java. Также существует диалект JavaScript, разработанный фирмой Microsoft, использующийся в Internet Explorer и называемый Jscript.
Очень многие программисты, возможно скажут, что Java вовсе не произошла от C++,и хотя возможно это и так, но если сравнивать их синтаксис то будет видно, что их синтаксис похож, поэтому можно их считать "родственниками”.
В СУБД Oracle можно кроме языка PL – SQL использовать также язык Java.

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

Существующие языки программирования можно разделить на две группы: процедурные и непроцедурные (см. рис. 4.1).

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

Процедурные языки разделяют на языки низкого и высокого уровня.

Разные типы процессоров имеют разные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня.
Имеется в виду, что операторы языка близки к машинному коду и ориентированы на конкретные команды процессора.

Рис. 4.1. Общая классификация языков программирования

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

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

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

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

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

Работа всех трансляторов строится по одному из двух принципов: интерпретация или компиляция.

Интерпретация подразумевает пооператорную трансляцию и последующее выполнение оттранслированного оператора исходной программы. В связи с этим можно отметить два недостатка метода интерпретации: во-первых, интерпретирующая программа должна находиться в памяти ЭВМ в течение всего процесса выполнения исходной программы, т. е. занимать определенный объем памяти; во-вторых, процесс трансляции одного и того же оператора повторяется столько раз, сколько раз должна исполняться эта команда в программе, что резко снижает производительность работы программы.

Несмотря на указанные недостатки, трансляторы-интерпретаторы получили достаточное распространение, так как они удобны при разработке и отладке исходных программ.

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

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

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

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

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

Принципиально иное направление в программировании связано с методологиями (иногда говорят «парадигмами») непроцедурного программирования. К ним можно отнести объектно-ориентированное и декларативное программирование. Объектно-ориентированный язык создает окружение в виде множества независимых объектов. Каждый объект ведет себя подобно отдельному компьютеру, их можно использовать для решения задач как «черные ящики», не вникая во внутренние механизмы их функционирования. Из языков объектного программирования, популярных среди профессионалов, следует назвать прежде всего Си++, для более широкого круга программистов предпочтительны среды типа Delphi и Visual Basic.

При использовании декларативного языка программист указывает исходные информационные структуры, взаимосвязи между ними и то, какими свойствами должен обладать результат. При этом процедуру его получения («алгоритм») программист не строит (по крайней мере, в идеале). В этих языках отсутствует понятие «оператор» («команда»). Декларативные языки можно подразделить на два семейства – логические (типичный представитель – Пролог) и функциональные (Лисп).

Охарактеризуем наиболее известные языки программирования.

1.Фортран (FORmula TRANslating system – система трансляции формул); старейший и по сей день активно используемый в решении задач математической ориентации язык. Является классическим языком для программирования на ЭВМ математических и инженерных задач

2.Бейсик (Beginner"s All-purpose Symbolic Instruction Code – универсальный символический код инструкций для начинающих); несмотря на многие недостатки и изобилие плохо совместимых версий – самый популярный по числу пользователей. Широко употребляется при написании простых программ.

3.Алгол (ALGOrithmic Language – алгоритмический язык); сыграл большую роль в теории, но для практического программирования сейчас почти не используется.

4.ПЛ/1 (PL/1 Programming Language – язык программирования первый); многоцелевой язык; сейчас почти не используется.

5.Паскаль (Pascal – назван в честь ученого Блеза Паскаля); чрезвычайно популярен как при изучении программирования, так и среди профессионалов. Создан в начале 70-х годов швейцарским ученым Никлаусом Виртом. Язык Паскаль первоначально разрабатывался как учебный, и, действительно, сейчас он является одним из основных языков обучения программированию в школах и вузах. Однако качества его в совокупности оказались столь высоки, что им охотно пользуются и профессиональные программисты. Не менее впечатляющей, в том числе и финансовой, удачи добился Филип Кан, француз, разработавший систему Турбо-Паскаль. Суть его идеи состояла в объединении последовательных этапов обработки программы – компиляции, редактирования связей, отладки и диагностики ошибок – в едином интерфейсе. Версии Турбо-Паскаля заполонили практически все образовательные учреждения, программистские центры и частные фирмы. На базе языка Паскаль созданы несколько более мощных языков (Модула, Ада, Дельфи).

6.Кобол (COmmon Business Oriented Language – язык, ориентированный на общий бизнес); в значительной мере вышел из употребления. Был задуман как основной язык для массовой обработки данных в сферах управления
и бизнеса.

7.АДА ;является языком, победившим (май 1979 г.) в конкурсе по разработке универсального языка, проводимым Пентагоном с 1975 году. Разработчики – группа ученых во главе с Жаном Ихбиа. Победивший язык окрестили АДА, в честь Огасты Ады Лавлейс. Язык АДА – прямой наследник языка
Паскаль. Этот язык предназначен для создания и длительного (многолетнего) сопровождения больших программных систем, допускает возможность параллельной обработки, управления процессами в реальном времени и многое другое, чего трудно или невозможно достичь средствами более простых языков.

8.Си (С – «си»); широко используется при создании системного программного обеспечения. Наложил большой отпечаток на современное программирование (первая версия – 1972 г.), является очень популярным в среде разработчиков систем программного обеспечения (включая операционные системы). Си сочетает в себе черты как языка высокого уровня, так и машинно-ориентированного языка, допуская программиста ко всем машинным ресурсам, чего не обеспечивают такие языки, как Бейсик и Паскаль.

9.Си++ (С++);объектно-ориентированное расширение языка Си, созданное Бьярном Страуструпом в 1980 году. Множество новых мощных возможностей, позволивших резко повысить производительность программистов, наложилось на унаследованную от языка Си определенную низкоуровневость.

10.Дельфи (Delphi); язык объектно-ориентированного «визуального» программирования; в данный момент чрезвычайно популярен. Созданный на базе языка Паскаль специалистами фирмы Borland язык Delphi, обладая мощностью и гибкостью языков Си и Си++, превосходит их по удобству и простоте интерфейса при разработке приложений, обеспечивающих взаимодействие с базами данных и поддержку различного рода работ в рамках корпоративных сетей и сети Интернет.

11.Ява (Java); платформенно-независимый язык объектно-ориентированного программирования, чрезвычайно эффективен для создания интерактивных веб-страниц. Этот язык был создан компанией Sun в начале 90-х годов на основе СИ++. Он призван упростить разработку приложений на основе Си++ путем исключения из него всех низкоуровневых возможностей.

12.Лисп (Lisp) – функциональный язык программирования. Ориентирован на структуру данных в форме списка и позволяет организовать эффективную обработку больших объемов текстовой информации.

13.Пролог (PROgramming in LOGic – логическое программирование). Главное назначение языка – разработка интеллектуальных программ и систем. Пролог – это язык программирования, созданный специально для работы с базами знаний, основанными на фактах и правилах (одного из элементов систем искусственного интеллекта). В языке реализован механизм возврата для выполнения обратной цепочки рассуждений, при котором предполагается, что некоторые выводы или заключения истинны, а затем эти предположения проверяются в базе знаний, содержащей факты и правила логического вывода.
Если предположение не подтверждается, выполняется возврат и выдвигается новое предположение. В основу языка положена математическая модель теории исчисления предикатов.

Языки программирования для Интернета:

1. HTML. Общеизвестный язык для оформления документов. Он очень прост и содержит элементарные команды форматирования текста, добавления рисунков, задания шрифтов и цветов, организации ссылок и таблиц.

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

3. Tcl/Tk. Этот язык ориентирован на автоматизацию рутинных процессов и состоит из мощных команд. Он независим от системы и при этом позволяет создавать программы с графическим интерфейсом.

4. VRML. Создан для организации виртуальных трехмерных интерфейсов в Интернете. Он позволяет описывать в текстовом виде различные трехмерные сцены, освещение и тени, текстуры.

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

Контрольные вопросы

1. Что такое системы программирования и к какому классу программ они относятся?

2. Что входит в состав систем программирования?

3. На каком языке программирования создавались первые программы?

4. На какие языки подразделяются процедурные языки?

5. Охарактеризуйте языки низкого уровня.

6. Какой язык относится к языку низкого уровня?

7. Достоинства языков низкого уровня.

8. Охарактеризуйте языки высокого уровня.

9. Достоинства языков высокого уровня.

10. Приведите примеры языков высокого уровня.

11. Для чего предназначены трансляторы?

12. Чем отличается компилятор от интерпретатора?

13. Недостатки интерпретации (как вид транслятора).

14. Что представляет собой процесс компиляции программы?

15. Какие действия выполняются при компиляции?

16. Чем отличается загрузочный модуль от объектного?

17. Чем отличается процедурное программирование от непроцедурного?

18. Какие виды программирования относятся к непроцедурному
программированию?

19. Особенность декларативных языков.

20. Охарактеризуйте кратко языки программирования: Фортран, Бейсик, Паскаль, Кобол.

21. Охарактеризуйте кратко языки программирования: Ада, Си, Си++, Delphi, Java.

22. Приведите примеры объектно-ориентированных языков.

23. К какому классу языков относится язык Лисп?

24. К какому классу языков относится язык Пролог?


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

Web-разработчик

Самым востребованным на 2017 год видом профессии «программист» является веб-разработчик. К этой категории относятся специалисты по созданию сайтов.

Условно веб-мастера делятся на три группы:

  • разработчик Frontend;
  • Backend-программист;
  • Fullstack-девелопер.

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

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

Кто такой фронтенд-разработчик?

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

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

Инструменты фронтенд-разработчика

Писать код на HTML, CSS и JavaScript не достаточно. Чтобы оставаться конкурентоспособным на рынке труда, Frontend-разработчик должен знать следующее:

  1. jQuery. Библиотека JavaScript с коллекцией плагинов и расширений. Вместо того чтобы писать код с нуля, jQuery позволяет добавлять и настраивать готовые элементы. Например, автозаполнение форм, слайд-панель, таймер, связанная анимация.
  2. Фреймворки Bootstrap, Foundation, Backbone, AngularJS и EmberJS. Это программные оболочки повышающие производительность ресурса. Предоставляют готовый дизайн и существенно облегчают жизнь разработчика.
  3. Препроцессоры SASS и LESS. Добавляют CSS функциональности, обрабатывает код, превращая его в отформатированный и кросс-браузерный CSS.
  4. Популярные CMS - адаптивная верстка и кросс-платформенность.

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

Зарплата и перспективы

Средний оклад мастера составляет 66 тысяч 410 рублей в месяц. В США эта сумма вырастает до 102 тысяч долларов в год. Высокие зарплаты, легкость языка разметки и написания скриптов привлекает начинающих кодеров к фронтенд-разработке. Освоив JS, большинство из них переходит к серверным языкам. Самые талантливые учат высокоуровневые C и Java, постепенно осваивают геймдев, создание приложений и другие виды информационной деятельности программиста.

Программист серверной части

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

Программист серверной части - это следующая эволюционная ступень после фронтенд-разработчика. Его задача заставить сервер, приложение и БД взаимодействовать. Пишет на серверных языках PHP, Ruby, Python, Java и.Net. В качестве инструментов для работы с данными использует MySQL, Oracle и SQL Server. В описаниях вакансии работодатели часто указывают дополнительные требования:

  • знание фреймворков PHP: Zend, Symfony и CakePHP;
  • опыт работы с программным обеспечением контроля версий SVN, CVS или Git;
  • навыки работы с операционными системами Linux, Unix, MacOS X и Windows Server.

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

Разработчик Fullstack

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

Обязанности универсального веб-программиста:

  1. Серверное администрирование. Подключение через терминал к удаленным серверам без GUI. Управление пользовательскими группами, брандмауэрами, программами Apache и Nginx. Фулстак-программист должен все знать об облачном хостинге на платформах Heroku, Google Cloud, Azure, AWS и любых других.
  2. Создание бэкенда и базы данных. Специалист должен разбираться в базах данных MySQL, PostgreSQL, а также БД noSQL: MongoDB, Redis или Cassandra. Иметь представление о графовых СУБД, таких как Neo4j.
  3. Фронтенд-разработка и дизайн. Помимо стандартных обязанностей, верстки и подключения JS, Fullstack-мастер проектирует макет в редакторах Photoshop или Illustrator.

Фулстак-разработчики - это специалисты уровня Senior Developer. За ними охотятся хедхантеры и у них самые высокие оклады. В США зарплата Fullstack Developer начинается от 70-80 тысяч долларов и от 25-30 тысяч долларов в странах Восточной Европы. На иностранных биржах фриланса, например Upwork, один час работы Fullstack-разработчика оценивается в 30$ и выше.

Специалист по созданию и разработке компьютерных игр

Разработка компьютерных игр - одна из самых быстроразвивающихся сфер ИТ-технологий. По данным аналитического агентства NewZoo объем рынка видеоигр с каждым годом увеличивается на 9%. Если в 2016 году он составил почти 100 миллиардов долларов, то к 2018 году эта сумма увеличится до 112.5 миллиардов. Поэтому «инженер видеоигр» - это перспективная и высокооплачиваемая должность.

Инженер, или Game-разработчик - общее название категории специалистов, задействованных в процессе создания игры. Главная задача - превратить идею в программный код и заставить все элементы взаимодействовать. 90% рабочего времени программисты пишут и отлаживают алгоритмы на языке C++, Visual Basic, Java и MEL.

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

Какие бывают виды программистов игр?

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

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

За свой труд на благо игровой индустрии данный вид программистов получает зарплату от 60 тысяч рублей. Доход инди-разработчиков точно просчитать сложно. Есть случаи, когда успешные проекты приносили миллионы буквально за неделю. Например, игра-хит Punch Club, Angry Birds и всем известная «Майнкрафт». Существуют, конечно, провальные задумки наподобие Scroll Ninja, не оправдавших ожидания создателей.

Системный программист

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

Разрабатывается программное обеспечение под различные операционные системы, включая серверные Unix и Windows Server, а также мобильные платформы. Код пишется на языках «Си», за редким исключением Assembler. Основная задача системного инженера заключается в установке, настройке, тестировании ОС и всех ее компонентов

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

Системный программист необходим в любой сфере ИТ, включая автоматизацию процессов производства и мониторинг безопасности. В США за труд специалиста готовы платить от 87 до 104 тысяч долларов. В Англии 57 тысяч фунтов стерлингов, в России 90 тысяч рублей.

Инженер прикладного программного обеспечения

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

Работа прикладного инженера заключается в написании кода, его последующей компиляции, отладке и тестировании. Иногда специалист обновляет или вносит изменения в уже существующее ПО. Для программирования использует высокоуровневые языки Java, C#, C++, Python, PHP. Прикладные программисты редко трудятся в одиночку. В основном, они являются участниками стартапов, или входят в штат сотрудников компании, занимающейся разработкой компьютерного софта.

«Программист» - интересная и разнообразная профессия с множеством направлений и специализаций. Одни делают виджеты для сайтов и проектируют API, другие пишут код для серверов или корпят над графикой Disciples III. Каждый, кто любит программировать, может реализовать себя в веб-разработке, стать именитым создателем игр или писать программы для спутников НАСА.

Поколения языков программирования

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

Развитию программирования поспособствовала идея Джона Фон Ньюмана (англ. John Von Neumann), опубликованная в 1945 году, в которой он описал компьютер, где в памяти вместе с данными хранится и сама программа.

Языком программирования первого поколения считается машинный код. Машинный код состоит из инструкций, которые компьютер (процессор) может выполнить (а также данных, которые принадлежат этим инструкциям). Программируя на машинном коде, программист должен был писать свою программу в двоичном коде, так что бы процессор мог это понять и исполнить. В сущности, такое программирование требует хорошего знания и понимания аппаратного обеспечения, потому что в процессе программирования необходимо знать что процессор может сделать, где находятся устройства ввода-вывода (англ. I/O- Input-Output), а также как с ними необходимо общаться и сколько времени будет потрачено на ту или иную операцию. Таким образом, машинный код очень крепко связан с аппаратным обеспечением, на котором соответствующая программа будет работать. На сегодняшний день машинный код из компьютеров никуда не исчез, все действия на низком уровне (уровне аппаратного обеспечения) происходят до сих пор в машинном коде, т.е. на каком бы языке программирования не была написана программа в, конечном итоге она преобразуется в понятный аппаратному обеспечению машинный код.

Языками второго поколения считаются языки Ассемблера. В случае машинного кода всё программирование происходило в двоичном коде, и в связи с этим его чтение и отладка были очень трудоёмкими. При программировании на языке Ассемблера же инструкции представлены человеку в понятной форме. Само программирование является очень похожим на программирование в машинном коде, потому что инструкции те же самые, что и в машинном коде (только в другом виде - в виде слов). Программа, написанная на языке Ассемблера, представляет собой что-то вроде следующего:

MOV AL, 19

ADD AL, 4

OUT 2

Данный отрывок кода присваивает регистру AL значение 19(обычно значения представлены числами в шестнадцатеричной системе), прибавляет к значению регистра AL число 4 и после этого отправляет на выход номер 2. Написанная программа переводится из ассемблера в машинный код и после этого процессор может начать её выполнение.

Языки ассемблера и машинный код считаются языками низкого уровня.

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

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

FORTRAN (The IBM Mathematical FORmula TRANslating System) - язык программирования, разработанный в 1950-тых годах для математических вычислений и в научных целях.

COBOL (COmmon Business Oriented Language) - Объектно-ориентированный язык программирования, созданный в 1959году, в основном для написания программ удовлетворяющих бизнес нуждам.

BASIC (Beginner"s All-purpose Symbolic Instruction Code) - Язык, разработанный в 1963 году, который поначалу создавался для того, чтобы инженеры могли производить на компьютерах различные симуляции.

Pascal - Язык программирования, созданный в 1970х годах и который создавался для обучения программированию.

С - имя происходит от того, что этот язык в основном базировался на языке с именем B. Создавался для написания операционных систем (многие UNIX совместимые операционные системы написаны на этом языке), уже долгое время является одним из самых популярных языков программирования.

С++ - объектно-ориентированный С.

Java - язык программирования, разработанный на основе С++.

Visual Basic, Delphi, Python, C# - все являются языками третьего поколения. Многие языки программирования третьего поколения моложе (новее), чем некоторые языки четвёртого и пятого поколений.

Языки программирования четвертого поколения разработаны с целью упростить их изучение и использование. Эти языки, как правило, непроцедурные сосредоточены на единственном применении. Примером языка программирования четвертого поколения может служить SQL(Structured Query Language). Тут больше говориться «что делать» и меньше - «как делать». Языки пятого поколения созданы для разработки систем искусственного интеллекта и для решения связанных с этой темой проблем.

Базовые типы языков программирования.

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

В процедурных языках программирования на языке программирования описываются действия и порядок их выполнения, а также эти действия разбиваются на группы (подпрограммы). Из процедур в свою очередь формируются структуры кода, которые можно повторно использовать. В функциональных языках программирования всё решение описывается при помощи функций. В объектно-ориентированных языках программирования решение проблемы производится при помощи функций и структур данных, описанных в классах (англ. Class). Из каждого класса можно создать объект, у которого будет набор свойств и/или методов.

Свойства - это значения, которые объект может содержать, и которые могут влиять на поведение объекта. Например, на основе класса «консольное окно» можно создать объект «консоль1», который будет виден пользователю, как одно консольное окно. У этого объекта присутствуют некоторые свойства (показано, скрыто, ширина, высота, цвет текста в консольном окне, цвет фона и т.д.), изменяя эти свойства можно в данном конкретном случае менять внешний вид объекта.

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

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

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

Интерпретируемые и компилируемые языки

До того, как компьютер сможет выполнить программу, написанную на языке высокого уровня, её приходится «переводить» на понятный компьютеру язык, т.е. машинный код. Этот процесс перевода называют трансляцией, а программу-переводчик - транслятором. Трансляторы делятся на два класса: компиляторы и интерпретаторы.

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

Интерпретация заключается в том, что программа в машинном коде (интерпретатор) записывает файл программы во внутреннюю память и начинает её построчно выполнять. Примером может служить старый язык BASIC.

Интерпретация программы примерно в 10-200 раз медленнее, чем выполнение скомпилированного кода. В противовес отладка (удаление ошибок из программы) интерпретируемой программы, как правило, проще, чем в случае транслируемой программы. В некоторых подходящих случаях и при наличии подручных инструментов эти различия могут быть гораздо меньше. Хорошим примером служит Java с кодом, оптимизированным и скомпилированном на промежуточном уровне, который во время выполнения транслируется компилятором Just-in-Time в подходящий конкретному аппаратному обеспечению.

В принципе программу, написанную на любом языке можно как интерпретировать, так и скомпилировать.

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

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

Типы программирования

Условимся сразу: типов будет шесть. Это достаточно подробное деление. Обычно выделяют 3-4, но так как перед нами стоит задача выбора пути для новичков, оно вполне оправдано.

Процедурное программирование , оно же императивное.

Оно ставит задачу создания кода на языке, понятном используемой машине. Самый известный случай - машина Тьюринга, из известных языков программирования - С/C++, Ада, Паскаль, Go. Задачи здесь решаются планомерно: сначала объявляется объект, потом он определяется и затем выполняется с ним действие:

var
S: String;

S:= ‘Hello!’;

Декларативное программирование .

В процедурном случае вектор оптимизации языка направлен от машинного уровня к языку пользователя путем использования базовых принципов ООП, классов, методов и пр.. Здесь же во главе угла стоит непосредственно задача, а способ её исполнения второстепенен. Яркий пример - язык разметки HTML. Если вы хотите разместить кнопку, вам формально не надо создавать объект и присваивать ему атрибуты:

Функциональное программирование .

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

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

Логическое программирование .

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

Динамическое программирование .

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

Графическое программирование , оно же визуальное.

Оно предлагает разработчику работать с графическими изображениями, а не текстом. Выражаться это может по-разному - есть специальные языки, вроде Scratch или BluePrint, есть языки схем или диаграмм (LD или FBD), есть просто разделы программирования, связанные со взаимодействием с формами и графикой. В последнем случае это может быть любой язык, визуализация осуществляется средствами разработки (Borland Delphi/C++, Visual Studio, Adobe Dreamweaver и пр.). Такое графическое программирование в чистом виде встречается крайне редко, без понимания языка и структуры кода создать что-то серьезное невозможно.

Остальное

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

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


Нажимая кнопку, вы соглашаетесь с политикой конфиденциальности и правилами сайта, изложенными в пользовательском соглашении