Какой язык программирования изучить новичку для написания GUI приложений?
===========================================================================

 Доброго времени суток! У меня есть знакомый которому 16 лет. Он хочет писать программы с графическим интерфейсом. До этого изучал немножко Pascal. Это показало что программирование ему интересно. Я посоветовал ему перейти на более актуальный ЯП. Выбираем между С++ и С#. Почитав отличия между этими ЯП (Так и не узнал существенной разницы. C# проще при изучении(+), заточен под msvs и microsoft(-), нет указателей(+)). Я сам начинал с С++ и сейчас изучение Java мне дается легко. Хоть С++ сложнее (как пишут на форумах) может все таки начать с него? 

 Python весьма неплох для всяких GUI, работаеет со многими популярными фреймворками(Qt,GTK,Kivy), не проблема нагуглить нужный код. И приложение можно легко перетащить под Linux(даже под андроед можно).  
  

После освоения Python, можно приступать к освоению C++ 

 Зависит от запаса времени и сил. Если знакомый имеет возможность учиться (уж в 16-то лет), то я бы советовал плюсы. Да, это достаточно хардкорно, но все-таки этот язык как средство разработки просто так никуда не денется, а C# после плюсов он выучит без проблем (когда он хорошо разберется в C++, ему самому захочется иметь для ряда задач такой язык, как C# или Java). Главное в том, что если он сможет дисциплинировать себя в рамках C++, и сможет писать работоспособные вещи, то будет знать, как вообще работает современное ПО, и для него любой другой язык будет просто инструментом, а не парадигмой.  

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

Если же знакомый слукавил, и еще совсем мало знает, то лучше начать с чего-то другого. Тут уже зависит от текущих интересов: если комп интересует как "железка", то лучше взять Си - будет "продолжение" Паскаля, если очень-очень охота быстро набросать формочку - то пусть берет C#.  

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

В плане инструментов Qt сейчас настолько крут, что даже под винду непросто выбрать: то ли его, то ли продвинутый, но сложный и слаборазвивающийся WPF, то ли противоречивый Windows Runtime.  

Кстати, насчет того, что сложнее - C++&Qt или C#&WPF еще можно поспорить. В первом случае сложен язык, но довольно проста библиотека, во втором - язык проще, но с WPF надо реально разбираться, чтобы им полноценно пользоваться. 

 В свое время когда я начинал программировать с QBasic`а и TurboPascal`a, особых вариантов куда дальше развиваться не было: С++. Реальный язык для решения реальных задач.   
  

Для работы с GUI в Win логичным продолжением было Delphi и С++Builder. MFC от M$ был настолько корявый (по моему мнению), что даже смотреть в его сторону не хотелось.   
  

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

Потом, мне опять понадобился GUI. Как раз .NET и С# к этому моменту поборол свои детские болезни. С# мне показался очень цельным языком и легким в обучении. С С# я наиболее полно разобрался с ООП (в С++ я с ООП как-то плавал: не складывалась цельная картина). Сейчас C# продолжает развиваться. Это современный язык. Есть много задач, для которых он идеальный инструмент. Впрочем С++ не отстает и современные спецификации тоже включают в себя практически все новинки. Но все равно С++ сложнее: есть куча способов запнуться на ровном (как минимум с точки зрения С#) месте, муторная работа с памятью.   
  

Сейчас при работе .NET с С# иногда возникает необходимость работать со старыми библиотеками, написанными на С++. В .NET есть такой язык как С++/CLR, который с одной стороны умеет работать с .NET, а с другой стороны спокойно работает с "чистым" С++ и становится спасительным мостиком в таких случаях. Кроме того, пару раз мне приходилось реализовывать в С++/CLR сложные, с вычислительной точки зрения, задачи. Сейчас правда вижу, что можно тоже самое было сделать не выходя за рамки С#, но в С++ это получилось все равно сделать проще.  
  

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

Совет, наверное, стоит сделать такой: изучайте С# для GUI, попробуйте для развлечения поковыряться с микроконтроллерами: там где реально нужно будет самому на С++ писать. Можно, например, для ардуино на с++ писать: и паять не нужно ничего, и стоит недорого. Не скетчи, а именно разобраться как с С++ работать.   
  

 Delphi  
![122211_600.jpg](https://habrastorage.org/files/017/f39/51a/017f3951a2b148f5b4a2a7bc290876dd)  

А так то все просто:  

- онли винда => С#  

- что то кроссплатформенное => или wxWidgets или html/css/js в браузере 

 С++ - не тот случай, чтобы было целесообразно бороться с языком,   

когда есть C# c прекрасными инструментами для написания GUI под Windows.  
  

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

 Qt если под C++. Перешел с билдера на Qt в апреле, сделал свой первый САПР для предприятия(на конкурс молодых специалистов) за 2 месяца. Кстати даже без использования формочек, мне удобнее через gridlayout все размещать)  

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

Словом впечатления - супер, супер, супер, всем рекомендую, Qt это очень круто 

 Ну опять двадцать пять.....  

JS JS JS 

 быстрый костыль Python+wxPython, параллельно копать в сторону веб-подхода: локальный http-сервер на Python + JS и GUI в браузере.   
  

Достоинства второго варианта   

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

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

 Если GUI только под Windows - однозначно C#+WPF.