Venho de ambiente desktop e quero desenvolver para web. O que preciso aprender?

Publicado em 2018-04-05 por Vinicius Assef

Essa é uma coletânea de algumas respostas que dei a pessoas com esse tipo de dúvida nas listas Python Brasil, Web2py Brasil e no canal Django Brasil do Telegram.

Basicamente a dúvida é: em desktop eu fazia tal coisa de um jeito. Como é em ambiente web?

As mensagens estão cruas, sem adaptação para um post. Portanto, tente entender o contexto.

2018-04-05

Autor da pergunta:

Boa tarde pessoal!!! Sou novo no mundo Python/Django, alguém pode me mandar print de telas de aplicativos Web feito usando o Django?

É que estou vindo do desenvolvimento pra desktop e la tenho um IDE que crio as telas e tals, depois escrevo o código

Eu:

Você já fez alguma coisa pra web?

Autor da pergunta:

Nunca! Como disse, venho do mundo desktop. E lá passei mais de 20 anos.

Eu:

Eu também passei pelo mesmo processo, há uns anos. Eu também passei mais de 20 anos em mainframe e em ambiente client/server.

Se me permitir, darei 2 dicas:

  1. Aprenda como funciona a web: requisição http (get e post), o que roda no front-end e o que roda no backend.

  2. Não queime etapas. Aprenda Python antes de aprender Django.

Aliás, eu recomendo você aprender Django depois que aprender os itens 1 e 2, acima. Mas se você estiver com pressa, pode aprender tudo junto? Claro que pode! Você só terá mais dificuldade e, provavelmente, vai errar bastante, já que seu objetivo é fazer uma versão web de um sistema desktop.

Outra coisa. Não se engane, para desenvolver um sistema web não basta você aprender a linguagem que chama de principal (Python, nesse caso). Você vai precisar aprender javascript, html e css, ou contratar alguém que faça isso para você.

Vai precisar, também, aprender alguma coisa de administração de servidores (apache, nginx, ubuntu), ou contratar alguém que faça isso para você.

No, mais, como você já tem experiência, manda ver!

Sugiro, humildemente, uma fonte de consulta: http://blog.aprendapython.com.br

Lá tem muita coisa para iniciantes em Python.

P.S.: desculpem o texto grandão.

Segue, agora, a resposta do @luzfcb para a mesma questão:

Estude o protocolo HTTP e seus verbos e fique esperto em entender que a requisição HTTP é livre de "estado", ou seja, uma requisição não sabe nada sobre o "estado" de outra requisição.

Estude HTML, CSS. Estude JavaScript. Estude as partes boas de JavaScript. Estude o que é minificaçao, transpilaçao, ferramentas e linguagens que usam transpilaçao, e para que servem. Escolha um framework JavaScript para frontend ( VueJS, Angular ou React). Entenda qual é a ordem de execução/processamento do CSS e JavaScript.

Teste o comportamento sua página web em diferentes tamanhos de tela e em diferentes velocidades de conexão. (Firefox, Chrome e outros tem ferramentas para auxiliar nisso).

O caminho é longo. (Eu ainda estou nesse caminho)

Use a técnica de babe steps para desenvolver.

Estude sobre testes automatizados e TDD

Incluir testes automatizados no seu software, inicialmente vai fazer com que você demore mais para desenvolver as funcionalidades, contudo, esse tempo extra é triplamente compensando pelo tempo e esforço que você e sua equipe não vai gastar debugando para achar bugs introduzidos em código que já estava funcionando e foi modificado por algum motivo. Testes automatizados asseguram que o que estava funcionando, ainda continua funcionando mesmo após você incluir novas funcionalidades e modificar funcionalidades já existentes

a dica que dou é: evite seguir hipe de ferramentas em geral

provavelmente surgiu mais uns 10 frameworks Javascript enquanto conversamos

Dito isto, no ultimo ano e meio, VueJS tem sido a opção que mais tenho houvido que as pessoas querem aprender, inclusive aqui onde trabalho, a outra equipe está usando em um dos projetos internos ( https://evolutio.io/curso/minicurso_vuejs#discussao )

o Django em sí é um framework bem estabelecido, com uma politica clara de atualizações, descontinuidade e retrocompatibilidade. Tem um ecossistema de extensões muito completo e etc. Mas django é só uma pequena uma parte do problema inteiro que é desenvolver sistemas para web.

outro carinha para estudar: a diferença entre via API Json, API Rest ou API Restful e API Soap: Esse curso me esclareceu muita coisa:

https://www.udemy.com/restful-apis/

2016-09-22

Título da mensagem inicial de 2015-03-29: "Python pra que?"

Autor da pergunta:

Boa noite a todos. Inicialmente desejo me desculpar por fazer a minha primeira postagem em resposta a uma mensagem que foi enviada há praticamente um ano e meio, mas essa mensagem traduziu exatamente o que eu concluí nas pesquisas sobre Python. Tenho percebido que muitos colegas questionam a verdadeira efetividade e vantagens desta linguagem, demonstrando muita desconfiança. Ao contrário, eu já concluí que me parece uma linguagem que vale a pena estudar. Como muitos, trabalhei por alguns anos com Delphi, mas após isso, fiquei muitos anos afastado do desenvolvimento, pois me dediquei à advocacia. Há algum tempo tenho sentido a necessidade de desenvolver um sistema para o meu escritório, iniciando com cadastros básicos. Desejo desenvolve-lo com tecnologia totalmente opensource para que o desenvolvimento possa ser comunitário e compartilhado. Me parece que a linguagem atende perfeitamente as necessidades de um sistema com cadastros (CRUD), relatórios, etc. A grande dificuldade que estou tendo inicialmente é iniciar o desenvolvimento dos cadastros. Sei que não devo comparar com o Delphi que possui Wizards para criar os forms, etc, mas gostaria de uma indicação da forma mais efetiva (rapidez+segurança) para criar esses cadastros, normalmente master/detail e campos calculados. Até o momento, muitas consultas me levam a pensar no Django, às vezes no flask, mas os vídeos que tenho visto sobre eles não me parecem uma ferramenta para RAD. Seria esta a melhor opção? A minha visão de completo desconhecimento da linguagem me faz pensar que os forms precisam ser feitos meio que na unha. Está correto isso? Obrigado e desculpem o tamanho da mensagem e pela dúvida tão básica.

Eu:

Oi (nome da pessoa), tudo bem?

Vou te responder usando termos simples, sem muito "tecniquês", pois pela forma que você elaborou sua pergunta eu percebi que você ainda não domina o ambiente de desenvolvimento web. Se eu me enganei, perdoe-me.

Antes de tudo, comece seu projeto usando Python 3, ok? Para mais detalhes, leia isso: http://blog.aprendapython.com.br/articles/python2-ou-3-1fr71/

Vamos lá, então.

Essa dificuldade inicial é natural. Delphi tem uma forma de criar telas que é muito prática. No mundo web o conceito é totalmente diferente. Totalmente mesmo. Sem exagero. Eu também já trabalhei com Delphi num passado distante.

Por definição, a web funciona em um modelo cliente-servidor. Essas duas partes precisam ser programadas separadamente.

A parte que você vê e interage no navegador é o cliente (o frontend). Isso é implementado usando sempre HTML e CSS, no mínimo e fazendo comunicação com o servidor (o backend). Dependendo da interação que você queira dar às suas páginas, você também vai precisar usar Javascript. Ou seja, 3 tecnologias para aprender.

Os frameworks Python, em geral, te ajudam na parte que não vemos: o backend. Basicamente, lá ficam suas regras de negócio e acesso a banco de dados. Aqui você vai programar Python mesmo. +1 tecnologia para aprender. Lembre-se que no frontend é HTML, CSS e Javascript.

Eu considero que hoje em dia é impraticável programar em Python para web sem a ajuda de um framework. Portanto, +1 tecnologia para aprender (o framework). E, dentro do framework, você também vai precisar aprender sobre templates, acesso a bancos de dados (sem escrever SQL na mão), estrutura MVC, orientação a objetos, etc. Portanto, bastante coisa para juntar.

Você vai precisar aprender também um pouco sobre o protocolo HTTP e sessions, por exemplo.

Aprender a programar na web tem seus caminhos diferentes de programar para desktop usando uma ferramenta RAD. Aqui, pelo menos que eu conheça, no mundo Python não temos nada parecido com RAD para web.

Então, respondendo sua pergunta: sim, você vai ter que escrever seus forms meio que na mão. Mas, dependendo da ferramenta que você escolher, existem componentes que te ajudam nisso. Mas personalização mais elaborada é na mão mesmo.

É muita coisa para aprender e leva um tempo para assimilar tudo, mas é compensador. As possibilidades são muito maiores do que as que temos acesso no mundo desktop. Os desafios também.

Você mencionou dois frameworks: Django e Flask. Qual é o melhor deles? Como quase tudo em T.I, depende.

Se seu perfil é totalmente iniciante em web, como parece ser, eu não escolheria o Flask para começar. Não, ele não é ruim, mas não acho que seja apropriado para quem ainda não conhece o ecossistema Python nem web por ele ser um microframework. Isso é opinião totalmente pessoal, ok? Talvez alguns colegas discordem.

Isso nos deixa com Django. Você encontra tudo quanto é componente ou biblioteca feita para funcionar com Django. Ele é reconhecido por ser um software open source com uma das melhores documentações. Você vai encontrar muito tutorial, video, livro, blog... explicando como fazer coisas em Django. Eu recomendaria Django.

Mas, novamente, depende da sua situação. Talvez uma lida nesses artigos que escrevi há algum tempo possam te ajudar também:

  • http://blog.aprendapython.com.br/articles/uma-visao-sobre-frameworks-fullstack-1fr67/
  • http://blog.aprendapython.com.br/articles/diferenca-framework-fullstack-micro-1fr66/
  • http://blog.aprendapython.com.br/articles/diferencas-django-web2py-1fr63/

No mundo Python as comunidades são muito receptivas. Além da qualidade técnica do pessoal, que é excelente. Temos muita gente gabaritada aqui no Brasil, fazendo muita coisa boa. Aprendemos o tempo todo com essa turma.

Espero ter esclarecido um pouco a situação.

Seja bem-vindo e abraços.

2014-01-10

Título da mensagem inicial: "Dúvida sobre aplicativos WEB ou DESKTOP"

Autor da pergunta:

mas como o Dreamweaver posso fazer os telas, botoes, grids... com codigo python... igual se eu tivesse fazendo tudo na mao, via codigo?

Eu:

Resposta curta: não, não pode.

Entretanto, se você fez essa pergunta, sugiro que leia a resposta comprida.

José, acho que está havendo uma certa confusão de conceitos aqui.

Vamos separar, grosseiramente, o mundo em 2 metades:

  • metade 1: aplicativos desktop.
  • metade 2: aplicativos web.

Aqui na lista de web2py, em 99,999% dos casos, falamos da metade 2, porque web2py, assim como Django, Flask, Bottle, Pyramid, etc., são frameworks para desenvolvimento web. A metade 1 normalmente é tratada na lista Python Brasil ou nas listas sobre PyGTK, PyQt, etc.

O Dreamweaver pode ser usado, basicamente, para 2 finalidades:

  1. Editor de programas: para escrever código na mão, como qualquer outro editor de programas existente. Ele tem coloração de sintaxe, que é muito útil.

  2. Editor visual de páginas web: para que você coloque os elementos de sua interface gráfica no local desejado e ele gere para você o código HTML equivalente.

Dessa forma, se sua pergunta fosse: "com o Dreamweaver eu posso fazer as telas, botões, grids, etc. visualmente e, além disso, editar meus programas Python?" A resposta seria "sim, pode".

Complementando, é importante ter em mente que nessa 2ª metade do mundo da qual estamos tratando, os aplicativos web, existem 2 divisões (também a grosso modo):

metade 2.1: O que o roda no navegador do usuário. Também conhecida como páginas web, interface com o usuário. Aqui, vale o que o seu navegador consegue fazer: mostrar HTML conforme as regras estabelecidas pelo CSS e interpretar javascript.

metade 2.2: O que roda no servidor web. Nessa metade é onde Python, PHP, Ruby, Java, ASP (e outras) rodam.

Ainda permanecendo na nossa metade 2 do mundo, o Python roda do lado servidor. E o browser recebe do servidor o que precisa mostrar para o usuário, que normalmente é uma página web, mas não necessariamente. Pode ser um arquivo PDF, uma planilha excel, uma imagem, um som, um vídeo, etc. Continuando com o raciocínio, as telas, os botões e os grids não são feitos em Python. São feitos em HTML. Uma exceção a essa regra é o Web2py, que tem helpers que geram código HTML. Exemplos: TABLE(), TR(), TD(), A(), H1(), etc. Muita gente usa esses helpers para gerar código html, mas eu, particularmente, considero isso uma prática ruim, devido ao acoplamento gerado entre lógica da aplicação e camada de apresentação, mas essa é outra história.

Ah, uma observação final: a falta de aplicativos que te permitam "desenhar" as telas para um aplicativo web, assim como você faz no ambiente desktop, não é uma limitação do Web2py. O ambiente web, por ser mais rico em recursos e lidar com o conceito de "página" e não de "tela", torna muito mais difícil o funcionamento correto de um aplicativo assim.

Pelo que você já percebeu, para fazer "telas" de usuário amigáveis e agradáveis, precisamos de, pelo menos 2 tecnologias funcionando juntas: HTML e CSS. O Javascript cada dia está mais presente, entrando e formando um trio quase que inseparável.

A partir do HTML5, a especificação é aprovada de forma modular. Ou seja, alguma nova especificação foi aprovada, não sai o HTML6. Ela é anexada ao HTML5. Isso dá uma dinâmica muito maior do que tínhamos há alguns anos. O CSS também tem trazido novidades numa rapidez grande. O Javascript é uma linguagem que também tem mudado e melhorado. Assim, o cenário que temos é muito diferente do ambiente desktop, onde você tem um canvas e nada muda.

Além disso, desenvolvedores web profissionais não usam Dreamweaver para mais nada. Isso caiu em desuso pelos profissionais há cerca de 10 anos. A dificuldade que você está enfrentando é normal e todos nós que não nascemos no ambiente web, vimos esse monte de coisa que precisa funcionar junta como algo muito estranho, a princípio. Não tem jeito, é a curva de aprendizagem.

É da natureza humana tentar transportar conhecimento de uma área conhecida, para outra que ainda não dominamos. No caso de aplicações web, acredite: não tente fazer isso com as interfaces com o usuário. Do mesmo modo que não devemos fazer isso quando migramos de desenvolvimento para interfaces de texto (clipper, por exemplo) para ambientes gráficos. Eu lembro que naquela época, eu ficava tentando encontrar um comando que limpava a tela, como se isso fosse necessário numa GUI. hehehe

Para terminar, tendo entendido isso, a resposta à sua pergunta inicial é: se você quiser trabalhar como profissional no desenvolvimento web, você vai ter que:

  1. codificar a interface com o usuário na mão, usando um editor de programas, ou;

  2. usar o visual gerado pelo framework web (o web2py te ajuda um pouco nisso), ou;

  3. esperar que desenvolvam um aplicativo para gerar a interface gráfica de modo decente, ou;

  4. desenvolver esse software. ;-)

Aí você para e pergunta: "mas eu só quero desenvolver usando Python. Não quero aprender HTML, CSS e nem javascript. Como faço?". As respostas são duas:

a) Contrate alguém que conheça essa parte, ou;

b) Não desenvolva nada para web, pois é mais ou menos como querer dirigir sem querer aprender o significado das placas de trânsito.

Espero ter ajudado.

Vinicius Assef

Eu sou apaixonado por Python e shell script.

Aprenda com seus erros e dê nome certo às coisas.