[INDICAÇÃO] Por onde começar no desenvolvimento Desktop?

Recentemente estou interessado em programar softwares para desktop, anteriormente eu estava totalmente focado em desenvolvimento web, mas já tive uma introdução com Java (Lógica de programação, POO e estrutura de dados), e sinceramente odiei Java FX e as maneiras em que a linguagem lida com interfaces. Então, em uma pesquisa superficial (Vulgo incentivo do Akita) me interessei por C, C++, C# e afins, a minha questão agora é: Por onde começar? Primeiro: Começar por C# seria pular muitas etapas ou não há problema? (Já que só quero programar softwares, não um kernel ou bibliotecas utilizando C) Segundo: Depois que eu aprender o basicão: Váriáveis, condicionais, estruturas de repetição e POO, para onde devo ir? Terceiro: Poderiam me indicar conteúdos de qualidade sobre a linguagem (livros, cursos, vídeos e etc)? É isso rapaziada, valeu :)

Não me parece que seja pular etapas ir para C# no seu caso. pelo contrário, parece o caminho natural. De fato hoje quando se fala em desktop não é tão fácil achar solução melhor pronta (as melhores são para programadores bem hard core).

Dê um passo de cada vez. Não se preocupe com passos que podem nem ser oque deseja depois de dar o próximo. Os passos virão. Ou está fazendo algo errado no seu aprendizado.

Vou indicar o que virá no link abaixo :D Mas pode começar pela documentação já linkada por outra pessoa. Por enquanto é só o que eu digo, farei uma lista curada com responsabilidade daqui alguns meses. Chitar qualquer cosia fácil, eu tenho um compromisso maior.

Por favor, não caia na tentação de alguns. Desktop tem inúmeras vantagens que muitos resolveram ignorar, e as desvantagens podem ser todas solucionadas. Então faça desktop, não faça web fazendo de conta que é desktop (vulgo Electron, se for para fazer web e fingir que é desktop tem até coisas melhores para a maioria dos cenários - Electron só é solução porque a escolha foi porca e causou problemas). Só porque algo é popular não significa que deva fazer. E nem é tão popular assim. Para confirmar isso, web é extremamente popular, se for na popularidade não deve nem olhar para desktop. Popularidade não é tudo, qualidade pode ser mais interessante. Entenda que a maioria das pessoas vão mesmo pela popularidade. Sequer resolveram estudar sobre o assunto para decidir, ouvem influenciadores e acabou.

Ao mesmo tempo tenho que dizer que fazer para desktop é ótimo, mas também vai comprar briga. É como tocar música clássica em festa de pancadão. Ok, estou exagerando também. Se achar seu caminho terá um diferencial incrível.

Observou? Faz sentido para você?

Espero ter ajudado. Em geral estou à disposição na plataforma (sem abusos :D)


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Cara, você resumiu basicamente o que eu estava pensando, o Electron me pareceu tentador, mas se todo mundo está falando, significa que eu não devo entrar.
Electron é inchado, e ainda tem o Node built-in como dependência, e muito mais complexo que o tauri, apesar de obviamente oferecer mais recurso devido ao tempo de existência também. Observe que só recentemente o electron adicionou um suporte decente para os ES Modules.
Eu recomendo o https://tauri.app que utiliza WebView por trás e por tanto, o tamanho final do instalador é bem pequeno. Não que isso importe muito, mas tem um brasileiro como cofundador. Acho que para você que veio da Web pode ser uma boa. A questão é que aqui você vai ter que pensar mais em arquitetura de código para não virar bagunça. O tauri oferece uma API que disponibiliza funções que acessam os recursos do S.O. E é possível executar essas funções direto de um componente, por exemplo. O que para mim é um pouco grotesco, por isso que digo, o tauri não é nada opinativo sobre a arquitetura do código. Eu tentaria distanciar ao máximo essa [API tauri](https://tauri.app/v1/api/js/) do seu código de negócio, Clean Arch pode te guiar nisso. Te garanto que esse framework é relativamente simples de usar, se você considerar as funções básicas de S.O que um app desktop precisa (por exemplo, enviar uma notificação nativa), a API construida pelo tauri serve bem. Porém, se você deseja desenvolver sua própria função para chamar do seu front-end, [terá que utilizar Rust para tal](https://tauri.app/v1/guides/features/command). O tauri está em desenvolvimento para a versão 2.0, o que vai trazer bastante mudanças. Outro "problema" também, é o tempo de compilação da aplicação que é grande, mas isso é mais um problema de aplicações Rust com muitas depêndencias. Porém há coisas em desenvolvimento no time Rust pra diminuir esse tempo, pesquise depois. Outro fato legal do tauri, é que ele foca em pelo menos diminuir os problemas de segurança que existe no electron (ou exista). Tem recursos de isolamento para impedir que libs acesse coisas indevidas do seu S.O. Ah, e fique de olho também na WebGPU, essa tecnologia pode trazer avanços para aplicações desktop baseadas em tecnologias Web. Já que um dos percalços de tecnologia Web para desktop é justamente o desempenho de renderização dos elementos gráficos. Note que uma aplicação baseada em tecnologia Web, nunca passa uma sensação de uma aplicação nativa com fidelidade.
De fato é melhor que o Electron em vários pontos. Mas é pior em alguns. As tecnologias web não são lá muito estáveis. Ou seja, mudam alguma coisa no renderizador e seu aplciação pode sofrer. Por isso criuaram o Electron, não muda sem você saber, e essa á uma enorme vantagem que não pode ser desprezada. O prohlema é que ambos tentam dar solução para um problema que nem deveria existir. Tem várias soluções que usam webview, algumas nem precisam de dependências extras, ainda que isso tenha sua desvantagem também, já que teria que cuidar de várias coisas que não vem prontas. Porém, no final de tudo ainda é uma aplicação web se fingindo de desktop tirando várias das vantagens da plicação desktop. WebGPU pode fazer algum sentido, mas eu não tenho informações suficientes ainda. A a questão é que WebGPU não é web, até onde eu sei. Seria uma solução universal que criram para web mas que serve para resolver um problema que desktop também tem. Um dia poderei falar mais disso, inclusive se implementaram tuo certo e vão conseguir fazer funcionar sem depender de nada web, como parece poder.
Realmente, tem esse problema. Cada S.O. vai ter sua versão de WebView, WebView2 (Windows), Webkit2gtk (linux) e WKWebView (Mac). E cada um desses com versões diferentes, no caso do WebView, vem nativo no Windows porém usuários podem ter versões diferentes. Pra mitigar isso (não solucionar completamente) tem algumas formas. Tem que cravar a versão do WebView com o código do seu APP e recorrer aos testes de software. Outra é trazer o WebView embutido no bundle, o que aumenta o tamanho final do entregável, tauri da essa possibilidade. Existe outro problema também, que é cada WebView renderizando componentes de maneira diferente, mesmo problema existente nos navegadores. Aí o trampo tá na mão do dev mesmo de tomar cuidado com esses pontos. E sim, de fato ainda será uma aplicação web se "passando" de desktop. E realmente tem desvantagens, como a integração com o S.O será inumeras vezes mais crua do que as tecnologias C# desktop, com documentação melhor e mais tempo de existência. E outras desvantagens que me falta conhecimento pra dizer. Já usei WinForms e WPF, e a produtividade desses caras é algo q a stack web não oferece. Por isso que em um app que pouco importa a riqueza de interface, como um ERP com vários módulos, seria a minha escolha. As vantagens que vejo da stack web é o reaproveitamento de código fonte e o conhecimento. Fora que a riqueza de interface que JavaScript + CSS oferece, acho difícil uma tecnologia desktop faça o mesmo sem que o código fique gigantesco (as vezes inviável). E por outro lado, também acho difícil algo gráfico que a stack web não consiga replicar. (Ok estou desconsiderando desempenho ruim da web e a necessidade de uma interface com tanta "firula" em apps desktop). Um app "bem construído" com tauri é o https://www.spacedrive.com
Que ótimo que você falou da produtividade, porque quase todo mundo fala que web é muito mais produtivo, sem ninguém apresentar provas disso. Minha experiência não é essa. Eu até entendo que fazer desktop errado pode dar trabalho, e muita gente faz assim, entendo também que estão entregando tanta coisa pronta e ferramentas para ajudar com web, que fica até competitivo, mas se fizessem o mesmo com desktop seria ainda mais. Com 10% do esforço que colocam na web o desktop teria **todos** os problemas resolvidos. Inclusive com códigos curtos. Ah, hoje tem um monte de tecnologia que não é mais a dificuldade das GUIs originais. Rust mesmo tem várias soluções desktop com códigos enxutérrimos (deixa WF, WPF e afins no chinelo). E dá para por abstração em cima e ficar melhor ainda se quiser. Essa coisa de códigos grandes sempre tem solução simples (pode trazer algums desavatagem junto, tudo é *tradeoff*). Pena que quase tudo é meio experimental, não tem apoio forte para se tornar popular, mas do ponto de vista de engenharia, coisa boa não falta, falta o mercado ver isso e querer. Só para deixar claro para outras pessoas ainda inexperientes que possam ler aqui, ninguém tá falando de websistes, é de aplicações.

Electron não é desktop! Ao contrário do que muitos dizem, é desenvolvimento web. Ele embute seu HTML/CSS em um navegador embutido super pesado e que usa muitos recursos além do que precisa.

Desktop é para ser otimizado, usufruir dos recursos do sistema operacional e diminuir camadas de instruções até o processador central. Se você quer fazer algo certo, estude Windows Forms, C#, Qt ou Gtk+, ou até mesmo uma aplicação que rode em terminal, mas não misture web com desktop.

Uma boa aplicação desktop usa somente o que ela precisa e as melhores rodavam em até Windows XP. Electron (e similares) não rodam em máquinas inferiores ao Windows 10 pois são baseadas no Chromium. Algumas pessoas falam que nem certos processadores funcionam bem mas não consigo afirmar se isso é verdade.

Valeu! Eu realmente vou ter essa limitação do SO, então é importante saber o que usar.

em C# eu recomendo experimentaravalonia. ele permite criar aplicações desktop multiplataforma. mas mais interessante do que qual plataforma usar no frontend acho interessante você estudar padrões de arquitetura como DDD e Clean Architecture. A ideia nisso é você entender como consumir o mesmo código de diferentes maneiras como uma aplicação web, console ou desktop.

Já experimentei. Recomendo saber XAML antes de estudar o Avalonia, se aventurando um pouco no WPF Forms com C# mesmo, pois é mais leve e o conceito é o mesmo. Ainda não consegui ter uma opinião formada no Avalonia UI, mas é o propósito similar ao MAUI e o Uno UI.

Apenas mais um ponto de vista. Eu uso para desktop Lazarus/Delphi (ObjectPascal). Não sei se existe algo melhor para Desktop.

Basicamente permite a rápida criação de diversos tipos de aplicações nativas CLI, GUI, C/S, etc. bem como transpila para JS permitindo a geração para NodeJS, etc.. A minha instalação permite:

image

Você pode facilmente prototipar uma aplicação e ir refinando sem a necessidade de jogar fora o que foi feito (top-down). Um exemplo que coloquei em outro post aqui que mostra como pode ser desenvolvido um CRUD em 5 minutos ()

image

Um projeto com mais de 20 anos rodando em diversos SOs https://simthyr.sourceforge.io/screenshots.html

Uma boa opção é o flutter. Ele é uma "nativo" para diversas plataformas...E se lá na frente você mudar de ideia, dá pra ir para web ou mobile facil. Sem falar que existem muitas mas muitas bibliotecas para fazer diversas coisas com o fluter, o fluter preza muito pela facilidade em construir telas animadas e bonitas e tem alta performance. Dá uma pesquisada e coloca na lista de possibilidades. Agora se você quer performance e velocidade para execução de grande volumes de dados, vai de C++... Ou dá para mergear os dois, flutter para fazer telas hiper bonitas e c++ para cálculos pesados.

Flutter pode ser usado em desktop assim como o Electron citado, com a vantagem da compilação nativa em bibliotecas do SO. Quanto a C# no Microsoft Learn encontra tudo o que precisar.

Se quer desenvolver para desktop, use .Net e c# e o seu conhecimento de Java vai te ajudar a pular pro c#, eles possuem semelhança.

Não ha nada nelhor do que .net para desktop.

Voce pode construir aplicações com windows forms, WPF/winui3 (o whatsapp para windows utiliza ele) e por último voce pode utilizar o recem lancado MAUI com blazor e a biblioteca de terceiros mud blazor que é incrível.

Hoje em dia só utilizo maui e mudblazlr para criar apps desktop coisa mais linda e produtiva que existe.

Olá Nicolas,

Vou deixar meus 2 dedos de prosa.... Só opinião mesmo. Para desenvolvimento desktop existem "mil maneiras", então não existe certo ou errado, melhor ou pior.... Se pensar em ganhar fluencia em C++, tem o QT muito usado na industria, KDE é um exemplo classico, a STONE (maquininhas) usa QT, BMW ( em sistema embarcado), e outros. Em C#, eu usaria o ecosistema da Microsoft, afinal a criadora é referencia. Outra ferramenta que evoluiu muito, mas por ser paga, meio esquecida, é o Delphi, com uma base de codigo, desenvolve para iOS, Android, windows e Linux. Tem uma versao free. O Flutter é outra opção. O GTK é outra opção se pensar em opensource, pode usar com C, Rust por exemplo.

Tem o Tauri se quiser usar Rust, é uma solucao similar ao electron, onde você usa tecnologias WEB e embarca em um webview.

O conhecido Electron. Dispensa comentarios.

Enfim.....

É questao de começar, e nada melhor que ter um projeto, tudo fará sentido e aprenderá de verdade...

Meu conselho, pense um projeto, escolha a tecnologia e nao sr preocupe, afinal o objetivo é aprender....

Seja QT, GTK, C# com ecosistema Microsoft, Delphi, Tauri, GTK, Electron. No final do dia, o que vale é o que aprendeu....

Bons estudos.

Acredito que alguém já deve ter falado, mas eu recomendaria o Electron. Com tecnologias web (HTML, CSS e JS/TS), você consegue criar apps multiplataforma (Windows, macOS e Linux) sem uma curva de aprendizado muito sofrida. Aliás, a comunidade do Electron é muito ampla, e muitos apps famosos foram feitos com ele (como VS Code, Spotify, Slack, Telegram, Discord, Skype, Unity Hub, Microsoft Teams etc). Inclusive, no meu perfil do Medium, recentemente postei um artigo sobre criação de apps desktop com Electron e NextJS, é um guia pra iniciantes. Sinta-se à vontade pra dar uma olhada caso se interessar. Também, no meu GitHub, tenho 3 projetos de apps desktop feitos com Electron:

  • Local.Host, uma alternativa ao Xampp para construção de um ambiente local de desenvolvimento, com algumas features a mais, para Windows
  • Video Viewer, um app para reproduzir vídeo e áudio de dispositivos de entrada (placas de captura, webcams etc), para Windows, macOS e Linux
  • Mesh Viewer, esse é antigo, um app para visualizar arquivos de modelos 3D pensado para o Linux, mas funciona no macOS e no Windows também

Não poderia esquecer do recém lançado Kotlin Multiplatform que segue a mesma filosofia do Flutter. Mas ainda está em fase beta, também pode ser uma boa opção a ser considerada.

Oi Nicolas, experimenta o ElectronJs, você pode aproveitar o conhecimento de Web para criar apps desktop.

Acredito que o Electron seja o caminho mais rápido, tive a oportunidade de trabalhar com Electron-vite no desenvolvimento de um sistema de gerenciamento interno para um sindicato da minha cidade. E basicamente você faz um site que roda no desktop, com a vantagem de poder ser buildado facilmente para Windows, Linux ou Mac. Também é possível reaproveitar muita coisa do desenvolvimento web, no projeto que eu trabalhei, por exemplo, utilizei Vue e Tailwind. Acho muito legal poder utilizar toda essa bagagem de desenvolvimento de interfaces web, para desktop.

Se quiser dar uma olhada no projeto

Muito legal cara, vi que tem bastante gente recomendando então vou dar uma olhada especial na tecnologia. Agora só uma pergunta, é possível otimizar os softwares feitos em electron para rodarem em máquinas mais antigas? Estou perguntando pq vou ter que desenvolver um software que tem essa dificuldade, mas se não tiver muito problema, vai ser ele mesmo kkkk.
Por coincidência, eu estou passando por esse problema kkkkk. O sistema que eu mencionei precisa rodar em computadores bem fraquinhos e com Windows 8. Vi que eles deixaram de dar suporte para versões mais antigas do Windows a partir da versão 23.