Executando verificação de segurança...
4

[AJUDA] Qual seria a melhor linguagem?

Olá, pessoal! Bom, eu e meu amigo (ambos sem muita experiência no ramo da programação) fomos desafiados por um dono de uma empresa de turismo para a criação de um software em que suportasse todas essa exigências abaixo:

Criação de um software para a gerência de uma empresa de turismo. Aonde o funcionário possa cadastrar o cliente, para ter no sistema dados como serviços receptivos, translado de chegada e de saída, transferência de hotel, passeios turísticos, datas, voos, hotel em que a pessoa está hospedado, tipo de serviço (regular ou privativo), precisa gerar ordem de serviço de chegada/saída, gerar uma planilha de serviço do dia pra escalar o carro que vai ser usado...

Gostaria de conselhos para a execução desse serviço, como por exemplo: qual linguagem mais viável para usar no desenvolvimento desse software, dado que é uma empresa de médio porte.

Obs: Eu comecei a estudar python, e esse meu amigo começou a ver Java, porém um conhecido nos deu uma dica para estudarmos C# para o desenvolvimento desse software.
Obs²: Temos até final de 2023 para entregar o projeto.
Obs³: Navegador/Aplicativo para desktop

Carregando publicação patrocinada...
4

A escolha das tecnologias que serão utilizadas vai depender muito dos requisitos e restrições do negócio.

Faça o levantamento de requisitos e separe os requisitos funcionais e os não funcionais.

Estes requisitos funcionais, são os requisitos de negócio.

Os requisitos não funcionais, são os requisitos técnicos.

Com base nos requisitos técnicos, você consegue tomar a decisão de quais tecnologias utilizar.

Mas entenda que a escolha de linguagem de programação é uma escolha baseada em conhecimento da mesma, não adianta eu indicar para vocês utilizarem Python, se o time só conhece Rust... é necessário ter bom entendimento do tema.

Também pode ser utilizado como pontos de decisão a performance, segurança, tempo de desenvolvimento, legibilidade... enfim, assuntos que precisam ser respondidos antes e aí você terá a melhor decisão para o momento.

Lembre-se também, que independente da linguagem de programação escolhida, você terá que lidar com atualizações ao longo dos anos e também lidará com as dívidas técnicas que podem se formar.

Nenhuma tecnologia é imune a desgates decorrentes do tempo.

Escolha também qual será seu foco inicial: Se for web, talvez criar uma página web não seja o suficiente para as necessidades que você terá, logo seria interessante também trabalhar com Web Apps ou algum PaaS ou SaaS para atender a todas as demandas que acontecerão.

Tem que ser linguagem de programação mesmo? Não poderia ser soluções No Code/Low Code? Existem diversas soluções nessa linha que poderiam acelerar a entrega de vocês nesses quesitos que especifiquei acima.

Quem serão os responsáveis pelos vários ends? Front-end, Back-end, Cloud-end, Data-end, etc? Fique ligado nisso também, para não sobrecarregar a equipe transformando cada membro em EUquipe e obrigando-os a serem fullstacks (não que seja ruim, mas será muito ruim se o retorno financeiro não acompanhar e o retorno em qualidade também!).

Qual será a metodologia utilizada? Waterfall, Ágil, etc? Essa escolha afeta diretamente nas entregas, nas estimativas, nos custos, nas decisões a serem tomadas.

Já ouviu falar do conceito Mobile-First? É a ideia de começar um projeto pensando primeiro no Mobile, entregando as funcionalidades para ele e resolvendo todos os requisitos e restrições para o mobile e já que seu projeto é mobile, pensa nisso direitinho.

Detalhe importante sobre as linguagens de programação:

  • JS está atingindo um nível de omnipresença absurdamente alto. Está presente no Browser (React, VueJS, Angular2), Desktop (Electron), Mobile Android e IOS (Reactive Native) e Back-end (NodeJS, DenoJS).
  • Dart também tem esse nível alto, mas ainda está amadurecendo em algumas pontas. Dart está no Browser, Mobile (Android, IOS) e Desktop com o Flutter e Back-end com o Dart.
  • Python está nesse nível de forma robusta no Browser (Django, Flask), evoluindo em estágio avançado já no Mobile Android e IOS e Desktop (Kivy, BeWare, PyQT) e é uma linguagem muito poderosa para o Back-end, que está se tornando cada vez mais performatica (as últimas atualizações trouxeram ganhos) e segura. Tem a vantagem também de ser uma ferramenta muito utilizada por cientistas de dados e para Machine Learning. Enfim, Python tem suas vantagens e desvantagens.
  • C# e .NET tem todas essas vantagens e é uma linguagem muito utilizada para criação de jogos também. Então é possível utilizar no Browser, Mobile, Desktop, Back-end, IoT, enfim, é uma linguagem bem versátil.
  • Java é a linguagem mais comum e muitos serviços e sistemas que conheçemos hoje no mundo. Java está no Mobile (Android), Browser, Desktop, Back-end, IoT, enfim, java está em tudo!

Escolher java ou C# para seu projeto, é uma escolha segura de que lidará com linguagens que já atuaram em diversas áreas e visões e não falharam ou as suas falhas já são conhecidas e controladas (algumas nem tanto rsrs).

Mas, escolher JS, Python ou Dart é uma escolha mais "moderna" pelo fato de existirem tantos frameworks que alavancam o uso da linguagem e essas linguagens trazerem o que há de melhor das linguagens mais utilizadas. Não seria má escolha ter Javascript no core do projeto hoje em dia.

Porém, ainda existem diversas outras linguagens como Lua, Elixir, Perl, Ruby, Rust, PHP, Golang, Zig, V, C++, C só para citar alguns exemplos de que podem ser perfeitamente melhores em determinada situação ou em todas as situações e que realmente pode combinar com seu propósito e projeto.

Deixo aqui uma imagem não para escolher uma linguagem para projeto, mas escolher uma linguagem para aprender.
Qual Linguagem de Progamação Aprender Primeiro?

Obs.: Não estou sendo generalista, pois não conheço profundamente cada linguagem, mas com base na minha experiência na escolha de tecnologias, sei que sempre existirão características em cada uma delas que será fator decisivo de escolha e uso da tecnologia.

Obs 2.: Não existe tomar a melhor decisão definitiva para uma tecnologia, pois sempre irá nascer uma tecnologia melhor logo logo, mas existe tomar a melhor decisão pautada em fundamentos e os fundamentos dificilmente mudam, vá por eles que é sucessinho puro!

1

Uau!! Que aula 👏🏻 com uma visão ampla dessa sobre o assunto me instiga cada vez mais a estudar o básico de cada linguagem, pois eu penso que aprendendo o básico de cada uma vai fazer com que eu possa ter uma melhor visão de desenvolvimento de projeto futuramente! Obrigado pela dedicação em seu comentário para me ajudar a sanar essa dúvida! Com certeza me norteou bastante!

2
3

Qual for a linguagem que decidirem aprender se preocupem em aprender também sobre testes unitários.
Testes unitários irão fazer com que vocês comecem a utilizar boas práticas de programação, como por exemplo uma função/método/classe ter apenas uma única responsabilidade.
Aprender a utilizar testes irá fazer com que tenham menos bugs nos seus códigos, principalmente se decidirem ir em um caminho utilizando uma linguagem dinâmica.

E só reforçando um ponto que já apareceu em uma resposta anterior: Tentem realmente trabalhar com entregas funcionais pequenas, dessa forma o cliente já irá utilizar a solução encontrar problemas e sugerir melhorias.

Tenham bons estudos e bom trabalho!

1

Como é gratificante poder receber conselhos de pessoas mais experientes de forma totalmente gratuita nesse forum! Muito obrigado pela dica, Zero! Irei me atentar em relação a esses 'testes unitários'.

3

Conselho: Não comece um projeto pensando na linguagem de programação

A linguagem não importa agora

A linguagem em si não faz muita diferença, todas as linguagens modernas podem atender esses requisitos tranquilamente: JS/TS (com node), PHP, Ruby, Python, Java, C#, Rust... escolha que estiver melhor familiarizado e siga em frente.

Dessa forma o problema não é a linguagem, mas sim outras coisas que você precisa se preocupar antes mesmo de escrever a primeira linha de código:

  • Escopo do projeto
  • Regras de negócio
  • Arquitetura

Como você é iniciante, vou dar uma resumida nos pontos, mas é importante que você procure mais informações a respeito

Escopo do projeto

Junto ao solicitante, vocês precisam definir algumas coisas:

  • O que é esperado, por exemplo: o que vai ter na área de cliente, na área de administração, se vai haver envios de mensagens (e-mail, SMS, whatsapp, ...). Isto tem que estar o mais claro possível
  • O que NÃO é esperado, por exemplo: que o sistema irá fazer a reserva sozinho no site da booking.com, este tipo de coisa é importante para que o cliente não crie expectativas além do que foi combinado. Isso é mais importante do que o item anterior.
  • Datas, em um sistema grande como esse é importante definir as data aproximadas das entregas, ou seja, até que dia para os usuários conseguirem cadastrar clientes, até que dia para cadastrar os passeios... Isso é importante para não entregar tudo de uma só vez e o cliente dizer que não é aquilo que espera, com entregas pequenas e frequentes vocês vão aproveitando o feedback e corrigindo o curso do desenvolvimento quando necessário

Regras de negócio

Com base no escopo, é necessário ter clareza das regras de negócio, por exemplo:

  • No cadastro do cliente é necessário validar o CPF?
  • A quantidade de datas disponíveis no agendamento será configurável?
  • Quem tem acesso as configurações do sistema?
    Essa etapa costuma ser bem chatinha, é uma coisa que será revista constantemente, é normal em cada entrega você descobrir novas regras de negócio que seu cliente não te apresentou antes.

Arquitetura

Em relação ao programa propriamente dito, essa é a parte mais complexa de todo o sistema.

  • Como serão as camadas da aplicação
  • Se serão utilizadas técnicas como Clean Architecture, Ports and Adapters, CQRS, o bom e velho MVC, tudo isso junto...
  • O banco de dados que será utilizado
  • Qual estratégia de filas
  • Autenticação e autorização
  • Caching
  • Onde esse projeto será hospedado

Tudo isso que eu disse independe de linguagem de programação, na verdade você pode dividir a aplicação e partes dela serem escritas em diversas linguagens.

2

Gostaria de enfatizar a parte de "levantamento de requisitos" e "modelagem"... não sei o porquê mas nós, iniciantes, temos mania de menosprezar essas partes e concentrar energia na parte de programar sendo que esses dois bem feitos diminui e muito as dificuldades na hora de codar.

1
2

Deu até um certo medo olhando seu post(que é magnifico), o medo é que pra ser profissional não é do dia para o outro, eu estudo bastante html,css e js, mas lendo esses comentários aqui vejo que a caminhanda é longa.....

2
1
1
1

Nossa, uau! Com certeza essa é uma visão incrível da coisa! Quase que uma mentoria kkkkkk, muitissímo obrigado pela aula, irei anotar aqui e juntamente com meu amigo iremos analisar direitinho esse "Escopo do projeto".

2
1
2
2

A linguagem, tem que ser a que você domina e com a qual conseguirá colocar em produção.
Veja qual dos dois tem maior domínio sobre a stack que domina e toque o projeto.
Sendo que também, se adotar a utilização de micro serviços, cada um pode codar partes da aplicação utilizando a linguagem que domina.

Vocês pretendem fazer este software sobe demanda especificamente para ele?

No lugar de vocês faria um SAAS (foi o que fiz, mas o meu é para delivery de comida).

Faria esse software (multi tenancy) baseado no modelo de negócio dele e depois começaria a oferecer o acesso para outras empresas do segmento.

Para cada cliente que fechar, você cobra uma assinatura mensal.

1

A priori sim, pretendemos lançar o software exclusivamente para ele. Obrigado por compartilhar sua visão da coisa! Irei pesquisar sobre tudo isso!

2
1
2

Bem... você ta focando em python e seu amigo em java, você pode usar python para criar o back-end da aplicação e seu amigo pode usar o java para desenvolver o aplicativo ( caso for especificamente para android, se não recomendo flutter ou react-native ).

Ou seja minha recomendação foque no que você e seu amigo já está focando, pois com isso já da para criar essa aplicação para android.

1
2

Cara muita coisa vai variar, onde pretende aplicar o software? no proprio navegador para os funcionarios acessarem de qualquer computador/celular, pois baseado no que informou acredito que seria o intuito ou apenas um aplicativo para celular?

1
2

Para web, o tradicional é estudar HTML, CSS e JavaScript. Com o domínio dessas tecnologias você conseguirá fazer toda a parte visual do site (front-end).

Em seguida, é nessesário aprender uma linguagem para back-end (lado do servidor), para controlar todo o tráfego de informações do site. Dentre as mais famosas estão PHP e Python.

No meu caso, eu optei por Python, pois é uma linguagem muito fácil e simples de aprender, além de que possui diversos frameworks para trabalhar com web, como Django, que possui todos os recursos nessesários para fazer um site de qualidade.

Você e seu amigo podem revesar as funções, um com o front-end (Montando o site bonitinho) e o outro no back-end (Fazendo a programação de cada coisa de fato).

1

Então o correto mesmo seria estudar a famosa tríade: js, html e css! Tá certo, obrigado por compartilhar seu ponto de vista! Vlww! Vou continuar a estudar Python e começar a ver essa parte do Front! Irei compartilhar dessa ideia com meu amigo!

2

Como estão em duas pessoas acaba se tornando mais "facil" pois você pode voltar seu estudo para parte front-end e seu amigo para o Backend.
Mas de maneira geral, como o intuito do software é para PC/Celular o conteudo a ser estudado na parte visual do site seria HTML/CSS que não são linguagens de programação, porém será de extrema importancia para desenvolvimento da parte visual e o Javascript tanto para parte interativa do site como a comunicação com o Backend.
Na parte Front-end vai depedender do Framework que deseja utilizar, podendo ser da sua escolha e o que achar mais "tranquilo" - alguns por exemplo: React, VUE, Angular.
Porém caso não tenha conhecimento ainda de HTML/CSS/JS recomendo aprende-los de maneira indivual para posteriormente partir para os Frameworks.

Já para parte Backend acredito que PHP, MySQL de maneira geral consiga sanar todos essas solicitações feitas pela empresa.

Se tanto seu amigo quanto você não tenham conhecimento nessas linguagens ou similares vai ser um pouco complicado a criação desse software e irão necessitar de muitas horas de estudo/aprendizado. Se são apenas vocês 2 no projeto e estão criando algo do zero um conhecimento em algum editor de fotos como photoshop por exemplo, para criar a identidade visual da empresa seria interessante para a venda do produto.

1

Confesso que em meu início de jornada no mundo da programação eu tentei fugir dessa famosa tríade do front: js, css e html. Porém, vejo que é muito necessário ter o conhecimento das mesmas para a criação de projetos "simples" como esse! Obrigado por compartilhar seu ponto de vista! Vlw!

2

Cara, a linguagem em si não é importante quando se esta definindo um projeto, a arquitetura sim, porém, quando você escolhe uma linguagem o "ecossistema" dela vem junto, ou seja, escolher uma linguagem que tenha bons frameworks/libs impacta diretamente a sua arquitetura.

Pelo que entendi você é iniciante, e além disso tem um time de 2 para fazer o projeto, então você precisa definir uma arquitetura que foque em eficiência, e ao meu ver só tem uma linguagem que cumpre isso de forma exímia, o TypeScript, isso por que você tem excelentes frameworks tanto para o front-end quanto para o back-end.

Sugestão: VueJS + Electron para o front-end, AdonisJS para o back-end e PostgreSQL como BD. Essa stack vai ter permitir fazer um MVP muito rápido e é super escalável, então se o projeto começar a crescer você não vai precisar refazer nada.

Se você quiser utilizar uma arquitetura "mais ampla", que já prevê coisas como aplicativos nativos para mobile, WebSockets e um painel de controle visual super poderoso, tenho uma segunda sugestão que é mais complexa, mas também leva a eficiência de desenvolvimento como fator principal.

Segunda sugestão: Flutter para o front-end, Hasura + Serverless Framework para o back-end e PostgreSQL como BD.

E um ponto super importante, precisa que seu software faça "coisa x" e já existe um serviço que ofereça isso? UTILIZE! Envio de e-mails e autenticação são ótimos exemplos, não gaste tempo fazendo coisas que já estão prontas para uso, a maioria dos serviços tem planos gratuitos generesos, e mesmo se você precisar pagar depois, ainda assim é barato.

2

Back-end

Já que seu amigo está estudando Java, recomendo utilizar o Spring para a criação da sua api back-end. Se quiser persistir no Python, vá de Django.

Front-end

Para o front recomendo utilizar ReactJS, você deve estudar Javascript puro, CSS e HTML para ter uma noção básica. Porém, utilizando uma biblioteca que já tenha um design system pronto, como ant-design, bootstrap, semantic-ui, material-ui, o CSS/HTML se torna 90% desnecessário implementar do zero.

Mobile

Para a aplicação mobile você poderia ir de ReactNative, já que está na sua stack de estudos, porém recomendo Flutter por ser uma delícia.

1
2

Eu recomendaria aprender JS/TS, usando React no Front, Backend com Node.js e mobile com React Native.

Vocês estudarão uma linguagem e vai resolver os três problemas. Alem disso os dois conseguiriam ajudar um ao outro nas tarefas, e não vai ficar boiando no que o colega tá fazendo.

Além disso tem uma comunidade enorme, com muito conteúdo e tutoriais que vão salvar vocês no dia a dia...

E primeiramente focar naquilo que o user1 comentou, sobre o levantamento de requisitos

1

Achei a visão do user1 sobre a coisa toda muito importante, com certeza levarei em consideração. Obrigado pela recomendação de linguagem, JS/TS está em nossa lista de aprendizado. Vlw, colega!

1

Nunca vi comentários tão bons! Salvando aqui. Linguagem é ferramenta e não a solução, o cliente tá nem aí pra linguagem q vc usar, desde que funcione, tá bom.