Fala galera! Mais de 1 ano desde que criei este blog e não parei para escrever aqui, bora começar então, espero ser bem ativo por aqui trazendo muito conteúdo técnico e de carreira para vocês!
Conforme descrevi em meu primeiro post aqui no blog, comecei cedo na área de tecnologia, por volta de 2005 quando tinha apenas 15 anos. Hoje, com mais do dobro disso, quero passar para vocês um pouco do que foi essencial para meu inicio lá atrás e me acompanha até hoje na profissão: a base!
O que eu tenho mais visto nesses últimos tempos tem sido empresas e\ou profissionais da área vendendo cursos com discurso: faça este curso e esteja preparado para o mercado de trabalho! (Aqueles cursos de 6 meses que prometem salários de 5 mil reais pra cima)
Serei um pouco repetitivo mas acredito que será importante para o contexto. Quando fiz meu primeiro curso na área que foi Montagem e Manutenção de Microcomputadores no SENAI eu me apaixonei já no inicio, eu sou uma pessoa muito visual e tátil, gosto de pegar nas coisas (Por isso gosto de livros em papel, por exemplo) e por conta disso eu fiquei deslumbrado em abrir um gabinete de computador, tocar em uma placa mãe, memória, disco rígido, etc. Ali eu não só aprendi a montar e desmontar um computador (Coisa que faço até hoje, pra mim e para minha familia e amigos) mas também a entender como um computador funciona, que não existia só Windows como Sistema Operacional, o que era Linux, softwares Open Source, redes de computadores e muitas outras matérias fundamentais.
Depois disso minha curiosidade aflorou, comecei a montar e desmontar meu próprio computador, formatar, usar outros sistemas operacionais e a pesquisar coisas relacionadas na internet, experimentar coisas novas. Com 17 anos comecei a fazer Técnico em Informática em uma escola próxima de casa e la aprendi e reforcei muitas outras matérias base como Sistemas Operacionais, Redes de Computadores, Lógica de Programação, Matemática e Estatística, Inglês Básico, Elétrica, etc. Pouco depois comecei a fazer cursos profissionalizantes fornecidos pelo CIEE e o principal foi o preparatório para a certificação CCNA da CISCO. Neste curso aprendi toda a base de Redes que mais uma vez, carrego até hoje em minha carreira principalmente depois do surgimento das Clouds Publicas.
Praticamente junto deste curso da Cisco iniciei na graduação de Engenharia da Computação e logo depois comecei a estagiar na área e sabe quais eram minhas principais funções?
- Montagem e Manutenção de Notebooks, Computadores e Servidores;
- Instalação e Configuração de Sistemas Operacionais Windows XP, Vista, Server NT, 2000, 2003 e 2008;
- Montagem e Configuração de Redes;
- Instalação e Configuração Sistemas Java e .Net\C#;
- Instalação e Configuração de Bancos de Dados SQL Server;
- Desenvolvimento de scripts de atualização e configuração.
Vejam, tudo que estudei e me preparei desde lá de trás eu utilizei em meu primeiro emprego na área e pasmem, eu uso até hoje! Dei todo esse contexto para vocês para elencar algumas matérias que acredito ser essenciais para todo profissional de Tecnologia da Informação, sendo você de Infraestrutura\Operação, Desenvolvedor de Software, Administrador de Banco de Dados (Assim como eu) e outras áreas:
Redes de Computadores
Não importa de qual área você seja, sério, não importa, você PRECISA saber o que é um IP, um protocolo TCP\UDP, Modelo OSI, calcular uma sub-rede, domínios de broadcast e rede, tabela de roteamento. Essas são algumas coisas que toda pessoa de tecnologia precisaria aprender, por que? Por que tudo trafega pela rede! Quase toda aplicação existente atualmente trabalha na internet ou no mínimo em rede, logo, você precisa saber qual o tamanho do pacote que sua aplicação trafega pois banda de internet ainda é limitada, talvez com o 5G veremos menos problemas de aplicativos de celular quebrando por não ter banda o suficiente para trafegar seus pacotes, porém, ainda sim será importante este tipo de noção pois isso impactará diretamente na performance da sua aplicação\aplicativo.
Se você não for um Analista de Redes, que precisa saber de cabo a rabo como uma rede funciona, os conceitos básicos de rede iram te auxiliar muito a entender como toda sua infraestrutura esta funcionando, principalmente na Cloud, sério, a base de qualquer Cloud Computing é redes, você precisa começar pela rede. “A Will, más eu crio uma conta no Azure, AWS ou GCP e ela já me da toda rede pronta, eu já saio criando meus recursos sem precisar me preocupar com isso”. Verdade, de fato as principais Clouds te dão uma VPC (Virtual Private Cloud) já configurada, saindo para internet, já configurada. Para um ambiente de testes e laboratório, ou até mesmo para começar um pequeno negócio essa infra já criada vai te ajudar, mas não irá resolver se o negócio escalar muito, rapidamente você terá problemas como esgotamento de IP’s e conflitos de sub-rede por exemplo.
Tem uma máxima que vocês vão me escutar falar bastante aqui no Blog: Se esta fácil demais, esta errado! Mesmo que já esteja pronto é importante saber como funciona. Por isso estude Redes de Computadores, a base deste conhecimento vai te ajudar por toda sua vida em T.I.
Indico aqui o conteúdo que me ajudou lá atrás: Cisco e seu material para a certificação CCNA. Tem um livro muito bom sobre essa certificação em português escrito pelo Marco Aurélio Filippetti, CCNA 6.0 – Guia completo de estudo.
Lógica de Programação e Estrutura de Dados
Quando entrei na faculdade, ja no primeiro semestre eu peguei um exame, adivinhem em qual matéria? Sim, isso mesmo, Lógica de Programação. Grande parte da minha sala pegou, inclusive. Naquela época o termo DevOps estava nascendo, a AWS ainda estava começando com pouquíssimos serviços, o SysAdmin reinava, o Dev só codava e a vida seguia.
Por que citei toda essa história acima? Lembra que eu falei que sou uma pessoa de infra desde o principio? Então, eu nunca precisei tocar num código na vida, no curso técnico que eu havia feito não ensinaram lógica de programação, já saíram ensinando Visual Basic, arrastando caixinha, programando ações na tela sem explicar muito como tudo de fato funcionava e eu pouco me interessei na época também, falha minha, por que anos depois eu não teria pego exame em lógica, rsrs.
Mas hoje, mesmo ainda me considerando muito mais Ops do que Dev a lógica de programação me ajuda diariamente, seja para dar manutenção em uma Procedures ou Functions no banco de dados, seja para desenvolver scripts e Infra como Código ou até mesmo para ajudar os Devs a resolver algum problema na camada da aplicação a lógica de programação me acompanha. Esse livro aqui embaixo foi o que me salvou na aula de Lógica de Programação, depois de ler e praticar muito com ele eu e alguns de meus amigos conseguimos passar bonito:

Mas e a Estrutura de Dados que citei junto? Quando tive essa matéria na faculdade fiquei maravilhado! Por que é com ela que você aprende como alocar apenas os recursos que realmente precisam na memória, a desenvolver algoritmos de fila e pilhas e muitos outros conceitos avançados que todo o Dev precisaria saber. Naquela época os recursos de hardware eram limitados, não era comum ter mais de 4 ou 8GB de memória no servidor, as linguagens de programação mais conhecidas de hoje como Java e C# por exemplo, ainda tinham que ter suas configs otimizadas para não esbarrar na limitação de recursos para rodar, por conta disso um sistema bem construído em termos de utilização de recursos raramente dava problema de estouro de memória no servidor (Nossa! Quantas vezes me peguei reconfigurando JVM por causa de config errada de Tomcat ou sistemas estourando stack overflow).
Dois livros que aconselho a muitos lerem, mesmo quem já é mais experiente é o Algoritmos Teoria e Prática de Thomas H. Cormen e o A Common-Sense Guide to Data Structures and Algorithms, Second Edition: Level Up Your Core Programming Skills De Jay Wengrow.
Sistemas Operacionais
Neste tópico não me estenderei muito, mas quero citar Sistemas Operacionais aqui para que vocês possam entender que: Linux domina. “Mas Will, eu uso Windão\Mac e eles me atendem super bem, preciso migrar para o Linux?”, a resposta é simple: Não! O que eu quero passar aqui é que distribuições Linux dominam a camada de servidores hoje, ou seja, você esta ai construindo um sistema Java, Python, Javascript, Go, entre outros, o melhor ecosistema para executar suas aplicações é o Linux, seja por que ele é mais modular, aberto e aceita muitas alterações até a camada do seu Kernel.
Hoje falamos muito sobre containers e olha só, containers (na sua melhor forma) só rodam sobre o kernel Linux. Em algum outro post quero entrar mais a dentro em containers com foco em bancos de dados, por isso falaremos mais profundamente sobre containers depois blz?
Mas independente do S.O. com o qual você irá trabalhar busque entender mais profundamente como ele funciona, principalmente aquele para o qual você esta desenvolvendo sua aplicação, seja ele Windows, Linux, IOS, Android, Unix. Isso irá te ajudar em momentos de problema, quanto mais você mergulhar no sistema operacional melhor irá entender como as coisas funcionam.
Já para desenvolver, ai pode utilizar qualquer sistema operacional, qualquer um mesmo, todos tem seus prós e contras, escolha o que melhor te atende.
O canal do mestre Akita on Rails tem muitos vídeos fantasticos sobre os temas que comentei acima e muito mais, inclusive ele tem videos explicando as diferenças entre os principais S.Os de mercado hoje. Nessa lista ele reune os videos sobre Sistemas Operacionais:
Bancos de Dados
Por fim, mas não menos importante eu trago o tema ao qual venho me especializando e trabalhando nos últimos anos que é Banco de Dados.
Qualquer sistema que precisa armazenar dados de forma eficiente dependerá de um banco de dados, logo, saber linguagem SQL (Structured Query Language) é essencial.
O que mais vejo hoje são sistemas sendo desenvolvidos sobre ORM (Object-Reletional Mapping) para lidar com a camada de banco de dados sem precisar lidar com a linguagem SQL, ou seja, você esta lá mandando bronca no seu Javão, C Sharpzão, Pythtão, Javascriptzão e utiliza algumas bibliotecas para te ajudar a não lidar com banco de dados. Vou te contar duas máximas da vida de T.I.: “Se esta fácil, esta errado.” e ”Uma hora a conta chega.”.
“Nossa Will, mas meu código funciona, eu rodo em desenvolvimento e homologação e executa tudo muito rápido mas quando vai para produção não roda , o sistema cai, tudo fica lento”. Poise, tudo no começo é uma maravilha, por que? Por que você quase não tem dados, logo, tudo vai executar rápido, então se você não cria indices nas tabelas no dia 1, quando seu código vai para o ar, se você não se preocupa em saber como o seu ORM esta formando as queries, se você não se preocupa com a estrutura da suas tabelas, la na frente, daqui 3 ou 6 meses ou até mesmo 1 ou 2 anos, quando seu sistema do dia pra noite ficar lento e você ver que é o banco de dados, não culpe a tecnologia falando: ”Nossa, por que fui escolher um banco de dados relacional, deveria ter ido para o MongoDB ou Cassandra, lá eu não ia ter problemas” vai por mim, eu já ouvi muito isso, você não imagina como sua vida estaria hoje utilizando tecnologias NoSQL de forma errada, muito antes deste momento você já estaria chorando sentado num canto escuro.
Este é um tema que quero trazer para vocês com mais detalhes lá na frente pois toca em conceitos de escalabilidade e elasticidade de aplicações que são conceitos mais avançados e necessários quando já se sabe a volumetria (Número de usuários simultâneos, volume de acessos, etc.) ao qual seu sistema será submetido ou quando já esta se tendo problemas dessa natureza em seu ambiente.
O que eu quero passar aqui para vocês é que a camada de banco de dados precisa ser respeitada pois cedo ou tarde você terá problemas, seja você um Dev ou Ops e muitas vezes não terá um DBA por perto para ajudar, então ter os conceitos de banco de dados bem solidificados, saber qual é a melhor tecnologia para um determinado cenário sistemico, conhecer bem a linguagem SQL e conhecer bem uma tecnologia de banco de dados relacional é essencial para que você evite dores de cabeça futuras ou para te ajudar no troubleshooting da sua aplicação.
Trago aqui dois livros para quem esta começando e quer saber mais sobre a base deste tema que é Sistemas de Bancos de Dados e NoSQL Essencial: um Guia Conciso Para o Mundo Emergente da Persistência Poliglota.
Conclusão
Este foi um compilado de temas os quais eu me baseio desde o inicio da minha carreira e acredito fortemente que, seja você de Dev ou Ops, saber esses tópicos com certa profundidade irá te ajudar muito no seu dia a dia na área de tecnologia, se você mira se tornar um profissional mais completo e se destacar, vai por mim, aprenda e tenham essa base sólida, revisando constantemente esses tópicos.
Posso ter deixado algo passar, num futuro trago uma revisão deste post por que esse mundo é muito dinâmico, mas posso te dizer que desde o inicio da minha carreira à 15 anos atrás eu trago muito desses temas comigo até hoje e vejo que muitos não possuem essa base e muitas vezes acabam sofrendo para resolver determinados problemas.
No mais, qualquer dúvida, crítica (construtiva) e sugestões são extremamente bem vindas, este é o lugar aonde quero trazer minha experiencia, ensinar e aprender com todos vocês.
Desde já, muito obrigado! Tamo junto!