Dúvida: Qual forma de estudo devo seguir?
Desde que demonstrei interesse em começar a programar, professores meus sempre indicaram começar com a linguagem C pois ela é a "mãe de todas as linguagens". Estou estudando a linguagem, porém não sei se estou perdendo tempo pois ela não se encaixa no ambiente de trabalho que pretendo seguir (mobile). Eu queria saber a opinião de vocês:
Seria melhor eu estudar por completo a linguagem C para assim obter um conhecimento melhor de programação em geral ou eu já parto para um linguagem específica para mobile como Java ou Kotlin? Desde já agradeço a atenção de todos.
Linguagem até pode parecer mas na realidade ela não é muito "amigável" com iniciantes na área, escrever sistemas úteis e bons com C não é uma das tarefas mais simples, exige bastante conhecimento. É uma linguagem que acho que todos nós programadores poderiamos gastar um pouco de tempo entendendo melhor durante a carreira, mas não recomendo para iniciantes.
Python, Java, PHP, JavaScript, Ruby são linguagens populares, você encontra material sobre elas facilmente na internet além de ter mais chances de vagas no mercado do que com C.
Você mencionou que quer atuar com mobile, isso é interessante mas é outra coisa que não recomendo para ser seus primeiros passos. A área de mobile tem particularidades que exigem um pouco de maturidade e conhecimento.
Foque em aprender o simples: ler e criar arquivos em disco, comunicação via rede, banco de dados, paradigmas... isso te ajuda a ter embasamento para seguir mais adiante seja em mobile, web, desktop...
Cara, experiencia propria.. eu focaria muito nas bases. Lógica, Estrutura de Dados, Algoritmos... se tem essa base firme, vai para uma linguagem mais "amigável" na minha opinião, uma linguagem orientada a objeto ...
Nesse ponto tu já vai ter um norte para os proximos passos.
E também tem muitos roadmaps legais aí pra te dar um panorama conforme seus objetivos
Depende do seu objetivo. Eu tenho dificuldade de indicar certas coisas para as pessoas por uma razão básica. Eu não sei como é que funciona a formação de alguém que só se prepara para arrumar uma vaga urgente dentro do que o mercado quer, e sacrifica o longo prazo da carreira da pessoa.
Você provavelmente não deve ser craque em C. Deve usá-la para aprender computação. Então ela só deve ser uma ferramenta. É só uma linguagem mais real para entender como o computador funciona e como criar algoritmos e estruturas de dados de forma básica. É para aprender ler e escrever a língua do computador. Não é o conhecimento para o trabalho.
Se acha que isso é perder tempo, pula fora e vai para outra coisa. Se puder uma hora voltar para aprender melhor, ótimo. Mas quase todo mundo vai dizer que não tem tempo para voltar depois.
Note que isso não é mágico. Você pode aprender bem com C, ou não. É até possível aprender bem com outra coisa, mas é muito difícil, é quase certo que algumas coisas ficarão faltando. Se o processo de aprendizado for ruim, C pode não dar o resultado esperado, assim como as outras linguagens. Se não quiser aprender certo qualquer linguagem serve.
Hoje em dia pode-se aprender tudo errado, mas por condições pessoais, ainda entregar resultados razoáveis. Não serão bons, mas muita gente ainda vai aplaudir. Hoje tem gente que faz uma arquitetura de microsserviços, cara, complexa, com problemas aqui e ali, mas raros, recebe tanto ou mais aplauso do que monta algo que entrega o mesmo resultado, mais barato, mais simples e que funciona melhor. Ninguém percebe porque nunca é uma competição direta.
Eu admito que para alguns casos até serve aprender de qualquer jeito, e por enquanto dá para só ficar reproduzindo coisas e ainda terá um emprego.
Pode ser que para você aprender Kotlin seja melhor, você atende as necessidades básicas e pode ganhar uma grana. Pode ser que prefira Swift. Pode querer C# para usar uma base para os dois celulares. Pode ser que só precise seguir algumas receitas de bolo existentes e fazer seu trabalho. Eu só não considero isso um programador de verdade. Tem gente que acha que é.
Tem gente que está muito bem e ganhando muito cozinhando em um restaurante qualquer. Tem gente que quer fazer gastronomia e entregar um resultado inédito, algo que tenha muito valor para as pessoas, ainda que dê menos ganhos financeiros. Eu falo sobre ser chef. Para você pode ser que fazer PF seja um objetivo melhor.
Faz sentido para você?
Espero ter ajudado.
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).
Eu diria pra continuar com C. Ao mesmo tempo ou depois, estuda mobile também. C vai te expor a noções de como o computador funciona, e na real é também desejável que tu não use IDEs, mas aprenda a compilar e executar com a linha de comando, e criar familiaridade com ela de forma geral. Recomendação minha aqui, mas talvez só vá parecer realmente útil quando tu estiver mais avançado.
Também é mais fácil ir pra outras linguagens depois, se tu sabe C, do que é vir pro C a partir de outras linguagens, especialmente de mais alto nível. A minha experiência é a primeira, e a segunda conheço anedoticamente por outras pessoas.
Mas, como alguém indicou em outro comentário, o foco onde tu vai encontrar o core do conhecimento útil não é meramente em aprender tudo da linguagem, mas aprender certos conceitos e aprender a implementar eles na linguagem. Os conceitos são pensamento algorítmico (que muitos chamam de "lógica de programação", uma terminologia que eu detesto, HAHAHA), isto é, aprender a programar mesmo, e posteriormente entender a noção de tipos abstratos de dados, e dentro disto, a noção de estruturas de dados, que servem pra implementar tais tipos abstratos. Usando C, o interessante é implementar tudo isso com structs e ponteiros e tal.
Junto ou depois desse aprendizado de estruturas de dados, é interessante compreender a noção de que algoritmos têm um desempenho "inerente" tanto em tempo de execução quanto em memória utilizada, e que há formas de estimar esse desempenho de modo independente de detalhes tais como a máquina em que está rodando; crucialmente, é importante a noção de que, independente de detalhes concretos, dois algoritmos que fazem a mesma tarefa podem ser comparados em termos de seu desempenho. Com conhecimento acerca de tipos de dado abstratos e as estruturas de dados que implementam eles, e tendo uma noção do desempenho inerente das operações dessas estruturas, tu consegue fazer boas escolhas do que utilizar.
Eu acho que desviei um pouco do assunto, mas uma vez que tu comece a passar pro estudo de estruturas de dados, eu recomendo o livro Data Structures and Algorithms in C++, do Goodrich e Tamassia (sei que está caro no link, mas eu usava uma cópia da bibloteca da faculdade, e procurando na internet tu acha ele por outros meios, hue). Tem versões em Java e Python, também, mas nesse de C++ ele dá umas explicações de features de C++ no primeiro ou segundo capítulo pra tu começar a usar. Ainda que ele use um estilo de C++ mais antigo (o que verdadeiramente não importa), esse livro é muito bom em suas explicações de estruturas de dados e algoritmos, bem como em explicar o básico de análise de desempenho, sem entrar em muito matematiquês. Ah, claro que nada te impede de usar a versão de Java pra estudar essas coisas, já que tem interesse em aprender desenvolvimento mobile.
Dito isso, a minha recomendação de C como primeira linguagem, junto com foco em estruturas de dados e algoritmos, é pra um estudo de relativamente longo prazo, em que tu tem tempo pra estudar por pelo menos um ano ou dois sem necessidade de focar em arranjar um emprego logo. C não é um conhecimento pra te garantir emprego na indústria de software, especialmente no Brasil, mas é um conhecimento que vai te dar uma boa base pra partir pra outras coisas. Eu totalmente compreendo que tu possa querer focar em algo que vá te dar frutos mais concretos em mais curto prazo, por exemplo. Em qualquer caso, sempre é bom ir construindo um portifólio pra documentar o teu crescimento e tornar teu conhecimento demonstrável.
Mais uma coisa. Por tu ter mencionado professores e o fato de estar aprendendo C, eu imagino que tu esteja numa faculdade. Eu diria pra, enquanto tu puder, "viver a faculdade" e prestar bastante atenção no conhecimento que ela te proporciona, criar conexões com teus professores e colegas, mas talvez mais importante (depende do ponto de vista): dentro do possível, não espera pra começar a estudar coisas que te interessam. Faz os tutoriais, monta tua to-do app, e vai avançando em paralelo ao que a faculdade oferece. Obviamente isso pode não ser tão factível se tu tem outras ocupações, mas a ideia é que tu não espere pra começar a estudar essas coisas. O conhecimento acadêmico é muito útil, mas muito do que aplico hoje são coisas que estudei por fora.