Доброй ночи, сообщество кодефорсес.
Я на днях от скуки попробовал писать Windows приложения.
С одной стороны это не очень сложно, но самому учится без учителя сложновато.
С Интернетом у меня получилось написать самое убогое приложение, но этого мало.
Подскажите, кто в этом не нуб, по чем вы учились? И что у вас в результате мучений получилось?
Буду очень благодарен. Это очень интересное занятие — писать свое приложение. И мне очень хотелось бы прошарится в этом хоть чуть-чуть.
P.S. Если на С++ писать это не лучший вариант, то попробуйте переубедить меня писать на чем-то другом.
Сам не эксперт, но пять копеек вставлю. В первую очередь выбор языка Си++ должен быть чем-то обусловлен. Если ты выбрал Си++ только потому что на нем пишешь олимпиады, стоит подумать еще раз.
Не хочу разводить срач про языки, но под винду приложения пишутся намного легче на C#, и работа с winapi легче (и формочки мышкой рисовать в той же Visual Studio будет легко, как и везде).
Так как приложения подразумевают нормальный GUI, то тут тоже надо думать. Можно, конечно все написать, как на делфи — все в любимых серых тонах. Сейчас же, в .NET модно писать на XAML для фреймворка WPF или на том же XAML для Windows 8 приложений.
Но есть и другие решения: Qt, GTK+ (2 & 3). У GTK+, насколько я знаю, весь API на C, поэтому связки можно найти для почти любого языка (включая любимый многими питон :)).
Можно вообще весь GUI сделать с помощью веб технологий (HTML, CSS, JS), средства разработки приложения для Windows 8 даже предлагают свой API на Javascript. Другой пример: brackets.io. Сделан полностью на веб технологиях, с оболочками для каждой платформы.
Когда выберешь платформу, тогда уже можно начинать учиться :).
Ну, что бы ты посоветовал новичку в этих делах? Если у меня есть более-менее нормальные знания языка С++, то на C# перейти будет сложно?
C# — совершенно другой язык, похожий лишь синтаксисом. Его всегда сравнивают с Java. Для C# есть 2 "платформы" — .NET(от MS, его родная среда, все фишки работают и разрабатываются там, сильно привязан к винде) и Mono(кроссплатформенный фреймворк, но вечно отстает от .NET). Проблема даже не в освоении языка (синтаксис учится за неделю), а фреймворк .NET, методы разработки и всякая прочая фигня, которая приходит только после пары лет активной работы в команде с бородатыми прогерами.
Что посоветовать новичку? А я и сам новичок, под винду сам C# пока не освоил. Прототип своего аппа пишу на веб-технологиях (на javascript то есть).
Опять же все зависит от потребностей. Нужна мелкая программулина с простейшим функционалом? Тут можно и в стиле делфи написать на Си++. А большие приложения ты сам с 0 будешь писать вечность и в итоге выйдет что-нибудь типа антивируса Бабушкина.
Да, синтакис выучить довольно таки несложно. А насчет бородатых прогеров не согласен. Для профессиональной разработки нужно читать книги типа "Принципы, паттерны и методики гибкой разработки на языке C#" или "Совершенного кода" и в то же время закреплять изученное разработкой более или менее серьезных проектов, не обязательно "для дяди", допустим систему учета товаров на складе и т.п. Да, она вряд ли где-то будет применяться, но это не важно, главное, получить опыт. Также можно заниматься фрилансом.
Лично я считаю, что просто читая умные книжки про паттерны, учишься долго и мучительно.
А если есть кто-нибудь, кого можно дергать 5 раз в день и задавать вопросы, кто объяснит тебе твои пробелы в теории и будет ревьюить твой код время от времени, то скорость увеличится на порядок.
(Я пока пробовал только второй вариант, поэтому ощущения мои могут быть ошибочными).
Про фриланс: никогда не понимал, кто будет нанимать контрактера без нормального опыта, чтобы он учился на твоем задании.
Писать на чистом winapi дело не благодарное. Мой совет используйте Qt (фрейворк) документации в интернете полно и также есть книги на русском. Плюсы кросс платферменность. Единственное что не привычно концепция сигналов и слотов, а не функция обратного вызова. Посмотрите советую. Это если выбор пал на С++. А также не забывайте про Java. Но очень большое количество примеров и документации и какая популярность. По личному опыту в netBeans на Java у меня получается писать приложения GUI в несколько раз быстрее.
Могу порекомендовать C#.NET + WPF. Для написания приложений под Windows это наиболее подходящий вариант. Т.к. есть опыт работы с C++, то освоить его, я думаю, будет не трудно. Для начинающего могу порекомендовать Дрейера "C# для школьников" или Троелсена. Для среднего уровня — Албахари.
А я вот все-таки не соглашусь с предыдущими авторами, агитирующими Вас начать с C#. Да, не спорю, программировать на C# с использованием Windows Forms или WPF очень просто. Но знать то, что скрывается под удобной оболочкой (дескрипторы, сообщения, устройства и т.п.), тоже полезно (хотя бы поверхностно). Рекомендую ознакомиться с книгой Чарльза Петцольда "Программирование для Windows 95". Не пугайтесь того, что книга настолько старая — основы с тех пор не поменялись.
Ну, когда я писал на С++ голый код мне было интересно, а когда скачал Qt — как-то там вообще все дико. Да, может там и легче, но все же с вами я не могу не согласится. Думаю, мне будет интересно почитать эту книгу.
>>C# с использованием Windows Forms или WPF очень просто.
Лишь относительно. Под всей кажущейся простотой, C# на самом деле очень сложный и мощный язык. Читая "CLR via C#", я все больше убеждаюсь в этом.
>>Но знать то, что скрывается под удобной оболочкой (дескрипторы, сообщения, устройства и т.п.), тоже полезно (хотя бы поверхностно).
Тут согласен, понимать, как в целом работают оконные приложения на Windows действительно нужно.
Пытаюсь осилить CLR via C# и тоже поражаюсь мощности шарпа и всего .NET&CLR (респект Андерсу Хейлсбергу). Но в который раз ловлю себя на мысле, что одну и ту же задачу можно решить десятками разных замысловатых конструкций и они все будут работать, но с разной степенью удобности и скорости. Как выясняется, все эти разные интерфейсы были введены на разных этапах развития языка и платформы и старые интерфейсы остались для обратной совместимости.
Что меня напрягает, так то, что не всегда понятно, какой интерфейс добавлен последним, какой "рекомендован производителем" и как мне блин просто получить json с сервера?
Как для новичка, меня это вечно напрягает, как справляются с этим люди?