Header Ads

OS CAMINHOS DA ENGENHARIA DE SOFTWARE: O QUE ESTUDAR



Hoje em dia a maioria dos cargos em Startups e empresas legais é de Software Engineer ou Engenheiro(a) de Software e por isso nos questionamos: Qual o conhecimento necessário para se tornar um(a) engenheiro(a) de software?


Como desenvolvedores(as), mais cedo ou mais tarde em nossa carreira, nós estudamos Ciência da Computação e Engenharia de Software, porém quando nós buscamos conhecimento para arrumar o primeiro emprego na área de desenvolvimento procuramos nos buscadores coisas como:
  • como me tornar back end
  • como me tornar front end
  • como me tornar programador(a)
  • como me tornar desenvolvedor(a) Android
  • como me tornar desenvolvedor(a) iOS
Isso por que buscamos coisas específicas. Carreiras específicas. E é extremamente normal, não tem problema algum uma pesquisa dessas. Não estou dizendo que você está errado(a). Se está procurando o primeiro emprego como desenvolvedor(a), precisa procurar exatamente isso que falei acima.
Em buscas desse tipo normalmente encontramos artigos como:
Essas foram as pesquisas que eu realizei no Google:
  • Como me tornar Back End
  • Como me tornar front end
  • Como me tornar programador
  • Como me tornar desenvolvedor android
  • Como me tornar desenvolvedor ios
A maior quantidade de resultados veio sobre como se tornar desenvolvedor(a) front-end, mesmo eu estando em aba anônima, mas pra você podem aparecer resultados bem diferentes.
Eu também já escrevi artigos sobre requisitos de vagas para desenvolvedor(a) front end, sobre como são entrevistas de emprego para devs JavaScript, sobre como foi meu primeiro ano nessa profissão e vários outros recursos sobre como se tornar front-end.
Só que nós pecamos em uma coisa quando escrevemos artigos sobre como se tornar desenvolvedor(a) xxx, nos esquecemos de dizer que existe coisa mais importante do que aprender uma linguagem de programação específica, mais importante do que você aprender versionamento de código, do que ter uma conta no GitHub com todos os quadradinhos verdes e por ai vai.
Uma linguagem, tecnologias específicas, Git e GitHub, são coisas que te empregam, mas não são as coisas que vão te tornar um(a) melhor desenvolvedor(a) de software ou alguém que cria as melhores soluções para os problemas relacionados a software.
Não estou dizendo que essas coisas não são importantes. Pelo contrário! Iniciantes em desenvolvimento, precisam aprender essas coisas o mais rápido possível para que consiga seu primeiro emprego.
Porém elas não são as únicas coisas que você precisa aprender para se tornar um(a) desenvolvedor(a) completo(a). O buraco vai bem mais pra baixo e é aí que entra o conhecimento em Ciências da Computação e Engenharia de Software.
Eu vivo dizendo que faculdade não importa, mas ela só não importa se você tiver a pre-disposição a estudar algumas matérias de faculdade por conta própria. Se você não estudar os assuntos que eu vou falar nesse artigo, provavelmente uma pessoa formada pode sair na sua frente em uma entrevista de emprego e até no dia-a-dia.
Não quero entrar no assunto faculdade nesse artigo, afinal sou defensor do autodidatismo, porém é uma verdade que a pessoa que fez faculdade foi forçada a aprender os conceitos e princípios importantes de desenvolvimento de software e computação que muitas vezes deixamos passar.
Nesse artigo eu vou deixar uma lista de assuntos, matérias, tópicos importantes para um(a) Engenheiro(a) de Software e links para estudo.
Eu fiz essa lista a algum tempo e busco estudar o que está nela para me tornar um melhor desenvolvedor. Se eu deixei faltar alguma coisa, por favor contribua com esse artigo comentando logo abaixo, você vai ajudar outros leitores e o autor que te escreve agora. :grin:

Conceitos de Engenharia de Software que muitas pessoas deixam passar

A ideia para esse artigo veio de uma conversa no Slack do Training Center, uma comunidade para iniciantes em programação, sobre o que aprender quando parece que já dominamos o que usamos no trabalho como linguagens de programação, bancos de dados relacionais e não relacionais, http, frameworks, metodologias de trabalho, etc.
Então veio a tona o que sempre deixamos passar: os conhecimentos em Ciência da Computação e Engenharia de Software. Estamos tão imersos em qual linguagem escolher e qual framework utilizar para resolver um problema que esquecemos que nosso trabalho vai muito além disso.
Nós estamos aqui para resolver problemas através de softwares, mas será que estamos escrevendo software da melhor maneira possível?
Uma rápida pesquisa no Google sobre engenharia de software mostra que estamos deixando passar algumas coisas importantes nos nossos artigos mais específicos, como você deve descobrir olhando neste artigo da Wikipedia: Software Engineering. Da uma olhada no link e pare para pensar honestamente se você já domina tudo o que está escrito nele.
Um bom profissional em desenvolvimento de software deve dominar os seguintes tópicos:
  • Arquitetura de Computadores
  • Sistemas Operacionais
  • Linguagens de Programação
  • Paradigmas de Programação
  • Estruturas de Dados
  • Matemática Computacional
  • Padrões de Projetos
  • Testes de Software
  • Qualidade de Software
  • Manutenção de Software
  • Gerenciamento de Software
  • Processos de desenvolvimento de software
E muito mais! — Olha que eu nem citei soft-skills.
Vamos analisar cada tópico.

Arquitetura de Computadores

Esse assunto é muito importante para que você entenda o coração da tecnologia que você usa diariamente: o computador.
Estudando isso você passa a entender como funciona a memória do computador, o processador, barramentos, clock, cache, threads, um pouco (ou muito, dependendo de que fonte de estudos você utilizar) sobre paralelismo e concorrência, portas lógicas, dentre outros tópicos importantes para compreender como o computador funciona e até a história por trás das mudanças que tivemos nos processadores e memórias nos últimos tempos.

Nenhum comentário

Tecnologia do Blogger.