Concrete Logo
Hamburger button

(2+2) Desenvolvedores e SOs heterogêneos

  • Blog
  • 22 de Outubro de 2012
Share

“Instantly away we wandered
In the shadowy twilight tide,
She, the silent, scornful maiden,
Walking calmly at my side,
With a step serene and stately,
All in beauty, all in pride.”

6o stanza – The Village Street – Edgar Allan Poe

A uniformidade entre os diferentes ambientes de um projeto de software, desde a máquina do desenvolvedor até produção, traz um importante tipo de benefício à qualidade do resultado final. Esta uniformidade de ambientes ajuda a reduzir a variância daquilo que está sendo produzido e se reflete inclusive na tendência de se fazer releases em diferentes níveis de produção.

Ao mesmo tempo, invariavelmente teremos diferenças entre cada ambiente. Caberá ao time dosar estas diferenças para chegar a um equação saudável para o projeto. Dentre outras coisas, há o custo de infra-estrutura, o potencial de retorno do projeto, a produtividade do Time e outros critérios de qualidade (que não a variância). Existem claramente trocas a ser realizadas.

Quando se trata da máquina do desenvolvedor, o assunto tem potencial enorme para discórdia e disputas de ego. Muitas vezes a liberdade para escolha do próprio ambiente de desenvolvimento ajuda muito mais que a variância causada pela diferença eventual entre o ambiente do desenvolvedor e o 1o ambiente integrado do Time (DEV). E em alguns casos, se as técnicas de engenharia forem saudáveis, podem pelo contrário tornar um projeto mais flexível e também com menos defeitos.

Para o bem do projeto, é importante que as paixões não virem batalhas.

Um caso que acho que vale a pena comentar é sobre a velha disputa Windows e Linux (ou o sabor Mac) acompanhados das provocações mútuas de desenvolvedores muitas vezes apaixonados em ambos os lados.

O apaixonado por Linux reclamando das “maluquices” encontradas nos ambientes Windows e julgando o desenvolvedor ao seu lado. E o apaixonado Windows que sabe do valor de um Office que funciona e que o mouse vai fazer 60 anos, melhor usar antes que ele seja aposentado.

Inícios de projetos são muitas vezes a chance de provocação mútua, em que desenvolvedores aproveitam para “exigir” que o outro reinstale sua máquina (ou use uma VM nova). A justificativa é que todo mundo nesse projeto vai utilizar o SO tal. E pior, baseado no gosto pessoal, o time pode estar empurrando uma decisão de arquitetura que afetará o ambiente de produção.

Esta escolha deve sempre partir dos requisitos para uma ideia de produção para uma ideia do ambiente de desenvolvimento. Sem esquecer, é claro, que o conhecimento técnico do Time sobre as tecnologias escolhidas é fator importante no sucesso da iniciativa.

Vale a pena pesquisar, pois é cada vez mais difícil que SOs diferentes tenham reais impedimentos para utilização nas máquinas dos desenvolvedores. O projeto Mono é exemplo disso, levando o desenvolvimento .NET a lugares nunca imaginados.

Ou o já antigo, cada vez melhor, mas muitas vezes ainda desconhecido CYGWin, levando o bom e velho bash para o seu ambiente Windows.

E o ambiente de DEV (integrado)?

Este deve estar um passo mais próximo de PROD que o anterior.

Ao mesmo tempo, não deveria fazer tanta diferença para o desenvolvedor, afinal, o time estará usando deployment automatizado e integração contínua não é mesmo?

E o bootstrap?

Pode dar mais trabalho, mas também pode ser bastante simples lidar com as diferenças.

Pode ser tão simples quanto isso:

bootstrap.bat
[sourcecode language=”bash”]
@ECHO off
:BEGIN
CLS
IF NOT DEFINED CYGWIN_HOME SET CYGWIN_HOME=\cygwin
ECHO Your CYGWIN_HOME variable is set to: %CYGWIN_HOME%
@rem install cygwin on the current/local windows computer
@c:
@mkdir %CYGWIN_HOME%
@echo Starting the cygwin install in %CYGWIN_HOME% in 10 seconds…

CHOICE /C SN /N /T 10 /D S /M "Continuar S/N ?"
IF ERRORLEVEL == 2 GOTO END
IF ERRORLEVEL == 1 GOTO CYGINSTALL
GOTO END

:CYGINSTALL
@..\lib\setup.exe –download –site https://%CYGWIN_SERVER%/cygwin –root %CYGWIN_HOME% –quiet-mode –no-shortcuts –no-startmenu

@echo Instalacao do CYGWIN finalizada. Executando bootstrap.sh em 10 segundos…
CHOICE /C SN /N /T 10 /D S /M "Continuar S/N ?"
IF ERRORLEVEL == 2 GOTO END
IF ERRORLEVEL == 1 GOTO SH
GOTO END

:SH
%CYGWIN_HOME%\bin\bash -C ./bootstrap.sh
REM – Para evitar o fechamento automatico do BATCH ao final do processamento
PAUSE
:END
[/sourcecode]

Em qualquer hipótese, a empresa que permite essa convivência tem um grande potencial de aproximar as pessoas e destruir silos de conhecimento. Todos ganham usando um pouco de cada coisa.