Выбираем язык программирования исходя из требований к проекту

Как выбрать язык программирования для нового проекта

На данный момент я кажется окончательно вывел для себя правила по выбору языка для той или иной задачи. До этого многие годы писал на C++, C, Python, Java и Objective-C. Перепробовал кучу экзотических языков, таких как OCaml, Erlang, Scala, Lisp, Clojure.

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

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

Само же правило по выбору оказалось предельно простым: если в силу объективных причин задачу нельзя решить на Python, то необходимо оценить возможность использования Java, но если по объективным причинам не подходит и Java, то необходимо брать C++. Да, именно эти языки и именно в такой последовательности. И да, никакой экзотики типа OCaml, Erlang, Scala, Lisp или даже Rust.

Экзотика

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

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

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

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

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

Python

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

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

При всем богатстве библиотек, управление ими посредству pip очень просто и интуитивно понятно.

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

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

Java

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

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

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

Надо признать, что в случае с Java вопрос памяти и производительности довольно философский. С одной стороны на синтетических тестах скорость между тестами на Java и C++ будет различаться в 1.5-2 раза, в реальном приложении разрыв с большой вероятностью будет существенно выше.

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

Те же прошивки для принтеров написанные на Java с активным использованием Spring отлично работают на слабых MIPS-ах с 500Мб памяти “на всё”.

C++

Что удивительно, язык программирования кормящий меня уже почти 15 лет я поставил в самый конец списка.

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

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

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

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

Честно говоря, в голову практически не приходят причины почему нужно начинать решать новую задачу на C++ за исключением достаточно редких случаев когда миллисекунды или +-100 мегабайт памяти имеют значение. Во всех же остальных случаях лучше взять что-то (Java, Python) более простое в разработке и поддержке.

Маленькие команды и собственные проекты

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

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

А вот для меленькой компании или тем более для собственного любимого детища уже смело можно брать куда как более экзотические вещи, например заменить Java на Scala или Clojure, активно использовать C++ или даже Rust да и вообще ни в чем себе не отказывать.

Источник: http://sysdev.me/how-to-select-programming-language/

Сравнительный анализ языков программирования

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

Это актуализирует цель данной статьи – проведение сравнительного анализа языков программирования. 
Ключевые слова: язык программирования, среда программирования, инструментальные средства.

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

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

Следует отличать язык программирования (Basic, Pascal) от его реализации, которая обычно представлена в составе среды программирования (Quick Basic, Virtual Pascal) − набора средств для редактирования исходных текстов, генерации исполняемого кода, отладки, управления проектами и т.д. Синтаксис и семантика языка программирования фиксируется в стандарте языка. Каждая среда программирования предоставляет свой интерпретатор или компилятор с этого языка, который зачастую допускает использование конструкций, не фиксированных в стандарте.

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

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

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

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

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

а) характера самой задачи и технических требований;

б) наработанного инструментария и имеющихся для данной среды библиотек;

в) имеющихся в языке и среде программирования инструментальных средств.

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

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

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

С точки зрения того, внесены ли в набор понятий особые, специфичные для предметной области объекты, языки делятся на универсальные (процедурные) и специализированные. К последним можно отнести Prolog, Lisp.

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

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

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

В некоторых языках имеется универсальный тип (Variant в Delphi и Visual Basic), свободно используемый как любой из базовых типов. Степень контроля типов может быть очень разной − от полного отсутствия до крайне жесткого.

Важно наличие (возможно, в виде библиотеки) структур данных переменной длины, например, динамических массивов.

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

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

Читайте также:  Покупка нового смартфона cubot s550 на aliexpress.com - arduino+

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

Объединение структур и методов их обработки (инкапсуляция) создает значительные удобства при программировании. Возможность наследования позволяет привести в систему набор структур. Автоматически вызываемые конструкторы и деструкторы упрощают отслеживание взаимосвязей. Все это составляет удобный инструмент для описания понятий и действий прикладной программы.

Независимость от аппаратуры, реализуемая при помощи семантики, не зависящей от конкретной машины и внесением в язык ряда специфичных понятий – таких, как базовый тип с нефиксированным размером (int в C) [1].

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

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

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

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

Рожденный в 60 −е годы в Америке, Бейсик был задуман как простой язык для быстрого освоения. Бейсик стал фактическим стандартом для МикроЭВМ именно благодаря своей простоте как в освоении так и в реализации.

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

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

Современные, специализированные версии Бейсика (такие как Visual Basic) несмотря на приобретенную «структурность» обладают все теми же недостатками, прежде всего − небрежностью по отношению к типам и описаниям. Пригоден для использования на начальном этапе обучения, как средство автоматизации (в случаях когда он встроен в соответствующие системы) либо как средство для быстрого создания приложений.[2]

Разработанный известным теоретиком Н.Виртом на основе идей Алгола −68, Паскаль предназначался прежде всего для обучения программированию.

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

Наиболее известная реализация − Turbo/Borland Pascal − несмотря на отличия от стандарта Паскаля, представляет из себя среду и набор библиотек, сделавшие из учебного языка промышленную систему для разработки программ в среде MS −DOS.[3]

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

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

[4]

После продолжительной борьбы на фронте программных сред для Windows, Borland  ушла на рынок корпоративных систем. Delphi − это не продолжатель дела Borland Pascal / Borland C, его ниша − т.н.

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

Особое место в таких системах занимают возможности работы с базами данных.[5]

Как яркий пример специализации, язык Java появился в ответ на потребность в идеально переносимом языке, программы на котором эффективно исполняются на стороне клиента WWW. В ввиду специфики окружения, Java может быть хорошим выбором для системы, построенной на Internet/Intranet технологии.[6]

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

С++, сохраняя совместимость с C, вносит возможности объектно−ориентированного программирования, выражая идею класса (объекта) как определяемого пользователем типа. Благодаря перечисленным качествам, C/C++ занял позицию универсального языка для любых задач.

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

Для реализации проекта построения нейросетевой модели для прогнозирования временных рядов финансовых данных на базе многослой­ного персептрона, обученного по алгоритму обратного распространения ошибки (а также формализации полной схемы применения данной модели для анализа и прогнозирования временных рядов на примере котировок ак­ций российских эмитентов на ММВБ) выбрана среда разработки С++ Builder 2010, так как она сочетает в себе функциональность и хорошую скорость работы программ сделанных на С++, а также позволяют в кратчайшие сроки создать рабочую программу из готовых компонентов, не растрачивая массу усилий на мелочи.

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

ССЫЛКИ НА ИСТОЧНИКИ

  1. Джаррод Холингворт, Боб Сворт, Марк Кэшмэн, Поль Густавсон Borland C++ Builder 6. Руководство разработчика = Borland C++ Builder 6 Developer’s Guide. — М.: «Вильямс», 2004. — С. 976.
  2. Вик Курилович Visual Basic. − Издательство «Солон-Пресс», 2006 г., −С. 384.
  3. Андреева Т. А. Программирование на языке Pascal. − Издательство: Интернет-университет информационных технологий, Бином. Лаборатория знаний, 2006 г. − С. 240.
  4. Пильщиков В. Н. Assembler. Программирование на языке ассемблера IBM. − PCИздательство: Диалог-МИФИ, 2005 г. − С. 288.
  5. Желонкин А. Основы программирования в интегрированной среде DELPHI. − Издательство: Бином. Лаборатория знаний, 2004 г. − С. 240.
  6. Джошуа Блох Java. Эффективное программирование Effective Java. Programming Language Guide − Серия: Java Издательство: Лори, 2002 г. − С. 224.
  7. Лафоре Р. Объектно-ориентированное программирование в С++ Object-Oriented Programming in C++ − Издательство: Питер, 2011 г.

Источник: https://e-koncept.ru/2015/95588.htm

Какой язык программирования изучать школьнику 13-14 лет

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

Словом, учащийся 7-9 класса средней школы обладает теми преимуществами, которых нет (и не может быть) у ученика 5-6 класса. Добавим, что мы говорим о среднестатистических школьниках, а не о 9-летних гениях.

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

Одной из таких технологий является программирование – никто ведь не станет спорить с тем, что умение кодить сегодня занимает важное место среди навыков человека, идущего в ногу со временем?

Сегодня навыки программирования очень важны

По каким критериям выбрать язык программирования для школьника 13-14 лет? Вот основные из них:

  • Чистота и ясность кода
  • Удобная среда разработки
  • Стройность, логичность структуры
  • Возможность применять на практике, а не только в учебных целях

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

Итак, что нужно знать для успешного освоения программирования?

  • Во-первых, работу операционных систем – хорошо, если ребенок легко ориентируется в структуре каталогов и файлов, умеет устанавливать и удалять приложения, а слово «реестр» для него – не пустой звук.
  • Во-вторых, основные прикладные программы. К ним относятся файловые менеджеры, архиваторы, текстовые редакторы, ПО для работы с базами данных.
  • В-третьих, математику в пределах школьной программы;
  • И наконец, английский язык на начальном уровне. Это упростит задачу уже на первых этапах изучения любого ЯП.

Необязательно уметь останавливать пули – достаточно просто разбираться в компьютере

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

Выбираем язык программирования для подростка

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

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

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

PHP. Этот ЯП используется для создания динамических web-сайтов и сервисов: социальные сети, интернет-магазины, крупные порталы.

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

Только общение происходит не между людьми, а между человеком и машиной.

PHP отлично развивает логику, умение работать с мелочами. А в программировании, как известно, мелочей не бывает.

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

Добавим, что изучение языка Си требует настоящей мотивации – с ним вы не получите «все и сразу», как происходит с тем же PHP. Си требует вдумчивости, усидчивости и определенной «перестройки» мышления.

Pascal и Delphi. Скорее всего, сейчас в нас полетят камни, но мы включим эти языки в список. Хотя бы потому, что они до сих пор изучаются в школах и университетах.

Хотя бы потому, что на них «завязаны» задачки из ГИА и ЕГЭ по информатике.

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

Кроме того, здесь можно убить двух зайцев – познакомиться как процедурным (Pascal), так и с объектно-ориентированным (Delphi) программированием.

Читайте также:  Ноутбук для программирования: руководство для начинающих

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

Подводим итоги

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

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

Мы поможем не только выбрать «правильный» язык программирования, но и покажем все его возможности.
Записывайтесь к нам на курсы.Поделитесь статьей с друзьями

Источник: https://saikt-online.ru/kakoj-yazyk-programmirovaniya-izuchat-shkolniku-13-14-let/

Какой язык программирования выбрать

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

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

Направления и специальности

Как вы уже понимаете, больше нет профессии «программист». Есть целая вязанка профессий, и представители одной будут с большой натяжкой считать коллегами представителей другой профессии. Например — фронтэндер и embedded разработчик.

На сегодняшний момент я могу выделить такие программистские специальности:— Embedded разработка;— UI разработка;— Web-разработка;— Mobile разработка;— Front-End;— Game Dev;

— Enterprise.

Можно выделить еще несколько условно-программистских специальностей — automation QA, DevOps, администрирование и т.д. Но я на них останавливаться подробнее не стану, хотя все эти специальности интересны и позволяют заработать себе на хлеб с маслом.

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

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

Итак, поехали. И начнем мы по порядку.

Embedded разработка

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

Да что угодно, хоть электронная сигарета. Все это работает с использованием электроники, которую кто-то должен запрограммировать. И кто-то должен эту программу написать.

Вот именно этим и занимаются эмбедед-разработчики.

Основным используем языком там, насколько я знаю, является С++, но и асемблер, и даже языки более высокого уровня, вроде Java, там используются. Естественно это не совсем та Java, что в Enterpise. Все эти языки для данной специальности связывает именно сфера применения — специфичное железо, весьма специфичные задачи и близость к самому низкому уровню — проводам, электричеству, радиоволнам.

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

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

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

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

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

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

UI разработка

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

Почему так вышло? Ну все просто — десктопное приложение недостаточно просто написать. Его надо еще продать и, самое главное, — поддерживать. Причем — поддерживать не в Украине, а там, куда вы его собираетесь продавать. То есть у вас должен быть колл-центр в какой-нибудь США со всеми этими девушками «Can I help you?» и соответствующим сервисом.

Ну нет у нас пока фирм, которые могут себе такое позволить. Поэтому — забудьте на ближайшие несколько лет. Вот если вдруг сюда массово бросятся западные компания открывать центры разработки… Ну, вы это и без меня узнаете:)

Web разработка

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

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

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

С точки зрения разработчика, в этой области все весьма просто — порог входа очень низкий (ниже, пожалуй, даже найти ничего не удастся), достаточно широкий рынок, на котором легко начинать (как я уже говорил) и есть куда расти. Хотя, справедливости ради, надо сказать, что за счет легкости входа на рынок зарплаты в этом секторе оставались и самыми низкими в индустрии.

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

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

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

Поэтому и идет попытка заменить PHP на Ruby, Python или на что-нибудь еще более экзотическое.

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

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

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

Mobile (Android&iOS) development

Несмотря на то, что разработка под Android и под iOS ведутся на разных языках, все равно я объединил их в один пункт — сходство этих специализаций между собой гораздо больше, чем с любыми другими. Например — разработка под Android на Java гораздо ближе к разработке на iOS, чем к Enterprise разработке на той же (на самом деле нет) Java.

Итак, что мы имеем на этом сегменте? Относительно низкий порог вхождения — наваять небольшое приложение под Android/iOS в состоянии и студент у себя дома. Ничего запредельно сложного там нет, и получить опыт вполне реально.

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

И соответственно — дефицит квалифицированных кадров, и — следовательно — неуклонно растущие зарплаты.

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

Front-End разработка

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

Но постепенно JavaScript становился все навороченнее, AJAX поднял голову — и все, вуаля. На клиенте стало крутиться достаточно много кода. А потом пошло вообще страшное — синтетические языки, которые компилировались в JavaScript, навороченные фреймворки и много-много всякого другого.

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

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

Запрос у рынка большой, а порог входа достаточно низкий. Так что — очень неплохая специализация для новичка.

Но тут есть один нюанс: потребность в дизайне и качественной верстке — никуда не делась. И выполнять ее приходится практически всегда именно специалисту по Front-end. Так что вы должны быть готовы к тому, что Photoshop будет таким же частым вашим инструментом, как и любимая IDE. Ну все просто — кто-то же должен это делать. И никого ближе к дизайну просто нет.

Game dev

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

Во-первых, в Украине не так уж много гем-девовских контор. Да и все они достаточно мелкие. Так что суммарно рынок работы для гем-дева — очень небольшой. Это конечно, если не брать социалки. Там-то рынок существенно побольше, но я бы не стал даже сравнивать со всеми вышеперечисленными. Работы откровенно мало, и не видно, чтобы ее стало сильно больше

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

И наконец — зарплата. Ну скажем так — зарплата не такая уж и плохая. Но. Обратно пропорциональная интересности и пафосности работы. Чем интереснее проект — тем больше на нее охотников. Тем меньше зарплата — это рынок, детка.

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

Enterprise разработка

Сначала о том, что это такое. Речь идет о разработке программ (вернее, интегрированных систем управления предприятием) для крупных и гигантских компаний (по-английски, Enterprise). То есть все эти программы объединяют несколько общих черт: — Чудовищная сложность предметной области.

Достаточно сказать, что даже теоретически одному человеку невозможно понять, как всё работает даже в одном Enterprise предприятии. Для понимания необходимо иметь целый штат людей, которые понимают все (каждый — свой кусочек);— Огромные объемы данных.

Терабайтные базы, гигабайтные файлы передаваемых данных — это все про Enterprise. Сейчас уже считается, что никакого отдельного направления BigData нет. Все эти подходы применимы к большинству Enterprise разработок;— Большое количество legacy (т.е.

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

— Огромное количество внешних интеграций с другими системами. В среднем каждый Enterprise проект интегрируется минимум с 3-5 другими системами;

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

— Крайне консервативное отношение к используемым системам и фреймворкам. В enterprise вы практически не встретите софта, разработанного позднее, чем 5 лет назад.

Читайте также:  Ардуино шим: расшифровка, определение, примеры

Источник: https://dou.ua/lenta/articles/specialization/

1.6.1 Выбор языка программирования и среды разработки

Автоматизированная система «Графический редактор»

Пакет Microsoft Visual Studio.NET является интегрированной средой разработки (IDE — Integrated Development Environment), потому что с помощью одного только этого средства, не прибегая к помощи других, можно выполнить многое…

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

2.5.1 Выбор языка программирования и среды разработки

Для реализации проекта по созданию автоматизированной системы построения лабиринта и поиска выхода из него, языком программирования был выбран С#, среда разработки Visual Studio 2013. Среда разработки Visual Studio, поставляемая вместе с .NET…

Документирование процесса разработки программного обеспечения с использованием UML

3. Описание языка программирования или среды разработки особенности, включающее наименование языка (среды), основные особенности и причины выбора

В настоящее время разработаны средства визуального программирования на основе UML, обеспечивающие интеграцию, включая прямую и обратную генерацию кода программ, с наиболее распространенными языками и средами программирования…

Программа «Поисковая система на основе хэш-таблиц»

3.1 Выбор языка программирования и среды разработки приложения

В качестве средств разработки приложения мною были выбраны среда разработки Microsoft Visual Studio и язык программирования C#. Microsoft Visual Studio — линейка продуктов компании Microsoft…

Проектирование web-сервиса администратора гостиницы

2.2.2.1 Выбор языка программирования и среды разработки

Языком программирования web-сервиса был выбран c# и фреймворк для создания веб-приложений ASP.net MVС. C# — это реализация языка C# корпорацией Майкрософт. Поддержка Visual C# в Visual Studio обеспечивается с помощью полнофункционального редактора кода…

Проектирование автоматизированных информационных систем подачи заявки на доставку угля филиала «Кедровский угольный разрез»

3.4.4 Выбор языка и среды программирования

В качестве среды программирования выбираем C++ (C#) и SQL…

Разработка информационной системы туристического агентства

2.2 Выбор среды и языка программирования

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

Разработка программного обеспечения автоматизированной системы проектирования операций сверления отверстий

1.3 Выбор языка и среды программирования

Для реализации программного обеспечения выбор был сделан в пользу объектно-ориентированного языка C#, так как язык прост в обращении и достаточно гибок. Среда разработки — Visual Studio 2010, Net Framework 3.5…

Разработка программы «Калькулятор»

2.1 Выбор языка и среды программирования

Общее назначение программного средства — выполнение арифметических операций для использования в учебном процессе и повседневной жизни. Реализуемая задача состоит в том, чтобы при выборе действия выполнялась определенная операция…

Разработка программы для игры «Тетрис»

2.1 Выбор языка и среды программирования

Для реализации данного курсовой работы был выбран язык программирования Visual C#. Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода…

Разработка системы моделирования наблюдения за группировкой кораблей

2.1 Выбор языка программирования и среды разработки

В качестве языка реализации программного комплекса был выбран Object Pascal, а средой разработки — Delphi 7. При данном выборе учитывались следующие моменты: Поддержка объектно-ориентированного программирования, что облегчает создание сложных систем…

Разработка текстового редактора по шаблону «Turbo Pascal»

1.9.1 Выбор языка программирования и среды разработки

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

Решение задач с использованием ЭВМ

2.3 Выбор языка и среды программирования

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

Сортировка массива как один из способов его обработки

2.1 Выбор языка программирования и среды разработки

Для разработки программного продукта данной задачи был использован язык программирования С++ в среде разработке С++ Builder 6. В последнее время появилась потребность в эффективных средствах разработки программного обеспечения…

Эмулятор контроля АЛУ по модулю 3

2.1 Выбор среды и языка программирования

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

Источник: http://prog.bobrodobro.ru/5181

О выборе языка программирования

Данное сообщение навеяно очередной «войной» на rsdn.ru о выборе между С++ и C#.  

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

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

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

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

Интервью++: Бьерн Страуструп об эволюции языков  

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

— Учите (как минимум) по одному языку программирования каждый год.  
— Читайте по одной технической книге ежеквартально.   
— Читайте книги, не относящиеся к технической литературе.  
— Экспериментируйте с различными операционными средами.
Важно продолжать инвестирование. Как только вы почувствуете, что освоили новый язык или фрагмент технологии, двигайтесь дальше. Изучайте другой. Неважно, будете ли вы когда-либо использовать одну из этих технологий в проекте или даже не упомянете о них в своем резюме. Процесс обучения расширит ваше мышление, открывая вас для новых возможностей и новых путей в творчестве. «Перекрестное опыление» идей важно; попытайтесь применить выученные уроки к проекту, над которым вы работаете в настоящее время. Даже если в вашем проекте не используется некая технология, вы наверняка сможете позаимствовать некоторые идеи.
Эндрю Хант и Дэвид Томас. Программист-прагматик. Путь от подмастерья к мастеру  

Как сказал Дэвид Грайс (Gries) подход к программированию не должен определяться используемыми инструментами. В связи с этим он проводит различие между программированием на языке (programming in lanuage) и программирование с использованием языка (programming into language). 

Разработчики, программирующие «на» языке, ограничивают свое мышление конструкциями, непосредственно поддерживаемых языком. Если предоставляемые языком средства примитивны, мысли программистов будут столь же примитивными. Разработчики, программирующие «с использованием» языка, сначала решают, какие мысли они хотят выразить, после чего определяют, как выразить их при помощи конкретного языка. Стив Макконнелл. Совершенный код. Я привел три цитаты, каждая из которых говорит о второстепенной роли языка программирования в жизни разработчика. Причем автор одной из них имеет непосредственное отношение к одному из языков программирования! Конечно же, я не придерживаюсь мысли, что язык программирования не играет никакой роли. Нет, это не так. Я не считаю, что не нужно углублять свои знания в конкретном языке или технологии; не считаю, что нужно выбросить книги Герба Саттера и Андея Александреску, Джошуа Блоха и Билла Вагнера, и не зачитываться этюдами nikov-а на rsdn-е. Все это очень полезно. Но польза не только в том, что эти знания вы можете использовать сейчас на текущем проекте с текущим языком и технологией, а в том, что эти знания позволят перейти вам на следующий уровень своего развития и решать более сложные задачи в следующих проектах, уже на совершенно других языках программирования и совершенно других технологиях.

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

Эйнштейн неоднократно утверждал, что природа должна иметь простые объяснения, поскольку Богу не свойственны капризность и произвол. У программиста нет такого утешения: сложность, с которой он должен справиться, лежит в самой природе системы. а затем: Сложность программного обеспечения – отнюдь не случайное его свойство. Сложность вызывается четырьмя основными причинами: сложностью реальной предметной области, из которой исходит заказ на разработку; турдностью управления процессом разработки; необходимостью обеспечить достаточную гибкость программы; неудовлетворительными способами описания поведения больших дискретных систем. Как вы можете заметить, не один из этих пунктов не содержит фразы: «сложность программного обеспечения обусловлена неверным выбором языка программирования». Кроме того, вам будет довольно сложно найти цитату авторитетного автора, который бы сказал что-то вроде этого: «Изучение языка программирования А – это ваш путь к успеху. Благодаря ему уже через полгода его изучения вас ждет почет и уважение в среде разработчиков по всему миру, вы будете президентом корпорации и будете ездить на Bentley, а вот если ваш выбор остановится на языке программирования Б – вас ждет позор, забвение и жизнь на помойке».

На закуску, хочется привести еще одну цитату Ханта и Томаса:  

Программирование – это прикладное искусство. Простейший его смысл заключается в следующем: заставить компьютер делать то, что вам нужно (или то, что нужно пользователю, работающему с вашей программой). Программист – он и слушатель, он и советник, он и переводчик и даже диктатор. Вы пытаетесь ухватить суть не совсем ясных требований и найти такой способ их выражения, что только машина сможет оценить их по достоинству. Вы пытаетесь задокументировать работу так, чтобы она была понятна другим, спроектировать ее так, чтобы другие могли на нее положиться. Кроме того, вы пытаетесь сделать все это вопреки безжалостному ходу стрелки часов, отсчитывающих время, отпущенное на проект. Каждый день вы совершаете по маленькому чуду. Это непростая работа.
Многие предлагают вам помощь. Фирмы-поставщики инструментальных средств настойчиво говорят о чудесах, которые творят их программы. Мудрецы от методологии заверяют в том, что их средства гарантируют результаты. Каждый считает свой язык программирования лучшим из лучших, а операционную систему – панацеей. Разумеется, эти утверждения неверны. Простых ответов не существует. Не существует такого понятия, как наилучшее решение, будь то инструментальное средство, язык или операционная система. Существует лишь некие системы, которые являются более приемлемыми при конкретном стечении обстоятельств. И в этот момент на сцену выходит прагматизм. 
Стоит избегать обряда венчания с конкретной технологией, но при этом необходимо обладать подготовкой и опытом, настолько обширными, что это позволит выбрать верные решения в конкретных ситуациях. Ваша подготовка происходит из понимания основных принципов информатики, а опыт основывается на разнообразных практических проектах. Теория и практика сочетаются, придавая вам силу. P.S. Если вы хотите стать хорошим программистом, то нужно решать сложные задачи в интересном коллективе. При этом язык программирования играет лишь второстепенную роль.

Источник: http://sergeyteplyakov.blogspot.com/2009/04/blog-post.html

Ссылка на основную публикацию