Depois de aprender a linguagem, qual o próximo passo?

E ai pessoal,

antes de mais nada, um contexto: começei a aprender R e python com a faculdade pois utilizava em econometria. Agora vou começar o último semestre e sinto que ainda não dominei os dois ainda. Sei escrever os códigos mas peno para desenvolver um programa que resolva um problema.

Qual o próximo passo que devo tomar? como conseguir projetos para trabalhar? enfim, como deixar de ser um iniciante.

2 Curtidas

Olá @vinicius_oliveira :wave:

Então, você já está no caminho certo. A questão agora é mais o tempo que vai responder. No meu ponto de vista você poderia escolher uma empresa que você gosta para analisar os stacks dela. Por exemplo, tem o StackShare ele te mostra os stacks das empresas. Outra orientação seria Web Developer por ser linguagens mais de “alto nível” ajuda o entendimento de programação. Mas é isso ae, você já está no caminho certo, só manter!

Outro detalhe a Trybe, eles podem te orientar melhor ainda, dá uma olhada no site deles.

:v:

1 Curtida

Dá uma lida nessa FAQ, principalmente na parte onde eles recomendam projetos e exercícios:

https://www.reddit.com/r/learnprogramming/wiki/faq

1 Curtida

Cara, programação é aperfeiçoada a partir de tempo e prática, o que eu te recomendaria seria fazer projetos pessoais a partir dessas linguagens, sempre procurando abranger temas que você nunca tenha feito, quanto mais você entender de lógica de programação e bibliotecas da sua linguagem, mais preparado você vai estar para evoluir.

3 Curtidas

Talvez a minha abordagem seja meio antiquada, mas resolução de problemas é construção de algoritmos. Não depende de linguagem A ou B. Quais tipos de problemas você tem tentado resolver? Acho que as duas vivem um momento legal hoje, eu mesmo peguei um curso introdutório de R pela empresa na qual trabalho.

No meu caso, eu ainda não desenvolvo nada 100% numa linguagem ou outra. Tirando umas exceções aqui ou ali com Python, eu acabo só usando uns snippets dentro do KNIME. Obviamente, tem todo um contexto de utilização que me permite fazer isso, além disso, eu sou o responsável pela implantação de um processo de ETL (com montagem de um data lake decente e um data warehouse no final), que anda meio em paralelo com meu trabalho de analista (eu trabalho com planejamento urbano). Eu também uso um pouco de SQL (dialeto do PostgreSQL) aqui e ali.

O que eu percebo, pelo desafio topado pela empresa (que é um empreendimento, com um certo risco numa tentativa de inovação etc), é que matemática e estatística são fundamentais, além de uma certa postura de auto-aprendizado. Eu já era autodidata, tinha um bom traquejo com computadores, sabia desenvolver shell scripts suficientes (não necessariamente elegantes) para resolver alguns problemas, já tinha estudado algoritmos quando era moleque (usando Turbo Pascal) etc. Também não sou tão jovem, então tive tempo pra bater cabeça, testar, experimentar etc, ou seja, eu tinha uma certa base. Só continuo meia boca na parte de Exatas, mas ainda está tudo bem, porque está de acordo com o escopo da aposta.

Comento isso para poder recomendar um vídeo do Akita em que ele fala exatamente sobre como precisamos ter uma boa fundamentação (matemática e estatística, de novo), não ficarmos escravos de ferramentas para defender o investimento em cursos de forma vazia, entre outras boas dicas.

Por causa da minha trajetória, eu conheço muita gente que faz exatamente o que o Akita condena: copiar e colar código sem tentar compreender. Trazendo para outras coisas discutidas aqui no fórum, eu diria que é um problema também para administração de sistemas (que é algo que perpassa a utilização de computadores, seja qual for o nível do usuário), porque copiar e colar, sem conhecer os conceitos e o funcionamento das coisas é basicamente dar chutes no escuro.

2 Curtidas

Liberar sua criatividade e criar um portfólio

1 Curtida

pelo que entendi, você quer melhorar a qualidade do seu código e fazer mais em menos tempo, na sua area de estudo, sem perder qualidade, visando código mais sólido e menos sujeito a erros (que vão te atrasar no fim).

Uma parte disso como o pessoal mencionou vem da sua experiência com a linguagem através da prática, mas tem algumas coisas que não foram mencionadas aqui e são muito importantes para passar a ser um desenvolvedor versátil e de qualidade:

Vou te dar um retrato básico destas coisas em termos de Python. No geral, quase tudo é aplicável em outras linguagens tirando os exemplos talvez.

Dominar ferramentas que envolvem a `infra’ ao redor do desenvolvimento de software (versionamento (git, github), CI/CD (jenkins, travis), controle de ambiente (conda, pienv, docker, terraform, ansible), packagers (pip), etc), automatização de processos (teste (pytest, etc), implantação e construção (setuptools, etc), etc), bibliotecas importantes para a sua área (pandas, TensorFlow, appelpy, numpy, scipy, statsmodels, scikitlearn, etc), bibliotecas importantes para ir além (APIs de terceiros para utilização de IaaS (AWS, etc), BaaS(firebase, etc), SaaS(elasticsearch, google/microsoft office e armazenamento), etc), boas práticas de desenvolvimento (design patterns, etc) e algoritmos consagrados (na área de IA, grafos, métodos numéricos, de ordenação, de armazenamento, etc), formas de integrar multiplas linguagens (wrappers em geral para usar C/fortran/etc, em python, etc).

Praticar e estudar esse tipo de coisa (seja problemas reais ou exercícios) vai te dar um background bom em Python e desenvolvimento de software com qualidade e agilidade com um bom direcionamento para sua área de estudo.

infelizmente (ou não…) tem muito mais coisas úteis que você pode aprender… Mas acho que você já tem muita coisa legal para pesquisar com essa minha pincelada do todo. Seja curioso, esteja aberto às novidades da área/linguagem, aprenda a aprender por conta e fazer uma curadoria de novas técnicas e coisas da área, que você vai longe.

Ah, e não deixe o espírito cinzento do dev velho quadrado que odeia novidades te pegar. senão você vai ser sugado para o mundo do cobol e das filosofias antigas e religiosas de TI para todo o sempre. :slight_smile:

1 Curtida

Atualmente sou desenvolvedor de sistemas distribuídos de backend de alta performance, programo há uns 30 anos, e sou profissional de desenvolvimento há 21 anos (desde 1999). Apesar de o tópico já ter muitas respostas interessantes, minha visão é um pouco diferente e por isso eu resolvi dividi-la.

Desde os anos 60-70, a tecnologia evoluiu bastante, mas no fundo, um princípio básico sobre computação continua: Entrada -> Processamento -> Saída. O processo desenvolvimento começa com a “Saída”, o que você quer? Relatórios, estatísticas, agregação de dados, seu caminho pode ser o data science; por outro lado, se você quiser um sistema que retorne items conforme critérios de pesquisa, um sistema com banco de dados relacional pode ser mais indicado, ou por exemplo apresentar dados ao usuário, seja pela web, android ou qualquer outra mídia, o caminho é UI/UX no geral.

O segundo passo é pensar na “Entrada”, o que você tem efetivamente para trabalhar, os dados já estão armazenados? Precisam ser convertidos, transformados ou agregados? Isso vai te dar uma boa ideia do trabalho que precisa ser feito. E por último, você pensa no “Processamento”, como transformar o que você tem a “Entrada”, no que você quer, a “Saída”. Não importa o quão complexo seja o sistema, sempre é possível encaixá-lo nesta estrutura.

Algoritmos são, em resumo, estratégias para conseguir o que você quer, baseado no que você tem, da forma mais eficiente possível. Pra quem está começando, recomendo começar bem simples, com algoritmos de “força bruta” mesmo, que simplesmente testam todas as combinações possíveis pra chegar no resultado. Uma vez que você entender esta parte, você começa a aprimorar sua habilidade, quando começar a pensar em como otimizar o seu algoritmo, como processar mais dados em menos tempo ou usando menos memória? Vale a pena usar um cache de memória? Qual a estrutura de dados mais adequada ao tipo de trabalho considerando leitura e escrita: b-tree, hashmap, stack, queue, uma combinação delas? Qual a melhor storage definitiva: Banco de rdbms, no-sql/kvs, flat file? Entre outras coisas…

O desenvolvedor sênior é aquele que conhece o suficiente sobre o que já existe, linguagens, bibliotecas, ferramentas, utlitários e ambientes de forma a combinar tudo para obter não só o resultado desejado, mas da forma mais eficiente possível.

Fica difícil escolher a melhor linguagem de programação, antes mesmo de saber qual problema você quer resolver. Cada uma delas tem vantagens e desvantagens. Por isso, mais importante do que aprender a linguagem, é aprender a resolver o problema.

Boa sorte!

4 Curtidas

Bom pessoal,

primeiramente obrigado pelas respostas. Eu fiz esse tópico 1h da manhã depois de tentar montar um código para o meu TCC (que ainda não terminei) (o código e o TCC) e foi algo meio desesperado/desabafo de fim de curso. Então, como tava copiando umas linhas de código aqui e ali me pareceu que não estava realmente aprendendo nada. Pelo que vejo por experiência em estágio e do pessoal que acabou de formar aqui (Estou estudando na UFMS), o economista está se transformando em cientista de dados. O que vão por esse lado pelo menos aparentam ter mais sucesso no curto prazo, mas pode ser pegadinha kkkkk

Eu abri os links e o video que me indicaram mas confesso que estão na aba esperando eu efetivamente ler. Uma hora eu termino.

Enfim, criei uma conta no github agora e estou procurando por projetos que eu possa praticar ou reproduzir escrevendo o código do zero, por praticar mesmo e ganhar experiência. E vou organizar as dicas que vocês deram aqui e ver o que consigo desenvolver

Valeu!

5 Curtidas

@vinicius_oliveira Uma última coisa que acho que seria prudente dizer é que um bom desenvolvedor também conhece e respeita seus limites e as contingências do projeto.

Não sei as quantas anda o cronograma do seu TCC, mas se você está com um cronograma apertado, acho mais prudente dar uma relaxada no que você acha que deveria acontecer idealmente durante a construção do seu TCC e adotar uma ação mais prática e pragmática já que o seu maior inimigo no momento é o tempo.

Isso vale também para falta de recurso financeiro e humano… Seria prudente escolher as ferramentas mais simples de serem utilizadas, não as mais performantes e escaláveis, manter apenas o mínimo de práticas para uma gestão segura do projeto (provavelmente apenas versionamento) e tentar ao máximo aproveitar o que você já sabe em vez de recorrer a bibliotecas e APIs que você não domina.

A area de análise de dados realmente é uma area com muito futuro. Já trabalhei com modelagem agrícola, python, R, Fortran e afins são ótimos para isso, mas depende do que você planeja, só python, R e afins vão servir se você quiser trabalhar para terceiros apenas analisando dados, mas se você quer criar produtos que vão gerar entradas e transformar saídas em novos produtos, pode ter de ir além, pois vão começar a surgir problemas como, conectar usuários, cativá-los, e muito disso envolve apps, sejam mobile, para desktop ou web e backends que permitam conectar tudo isso.

Enfim não sei se você visa ser empreendedor ou funcionário mas ambas as areas tem espaço. Você vai ter uma base em análise de dados com foco financeiro, mas se algo der errado você sempre pode procurar outro mercado que precise de um cientista de dados, analise de dados agrícolas, comportamentais (redes sociais), etc… Sempre tem alguém com muita informação precisando de insights do que está ali e no geral, muitas das tecnologias de análise e modelagem de dados continuam sendo as mesmas.

2 Curtidas