Дискуссии о текущем положении C++ в мире программирования, как правило, делят участников на два фронта: одни этот язык недолюбливают, пророча ему скорую гибель; другие же наоборот утверждают, что на C++ писали, пишут и будут писать. Я бы сказал, что истина находится где-то посередине, но это означало бы, что C++ находится в неком «подвешенном» состоянии, в котором он был, например, между выходами стандартов C++03 и C++11. На самом деле всё обстоит немного иначе. Как? Давайте попробуем в этом разобраться.


Идём ко дну?




Ничего подобного. Может быть C++ не настолько популярен в плане изучения начинающими программистами, как C# или Java, может быть под него не затачиваются новые технологии, выпускаемые корпорациями-гигантами, может быть он не продвигается теми же Microsoft и Oracle, но сказать, что C++ пошёл на дно — значит нагло соврать. Программное обеспечение, написанное с использованием C++, никуда не делось и требует поддержки. Новое ПО, например, игровые движки, также вовсю использует C++, а стандарты C++11, C++14 и готовящийся C++17 только подтверждают, что дела у этого языка программирования идут неплохо. Но давайте обо всё по порядку.

C++11, C++14, C++17...




Как упоминалось ранее, между стандартами C++11 и C++03 язык находился в своеобразном «подвешенном» состоянии. Вроде бы развивались и дополнялась такие библиотеки, как boost, Qt и прочие, появился C++/CLI, а нового официального стандарта всё не было и не было.

Так продолжалось достаточно долго, да и стандарт C++11, планировавшийся к публикации в 2009 году, вышел только двумя годами позже. Но тем не менее вышел. И не просто вышел, а принёс собой множество дополнений, расширений и «синтаксического сахара». Писать с использованием нового стандарта стало проще и удобнее, в стандартную библиотеку было добавлено множество средств, облегчающих программистам жизнь. Была введена официальная поддержка параллельного программирования, что немаловажно, списки инициализации, призванные сделать код понятнее, лямбда-функции, наверняка нашедшие своих любителей… И это, конечно не всё, но статья немного об ином — перечислять все нововведения здесь смысла нет.

Отлично, стандарт C++11 вышел, а что дальше? Опять простой на 8 лет? А вот и нет. Ни для кого не новость, что уже вышел стандарт C++14. Нет, о таком расширении, какое привнёс C++11, и речи не идёт, но дополнения и улучшения имеют место быть.

Но что не менее важно — тенденция не потеряна и на горизонте уже виднеются заготовки для нового стандарта — C++17.

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

А что же со старым ПО?

Существующее программное обеспечение


С использованием C++ написано множество программного обеспечения. И, конечно, его необходимо поддерживать. Хотите взглянуть на реальные примеры? Пожалуйста, соответствующий список в помощь. Наверняка вы найдёте там немало знакомых продуктов. Не думаю, что кто-то кинется переписывать существующий работающий С++ код на C# или Java, только потому, что так будет удобнее в дальнейшем, потому, что «сборщики мусора» и т.д. и т.п. Выходит, что знания C++ снова необходимы. А с учётом того, что C++ стал намного удобнее в работе с выходом новых стандартов, идея писать модули/дополнения на современном C++ имеет место быть и не выглядит безумной. В дальнейшем такой код будет куда проще поддерживать. В то же время это всё тот же производительный C++, с обширнейшим набором возможностей. А дополненная стандартная библиотека позволит использовать уже готовые решения без необходимости изобретения велосипедов.

Популярность среди начинающих




На этом фронте дела идут не слишком гладко: С++ не слишком популярный язык среди начинающих программистов и существенно проигрывает таким языкам, как C# или Java. Почему? Тут можно выделить несколько причин:

Высокий порог вхождения




Наверное, нет такого программиста, который бы не слышал о сложности С++. Безусловно, язык обширен, нюансов — несчётное множество. Но что мы получаем взамен? Производительность + глубинный контроль происходящих процессов (особенно если несколько спуститься с C++ к чистому C). Тут опять же следует упомянуть про стандарт C++11, который более приветлив к новичкам, предлагая удобный синтаксис, различного рода контейнеры, алгоритмы и прочие удобные вещи, предназначенные облегчить жизнь и написание кода.

Тем не менее, хоть вероятность этого весьма снижена, прострелить себе ногу при желании всё же можно.

Слабое продвижение


Думаю, ни для кого не секрет, как продвигаются такие языки как C# или Java корпорациями-владельцами: Microsoft и Oracle. Не буду наверняка говорить про Java, так как с тенденциями на этом фронте не слишком знаком, но вот со стороны Microsoft продвижения весьма заметно. Большинство технологий Microsoft затачиваются именно под C#. Хакатоны, проводимые Microsoft, опять же проходят с использованием C#. Нет, это не плохо, просто констатация факта.

Для C++ такой поддержки нет. Да, для него выпускаются различные инструменты, позволяющие облегчить работу и процесс создания приложений. Тут стоит вспомнить тот же Qt, недавно вышедший ReSharper C++ от JetBrains. В Visual Studio 2015 ввели поддержку некоторых нововведений из последних стандартов, плюс некоторые дополнительные функции — работать стало удобнее.

Но с масштабом вышеупомянутых продвижений это всё же в сравнение не идёт.

Специализация


Несмотря на то, что C++ — язык, дающий разработчику, как говорится, все карты в руки, область его применения не всеобъемлюща и занимает определённую нишу. Конкуренты есть, это тоже оказывает свое влияние. Взять, например, мобильную разработку. Основные платформы заняты теми или иными языками: Windows Phone — C#, Android — Java, iOS — Objective-C. И это вовсе не означает, что под эти платформы нет возможности писать на C++, вопрос лишь в том, насколько это будет удобно и будет ли также эффективно. Для веба, разработка под который с каждым годом становится популярнее и популярнее, C++ тоже не очень подходит. Возможность работы с сокетами есть, библиотеки, наподобие Wt, есть. Но вы много слышали о веб-приложениях, работающих на С++? Вот и я нет. С учётом того, что мобильная и веб-разработка стали очень популярны и только набирают обороты, понятен выбор начинающих в пользу других языков.

TIOBE Index


Слова словами, но, как говорится, лучше 1 раз увидеть, чем 100 раз услышать.

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



Как видно, по сравнению с прошлым годом C++ не только не сбавил позиций, но и смог войти в тройку лидеров. Более того — это один из двух языков в пятёрке лидеров, рейтинг которых пусть незначительно, но тем не менее поднялся.

Заключение




Думаю, что вы уже сформировали мнение о текущем положении C++ в современном мире. Позвольте и мне высказать своё.

Кричать о том, что C++ живее всех живых нельзя, так как это было бы ложью. Говорить про то, что C++ умирает также нельзя, так как это ещё большая ложь.
С++ жив и занимает свою определённую нишу. Выходящие стандарты добавляют новшеств в язык, делая его удобнее и проще в обращении. Программное обеспечение, написанное на этом языке, также никуда не делось и требует поддержки. В определённых областях C++ как нельзя лучше подходит для написания программного обеспечения, а это, в совокупности с вышеописанным, означает одно — C++ актуален, развивается и сдавать позиции не намерен.


Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Sergey Vasiliev. C++ in the modern world.

Комментарии (70)


  1. georgthegreat
    08.06.2015 10:04
    +12

    Интересно, откуда в список вылез Visual Basic c приростом большим, чем у JavaScript?


    1. b3nd3r
      08.06.2015 10:08

      Может быть это VBA?


      1. georgthegreat
        08.06.2015 10:14
        +3

        Даже если и так, всё равно не понятно, откуда такой прирост.
        Всё стали программировать макросы в Excel?
        Это ведь единственное применение этой технологии?


    1. NightmareZ
      08.06.2015 10:13
      +3

      Говорят, туземцы очень даже кодят на бейсике под эти ваши asp.net


      1. georgthegreat
        08.06.2015 10:22
        +5

        Visual Basic .NET — это другая строчка, с существенно меньшим приростом.


    1. nobilix
      08.06.2015 13:05
      +8

      Давно уже замечено, что этот рейтинг не отвечает действительности.


  1. 1vertus1
    08.06.2015 10:10
    +8

    Несмотря на то, что C++ — язык, дающий разработчику, как говорится, все карты в руки, область его применения не всеобъемлюща


    Удивлен! В какой же это области нельзя применить С++?


    1. NightmareZ
      08.06.2015 10:19
      +12

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


      1. FoxCanFly
        08.06.2015 10:58
        -3

        Из веба у тех же google и Яндекс полно сервер-сайда на C++


        1. NightmareZ
          08.06.2015 11:00
          +12

          Это капли высоконагруженных сервисов в море обычного веба.


          1. dezconnect
            08.06.2015 12:07
            +1

            А нужен ли обычному вебу с++? В нашей компании к примеру сервер-сайд тоже частично на с++.


      1. Juster
        08.06.2015 11:58

        ActiveX же. Хоть и закрывает и устарел, но нельзя сказать, что «нельзя применить C++»


        1. ncix
          08.06.2015 12:31
          +4

          А при чем тут AciveX? Он никак к языкам не привязан.


          1. mayorovp
            08.06.2015 13:26

            При том, что с его помощью можно применить C++ в «браузер-сайде».


        1. dmitrmax
          08.06.2015 21:44

          Ну тогда уж и NPAPI (плагины к FF и до недавнего времени к Chrome).


          1. Antelle
            08.06.2015 22:32
            +2

            и emscripten


    1. QtRoS
      08.06.2015 10:27
      +6

      Согласен, в настоящее время самый кроссплатформенный и высокопроизводительный код на компилируемом языке пишется на C++.


  1. gurinderu
    08.06.2015 10:22
    -11

    Когда то в универе у нас был c++ и я страшно не любил программирование из-за этого. Позже появилась Java, с которой я сейчас и работаю, и полюбил писать код. Однако решил начать c++ с нуля и знаете, это чертовски крутой язык. Да, он сложнее, но он настолько крут, что даже Чак Норис не настолько крут.


    1. datacompboy
      08.06.2015 12:50
      +19

      Чак Норрис настолько крут, что минусует комментарии даже не зная что такое хабр.


    1. fshp
      08.06.2015 15:27

      Вы с ФП не сталкивались. После ФП понимаешь, что Scala/Haskell/Kotlin/OCaml/etc настолько круты, что всякие C++/Java кажутся жалкой поделкой (последние 3 года пишу на C++, говорю не от балды). Я опускаю вопрос производительности, т.к. спорить тут не о чем — числодробилки на C/C++, спору нет.


      1. 0xd34df00d
        08.06.2015 15:29
        +2

        Люблю Haskell и C++ одновременно, и с удовольствием пишу код на них обоих. Если стандарт плюсов достаточно свеж, конечно.


        1. fshp
          08.06.2015 15:32
          +1

          Да, мы пишем на старом стандарте. Новый приятен, не спорю. Но до ФЯП ему далеко.


          1. 0xd34df00d
            08.06.2015 15:59

            Конечно, далеко.

            Просто при написании кода на современном C++ я тоже получаю удовольствие. Иногда кажется, что весьма плохое и извращённое удовольствие, это да.


            1. IRainman
              09.06.2015 22:09

              Просто при написании кода на современном C++ я тоже получаю удовольствие. Иногда кажется, что весьма плохое и извращённое удовольствие, это да.

              Тоже очень люблю и практикую уже более 10 лет C++, далее поток сознания
              … и очень часто погружаюсь и ощущаю то Бесконечное Добро Сострадание и Милосердие, что содержится в нём :)

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

              Но как говорилось в одном анекдоте «у нас есть метод» ибо в стандарте есть Полностью Прекрасное sfinae, которым с помощью enable_if и оверхедом по коду в пачку функций таки можно добиться функциональности эквивалентной по смыслу if-у этапа компиляции.

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

              – Как же так? — удивляются физики, — Ведь в поезде контролёр, вас же без билетов оттуда выгонят!
              – Не волнуйтесь, — отвечают математики, — У нас есть МЕТОД.

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

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

              — А что же вы покажете контролёру?
              — У нас есть МЕТОД.

              В поезде физики набиваются в один туалет, математики — в другой. Незадолго до отправления, один из математиков подходит к туалету, где прячутся физики. Стучит. Высовывается рука с билетом. Математик забирает билет и возвращается к коллегам.

              МОРАЛЬ: Нельзя использовать математические методы, не понимая их!


      1. gurinderu
        08.06.2015 15:37

        Был у меня опыт написания на Scala,Groovy. Кратко и красиво спору нет.


  1. michael_vostrikov
    08.06.2015 11:02
    +2

    Мы в универе начинали с одновременного изучения C++ и Pascal. В C++ изучали в основном подмножество C, просто написание учебных программ без использования стандартной библиотеки. Он мне показался более понятным и удобным, чем Pascal. Но сейчас я пишу на более «высокоуровневых» языках.

    Скрытый текст
    В принципе, это неплохой язык для начального обучения, если не лезть в дебри метапрограммирования и сложных ООП абстракций. Потом уже можно переходить на другие языки, с пояснениями в плане «в C++ надо было делать так, а в этом языке это делается вот так, и это удобнее». Для начинающих будет более понятно, зачем придумали сборщики мусора, динамическую типизацию, и как устроена работа со строками. А то я пару раз сталкивался с вопросами вида «а почему C++ сам int в строку не конвертирует?».


    1. FoxCanFly
      08.06.2015 11:15
      +4

      А то я пару раз сталкивался с вопросами вида «а почему C++ сам int в строку не конвертирует?».

      А потом появляются вот такие статьи


  1. rznELVIS
    08.06.2015 11:24
    +4

    я сам убежденный .Net-Чик. для меня C# и JS это главные языки. но недавно столкнулся с задачей программирования по видеокарту. и понял что обёртки под .Net полная багнутая фигня. А C++ позволяет работать напрямую. Да и доки все под C++. Так что юзаю C++ и радуюсь. непросто но в целом после C# более менее освоил за неделю. но на C++ все равно будет только вычислительное ядро. всю бизнес логику буду выносить в C# обертку. в общем всему свое место — бизнес логике — C#, перофмансу и низкоуровневому доступу к железу — C++. думаю правда это и так все знают )))


    1. deniskreshikhin
      08.06.2015 12:07
      +3

      перофмансу и низкоуровневому доступу к железу — C++. думаю правда это и так все знают )))

      С таким же успехом можно было взять и обычный C без ++.

      А вообще довольно много уже языков поддерживают напрямую C-заголовки и линковку к нативным библиотекам: golang, rust, objective-c, swift.

      Так то выбор в этом плане намного больше чем кажется.


      1. rznELVIS
        08.06.2015 12:37

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


      1. nwalker
        08.06.2015 22:22
        +2

        Rust не поддерживает C headers.


        1. deniskreshikhin
          09.06.2015 00:33

          да верно, rust там лишний)


          1. RomanPyr
            13.06.2015 17:53
            +1

            в списке его можно заменить на Julia.


  1. evocatus
    08.06.2015 11:41
    +3

    А почему считается, что постоянно выходящие новые стандарты языка это хорошо?


    1. Door
      08.06.2015 11:54
      +12

      Как минимум потому что, скорее всего, это означает, что язык востребован, за ним следят, интересуются, понимают, что он «не идеален», пытаются улучшить, да и вообще, если есть стандарт, то скорее всего — у языка большая коммюнити…


    1. dmitrmax
      09.06.2015 00:53
      +2

      Потому что язык развивается, а именно:
      1) в стандарт попадают новые элементы стандартной библиотеки, делая ваш код менее зависимым от сторонних библиотек и более мультиплатформеным (при должном подходе);
      2) в язык добавляются новые синтаксические конструкции, которые увеличивают производительность (move-семантика, например);
      3) в язык добавляются новшества, которые позволяют делать код более абстрактным (различные trait'ы) и/или, например, ограждают программиста от допущения некоторых ошибок (например, ключевое слово override или конструкция static_assert).

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


  1. ncix
    08.06.2015 12:38
    +9

    Наверное, нет такого программиста, который бы не слышал о сложности С++.
    И большей частью — это миф. Да в языке есть непростые для понимания конструкции (привет, Александреску!) но вовсе не обязательно ими пользоваться. Можно писать в стиле Java или C# и иметь почти идентичный код. Но рано или поздно захочется поэкспериментировать с шаблонами и макросами.

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


    1. AllexIn
      08.06.2015 18:34
      +5

      И большей частью — это миф. Да в языке есть непростые для понимания конструкции (привет, Александреску!) но вовсе не обязательно ими пользоваться.

      Вот я тоже всегда удивлюсь фразам типа «С++ — сложный».
      Сам с паскаля на него за неделю перешел. И спокойно достаточно писал нормальный код.
      Уже больше 10 лет я пишу на С++.
      И сейчас могу встретить код, который поставит меня в тупик.
      Это же не сложность языка. Это сложность кода который можно на нем писать.

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


      1. burjui
        09.06.2015 13:01
        +4

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

        С++ это не принцесса, которая какает бабочками, а вполне конкретный язык, который объективно сложен. Скотт Мейерс достаточно компетентен, как считаете? У него есть что сказать о сложности C++: The Last Thing D Needs


  1. MichaelBorisov
    08.06.2015 13:59

    Мой цикл разработки высокопроизводительных приложений обычно таков:

    1) Написание алгоритма на C++ с использованием всей мощи конструкций этого языка и библиотек для того, чтобы код был красивым и понятным. Отладка алгоритма.

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

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

    4) Profit


  1. AxisPod
    08.06.2015 15:28
    +8

    К сожалению развитие C++ напоминает снежный ком, который рано или поздно просто превратится в черную дыру, с которой ни разработчики стандарта, ни разработчики компиляторов совладать не смогут. Возможности копятся, но старые костыли как были, так и остаются, чего стоит только механизм сборки и разделение исходов на 2 .h/.cpp, а еще ведь inline и шаблоны писать только в .h файлах, но всё остальное не надо, будет компилироваться долго, но почему-то никто не думает о том, что наличие одного файла в других языках не мешает компилироваться быстрее.


    1. 0xd34df00d
      08.06.2015 15:32
      +1

      Адекватные модули уже планируются, есть пропозалы.


      1. AxisPod
        08.06.2015 15:41

        Спасибо за наводку, поглядел чутка, опять попытка сделать что-то новое, но оставить старое. В итоге получим +1 фичу, но при этом .h и .cpp останутся, судя по тому что я понял, это нечто унифицированное типа precompiled headers. В итоге разделение по файлам на месте и никуда не делось. Да и при этом имя модуля одно, пространства имён другое, общего ничего, зачем опять это нагромождение сущностей. Почему нельзя было как в .NET, в проекте доступны все модули подключенные в проект, а уж хотите вы писать using namespace или нет, это ваше дело, нет лишней сущности в виде имени модуля.


        1. 0xd34df00d
          08.06.2015 15:42
          +1

          Потому что обратную совместимость нужно учитывать, к сожалению.


          1. monolithed
            08.06.2015 17:41
            +3

            "use strict" рано или поздно появится.


        1. ncix
          08.06.2015 19:54
          -2

          C# в некотором роде и есть работа по упрощению и декостыляции С++.


          1. dmitrmax
            09.06.2015 00:57
            +3

            C# — это ответ Microsoft на лицензионные претензии Sun касательно Java. Вспомните такую штуку как MS Visual J++ и то, как удивительным образом она исчезла после 6-й версии и появился .NET. К C++ это не имеет ни малейшего отношения.


            1. ncix
              09.06.2015 12:30
              +1

              Если на то пошло, Java тоже не в вакууме появилась. С-синтаксис какбэ намекает, откуда брали основу его разработчики. Но вы правы, стратегически C# это крайне удачный ответ MS на огораживание Java.


              1. dmitrmax
                09.06.2015 13:07
                -1

                Про удачность C# по сравнению с Java надо бы рассуждать в другом посте. Мой камент был к тому, что ни о какой декостылизации С++ в C# не может идти и речи.


        1. beduin01
          08.06.2015 21:34

          Ну кому нормальные модули нужны тот уже на D перешел. github.com/Syniurge/Calypso кстати позволяет использовать С++ библиотеки напрямую.


          1. AxisPod
            09.06.2015 07:41
            +1

            Так какие крупные компании перешли? Facebook попонтовались и всё. Переписывать полностью проекты никто не будет.


            1. beduin01
              09.06.2015 09:45

              www.sociomantic.com самая крупная использующая D повсеместно.
              Переписывать понятно дело никто не будет, однако новые проекты проще на D писать или на C# (кому нужен .NET).
              Сейчас вот с веб-сервером vibed разбираюсь. Пока очень радует.


  1. Cupper
    09.06.2015 02:13
    -4

    Статья ниочем. Кроме ссылки на TIOBE ничего вразумительного. Согласно томуже TIOBE C++ планомерно идет ко дну www.tiobe.com/index.php/content/paperinfo/tpci/C__.html, даже у Си картина лучьше www.tiobe.com/index.php/content/paperinfo/tpci/C.html


  1. zim32
    09.06.2015 12:13

    Дело еще не только в сложности с++, но и в сложной и запутанной инфраструктуре. Одни только системы сборки чего стоят: make, cmake, automake, qmake. Все это не слишкой юзерфрендли. Другие тянутся еще с незапямятных времен. Современному айтишнику привыкшему к девларативности на каждом шагу (json yaml xml) странный синтаксис того же make кажется избыточным


    1. zim32
      09.06.2015 12:23
      -2

      Намного интереснее выглядит возможность воплотить в железе ту же JVM, сделать на уровне языка что-то типо inline assembler только для jvm и вот вам скорость и гибкость


    1. FoxCanFly
      10.06.2015 20:24

      Для любителей юзерфрендли есть IDE, которые всё это генерируют сами.


  1. TimeCoder
    09.06.2015 16:05
    +1

    В статье упущено главное: решаемые задачи. Речь не о платформах (C++ не для web, Java для Android и т.п.), а вот о чем: на сегодняшний день по каким-то причинам C# используется для enterprise-проектов. И все. Из известных продуктов, написанных на WPF кроме АВ Касперского даже вспомнить ничего не могу. Xamarin не так популярен для Android, как Java.

    Это означает следующее: если вы — C# разработчик, то с высокой вероятностью придется заниматься автоматизацией бизнеса, так сказать. CRM, ERP, и прочие корпоративные проекты. Чем я занимаюсь последние 5 лет, что безумно надоело. Все интересные задачи, где много алгоритмов, наукоемкая предметная область, исследования и инновации — все на С++, но никак не C#. Печаль.


    1. mayorovp
      09.06.2015 16:18
      +1

      Где бы взять наукоемкие задачи, исследования и инновации в приложениях на WPF или под Андроид?..


      1. TimeCoder
        09.06.2015 16:46

        Наукоемкие — это не только обсчет данных с БАКа на суперкомпьютере. Хотя бы что-то связанное с исследовательской, а не бизнесовой предметной областью. На WPF можно очень быстро делать качественный UI — это актуально в любой сфере, в т.ч. и научной (например, на C# быстро можно вывести кучу графиков, сделать сложное окно со множеством регионов, отображаемых динамически в зависимости от условий, генерить word отчеты с кучей таблиц и пр.). Кроме того, что мешает разрабатывать коробочный софт (для пользователей) на C#?


        1. mayorovp
          09.06.2015 17:03
          +1

          Ничего не мешает. Но какая связь между наукоемкостью и WPF? Вычислить что бы то ни было и отобразить — это две совершенно разные задачи, зачем вы связываете одну с другой?


          1. TimeCoder
            09.06.2015 18:08

            Затем, что проще работать на одном стеке технологий. Далеко не во всех проектах нужна сверхпроизводительность, в .net кроме unsafe есть и другие способы написания вполне производительного кода, для работы с БД и параллельными вычислениями в .net есть хорошие решния — т.е. можно взять и написать на C# все, не только UI на WPF, но и все что ниже этого UI. Я не говорил о связи между интересными проектами и WPF, речь шла как раз о том, что этой связи быть не должно: есть задача, пишешь хоть на С++, хоть на C#. А сейчас это не так. Мне нравится C#, но не интересны задачи, обычно на нем решаемые.


            1. mayorovp
              09.06.2015 18:34

              Но что мешает решать на нем другие задачи?


              1. TimeCoder
                10.06.2015 12:59

                Работодатель, очевидно) Полистайте вакансии .net и C++ разработчиков, весьма ощутимая разница в проектах. В первом случае больше Enterprise, во-втором — интересные разработки чего-то нового (распознавание изображений, биометрия и т.п.). У каждого языка сложилась своя ниша, хотя оба из них — языки общего назначения.


                1. mayorovp
                  10.06.2015 13:06

                  Работодатель запрещает вам заниматься интересными проектами — или запрещает использовать C#?

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


                  1. TimeCoder
                    10.06.2015 14:27
                    +2

                    Возможность стоять у истоков нового проекта, выбирать для него технологии — это редкость. В большинстве случаев за каждой открытой вакансией стоит уже запущенный проект (в той или иной степени готовности), технологии выбраны, и нельзя сказать, что этот выбор свободен от сложившихся в индустрии стереотипов. В итоге, то что реально интересно, это С++ (нередко на Linux), а не .net (хотя он мог для этой задачи подходить еще больше). У сторонников Linux вообще какая-то обостренная нелюбовь к .net


                    1. antonpv
                      26.06.2015 21:03

                      А с чему им любить .NET, когда реализация его в виде mono была долгое время далеко не идеальна…


                1. FoxCanFly
                  10.06.2015 20:27

                  Эти задачи как раз требуют максимально-возможной производительности, нередко являющейся основным конкурентным преимуществом решения, зачастую то же распознавание изображений например должно быть в жестком реалтайме, оттого и C++


  1. mat300
    11.06.2015 04:52

    C++ — это безбрежный океан, где каждый может найти свой четко очерченный островок по своим возможностям и способностям.


  1. SerJook
    21.06.2015 11:30

    А вы скажите, на чем писать кроссплатформенные desktop приложения, с легким использованием любых API, предоставляемых конкретной платформой, если не на C++?


    1. datacompboy
      21.06.2015 11:36

      Python.