Классификация языков программирования. Языки программирования низкого уровня

Инструмент 05.05.2019
Инструмент

Jт Junior до Senior не минуя Middle и с прицелом на TeamLead... Статья о рангах и ступенях IT карьеры разработчиков и некоторых других IT специалистов. Субъективный, но безпристрастный взгляд на развитие IT специалистов...

Ранги в профессии программист или рост IT специалистов в IT карьере.

Данный материал представляет собой очерк вакансий-позиций, доступных разработчику программного обеспечения, которые в результате упорного труда продвигают его по карьерной лестнице. Автор статьи сам разработчик Middle класса (уже не Junior, но ещё не Senior, согласно спецификации, приведенной в статье – просто Developer) попытался привести описания основных позиций в карьере программиста и произвести краткий анализ способностей и амбиций, особенностей, свойственных тем или иным рангам, как и росту прав и обязанностей согласно занимаемой должности.

Надеемся, что этот материал понравится и будет полезен Вам.

Итак, как известно, программисты или разработчики имеют свои ступени профессионального роста. Обычно это Junior, Middle (или, как говорят куда чаще – просто Developer) и Senior. Ученик, подмастерье и мастер, если хотите. Для каждой из этих позиций характерны свои особенности, каждая из них влияет на обязанности и права разработчика, занимающего эту позицию и влияет на его характер, амбиции и способы решать рабочие вопросы. Написать данную статью, не опасаясь обвинений в необъективности, автору позволили некоторые наблюдения, сделанные в результате многолетней работы в IT компаниях, а также соединение собственных наблюдений с массой тематических материалов, прочитанных как в украинских, так и в зарубежных IT изданиях.

Таким образом, получилось, что о позиции Junior developer можно сказать следующее:

Позиция - Junior Developer

Младший программист – Junior Developer, это молодой разработчик с малым количеством опыта или вовсе без такового, только начавший работу в избранной технологичной области. Обучается, как правило, по видеокурсам и видеоурокам, причём постоянно ведь опыта разработки у него так мало, что он очень много времени тратит на советы с более опытным разработчиком и понимание того как команда работает над проектом. Накопив достаточно опыта и реализовав несколько проектов, junior переходит на middle уровень – становясь полноценным разработчиком. Но всё же, Junior разработчики находятся в постоянном, непрерывном и самостоятельном образовательном процессе. Обучение для junior разработчика - это все. Испытывая постоянную необходимость в выполнении задач, поставленных по работе над проектом, идеальная схема обучения для Junior разработчика - это видео обучение программированию в рамках избранной технологии. Опираясь на просмотренные видео уроки по программированию, онлайн консультации и советы более опытных коллег, junior разработчик растёт достаточно быстро для того чтобы уже через 1-1,5 года занять позицию полноценного разработчика. Требования, обычно выставляемые к Junior разработчику, приблизительно таковы, как и у Developer и Senior.

Это следующие знания:

Основы программирования (системы исчисления, разница между оператором и операцией, понимание алгоритмов, методик ООП)

Языки: С#, C++, Java, PHP, JavaScript (синтаксис, ООП возможности, многопоточность, стандартные библиотеки, паттерны проектирования)

OOP и OOD (парадигмы)

Умение обучаться по видеокурсам и видеоурокам по программированию, не прибегая к дополнительным разъяснениям. Такой навык очень помогает Junior разработчикам вырости до Middle.

Работа с базами данных (JDBC, язык SQL, MSQL, SQL lite и т.п.)

Базовое знание какого-либо конкретного фреймворка (например, веб-сервисов или Spring).

По субъективным заметкам программистов, за Junior Developerами замечено:

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

Ресурсы для Junior разработчиков:

Видео портал ITVDN.com – Видеокурсы и видеоуроки для начинающих и опытных программистов.

MSDN.com – Технологии Microsoft

97 Things Every Programmer Should Know (список)

Other Things Every Programmer Should Know (список)

Channel9.com – Форум Microsoft разработчиков

Следующий шаг в карьерном и профессиональном росте программиста - Программист или Developer

Developer или Middle Dev

Программист или Developer или Middle dev (англ. разработчик) - это человек, ответственный за качественное и своевременное исполнение разработки информационно-программных систем, основанных на применении современных программных технологий. Программист выполняет задачи по написанию и базовому тестированию порученных ему компонентов системы, работает developer по внешним спецификациям. Поддерживает Junior разработчиков, занимается как архитектурой проектов, так и модульной реализацией, производит реализацию работоспособности прототипов, постоянно занимается самообразованием, понимает алгоритмы, Software Engineering Process, обладает знаниями в следующих областях: языки разметки, понимание технологии web-серверов и серверов приложений, знанием клиентских и серверных технологий, работы браузера, СУБД, операционных систем, офисных пакетов, сред разработки, профильных языков программирования, технического английского. Как правило, имеет высшее образование, хотя случается и что не имеет, это не критичный показатель, критичный - наличие знаний и опыта.

По заметкам программистов за developerами замечено:

Любит поучать Junior developers, прямые вопросы от Juniors нередко вызывают у Middle developers раздражение, контроля над выполнением работ, как правило, не требует - отвечает за отдельные функции и модули и сам контролирует их работу, осознавая, что выполняемая им работа определяет рабочий процесс коллег. Это ответственные люди, которых редко нужно учить, так как они постоянно занимаются самообразованием в форме просмотра видео курсов по программированию, посещения семинаров и участия в вебинарах, чтения профильной литературы и ресурсов. Умеет решать поставленные задачи самостоятельно, понимает основы построения архитектуры проектов, мыслит не категориями языка, от которых, наконец, отвязался, но понятиями предметной области, умеет писать структурно и последовательно, думает о будущей поддержке продукта. К концу первого года работы в команде перестаёт писать плохой код.

Ресурсы для developers:

Github.com – Профессиональный ресурс для разработчиков.

ITVDN.com – Портал видео IT обучения

MSDN.com – Продукты и технологии Microsoft

Codefor.com – Форум разработчиков

habrahabr.ru – Крупнейшее профильное IT сообщество рунета

И вот, наконец, мы добрались и до позиции Senior developer.

Senior developer (Ведущий разработчик)

Ведущий программист – человек ответственный за качество и своевременность работ по разработке информационно-программных систем, основанных на применении новейших программных технологий. Обладает глубокими, структурированными знаниями и работает внутри проектной команды, совершенно не имея необходимости контактировать с представителями менеджмента заказчика. Выполняет такие работы, как: детальное проектирование и создание спецификаций проектов, полностью контролирует и зачастую и самостоятельно выполняет проектирование мелких проектов и внутренних под-проектов (модулей), программирование и базовое тестирование компонентов. Как правило, имеет законченное высшее образование, реже незаконченное, стаж от 3х лет в качестве developer, умеет комментировать программы, не прибегая к использованию словаря, разрабатывать документацию, свободно общаться на английском языке, владеет методами и инструментами анализа и проектирования, Software Engineering Process, языками разметки, глубоким пониманием клиент-сервер технологии, работ браузера, web серверов, серверов приложений, БД, ОС, офисными пакетами, может контролировать других разработчиков и ставить им задачи.

По заметкам коллег-программистов, за Senior Developers замечено:

Отвечает за проект, умеет подготовить инфраструктуру, занимается решением сложных задач. Является наставником для developers и junior. Обладает набором конкретных решений в области тех или иных наиболее часто возникающих задач, за счёт чего демонстрирует бешенную производительность в сравнении с middle developers. Делает на порядок меньше ошибок, ошибки допущенные Senior, как правило, им же легко устраняются и связаны обычно со спешкой или постоянным недосыпом. Забавно, но нередко знает конкретные языки хуже, чем junior, что компенсируется знанием того, как обходить скользкие места и тремя-пятью решениями на каждую задачу, которые держит в голове, также за счёт того, что превосходно концентрируется на главном, игнорируя несущественные детали. Собственно, за это и держат – способен увидеть суть, нередко даже не дочитав до конца ТЗ.

Ресурсы для senior разработчиков:

Знают и не с кем ими не делятся. Можно разве что подсмотреть через плёчо, сидя рядом.

На этом первую часть нашей статьи о Рангах в карьере программиста и составляющих профессии от А до Я, можно читать завершённой. Надеемся, что данная статья была интересна Вам и следующий её выпуск, рассказывающий о Team Lead, Architect и CIO будет, ожидаем Вами.

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

Junior Developer

  • Всегда требует не только самообразования, но и контроля.
  • Всегда оптимист и всегда недооценивает сложности поставленных задач.
  • Жалуется только на нехватку времени, на остальное боится.
  • Не задаёт необходимые вопросы, так как опасается блеснуть незнанием.
  • Часто ошибается и потому завышает сроки, чтобы успеть переделать до сдачи.
  • В перманентной вражде с SEO и Тестировщиком – с Тестировщиком, так как тот находит баги, с SEO так как тот заставляет заниматься, по мнению любого разработчика несущественной ерундой, за которую тем не менее третирует начальство.
  • Менеджеров, совершенно не воспринимает всерьез, так как пока не понимает всей серьёзности их функций.
  • Даже самую рутинную работу считает сложной, хотя способен написать тысячи строк «одинакового» кода.

Developer

  • Пессимист, недооценивающий себя, и живущий в страхе промаха и провала.
  • Всегда находит новинку, чтобы обсудить, время на перекур что бы обсудить, и время на чашечку кофе, чтобы узнать, что обсуждают другие.
  • Не стесняется и может даже эксплуатировать коллег, выманивая все возможные знания, умения, применяя которые о коллегах упомянуть забывает.
  • Наступая на грабли, молчит и скрипя зубами сам исправляет ситуацию, так чтобы никто даже и не знал.
  • Разделяет мнение Juniora о тестировщиках и SEO
  • Роль менеджера понимает, но тем не менее менеджеров недолюбливает как непонимающих элементарного.
  • Знает, сколько он стоит и при случае показывает, что знает это.
  • Старается работать только над тем, что интересно.
  • Нередко ухитряется вести по 2-3 проекта параллельно, чем очень удивляет Junior developers.

Senior Developer

  • Реалист – всегда закладывает не только свои сложности, но и общие риски, при этом, не слишком завышая сроки. Как делает это, не знает сам, говорит, при этом кратко – опыт.
  • Успевает всё. И митинги и work tasks и помогать коллегам.
  • Может легко, не стесняясь, сказать, что не знает чего-то. При этом так же легко помогает разобраться в том, что знает.
  • Грабли у Senior, как ядерное оружие, мощные и критичные – если уж ударят, то глобально. Бывают наверняка и простые грабли, но они их удачно скрывают, так, что о них не знает никто.
  • Любят работу – радуются успеху проектов как в детстве, причём даже когда те не слишком сказываются на благосостоянии.
  • Тестер – советник.
  • Менеджер – щит перед заказчиком.
  • Не стесняется требовать повышения ЗП, крайне не любит привлекать к работе посторонних или новичков, даже если те знают и умеют много и хорошо.
  • Ворчит, но работу делает и в зависящем от него всегда успешно.

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

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

Общие сведения

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

Среди разработчиков современного программного обеспечения наиболее популярны следующие основные языки программирования. Список приведён в порядке убывания популярности:

  1. Java.
  2. HTML.
  3. Visual Basic.
  4. Delphi.

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

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

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

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

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

Разработка приложений

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

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

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

SQL

Специализированный язык программирования предназначен в первую очередь для работы с системами управления базами данных и их программирования. SQL переводится как "специализированный Поскольку в последние десятилетия рынок СУБД вырос многократно, популярность этого языка не становится сюрпризом.

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

Javascript

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

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

XML

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

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

Программируем по-русски

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

  • 1С:Предприятие. Целая система, предназначенная для управления организацией во всех сферах деятельности. Нередко в объявлениях по поиску сотрудников можно встретить "Программист 1С".
  • Глагол. Аналог англоязычного Pascal.
  • Робик. Специализированный язык программирования, предназначенный для обучения детей основам программирования.
  • Рапира. Язык с основанный на процедурах.

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

ЭВОЛЮЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

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

Под ЯП понимают правила представления данных и записи алгоритмов их обработки, которые автоматически выполняются ЭВМ. В более абстрактном виде ЯП является средством создания программных моделей объектов и явлений внешнего мира.

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

Движущие силы эволюции ЯП

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

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

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

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

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

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

Уровни языков программирования

Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня . “Низкий уровень” – это значит, что операторы близки к машинному коду и ориентированы на конкретный тип процессора. Языком самого низкого уровня является язык Ассемблера, который представляет каждую машинную команду в виде символьных условных обозначений, называемых символьными мнемониками . Программа, написанная на языке низкого уровня, может быть использована только в такой среде, в которой она была создана. С помощью языков низкого уровня создаются очень эффективные и компактные программы, так как разработчик получает доступ ко всем возможностям процессора.

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


Классификация и обзор языков программирования

Деление языков программирования на классы можно представить на схеме таким образом:

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

Среди процедурных языков выделяют в свою очередь структурные и операционные языки . В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.

Различают такие языки процедурного программирования:

ü Язык Фортран создан в начале 50-х годов 20-го века для программирования научно-технических задач;

ü Кобол – создан в конце 60-х годов 20-го века для решения задач обработки больших объемов данных, хранящихся на различных носителях данных;

ü Алгол (1960 год) – это многоцелевой расширенный язык программирования. В нем впервые введены понятия «блочная структура программы» и «динамическое распределение памяти»;

ü В середине 60-х годов 20-го века был создан специализированный язык программирования для начинающих – BASIC . Характеризуется простотой освоения и наличием универсальных средств для решения научных, технических и экономических задач, а также задач, например, игровых.

Все перечисленные выше языки были ориентированы на различные классы задач, но они в той или иной мере были привязаны к конкретной архитектуре ЭВМ.

ü В 1963-1966гг был создан многоцелевой универсальный язык PL-1. Этот язык хорошо приспособлен для исследования и планирования вычислительных процессов, моделирования, решения логических задач, разработки систем математического обеспечения.

ü Язык Паскаль (PASCAL) (1968-1971гг)- язык процедурного программирования наиболее популярный для ПК, который и в настоящее время успешно применяется. В основу языка Pascal положен подход от общей задачи к частным (более простым и меньшим по объему). К основным принципам, которыми обладает Паскаль, можно отнести: а) Структурное программирование, которое основано на использовании подпрограмм и независимых структур данных; б) Программирование «сверху-вниз», когда задача делится на простые, самостоятельно решаемые задачи. Затем выстраивается решение исходной задачи полностью сверху вниз.

ü К языкам процедурного программирования можно отнести язык АДА (1979 г) Язык назван в честь первой программистки Ады Лавлейс- дочери Байрона. Его отличает модульность конструкций.

ü Язык СИ (начало 70-х годов) также относится к языкам процедурного программирования. Первоначальный его вариант планировался как язык для реализации операционной системы Unix вместо языка Ассемблера. Одной из особенностей языка СИ является то, что различия между выражениями и операторами сглаживаются, что приближает его к функциональным языкам программирования. Кроме того, в языке СИ отсутствует понятие процедуры , а использование подпрограмм основано на понятии функции , которая может сочетать в себе возможности процедуры. С одной стороны, по набору управляющих конструкций и структур данных его можно отнести к языкам высокого уровня, а с другой – он имеет набор средств прямого обращения к функциональным узлам компьютера, а это означает, что его можно использовать как операционный язык.

©2015-2019 сайт
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16

Меня иногда спрашивают, что нужно выучить, чтобы стать программистом. Вопрос несколько наивный, т.к. нормально ответить на него по-моему невозможно. Т.е. для начала нужно выяснить, каким программистом нужно стать. Да и вообще, программистом ли? Кроме того, на рынке востребованы как высококвалифицированные дорогие специалисты, так и “рабочая сила”. Пакет знаний и опыта первых и вторых отличается в значительной степени.

Но, не смотря на такую расплывчатость вопроса, дать ответ на него все же можно. Можно описать примерный максимум знаний, которые так или иначе относятся к программированию. Собственно, этот максимум обычно и стремятся преподать в ВУЗах на специальностях, в названии которых фигурирует слово “программист”.

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

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

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

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

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

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

Первый уровень из CS (computer science) - Специальная база . Это стартовая площадка для любого программиста по четырем фронтам:

    арифметические основы ЭВМ (системы счисления и операции с числами, логические операции);

    физические основы ЭВМ (полупроводники, транзисторы, логические элементы, схемы, интегральные микросхемы);

    теория алгоритмов (алгоритмы и структуры данных; сложность, эффективность; способы представления информации в памяти);

    (архитектура ОС, процессы, межпроцессное взаимодействие, потоки, планирование, работы с памятью и переферией, POSIX-системы);

    системный анализ (предметная область, бизнес-процессы, потоки, диаграммы, принципы и теория системного анализа);

    базы данных (теория множеств, виды СУБД, реляционные СУБД, модели данных, SQL, конкретные БД).

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

Уровень 2 включает:

    разработку ПО (жизненный цикл ПО, этапы разработки, основы ведения программных проектов, инструменты);

    анализ данных (Data Mining, OLAP, машинное обучение, нейронные сети, ИИ);

    компьютерные сети (по уровням стеков TCP/IP и/или ISO/OSI “от и до”, протоколы, сетевое программирование на C/C++);

    языки программирования с управляемым кодом (управляемый код, виртуальные машины, сборщики мусора, юнит-тестирование, собственно практика на C# или Java);

Уровень 3 - последний уровень для среднего программиста. Он самый объемный и включает только те дисциплины, которые непосредственно связаны с разработкой ПО. Всего их получилось 6:

    разработка UI и юзабилити (принципы построения интерфейсов пользователя);

    управление командами и проектами (методологии разработки и другие вопросы управления);

    тестирование ПО (обзорно: виды тестирования, инструменты);

    веб-технологии (HTTP-протокол, веб-сервер, CGI, кэширование и проксирование, клиентское программирование);

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

    интерпретируемые языки программирования (особенности, основы по двум-трем языкам, практика по одному-двум языкам: JS, PHP, Python, Ruby).

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

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

    дает возможность понять, какие дисциплины нужны больше, какие меньше для работы в определенной специализации (просто выбрать основной предмет специализации и смотреть по связям и удаленности до других);

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

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

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

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

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

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

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

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

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

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

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



Рекомендуем почитать

Наверх