Обучение новому после WinForms
Всем привет!
Так сложилось, что на текущий момент я работаю Middle C# Desktop разработчиком, а именно под WinForms.
Из языков знаю C# и T-SQL, всё. Ситуация не из лучших, согласен :)
В связи с тем, что направление desktop умирает как таковое (ведь так?), вакансий становится всё меньше и меньше — я решил, пока еще не поздно, выучить что-то новое и интересное, и соответственно безболезненное для перехода с .NET, с чем можно будет спокойно плыть дальше.
Подскажите, пожалуйста, в какую сторону лучше посмотреть и на какие языки, и технологии обратить внимание уже зная C#.
Заранее благодарен!
55 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівтехнологии.. ну, Unity3D, например.
ASP.NET MVC Fundamentals — www.youtube.com/... sZw_uaxwtw5mM2IkKBfcnjxYQ sZw9FohaaH2utnCloyM_fqYhN
Entity Framework 6 — www.youtube.com/...
WCF —
WPF —
Только-только хотел порекомендовать asp.net mvc. Мне лично очень нравилась технология еще со времен ВУЗа. Веб-разработка на строго типизированном языке — это круто.
А UWP разве не рулит? Вам сам Бог велел туда оглобли поворачивать. Там на шарпе прекрасная дока. Единственное, что там мне не понравилось — если приложение неактивно, ОС останавливает его, несмотря, что там могут быть рабочие фоновые процессы
Нет, UWP однозначно не рулит в этой стране в оффлайн работе — joxi.ru/DrlldKYio5ZlrP.png
Соглашусь с Dmytro Zhluktenko, действительно редко где встречал вакансии с UWP.
Зачастую все хотят ASP.NET или WPF
Ну так UWP на базе WPF пишутся.
Вот если честно, по большому счету, кому сейчас нужен UWP? Microsoft прос.. т.е. упустили свой шанс и их Windows Store и рядом не стоИт с Google Play и Apple Store.
Нет, сейчас рулит web. А если все-таки про десктоп, то вангую, что после того как .NET Core станет мейнстримом, традиционные майкрософтовские фреймворки рулить перестанут и уступят опен-сорсным.
Если все-равно вэбом заниматься, то зачем думать о смене языка? Народ пишет на .Net бизнесс приложения.
Почти 10 лет назад я писал свое первое Desktop WinForms приложение. А под него до сих пор пишут. 1 год назад целый год я занимался поддержкой WPF приложения. Никуда не девается Desktop. Сейчас вэб сервисы на .Net использую в своем Salesforce.
Посмотри на Azure, Dynamics. Я бы не отказывался от .Net.
Понял, спасибо
Аналогичная ситуация, но работал и с WPF, работы мало, бывает приходит UWP (не понравилось) но это исключение чем правило всем подавай ASP.NET. Так как я хронически не переношу WEB, а от одного только взгляда на код JS меня тянет застрелится, ушёл в Unity3D работаю за копейки, перспектив не вижу кроме VR но пока оно войдет в массы есть опасность сдохнуть с голоду клепая социалочки на Unity3D. Сейчас смотрю на Xamarin хотя тоже вариант не из лучших, по многим причинам ! Мне жаль чувак, порадовать тебя нечем ...
Спасибо :) у меня ситуация чуть другая, работаю в стабильной компании, пишу модули для Enterprise приложения, которое полностью на WinForms, есть конечно и legacy-код, с которым иногда приходиться сталкиваться, но в целом всё Ок.
Но я не живу иллюзиями и прекрасно понимаю, что desktop рано или поздно загнётся, и его заменит web и кросс-платформенные решения (и в нашей компании тоже).
Тем более есть желание развиваться, заниматься self-education :)
Недавно игрался с Xamarin (когда он еще не был MS), честно скажу — не понравилось, показался чем-то недоделанным и сырым (но это сугубо моё мнение), хотя есть в нём и приятные штуки (XAML, MVVM и т.д).
В сторону Unity не смотрел, как-то не прёт меня разработка игр...
Вот сейчас начал изучать JS, в принципе синтаксис очень похож на C# и пока в обучении всё идёт легко, но нужно чуть переосмыслить, из-за его «сумасшедшей» динамики :)
На счёт Xamarin абсолютно согласен, по JS (не смотря на то что он мне не нравится) я немного трогал его используя Phaser.js и Three.js (всё для работы с графикой, так как я очень люблю графику в особенности 3D) то могу сказать что меня заинтересовало, даже может быть и рискнул бы перейти на него, вот только чисто по работе мало подобных предложений, многие хотят Ангуляр или ещё что-то для фронт-части, так что наверно хорошая затея смотреть в сторону JS аналога ему нет, работы на «фронте» куча, зная JS без работы не останешься ...
Так а вы тогда посмотрите в сторону TypeScript, в нём есть статическая типизация
Спасибо, почитал — интересно
А бэкенд в данном случае ASP.NET ?
Бэкэнд в данном случае что угодно
В варианте typescript+react получаются очень неплохие spa
Понял, спасибо, попробую!
Если будете смотреть в эту сторону, можно начать с этих видео:
Введение в программирование на TypeScript —
TypeScript Fundamentals. Урок 1. Введение в TypeScript —
ReactJS Essential. Урок 1. Введение в React —
Разработка SPA на React, NodeJS, Express и MongoDB —
Большое спасибо!
Я сейчас начал проходить видео-курс по JavaScript (Essential и Advanced) от CyberBionic
Чтобы понимать логику и основы, а затем думаю переключиться на изучение TypeScript + SPA
Не зависимо от контекста рекомендовал бы ознакомиться с WCF/WebAPI и Entity Framework.
Подавляющая часть новых проектов сейчас — это веб, т.е. ASP.Net MVC, а там могут понадобится и JS/jQuery.
Если не хочется переходить на веб, а остаться работать с back-end, то часто могут потребоваться знания по Multithreading, сборке мусора, оптимизации памяти и производительности при обработке больших массивов данных, построении распределенных систем.
EF, Multithreading, GC и всё вышеуказанное, что касается back-end’a — я знаю.
На счёт веба я еще пока не решился, хочу ли я туда :)
А вот на счёт «остаться с C# на бекэнде» с текущей ситуацией на рынке разве выйдет? Какие вакансии нужно искать?
Спасибо!
Есть чистый бекэнд — так и пишут в вакансиях «backend developer». В основном, разработка сервисов, REST API, какие-то инфраструктурные вещи, интеграции с другими системами, Azure/Amazon и т.д. Вакансии есть — это как раз мой профиль, поэтому регулярно интересуюсь. Но надо понимать, что Web там все равно присутствует, только без фронтенда. Так что надо знать, как работают HTTP запросы и все с этим связанное.
То, что вы долго работали на WinForms — это вообще-то минус для такой работы. Может сложиться впечатление у работодателя, что вы «формошлеп». Может оказаться, например, что Multithreading вы как раз и не знаете :) Сходите на пару собеседований — посмотрите, что спрашивают, потянете ли. WPF выглядит предпочтительней, конечно.
Мультитрединг придумали исключительно, чтобы выйобываться на собеседованиях. Больше ему применений нет.
Есть такая тенденция :) Тем не менее, на высоконагруженных проектах хорошо бы, чтобы человек разбирался, как сервер менеджит потоки, в асинхронности операций ввода/вывода и т.д. Еще пример: на последнем проекте использовалась очередь сообщений, которую обслуживали несколько рабочих потоков — писалось это вручную. Так что нужно бывает, особенно на бекенде.
Редкая фигня. Обычно 90 проблем из 100 возникает, когда .Net архитекторы из епама решают, что к базе нужно обращаться через LINQ-провайдер (LINQ как и потоки тоже очень вредная технология) любого из orm и никак по другому, параллельно поощряя размножение как раковой опухоли всяких ненужных IRepository.
Ага :) вместо архитекторов им нужны батраки, которые все плейн скл поправят при изменении схемы бд
Ага :) нужны одни архитекторы, чтобы тащить каждый параметр через 7 лэйеров.
годный наброс:)
Согласен. Разве что в некоторых нишевых направлениях. А на том же вебе можно вообще им не пользоваться. Я вот как начал работать с ASP.NET MVC (особенно на .NET 4.6, где решена из коробки проблема передачи культуры при запуске таска), уже и не помню, когда писал что-либо вне рамок async\await.
На счёт WinForms согласен, сейчас я жалею, что влез в это болото. Но раньше я, к сожалению, этого не понимал, нашёл работу и пошло поехало :( в итоге что есть то есть.
Не знаю, конечно, под какие критерии попадают «формошлепы», возможно, и меня можно приписать к их рядам :) но я занимаюсь полностью full-stack’ом (серверная часть, клиентская часть, CLR’ки и т.д.)
В моем понимании «формошлеп» это создание форм как основной вид деятельности. Т.е. постоянное решение бизнес-задач в ущерб техническим. Есть накатанные сценарии: как прочитать данные, как проапдейтить и основной челлендж это обработка событий интерфейса и дизайн. Хотя вот в WPF это все гораздо интересней и больше пространства для творчества. Вы еще смотрите, что лично вам ближе — если нравиться делать UI, то на WPF можно найти интересные вакансии. Потому как backend на .NET — это практически всегда ентерпрайз, хотя есть исключения.
Задачи по обработке больших массивов данных, ETL, агрегирование, создание API, интеграция разных сервисов — все это никуда не денется, и вебом эти задачи не заменить. Другой вопрос, что UI приложения все больше заменяют на сайты и поэтому работы, связанной с UI на бекенде все меньше. Если раньше ентерпрайз часто заказывал какой-то софа для внутренних нужд в виде десптопных приложений для своих сотрудников, то сейчас все чаще идет отказ от десктопных решений в польза веб решений.
Соответственно меняется типичных набор навыкой, необъодимых для бекенд девелопера: к примеру, понимание разницы в производительности for и foreach становится более полезно, чем понимание разницы между модальными и немодальными диалогами.
Насчет WPF я не слишком оптимистичен. Ему хоть и не грозит скорая смерть, как WinForms, но и развиваться там особо некуда, т.к. очень часто, когда можно отказаться от WPF в пользу SinglePageApplication на чем-то типа WebAPI+AngularJS, так и делают.
Часто Back-end упонимают явно. Но, если судить по набору скилов, то часто там будут в приоритете WCF/WebAPI, ETL, SSIS, всякие платформы для обмена сообщениями, типа RabbitMQ, системы репортинга а-ля SSRS, CLR хранимки и т.д.. Часто будет требоваться хороший опыт с базами данных.
Спасибо за подробный комментарий!
Последний абзац меня заинтересовал, т.к. front-end как-то не очень нравится
А вот опыт работы с базами MS-SQL есть, CLR-ки писал, с SSIS пакетами тоже когда-то сталкивался.
Буду подтягивать WCF/WebAPI, спасибо
На счет веба есть сильная тенденция по использованию asp.net только в виде restful web api сервера. Не рекомендовал бы так уж сильно рассчитывать на полноценную веб разработку только в рамках ms стека. Лично я, например, с классическим asp.net mvc/razor сталкивался последний раз 5 лет назад (там еще админка была на silverlight — клинический случай). Чаще клиентская часть реализуется в виде spa на typescript или flow.
.net не веб и не десктоп существует. Например, мы год пилили а-ля msmq систему, которая гоняла данные туда сюда. В энтерпрайзе такого полно. Платят. Скука вселенская. Ушел во фронтенд окончательно ))) Нужен был какой-то челенж для поддержания мотивации.
Спасибо! TypeScript действительно интересный вариант
WPF вакансий как по мне вполне достаточно, и миграция не будет слишком трудной/длительной
Спасибо, как вариант, но опять таки — это десктоп
Если честно, думал, что вакансий сравнительно мало, но даже на ДОУ — их достаточно
ничего плохого в десктопе нет, 100500 софта который никогда в веб не переедет
плюс такие милые вещи как оптимизационные задачи (OpenCL, CUDA)
много всего есть за пределами веба, просто веб — суть очередной мегатренд
как когда-то была дельфа
ASP.NET?
Спасибо
И вместе с ним: HTML, CSS, JavaScript, jQuery, Bootstrap, AngularJS, AJAX ?
А что здесь страшного такого?
Кроме того, если не full stack то для этого будет специально обученный фронтэндщик.
Я не говорю, что страшно, скорей значимо звучит :) т.к. я человек далёкий от веба
не считая того, что в винформах/wpf есть разумные стандарты, котрые нет смысла менять
а жс кадый год рождается заново, причем новая генерация взрывает моск даже опытным укротителям:)
Сам по себе asp.net после винморды выглядит ужасно, лучше пилить себе тихо сервисы на wcf или чистый энгуляр, реакт без верстки.
В смысле «выглядит ужасно»? Тяжелый для изучения/перехода/понимания?
Спасибо
сам начинал в Джаве с GUI, на Swing X, потом немного на SWT. да и до этого, имел дело с GUI на С либах, потом на Turbo Vision. и на Compact .NET, когда еще не было Андроида писал. WinForms да, тоже неплох...
и вот уж 2 года вебствую, и все равно неуютно от постоянного:
— Запомнытэ дэти, в русском языкэ слова «булька» и «вилька» пишутся
бэз мягкаго знака, а слова «сол» и «мол» — с мягким знаком.
Запомнытэ это дэти раз и навсэгда, патаму что понять этого нэвозможно!
веб-стек в силу объективных причин эволюции (а не чьей-то глупости или злого умысла) — ну очень хаотичен, с инженерной точки зрения. Кто сразу с него начал, воспринимает этот хаос как нормальный и естественный. а кто пробовал что-то более аккуратное по созданию UI...
если б не тренды, я б с десктопной разработки и не уходил бы. но, работы с тем же Eclipse RCP — почти и нет. а уж по Netbeans RCP (который ИМХО более джавовский) — только штатным программистом в каком-то отделе где есть легаси система на нем. постепенно умирающая :)
Изучение и переход ничего особенного не требует. Если сравнивать одинаковый функционал на вебе и десктопе скажем винформз девэкспрес, то веб ужасно долго и геморно.
Вот у меня как раз DevExpress на проекте
Грустно звучит :(Радуйтесь, что не Телерик ;)
Переход в Веб с декстопа требует «ломки» подхода к хранению состояний. В десктопе состояние формы вы просто храните в памяти вместе с объектом формы, не надо ничего придумывать. А в вебе каждое пользовательское действие — это новый запрос (или полноценный, или AJAX). И нужны механизмы, чтобы сохранить где-то состояние веб страницы между этими запросами. Разные фреймворки решают этот вопрос по-разному. Лично для меня это было очень непривычно при переходе с десктоп и вызывало основные сложности (ну и раздражение, конечно :).
webapi + angular spa без вариантов сейчас
Правильно я понимаю?
SinglePageApplication
Back-end: WebApi (ASP.NET project?)
Front-end: AngularJS, ну и HTML, CSS
Пока люди не знают, что такое react+redux, они думают, что кроме ангулара ничего нет. Ангулар хорош для одиночки-фрилансера: сделал по-быстрому и забыл. Для больших проектов или больших команд реакт предлагает лучшие концепции, чем ангулар. Особенно учитывая перспективу, что на существующие ангулар 1 приложения клиенту все сложнее и сложнее найти желающих. Что им делать? Заплатить еще столько же за переписывание на ангулар 2? Спасибо, Гугл.