Minha Jornada de Transição para a Programação: Reflexões, Desafios e Lições Aprendidas

Esse post é algo que não sei definir ao certo.

Uma reflexã? Um desabafo? Ou um questionamento?

Vamos lá, resumidamente, comecei a trabalhar com T.I. na parte de redes e infra há muitos anos, mas nunca na área de programação. Tentei comecar a estudar em uma época da minha vida, porém não foi possível continuar. Comprei um livro (Objective-C, na época) estudei por uma semana e e por N motivos parei.

Devidamente introduzidos? Talvez não, mas o que vem antes não é tão relevante para o que eu realmente quero abordar nesse post.

Comecei a estudar programação com a seguinte mentalidade, só vou parar de me esforçar bastante quando eu estiver trabalhando na área, não importa o nível e etc.

esforçar - Eu estudo só de horas que são registradas na faculdade de 220 a 300 horas
mês, fora o que eu estudo em casa, eu respiro e vivo o estudo de tecnologia.
E eu sou monotarefa ainda mais quando eu gosto do que eu estou fazendo, 
então não é algo chato para mim e sim algo que me instiga a estudar mais.

O lance é, vai bater um ano de estudos, conhecendo, aplicando e entendendo tentando muitos conceitos importantes e etc. Mas eu fico me questionando, quando será, ou quando devo começar a estudar outros assuntos para começar a tentar algo no mercado.

Comecei a estudar ADS (Analise e desenvolvimento de sistemas, online) e faço um curso de engenharia de software em uma escola chamada 42 São Paulo.

Lá na '42' é onde de fato aprendi o que sei e continuo aprendendo até hoje, estou quase terminando a primeira trilha (como uma trilha basica de fundamentos, que ao final você tem um conhecimento equivalente a um 'Junior'). E depois voce pode fazer especializações e conseguir um diploma europeu. (RNCP6 e RNCP7, mais informações aqui)

Biblioteca estática

Bom, abordando por tópicos, bem resumidamente, começamos aprendendo a linguagem C e linux. Aprendemos uma pouco de shell, e partimos para lógica de programação e logo em seguida aprendemos como funciona uma biblioteca estática, para que serve, como usar, como adicionar funções e mais alguns tipos de estrutura de dados, como listas linkadas.

File descriptors / Print e format

Em seguida começamos a aprender a manipulação de arquivos e file descriptors e etc. E tambem temos que fazer nossa propria printf, sim, em C e sem nenhuma função padrão do sistema, a não ser que voce mesmo tenha codado.

Virtual Machine e Sys admin

Aprendemos o que são maquinas virtuais, como fazer uma sem interface grafica, tudo na linha de comando, configurar partições, cryptografia com LLVM, debian, rocklinux (CentOS), configurações de sudo, e uns assuntos bem deep até chegar em uma configuração de wordpress, com mariadb e algum servidor (não pode ser apache nem nginx, normalmente nesse projeto usamos o lighttpd, leve e fácil de configurar).

Primeiro projeto Grafico

Aqui comecamos a entender como trabalhar com uma biblioteca grafica, antiga e sem update. Mas é legal, eu juro. Git da lib) tem a mais atual, que alguns alunos de uma unidade de amsterdam fizeram, muito bacana e mais fácil de utilizar.

Mais sobre kernel

Agora são projetos onde aprendemos sobre sinais no linux/unix-like, fork, pipes, redirecionamentos de file descriptor, variaveis ambiente e etc.

Projeto sobre algoritmos de ordenação

Esse projeto é para começar a conhecer sobre notação Big'O e algoritmos de ordenação.

Reproduzir um protótipo do bash

Esse projeto é um dos mais extensos até esse momento. Temos que reproduzir um bash (mini-bash) e aqui realmente aprendemos bastante coisas, juntamos basicamente o conhecimento de todos os projetos anteriores os que sao aplicaveis para conseguir fazer esse e tambem aprender a estruturar um projeto grande, ele é em dupla também.

Threads e concorrencia

Nesse projeto aprendemos sobre concorrencia e a utilizar threads, semaforos e mutex.

Netpractice

Nesse nos aprofundamos em redes. Aprendemos mais como funcionam os protocolos, a montar uma rede com interfaces, internet, calculo de mascara de rede e etc.

Segundo projeto grafico

Esse aprendemos um pouco sobre raycasting e raytracing, porém a biblioteca grafica que usamos é a mesma. O desafio está um pouco mais no conceito novo de renderizar do que no código em si.

Tudo isso acima com exceção dos projetos de rede e VM foi feito na linguagem C

Fim da primeira e segunda fase

Agora entramos na orientação a objeto em C++

Aprendemos sobre:

  • Namespaces
  • stdio streams
  • classes e instancias
  • funções e atributos membros
  • "this"
  • Inicialização de listas, 'const' e visibilidade
  • Classe vs Struct, accessors (getters and setters)
  • New and delete, filestream
  • Polymorfismo, operadores de overload, modo canonico
  • Herança, Polymorfismo de subtipo, classe abstrata e interfaces
  • Exceptions e classes aninhadas
  • Conversção de tipos, templates (s2), STL
  • E mais algumas coisas, disse o que julguei principal, mas tem mais conteudo no meio.

Agora vamos pra docker/compose

Nesse projeto temos que subir um compose com nginx, worpress, mariadb, redis, ftp, cadivisor e mais alguns serviços.

No fim, para aprender a trabalhar com docker e containers, e da pra entender bem como funciona o redis e o restante também.

Um pouco mais de NGINX OU 'Bate-papo'

Nesse projeto fazemos um servidor NGINX-like, porém em c++(98) ou podemos escolher fazer um protótipo do IRC se conhece sem pesquisar, entregou a idade

O ultimo projeto

Aqui fazemos um projeto que vamos usar tudo que for possível para construir uma aplicação web, um jogo de pong similar a esse, porém tem que ter login com autenticacao consumindo de uma API, e a nossa API tambem tem que ter esquema de pontos, chat e etc, bem completinho. Nesse projeto podemos e devemos usar algumas tecnologias e frameworks, que não vem tão ao caso especificar exatamente o que devemos e podemos usar, no fim um CRUDZAO.

Onde quero chegar é, aprendi muita coisa nesse tempo que estou estudando, e sei que tenho muita coisa para aprender e estou empolgado para aprender mais coisas. Participo de um projeto voluntário na gringa que utilizamos ktor(kotilin), Jira e bitbucket. Lá tenho que conversar em ingles, nao é perfeito, mas consigo participar e conversar com as pessoas do time.

Me esqueci de mencionar que eu tambem tenho uma noção básica de AWS, postman e insomnia.

Mas realmente não sei o que, quando ou como vou conseguir uma vaga, porque por mais que eu aprenda e estude, parece que eu vou ter que ter um mestrado para arrumar a vaga de 'menino do café'.

Eu sei que não será fácil, e que não é pastel que em 15 min de curso vou ter chuva de propostas com excelentes salários. Mas fico perdido, sem saber se estou indo por um caminho que de fato vai me levar par algum lugar.