Sysadmin: Saiba programar

By | September 4, 2015

Como diz meu amigo Júlio, eu sou um velho. Então que esse post sirva de conselho pros sysadmins de uma geração mais nova. Vou tentar explicar porque você deve ser capaz de programar pelo menos em uma linguagem e como sua vida vai ser bem mais fácil por causa disso.

Não acho que isso seja uma coisa comum, mas uma vez que descobri computadores eu sempre soube o que eu queria fazer: Instalar e administrar sistemas. Mas obviamente, pelo menos na minha época, não existia nenhum curso superior de administração de sistemas. Quando eu tinha idade pra universidade as opções basicamente eram Análise de Sistemas, Ciências da Computação e Engenharia da Computação. Se você está em TI nem preciso explicar como nenhum desses cursos cobre o que um sysadmin faz.

Eu até cheguei a fazer Análise de Sistemas por um tempo, depois de já ter feito colegial técnico em Processamento de Dados, então pelo menos o básico de programação eu sabia: Algorítimos e lógica.

Mas em ambos os cursos a ênfase e as linguagens usadas faziam de programação uma coisa totalmente inútil para o que eu queria profissionalmente. Não que fazer um programa de aluguel de VHS em Cobol seja inútil – longe disso.

was-that-sarcasm

Eu poderia desviar o assunto aqui e dar minha bronca geral de como o sistema de ensino é totalmente desconectado da realidade – pelo menos em IT – mas deixa pra lá.

De qualquer forma eu larguei a universidade e comecei a fazer cursos que realmente importavam e fizeram diferença na minha carreira: Cisco, Microsoft, Sun, Novell, Conectiva (puxa, sou velho mesmo). Agradeço meu pai pelo patrocínio de todos esses cursos. É difícil explicar para quem não é de TI, mas uma semana de boot camp na Sun aprendendo Solaris valeu mais pra mim do que o ano e meio de universidade no Mackenzie…

Com esses cursos mais experiência mão-na-massa que fui adquirindo fui melhorando profissionalmente. Me comprometi com Unix/Linux então linha de comando era mandatório. E ai junta um grep aqui, um pipe ali, um cut pra tirar uma coisa e de repente eu percebo que, enquanto eu estava fazendo trabalho de sysadmin, saber programar podia me ajudar bastante.

O mínimo que você precisa saber é shell scripting. Não precisa ser avançado, mas eu já me deparei com sysadmins que não conseguiriam editar arquivos em lote nem se a vida deles dependesse disso. Já vi sysadmin copiar arquivo csv na workstation windows, abrir no excel, remover uma coluna, salvar e fazer upload de volta ao servidor Linux.

tumblr_ll42z0QYmy1qfz0ybo1_500Quando eu percebi como saber bem shell script ia me dar habilidades ninjas eu me matriculei num curso do Júlio Cézar Neves. Foi sensacional, pois além do Júlio ter uma excelente didática ele ainda tem uma experiência enorme, trabalhando com Unix a mesma quantidade de anos que eu estou vivo.

No curso dele eu percebi que shell script era muito mais do que meia de comandos filtrados por pipes e como agora programação ia começar a fazer sentido e facilitar a minha vida. Os “causos” que ele contava também eram inspiradores, mostrando ainda mais como sysadmins com habilidade de programação salvam o dia frequentemente.

dsc00561

Eu, Júlio Cézar Neves e Aurélio Jargas

Vamos a um exemplo simples: Algumas vezes me deparei com uma situação em que precisava copiar um arquivo para dentro de um diretório de cada cliente. O arquivo era o mesmo para todos os clientes, com umas 10 linhas, exceto pela linha 3, onde havia um identificador único por cliente. A abordagem da maioria dos sysadmins que não programavam era copiar o arquivo para o cliente 1, abrir no editor de texto, mudar o identificador, salvar. Copiar para o próximo e assim sucessivamente.

Aliás, eu fui envolvido nessa tarefa depois de um outra pessoa ter gasto 2 dias para colocar o arquivo em 300 clientes só pra receber uma versão nova dos programadores na semana seguinte.

Sabendo programar eu fiz o seguinte em shell script:

  • Copiei o arquivo original para um template e substitui a linha com o identificador com um “IDENTIFICADOR_VAI_AQUI”
  • Listei os  clientes dentro de um dicionário, contento o diretório como chave e o identificador único como valor
  • Fiz um loop simples que rodava um sed template “s/IDENTIFICADOR_VAI_AQUI/$ident/g” > $dir/arquivo-destino

like-a-boss

Demorou logo 5 minutos pra escrever o script e 10 segundos para atualizar todos os 300 clientes. Estão entendendo onde quero chegar?

Eu sei que aprender coisas novas dá trabalho e consome tempo. Eu frequentemente gastava o dobro ou o triplo do tempo para escrever um script do que teria levado para resolver o problema manualmente. Até hoje isso acontece de vez em quando, mas é um processo que vale a pena.

O propósito de todo sysadmin é automatizar e simplificar a maior quantidade de tarefas possíveis e saber programar é a pedra fundamental desse princípio. É verdade que ferramentas como Puppet e Ansible exigem pouco em termos de programação, mas quando você começa a se afastar um pouco de infraestrutura básica e mergulhar em partes mais complexas do seu ambiente, aplicações, integrações com outros serviços,  computação na nuvem e etc você vai precisar saber se virar nos if else.

Para saber quando automatizar eu mais ou menos uso como compasso o seguinte: Se alguma coisa precisa ser feita mais do que uma vez por ano é uma boa idéia automatizar. Se precisa ser feita mais do que uma vez por mês deve ser automatizada.

Algumas pessoas podem pensar que ao automatizar tarefas estão dando um tiro no próprio pé e arriscando a perder o emprego. A minha experiência até o momento mostra o contrário disso. As empresas preferem dar valor a quem resolve os problemas com mais facilidade e eficiência e não quem se mata de trabalhar. E se seu chefe ou empresa acha que o jeito certo de medir seus funcionários é o tanto de horas com o traseiro na cadeira talvez você precise de um emprego novo… Fica a dica.

Por muitos anos shell script me serviu bem e resolveu todos os meu problemas. Até o momento em que no meu primeiro emprego aqui no Canadá os problemas eram bem mais complexos. Eu comecei a atacar os mesmos em shell, mas vi que alguns dos meus colegas usavam Perl e, rapaz, como era mais fácil resolver problemas complexos.

Não sendo programador e tendo apenas shell script como experiência deu um pouco de trabalho aprender Perl mas felizmente a empresa pagou um curso e logo eu estava conseguindo reescrever minha ferramentas em Perl.

Acho que hoje em dia eu não conseguiria escrever um “Hello World” em Perl sem consultar o Google, já que adotei o Python como a minha linguagem oficial anos atrás. Mas nos meus muitos anos de sysadmin já tive que modificar ou criar pequenas partes de código em Perl, Python, PHP e Javascript. A sintaxe muda, mas entendo o básico você vai se virar bem.

O que não falta são recursos na Internet. Existem inúmeros cursos online, gratuitos, em praticamente qualquer linguagem que você escolher. Comprometa-se com um e mande ver.

Mas não se esqueça de relaxar. Você é sysadmin e no começo seus scripts vão ser feios e cheios de coisas que vão te deixar com vergonha em alguns anos. Eu tinha uma colega que toda vez que escrevia um script vinha se desculpar que não era bonito nem otimizado. Eu sempre ria e perguntava: Em quanto tempo roda? 30 segundos? Fazer manualmente ia demorar 8 horas. Quem se importa se uma versão otimizada rodaria em 10 segundos? Ninguém!

Pra finalizar vou dar minha opinião – bem parcial: Se você precisa escolher uma linguagem para aprender escolha Python. Eu podia escrever mais um post inteiro só com as razões pra isso, mas acredite em mim: Python.

1e948700995555f0c7512350c77ab485

4 thoughts on “Sysadmin: Saiba programar

  1. Jean Landim

    Ótimo artigo. Sou programador, mas com queda por sistemas. Assim como um sysadmin, tem que dominar programação (voltada para sistemas operacionais , claro), um programador tem que dominar o sistema que ele usa.

  2. Silvio Fonseca

    Não consigo me imaginar adminstrando sistemas sem saber pelo menos alguma linguagem shell (bash no Linux/BSD, Powershell no Windows). Tem um outro lado dessa moeda que é a sustentabilidade. Você sai e o próximo sysadmin não sabe consegue cuidar do ambiente por falta de conhecimento da linguagem ou do processo. Sabe aquele “adiciona uma linha nesse arquivo texto e espera uma hora, é pra funcionar (TM)”? Um dia esse arquivo corrompe (ou o servidor mudou de IP, ou qualquer outro pre-requisito do script), o script capota, pânico e desespero pela empresa e clientes reclamando. A função do hiring manager é garantir que o conhecimento da linguagem é obrigatório para posição. Eu amo Python mas se a linguagem corrente da empresa é Powershell (yuck), vamos de Powershell. Senão o próximo candidato vai ter que ser sysadmin + 20 linguagens de programação. A função do sysadmin atual é deixar o script documentado e alguma forma de documentação geral, um Wiki seria o ideal mas até um arquivo texto decentemente escrito serve. Essa documentação vai dizer como o ambiente funciona, que scripts estão rodando, os processos que ele sustenta, problemas comuns (tipo usuário colocando input inválido, bonus points se o script detecta e gera uma descrição do erro, extra bonus points se ele consegue processar o restante dos dados válidos depois do erro)…

  3. Licio

    Me lembro da faculdade, nas aulas de programação sempre tinha alguém dizendo que não queria aprender a programar, pois ele era sysadmin ou trabalhava com redes.
    Da mesma forma, tinha programadores dizendo que não precisavam aprender redes ou sistema operacional, pois eles eram só programadores.

    Hoje eu vejo que no mercado moderno, é impossivel ser um bom profissional sem dominar ambas areas. Você não pode programar sem pensar na rede e no consumo de recursos do S.O, e o sysadmin não pode automatizar tarefas em larga escala sem programar!

Comments are closed.