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.

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.

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 o`gcc` (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](https://en.wikipedia.org/wiki/Object_file)" e [linkar](https://en.wikipedia.org/wiki/Linker_(computing)) eles em um [executável](https://en.wikipedia.org/wiki/Executable). 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](https://lazyfoo.net/tutorials/SDL/index.php). --- 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

Os livros de DSA em C são ruins? Por que recomendou começar com C e ver DSA com C++?