Uma história do fundo do baú sobre "controle de versão"
Acompanhando a aula de um curso on-line, que o pessoal do TabNews não deve conhecer :-))), o professor abordou o tema de versionamento de código.
Além de apresentar a principal ferramenta da área, o Git, ele citou soluções antigas de controle de versão e técnicas utilizadas quando nenhuma solução específica para esse fim estava disponível.
Foi nesse ponto que me lembrei de uma história do fundo do baú sobre "controle de versão". De uma época em que eu nem sabia da existência de "controle de versão".
A história data de antes de eu ter meu primeiro HD.
Sim, houve uma breve época em que tudo o que tudo que tínhamos eram disquetes.
E eramos muito feliz com os disquetes!
Afinal, antes disso, eram fitas cassete ou outros tipos de fitas, magnéticas ou perfuradas.
Ou então, quem tinha acesso a um "computador" (não um "microcomputador"), talvez já tivesse passado pela interessante experiência de utilizar cartões perfurados, cada um representando uma linha de código do seu programa.
Opa!
Desculpem-me ter entrado nesse momento "revival".
Voltemos aos "modernos" disquetes.
O disquete era a principal memória de armazenamento dos micros.
Trabalhávamos, meu saudoso amigo Flávio e eu, com dois projetos em um disquete.
Quanto achávamos importante manter histórico de algum arquivo dos projetos, simplesmente salvávamos uma cópia com outro nome. Isso não era um "controle de versão", era apenas um "cuidado".
Mas, pensamos: E se o disquete "morrer"?
Então, tivemos a "grande" ideia de utilizar dois disquetes ao invés de um.
Assim teríamos "sempre" as últimas duas versões completas dos projetos.
Acabava de nascer nosso primeiro "controle de versão".
O "controle de versão"
Para ajudar na explicação, vou chamar cada disquete por uma letra diferente: X e Y.
Inicialmente, X era o disquete de produção, com a versão atual dos projetos, e Y era o da versão anterior.
Quando decidíamos que era hora de trocar de versão, copiávamos X sobre Y. Redefiníamos que, agora, Y era o de produção e X era o da versão anterior.
Obs.: Fazíamos essa troca de função para um disquete não desgastar muito mais do que o outro.
Aqui você já deve ter percebido um "pequeno" problema no "controle de versão".
Quando fazíamos a cópia, não tínhamos mais duas versões. Tínhamos duas cópias da mesma versão.
Mas, como essa nova versão já estava bem testada, achávamos que isso era OK.
Sobre copiar disquetes
É bom esclarecer para as gerações mais recentes o que isso significava naquela época.
Não era como copiar um arquivo ou um diretório hoje em dia, com clica-e-arrasta ou Ctrl+C/Ctrl+V.
Executávamos um comando parecido com:
COPY "A:*.*" TO "B:*.*"
Porém, como era comum na época, mas não tínhamos dois drives de disquete ("drive", no caso, é onde um disquete é inserido para ser utilizado).
Lembro ainda que, apesar dos disquetes armazenarem muito poucos dados, comparando com os dias atuais, eles armazenavam muito em relação ao tamanho da memória dos computadores.
Tendo posto esses esclarecimentos, vamos à descrição do processo:
Ao executarmos o comando de cópia, o sistema operacional escrevia na tela:
Insira o disquete A
Inseríamos (se não estivesse lá), teclávamos "Return" e o sistema operacional começava a ler os arquivos do disquete, tanto quanto cabia na memória do computador. Então, escrevia na tela:
Insira o disquete B
Retirávamos o A, inseríamos o B, teclávamos "Return" e o sistema operacional começava a escrever tudo, dos arquivos de origem, que tinha armazenado na memória. Então, se não tivesse acabado a cópia, escrevia na tela:
Insira o disquete A
Sai B, entra A, "Return", lê o que puder e:
Insira o disquete B
Sai A, entra B, "Return", escreve o que tem e:
Insira o disquete A
E assim seguia, repetidas vezes, até lermos na tela algo como:
145 arquivos copiados
Agora sim, vocês entenderam o que era "copiar disquetes".
Troca de versão
Tendo em vista o trabalho envolvido na simples cópia do disquete, não trocávamos de versão todo dia. Até porque, não faria mesmo sentido naquela ápoca.
Trabalhávamos vários dias, às vezes até duas ou três semanas, até decidir que uma versão, de alguma funcionalidade ou do projeto como um todo, estava boa e testada o suficiente para ser definida como nova versão oficial, e efetuar a troca dos disquetes.
Às vezes, empolgados com o projeto, trabalhávamos até tarde, principalmente quando estávamos fechando versão.
Foi em um dia desses que...
"Ufa! Essa versão está show! Deu trabalho, mas fechou! Agora vamos descansar e, amanhã, fazemos a cópia."
Desliga tudo e tira o disquete do drive, para colocar no seu devido envelope.
Dia seguinte:
"Vai fazendo a cópia enquanto eu faço o café."
Cópia feita!
Ao começar a trabalhar...
😱
Descobrimos que fizemos a cópia errada.
Ao invés de copiar a versão nova sobre a anterior, copiamos a anterior sobre a nova.
Além de perdermos as últimas semanas de trabalho, perdemos as semanas seguintes, pois não conseguíamos ser produtivos, de tanto desgosto.
👐 Git
Com o fim da minha história do fundo do baú sobre "controle de versão", é chegada a hora de você agradecer por viver em uma época em que existe o Git. 😄
Cada época...
Na verdade, cada época tem seus desafios e seus encantos.
Sigamos nos encantando e vencendo novos desafios.
Contexto
Para os curiosos, sobre os projetos da história:
A linguagem era Turbo Pascal 2. O computador era um MSX. Os projetos eram compatíveis com vários sistemas operacionais. Inclusive, um teve uma pequena continuidade em PC-XT.
Naqueles disquetes, trabalhávamos nos seguintes projetos:
-
Um programa de visualização, em perspectiva, de modelos 3D em wireframe, onde o ponto de observação podia ser movido em tempo real, controlado como se fosse um drone de hoje em dia. Incluía também um CRUD dos pontos e das arestas que definiam o sólido.
-
Um editor gráfico com recursos bem simples de desenho, cujo diferencial era salvar a imagem como um script MSX-BASIC com comandos DRAW. Ao executar esse script, a imagem em questão ia se formando na tela, seguindo todos os passos executados em sua criação.
Links
- O curso que eu estava vendo: Curso.dev
- Site do Git
- Uma referência ao comando DRAW do MSX-BASIC
Publicado originalmente em https://www.oxigenai.com