A tentação do conforto

O meu problema (resolvido):

Python 2.7.9 (default, Mar  1 2015, 12:57:24)
[GCC 4.9.2] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> a=range(10)
>>>  a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>  b=map(lambda x:x+3, a)
>>>  b
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>>  c=filter(lambda x:x%2,b)
>>>  c
[3, 5, 7, 9, 11]

Em 5 minutos eu criei esta coisa aí em cima:

  • um array a com 10 itens
  • um array b, resultado da soma de todos os elementos com 3
  • um array c, com todos os elementos impares

Daí eu pensei… Se eu quiser fazer o mesmo, usando C, como seria?

Observando que:

  • não poderia queria usar o printf, nem outra rotina de formatação de saída, mas apenas “vomitar” a saida no stdout, no mesmo formato do python
  • o array usado tem dimensão fixa, mas poderia ser de qualquer tamanho
  •  a regra de mapeamento podria ser qualquer outra, ao invés de apenas somar 3
  • o filtro idem

Parti pro ataque, e foi curioso ver algumas meticulosidades do C, repipocarem vivas na minha mente e no meu código:

  •  O itoa não é parte do C padrão, mas neste caso me seria útil. (Acho que aqui alguém também pensou assim)
  • A alocação dinâmica é mandatória, pois não sabemos o tamanho do array

E … depois de 2h: após ganhar um lindo segfault, DESISTI. Abri 2 cervejinhas e voltei pro meu livro de Python.

O máximo que eu pude fazer segue abaixo (usando printf no protótipo para depois eliminá-lo):

** Aviso: Nem tente compilar isto, pois tá tudo ERRADO! ***

#include <stdio.h>
#include <malloc.h>

void pr_int(int i);
void pr_arr(int **, int);
int **range(int start, int end);
void unrange(int **a,int start, int end);

int main(void)
{
  int **a;
  a = range(0,9);
  pr_arr(a, 10);
  unrange(a, 0, 9);
  return 0;
}

void unrange(int **a,int start, int end)
{
  int x;
  for (x =0; x < end; (start-end); x++)
    {
      free(*(a+x));
      break;
    }
  free(a);
}

int **range(start, end)
{
  int **a;
  int x;

  a = malloc((end-start)*sizeof(int));
  for (x=0; x < 10; x++)
    {
      *a = (int*) malloc(sizeof(int));
      *a[0] = x;
      a++;
    }
  pr_arr(a, 10);
  return &a;
}

void pr_arr(int **arr, int arrlen)
{
  int x;
  fputs("[",stdout);
  for (x=0; x < arrlen; x++)
    {
      pr_int(*(arr++)[0]);
      if (x < arrlen-1)
	{
	  fputs("," ,stdout);
	}
    }
  fputs("]\n",stdout);
}

void pr_int(int i)
{
  printf("%d", i);
  /* char str[12]; */
  /* itoa(i, str); */
  /* puts(str); */
}

Conclusão

  • Não pelo GTD… Aliás não use GTD!
  • Não é pelo amor ao python: sempre fui contra linguagens “macdonaldas”.
  • Não sou contra o C, aliás admiro.

É porque estou ficando velho, e assim sendo devo otimizar o meu tempo.

Posso não saber sobre os meandros matemáticos de um filtro ou um mapeamento de array, mas é perceptível que quando trabalhamos com dados, estamos trabalhando, essencialmente com listas de dados – e precisamos – de filters, maps, dictionaries, árvores, etc. – que são, precisamente, ferramentas adequadas para manipular números e suas listas – Unicode por exemplo, é uma lista ou tabela, como queiram. E então porque não termos algo bom e menos idiota que uma planilha eletrônica?  Esta ferramenta que cozinha o conceito  “tudo pronto e já”  no seu cérebro e o tolhe de ser “a little bit more logical”.

Somos humanos, gostamos de conforto e para termos conforto (felicidade) devemos aprender a usar (dor) os módulos modernos de felicidade, como:

  • Carros automáticos
  • Splits
  • Smartphones
  • E, porventura, linguagens de computação de mais alto nível.

Sem nos esquecermos de suas origens e de como eles foram concebidos… Mas não deveriámos ficar reinventado … Deviamos progredir com estes confortos.

A minha era de “woodstocker” ou “hell’s angels” da informática se foi. Já era. Nem meu telefone hoje em dia usa fio, para que se apegar a alguma “route 66” do MIT… Legal ler histórias, mas se observarmos os samurais, veremos que não existem em sua forma plena, mas sim em sua essência. Afinal, a despeito de Wolverines, Darth Vaders, Alices, Deadpools, et al – usarem  “katanas”, em geral, ninguém as usa regularmente, exceto para fins artísticos, culturais e esportivo. E se tentam usar sem ter a devida habilidade, eventualmente, causam estragos.

E vamos por aí aprendendo sem eliminar os caminhos que me trazem ao presente.

Depois que eu descobri que até o Brian Kernighan usou VB, “my hell has frozen” e me toquei que meus conceitos precisam ser muito bem revisados daqui por diante.

Anúncios