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

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.

Carregando publicação patrocinada...
1

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...

1
1

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

1
1

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).

1
1

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.

1

Valeu pela resposta mano! Esse link é sobre aprender a compilar e executar com a linha de comando né?

E sobre os professores, eu to no segundo ano integrado em eletrônica. To sempre buscando criar conexões com eles e os colegas.

1

Esse é sobre ferramentas de linha de comando em geral, mostra várias utilidades legais, acho que a primeira lição fala sobre coisas bem básicas como usar ls e cd pra listar e navegar em pastas.

Pra compilar com linha de comando em um Linux ou macOS da vida, tu usa um programa como ogcc (o GNU C Compiler).

Por exemplo: gcc main.c -o executavel vai compilar e linkar o teu programa chamado main.c, e gerar a saída no arquivo executavel, que tu pode rodar com ./executavel (assumindo que esteja na pasta onde o programa foi gerado; o ./ quer dizer "nesta pasta"). Em Linux e macOS tu não precisa da extensão .exe nem nada assim pra rodar programas, pode rodar qualquer um que seja marcado como executável. Com tipos abstratos de dados, tu vai criar teus próprios arquivos .h e outros .c além do principal, e daí vai rodar algo como gcc main.c binary_tree.c stack.c pra compilar os arquivos em arquivos "objeto" e linkar eles em um executável. Existem também makefiles, que são scripts pra compilar os objetos em determinada ordem de dependência entre eles e só condicionalmente ao caso do código-fonte de cada dependência não ter mudado, mas acho que isso já entra no escopo de tu querer de fato construir software com C ou C++ e não somente usar elas como ferramentas de aprendizado. Mas são úteis quando a tua compilação é mais complexa, por exemplo, se tu quer adicionar uma biblioteca multimídia pra fazer jogos simples, tal como SDL.


Aliás, quando tu estiver familiarizado com essas noções de objetos, e linkar objetos pra criar executáveis, e compilar os objetos em si, e finalmente a noção de que esse programa é colocado em memória e executado instrução por instrução, essas noções vão ser aplicáveis pra qualquer coisa que execute código que tu possa pensar, algo que pra muita gente é magia oculta: CPU de computadores desktop, o teu celular, a tua geladeira, a ECU do teu carro, o teste de gravidez eletrônico da tua namorada... tudo isso executa código que provavelmente foi feito em C (ou talvez C++, ou talvez, mas menos provável, feito em assembly). É "fácil" e dá uma sensação de segurança olhar pra linguagens de alto nível como abstrações feitas sobre C ou C++, mas é mais difícil vir somente delas e ter a mínima noção de como foram implementadas a mais baixo nível.

Uuh, enfim. lol

0