Como ou com o que uma pessoa deve iniciar na programação?

Apesar de ter feito 18 anos recentemente, ainda tenho algumas duvidas sobre qual rumo a minha vida vai tomar profissionalmente, tenho algumas coisas em mente e uma delas é a programação.
Sou o tipo de pessoa que só consegue dizer se algo é mesmo ou não para mim, depois de tentar.
Tendo em vista que eu quero aprender na prática os princípios da programação, que métodos e ferramentas vocês me recomendam?
Qual linguagem de programação seria uma boa porta de entrada pro ramo?

Oh boi, a velha pergunta
Okay, vou te dar uma dica de ouro, não ouça respostas que dizem que vc definitivamente deve começar com Python, JS, C, ou qualquer outra linguagem, pq isso não importa, literalmente qualquer linguagem pode ser usada pra começar a programar, linguagens não passam de ferramentas, oq realmente importa e aprender como as coisas funcionam, de um jeito que aprender qualquer linguagem se torne uma questão trivial de só aprender a sintaxe, tendo dito isso, eu acho que o caminho que vc quer seguir vai depender daquilo que vc mais se interessa, vou deixar aqui algumas recomendações por área:

  • Front-End (i.e inteface de sites)
    JavaScript

  • Back-End (i.e o que roda por trás dos sites)
    Python, Elixir e JavaScript

  • Inteligencia Artificial
    Lisp, Haskell, Python ou qualquer outra linguagem funcional¹

  • Programação de Sistemas (i.e sistemas mais complexos como sistemas operacionais, compiladores, game engines, etc)
    C, C++, Rust

  • Automatização
    Python

Obiviamente existem muitas outras áreas, mas foram essas que eu me lembrei agora, mas e se vc não souber que área seguir? Então eu recomendo começar com C, ela é a lingua franca da programação, basicamente tudo hj ou é baseado em C ou é baseado em alguma coisa que é baseada em C, se vc achar complicado demais ou só não se dar bem, aí eu recomendo Python ou JS, mas a tríade que realmente recomendaria é C, Elixir (ou Haskell) e C++ (ou Java), pq assim vc vai ter experiencia em programação procedural, funcional e orientada ao objeto, te dando uma base bem mais sólida.

Ok, agora vc sabe oq aprender, como como aprender?
Bom, isso depende, eu, por exemplo, gosto de aprender usando livros, algumas pessoas preferem usar video aulas, vai de cada um e com certeza vc consegue achar material por aí sozinho, mas se vc tbm for do tipo que prefere livros (e entende de inglês pq a maior partes do material de qualidade tá em inglês) eu posso te passar uma lista de acordo com oq vc decidiu aprender, só pedir.

OK OK, agora vc aprendeu e sabe que programar é oq vc quer, e agora?
Agora:

  • Aprenda Git
  • Estude algoritmos e estruturas de dados
  • Estude concorrencia/paralelismo
  • Aprenda orientação a objeto um paradigma horrivel mas é o padrão da industria
  • Contribua com projetos open-source pra ganhar experiência
  • Faça um GitHub e comece projetos pessoais

E é isso, boa sorte.

¹ - Tecnicamente vc pode implementa IAs em praticamente qualquer linguagem, Python mesmo não é funcional e é muito usada em machine learning, mas linguagens funcionais tem um approach mais matemático que ajuda a entender melhor como a coisa funciona.

6 Curtidas

Bom, eu te daria as seguintes dicas:

1º - Inglês

As linguagens sempre têm seus termos e palavras reservadas, documentações, etc, em inglês. Além disso, Existe MUITO mais material disponível em inglês do que português para estudo. Claro que existe material excelente em português, mas ter mais opções sempre é interessante.

2º - Prática, prática e mais prática

Independente do que decida seguir como carreira (mais sobre isso adiante), nunca fique só nos cursos. Crie projetos, se permita errar, crie projetos “bobos”, mas que vão te fazer ter problemas, e consequentemente você precisará buscar soluções.

3º - Foco

Quando começar a se aprofundar, vai ver que existem N carreiras no meio do desenvolvimento. Se optar por Front-End, foque na base (HTML, CSS e JavaScript), e a partir dela, você tem base pra trabalhar com qualquer framework avançado. O mesmo se aplica se escolher Back-End (Python, Java, C#, etc)

Agora, pessoalmente, eu indicaria a começar com web. JavaScript é uma linguagem relativamente fácil, com muito material em português, mais ainda em inglês, e você só precisa de um editor de textos e de um navegador.

Além disso, aprenda Git, faça do Github seu amiguinho, estude bastante algoritmo, e sucesso.

3 Curtidas

Concordo com tudo o que foi dito. Eu sou formado em Ciência da computação e a minha primeira linguagem foi Pascal, simplesmente porque ela é muito simples, não tem muitas “mágicas” e por isso fica mais tranquilo de focar no que realmente importa: algoritmos e estruturas de dados, que é justamente o nome da primeira matéria de qualquer curso de computação.

Sendo assim, mesmo que depois você prefira alguma das áreas de atuação já citadas, eu recomendo que comece do início estudando estruturas de dados: vetor, matriz, listas, … E algoritmos: busca, ordenação, inserção, remoção, … Depois começa a entrar em funções, gerenciamento de memória, árvores, grafos, outros paradigmas de programação… Isso vai te dar base para compreender todo o resto, pois tudo é construído com essas mesmas estruturas e algoritmos.

Porém, eu sei que isso é bem chato e pode te desanimar bem rapidamente, então o legal é tentar misturar isso com exercícios mais legais, como programar pequenos jogos, experimentar escrever em outras linguagens, fazer aqueles desafios online que são resolvidos com programação, …

Sobre ferramentas, vai de você testar e ver quais você acha melhor, mas basicamente um editor de texto, um terminal e um compilador. Sobre material de estudo, depende de como você preferir estudar, como já falaram, mas não poderia não sugerir as vídeo-aulas de um dos professores com quem aprendi tudo:
http://cursosabertos.c3sl.ufpr.br/courses/1

Nesse link está todo o curso de algoritmos e estruturas de dados 1, do curso de ciência da computação da UFPR, e os materiais de apoio podem ser encontrados na página pessoal do professor.

Eu inclusive participei da criação dessa plataforma, mas infelizmente o projeto foi cancelado logo no início e aí acabou ficando meio bugado e feio, mas pelo menos tem alguns cursos e palestras bem legais nele! Vale a pena gastar um tempo até mesmo pra ver como são as aulas de um curso de computação.

4 Curtidas

Olá amigo,
Eu comecei pegando projetos e programando na prática, primeiramente com projetos pessoais, depois de pessoas próximas a mim que tinham necessidades (tipo familiares, amigos, e etc…), depois comecei a cobrar pelo desenvolvimento, tive experiência prática no mercado também (não descartei trabalhar para os outros) e hoje vivo de freelas desenvolvendo para mim (obviamente quando digo isso é para meus clientes, mas uma vez que você termina um projeto, você pode fazer do código final um produto e replicar em outro projeto parecido, ou até mesmo vende-lo inteiro para outro cliente, desde que não tenha uma cláusula no contrato falando que você não possa fazer isso, dando exclusividade do código para ele). No início não vai ser fácil, exige bastante tempo e muito estudo da sua parte! Grande abraço e boa sorte!

1 Curtida

Não sou ele, mas eu queria essa lista de livros :smiley:
To precisando achar alguns bons para usar de base no mestrado

Primeiramente, agradeço ao comentário, suas instruções me serão úteis
e em segundo, queria aquela lista de livros baseada em programação de sistemas, penso que será um bom caminho pra mim

Agradeço a todos que se dedicaram a responder as minhas dúvidas, com certeza saio hoje daqui mais esclarecido sobre os meus desafios e objetivos e com um caminho traçado para percorrer.

pensei em fazer um comentário mas deixo só meu like aqui pq vc respondeu tudo

Ok.

Para as linguagens:

  • The C Programming Language, 2nd Edition
    Sim, tem que ser a segunda edição, é um livro um tanto antigo, mas bem conciso e é uma introdução boa a linguagem feita pelos próprios criadores, mas se vc ler ele vai precisar pegar alguma coisa mais moderna pra se atualizar, ainda assim é uma boa leitura.

  • Modern C
    O nome é auto-explicativo, e é um ebook gratuito, apresenta uma visão mais atual da linguagem, vc pode começar por esse livro se quiser tbm, ele serve tanto como introdução como referencia pra quem já conhece a linguagem.

  • C++ Primer, 5th Edition
    Sim, tem que ser a quinta edição, e não confunda com C++ Primer Plus, são livros completamente diferentes. Provavelmente o melhor livro sobre C++, não assume nenhuma experiência com programação e contém basicamente tudo que vc precisa saber sobre a versão mais moderno em uso linguagem, C++11, é um tanto longo (1.300 páginas), então vc provavelmente não vai querer ler ele de uma vez só.

  • The Rust Programming Language
    Tbm é um ebook gratuito, apresenta quase tudo sobre a linguagem, que é uma das mais populares dos ultimos anos, o que não é desmerecido, é uma linguagem feita nos moldes de C e C++, mas com um approach mais moderno que garante o mesmo poder enquanto evita boa partes das dores de cabeça que C++ e, principalmente, C podem trazer, tendo dito isso, vc provavelmente não vai querer começar aqui, é uma linguagem feita pra quem já tem experiencia, vc não vai entender bem as escolhas de design dela se não entender o pq delas terem sido feitas, então aprenda ao menos C antes.

Sobre programação de sistemas
Isso vai depender de que área vc vai se interessar mais, então umas recomendações bem gerais:

  • The Linux Programming Interface
    Um livro que apresenta e ensina a usar a API C do Linux, manipulação de arquivos, divisão de processos, daemons, uso sockets pra comunicação web, manipulação do terminal, criação de pseudo-terminais, threads, enfim, é um livro bem denso, são 1.500 páginas de conteúdo.

  • Advanced Programming in the UNIX Environment
    Basicamente a mesma coisa do anterior, mas focado em UNIX em geral, ao invés de Linux, é um bom complemento.

  • Compilers - Principles, Techniques & Tools
    AKA “The Dragon Book”, é um livro referencia em questão de design e implementação de compiladores, lendo ele vc poderia implementar até sua própria linguagem se quisesse.

  • Linux Kernel Development
    Auto-explicativo, é um livro sobre como o desenvolvimento do kernel é feito, como ele é implementado e como vc pode ser um contribuidor, é um bom livro mas vc provavelmente vai querer ter uma noção maior de sistemas operacionais antes de entrar nele.

  • Operating Systems From 0 to 1

  • Operating Systems: Three Easy Pieces

  • Pratical File System Design

  • MMUTRL

  • Modern Operating Systems
    Todos são livros muito bons sobre sistemas operacionais, os quatro primeiros são gratuitos e tbm contém implementação dos conceitos, o ultimo é uma explicação mais teorica sobre como um sistema operacional funciona.

Sobre design de software em geral:

  • Clean Code
  • Code Complete
  • The Pragmatic Programmer
  • The Mythical Man-Moth
    Leia todos quando tiver pronto (i.e quando vc achar que já pode escrever um software completo)

Outros:

  • Build Your Own Lisp
    Já se perguntou como uma linguagem de programação é feita? Esse livro é justamente sobre isso, construir seu próprio Lisp usando C, se vc se sentir aventureiro pode começar a aprender C por ele, já que ele tbm faz uma introdução a linguagem, e é gratuito, yey.

  • Game Engine Architecture

  • Real Time Rendering

  • Game Physics Engine Development

  • Real Time Collision Detection

  • Fundamentals of Computer Graphics
    Livros sobre computação gráfica e coisa relacionadas, deixo a recomendação pq é oq eu mais estudo, mas não recomendo vc tocar nesses livros por um bom tempo, eles exigem, além de uma base em programação, uma base matemática bem forte, então vá com calma.

  • Structure and Interpretation of Computer Programs
    Esse era o livro usado pra ensinar Ciência da Computação no MIT… preciso dizer mais alguma coisa?

É basicamente isso, tem bastante coisa gratuita, e oq não for gratuito vc pode achar…por aí…

2 Curtidas

Caramba que comentário completo, to digitando com os pés pq as mãos estão te aplaudindo vlw mano

e esse site WTFFFFFFFFFF bro vc salvou minha vida

1 Curtida

Goal Kicker é um bom site de livros tbm

Eu mudaria algumas coisas, duas adições na verdade:

Eu adicionaria PHP é uma linguagem fácil e existem bilhões de exemplos nas interwebs

Eu adicionaria lua, ela é uma linguagem ridiculamente fácil e extremamente poderosa pra automatizar