Executando verificação de segurança...
3
jguigo
1 min de leitura ·

Qual seria o conhecimento de base que uma universidade pode proporcionar? Eu posso aprender sozinho?

Depois do último vídeo do Deschamps, As Vagas Realmente Acabaram? (Investigação), mais especificamente após ouvir o áudio do Akita, ficou uma dúvida na minha cabeça: o que seria esse conhecimento difícil de base?

Também já vi uma vez em algum vídeo do Lucas Montano ele comentando, não como o Akita, que dá uma lapada seca kkkk, mas que a experiência que ele teve em uma universidade faz com que ele tenha mais facilidade do que alguém que nunca teve essa experiência.

E eu acredito verdadeiramente nisso! Quer dizer, quanto melhor for a sua base, mais fácil você consegue aprender algo novo, não?

Eu tenho uma formação em engenharia de produção, mas não na área. Mesmo assim, gostaria de aprender por conta própria. Hoje, estou atuando como desenvolvedor júnior e utilizo TypeScript.

  1. O que seria esse conhecimento de base?
  2. Por onde eu deveria começar? Existe alguma sequência?
Carregando publicação patrocinada...
3

Posso dar alguns tópicos que são importantes e que são ensinados em faculdades de Ciência da Computação, mas isso é só o básico do básico, além de se aprofundar nesses fundamentos é necessário também estudar os tópicos da área (ou áreas) que você tem interesse de atuar, no geral eu gosto do que o roadmap.sh mostra, mas creio que ele só tenha roadmaps para desenvolvimento web. Enfim, não se detenha só a uma fonte de informação, procure material confiável, de preferência documentações oficiais de tecnologias e ferramentas, material de estudo real de universidades e procure aprender com quem já tem experiência.

Algumas coisas que uma faculdade de Ciência da Computação irá tentar te ensinar

  • Conversão de bases numéricas (entre bases binária, octal, decimal e hexadecimal).
  • Representação de dados e como dados passam do meio analógico para o digital e vice-versa.
  • Quais os principais componentes de um computador e como ele funciona nos diversos níveis de abstração.
  • Circuitos Digitais.
  • Lógica.
  • Matemática Discreta (conjuntos, relações, algebra booleana).
  • Teoria dos Jogos.
  • Teoria dos Grafos.
  • Teoria das Linguagens Formais e Automatos.
  • Teoria da Computação.
  • Análise Combinatória.
  • Criptografia.
  • Programação em alto nível.
  • Programação em baixo nível (assembly).
  • Cálculo.
  • Algebra Linear.
  • Geometria Analítica.
  • Estatística.
  • Bancos de Dados.
  • Como funciona, quais os componentes, e como criar seu próprio compilador.
  • Fundamentos de Inteligência Artificial (algoritmos de busca, algoritmos de machine learning...).
  • Diferenças entre os diversos tipos de linguagens de programação.
  • Teoria da Complexidade Algoritmica.
  • Algoritmos e Estruturas de Dados.
  • Como funcionam Sistemas operacionais (processos, threads, concorrência e paralelismo, gerenciamento de memória).
  • Computação Gráfica
  • Processamento paralelo e distribuído.
  • Como funcionam redes de computadores (camadas de rede, protocolos de rede...).
  • Conceitos de Engenharia de Software.

Tem muita coisa resumida e pode ter mais ou menos dependendo da universidade, mas eu acho que isso é o basico, se esqueci de algo podem acrescentar.

2

Eu acredito que ele esta se referindo ao porque das coisas e talvez como elas chegaram no estado que estão.
Eu fiz Sistemas de Informação na UFMT, fiz muitas materias que acho que nao agregaram em nada na minha profissão, mas outras eu acredito que mudaram muito a forma de eu ver um problema. O principal foi algoritmos e estruturas de dados.

  • Qual a diferenca entre listas encadeadas, duplamente encadeadas, arrays, arvores, grafos... (e principalmente quando usar)
  • Big O
  • Algoritmos classicos (algorimso ordenaçao, busca, MST, DFS, BST)
  • Como o HD guarda os arquivos? Como o sistema operacional os encontra?
  • Quais os principais sistemas de arquivos e porque foram criados?
  • Como funcionam processos (de verdade)
  • Como o SO decide qual processo deve ser executado, quando, por quanto tempo
  • Quando um processo volta a ser executado em um core diferente de quando ela estava sendo executada, como ele continua de onde parou? (escalonamento e comunicacao)
  • Quais os algoritmos que decidem isso tudo? (Implementamos um em C que me fez repensar minha existencia kkk)
  • Como funciona a memoria ram e oq ela ajuda nas questoes acima
  • Como funcionam as paginas de memoria
  • O basico de compiladores (já precisei criar uma mini linguagem "DSL" e os aprendizados da universidade me ajudaram muito)
  • Como a web funciona.
  • As camadas OSI (nao precisa saber tudo sobre todas, mas entender alguns protocolos muda nossa visao sobre muita coisa)

As pessoas se preocupam muito em saber usar o ultimo framework da moda, mas nao entendem o motivo de uma query estar demorando demais pra ser executada, vai logo querendo trocar pra um NoSQL da moda.
Pequena história que aconteceu no meu serviço:
Em 2016 eu estava no meio da minha graduação e já trabalhava na área a dois anos, eu estava trabalhando numa tarefa que era pra otimizar o tempo de um relatório, então pedi ajuda a um Dev Senior metido a DBA, ele disse que a unica solução era criar indices no banco mas que isso devia ser feito de forma cuidadosa pq ele acabaria aumentando o tamanho do banco, então eu fiz algumas perguntas óbvias: "Por que? Como os indices funcionam? Que mágica eles fazem pra simplesmente ficar mais rapido? Por que o banco cresce?". A partir dai eu ouvi tanta besteira sem sentido que a reputação desse senior foi a 0 comigo. Detalhe, eu realmente não sabia como funcionava, mas as explicações era claramente uma tentativa de inventar desculpa e no final me dizer "voce não vai entender".
Alguns dias depois eu estava na aula de estrutura de dados e o professor estava falando sobre Hashing e buscas em arvores e ponteiros e ele soltou a frase "É mais ou menos assim que os indices de banco funcionam". Aquilo explodiu a minha cabeça e a partir dai comecei a dar muito mais valor na minha graduação.
Esse foi só um exemplo pq aconteceu com poucos dias de diferenca entre a experiencia prática e a teórica, mas na faculdade aprendi muita coisa que nao fazia ideia de como funcionava de verdade.

Eu estudaria o basico nessa ordem:

  • Algoritmos
  • Estruturas de dados mais avancadas (arvores, grafos)
  • Sistemas operacionais
  • Redes de computadores (camada OSI)

Tem bastante conteúdo na internet mas muito baguncado, encontrei esse canal no youtube que tem um pouco de tudo

Mas acho que a melhor forma de aprender seria lendo os livros base das materias na universidade, os mais famosos acho que sao os do Tanenbaum.

2

Já que vc compartilhou uma pequena história, deixa eu contar a minha também :-)

Teve uma vez que eu precisava analisar um arquivo gigante. Era um formato antigo de um software mais antigo ainda, que continha basicamente dependências (similar a um package.json). Ou seja, lá tinha descrito que o módulo A depende do módulo B, e o B depende do C, etc.

Só que o software que processava o arquivo dava erro de dependência circular, mas não dizia onde era. E como o arquivo era gigante, analisar somente "no olho" era inviável. Mesmo lendo o arquivo e gerando uma saída mais "bonitinha" e formatada, ainda era difícil detectar todos os problemas, pois era muita informação pra analisar manualmente.

Então eu acabei usando grafos, que é uma daquelas coisas que eu vi na faculdade e achei que nunca fosse precisar. Basicamente eu li o arquivo, montei um grafo direcionado (se A depende de B, criava uma aresta de A para B) e rodei um dos algoritmos clássicos para detectar os ciclos. Pronto, no fim o programa mostrava somente as dependências circulares.

Pode ser apenas um caso anedótico de uma situação rara, mas foi só pra ilustrar que os fundamentos e a "teoria chata" são importantes sim. Teve gente que não propôs esta solução simplesmente porque nem sequer imaginava que ela podia existir. Sabendo a base - no caso, matemática e a capacidade de abstração que ela nos dá - vc pode vislumbrar as soluções mais adequadas para cada caso. Até porque os fundamentos não mudam há décadas, muita coisa já tem pronta, e se vc não souber que elas existem vai acabar reinventando a roda sem necessidade...

1

É ir na origem da coisa toda e entender o porquê das coisas, não apenas saber que ela existe e como funciona. Se você sabe a história toda da coisa você tem domínio melhor sobre o assunto, parece meio óbvio , mas quem faz isso?

1

Ouvi uma palestra do Akita onde ele falou sobre esse conhecimento base e acredito que isso é algo que ele sempre vai falar nos vídeos.

Conhecimento base

No meu entendimento, o conhecimento base seria o necessário para que você não seja dependente de uma linguagem de programação. Mas o que seria esse conteúdo?

Segundo essa fala do Akita, ele trouxe o tópico de aprender a base da computação, como algoritmo e lógica de programação. Mas além disso, trago também a importância de aprender redes, banco de dados e acima de tudo isso, aprender a aprender.

Aprender a aprender

Assim como o Akita que sempre bate nessa tecla, vejo como um caminho que é necessário na vida de um desenvolvedor, já que as tecnologias mudam e empresas diferentes trabalham com tecnologias diferentes e você sempre vai precisar se renovar.

Por onde começar?

Não sei se existe bem uma ordem obrigatória, mas como diz Lucas Montano (do canal Lucas Montano) se você deixar de estudar algum assunto, uma hora esse assunto vem até você!

Existem alguns roadmaps que trazem boas noções do que você precisa estudar e até trazem uma certa ordem. Como por exemplo, entender como funciona a internet e seus protocolos.

Aproveitando o gancho, eu tenho documentado meus estudos baseados nesse roadmap, onde trouxe o conteúdo para português e com algumas imagens que auxiliam o entendimento.

1

1 - No geral na faculdade você tem conhecimentos mais amplos e uma estrutura mais organizada de aprendizado. Isso ajuda com que você veja muitas coisas do início, o que faz com que você desenvolva o conhecimento da base. É o equivalente a você não apenas saber pra que algo serve, mas como esse algo surgiu e o porquê.
É o equivalente a você estar em uma empresa onde você construiu as tabelas e os dados. Por ter o conhecimento desde o início você vai ter uma capacidade maior de abstração e resolução do problema.
2 - Acredito que se você entrar em contato com profissionais mais experientes que entendam TypeScript, eles possam te orientar ao que aprender para formar essa base. Atualmente com o excesso de informação tem sido cada vez mais difícil filtrar o conteúdo. Normalmente pessoas mais experientes conhecem o caminho das pedras.

1

Bom, experiência própria:
Eu era daqueles que achava que fazer faculdade é um desperdício de tempo e dinheiro. Faculdade para quê? Eu posso comprar uns cursos e assistir uns vídeos no youtube. Ah, e muitas doses de stack overflow, claro. Autodidata.
Mas aí eu decidi fazer faculdade (segunda graduação,a primeira foi Design Gráfico). Sentia falta de um curso nível superior na área, não pela alegria de ter um diploma na parede e sim porque senti falta justamente dessa base.
Pessoal, foi a melhor escolha que fiz. A vida acadêmica proporciona muito mais do que estudar sobre programação. Tem muito engajamento, networking, e conhecimentos em demais áreas que vão além da programação. Uma visão ampla.
Na faculdade tive matérias sobre banco de dados, redes de computadores, matemática aplicada, modelagem de dados, programação orientada à objetos, técnica de desenvolvimento de algorítimos para citar algumas.

1

O conhecimento básico são os princípios fundamentais de ciência da computação, tanto na parte de desenvolvimento de software, quanto hardware. Alguns desses conhecimentos são:

-Algoritmos e Estruturas de Dados: Essencial para entender como os problemas são resolvidos eficientemente. Você aprenderá sobre estruturas fundamentais como pilhas, filas, listas, árvores e grafos, e também algoritmos para ordenação, pesquisa, entre outros.

-Teoria da Computação: Estuda a natureza e os limites do que pode ser computado. Introduz conceitos como máquinas de Turing, complexidade computacional e classes P e NP.

-Arquitetura de Computadores: Foca em como os computadores são construídos e como eles executam programas. Aprende-se sobre a CPU, memória, I/O, e mais.

-Sistemas Operacionais: Entende-se como os sistemas operacionais gerenciam recursos do computador e fornecem serviços para programas.

-Redes de Computadores: Estuda como os computadores se comunicam entre si.

-Bases de Dados: Aprenda sobre como os dados são armazenados, recuperados e atualizados.

-Programação: Claro, a capacidade de escrever software é fundamental. Isso inclui aprender linguagens, paradigmas (e.g., orientado a objetos, funcional) e boas práticas.

-Matemática Discreta: A base matemática por trás de muitos conceitos em ciência da computação, incluindo lógica, teoria dos conjuntos, grafos, entre outros.

Eu fiz faculdade de ciência da computação, estou no ultimo periodo agora e te digo que é bem possível sim você aprender tudo sozinho, porém com a ajuda de alguém para lhe ensinar com certeza deixa o caminho mais fácil. Se não puder fazer faculdade tente sempre participar de fóruns expondo suas dúvidas, e troque ideia com profissionais mais experientes sempre que puder. Eu to revendo toda essa base agora, depois que ja desenvolvi projetos pessoais e trabalhei na área por três anos e estou prestes a me formar e posso dizer que demora até todos os pontos se ligarem na sua cabeça, mas com estudo e prática posteriormente você vai ver que o entendimento fica natural. Eu te recomendaria começar assim:

Programação: Comece aprendendo uma linguagem de programação, o que você já faz com TypeScript. Isso dará uma base para explorar outros tópicos.

Algoritmos e Estruturas de Dados: Fundamental para qualquer desenvolvedor.

Arquitetura de Computadores e Sistemas Operacionais: Entenda como o software interage com o hardware.

Redes de Computadores e Bases de Dados: Para aplicações mais práticas e voltadas para desenvolvimento web ou aplicações empresariais.

Teoria da Computação e Matemática Discreta: Estes são mais teóricos, mas muito importantes para uma compreensão mais profunda.

Te recomendo também alguns materiais, na udemy tem cursosde estrutura de dados muito bom pra você começar entendendo como funciona, depois recomendo praticar em plataformas como hackerrank e leetcode. E uma recomendação de leitura que acho ótima (porém é bem denso e complexo, tenha em mente que é uma leitura demorada) - "Introduction to Algorithms" é um dos livros-texto mais renomados no campo da ciência da computação. Escrito por Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein, o livro é frequentemente referido como CLRS (baseado nas iniciais dos autores). É usado em cursos de algoritmos em muitas universidades ao redor do mundo e é um recurso valioso tanto para estudantes quanto para profissionais.

1