Elmord's Magic Valley

Computers, languages, and computer languages. Às vezes em Português, sometimes in English.

Posts com a tag: mind

Mind dump

2015-04-10 01:34 -0300. Tags: comp, prog, pldesign, lash, life, mind, ramble, music, em-portugues

Coloquei o lash no GitHub, for what it's worth. Eu me pergunto se foi uma coisa sensata publicar ele agora, mas já faz um tempo que eu vinha anunciando que ia publicar "em breve", então coloquei lá de uma vez. (Além disso, esses dias eu quis mexer nele fora de casa e não tinha o código.) O código está em um estágio bem inicial – vergonhosamente inicial, dado que já faz umas três semanas que comecei a trabalhar nele, e o que eu fiz até agora eu provavelmente poderia ter feito em uns três dias se tivesse tido a disciplina de trabalhar nele semi-diariamente. Por outro lado, o projeto está andando para frente, mesmo que devagar, o que já é melhor do que todos os anos anteriores em que eu disse "puxa, eu queria fazer um shell" e não escrevi uma linha de código. So, that's progress. Além disso, na atual conjuntura eu provavelmente deveria tentar relaxar um pouco a cuca e me preocupar menos com isso; afinal, isso é um projeto pessoal e eu não devo nada para ninguém. No final das contas, megalomanias de dominação mundial à parte, o principal afetado pelo bom sucesso do projeto sou eu mesmo.

Eu cheguei à brilhante e inaudita conclusão de que eu vou ter que reduzir bastante minha atividade twittereira e internética em geral se eu quiser começar a fazer alguma coisa produtiva com a minha vida (onde escrever um shell e estudar línguas obscuras contam como coisas produtivas). Por outro lado, a Internet atualmente é responsável por uns 95% das minhas interações sociais, especialmente agora que eu não tenho mais aulas, coisa que faz uma certa falta, a despeito da minha fama de anti-social. A solução provavelmente é (shudder) sair de casa e falar com pessoas.

Eu também cheguei à conclusão (igualmente brilhante) de que muita coisa nessa vida é questão de criar hábitos. Por exemplo, até algumas semanas atrás eu costumava usar toda a louça da casa até não ter mais louça limpa, momento em que eu aplicava o garbage collector e lavava tudo (ou, dependendo da preguiça, só o que eu precisasse na hora). Eu me dei conta de que isso não estava sendo muito conveniente e resolvi começar a lavar as coisas logo depois que uso, ou antes de ir dormir. No começo era meio ruim ter que me "obrigar" a fazer isso, mas agora eu já me habituei e isso não me incomoda mais tanto (além do que, como a louça não acumula, normalmente o esforço de lavar é pequeno). Talvez seja uma questão de criar o hábito de sentar uma hora do dia para programar/estudar/whatever. O flip side disso é que a gente também se habitua ao longo da vida a uma porção de coisas que a gente deveria questionar e/ou atirar pela janela, não só hábitos acionais como também (e principalmente) hábitos mentais. Estas são minhas (brilhantes e inauditas) palavras de sabedoria do dia. (Tecnicamente todo hábito é mental, mas deu pra entender. Acho.)

Escrever o lash em Chicken Scheme tem sido uma experiência bastante agradável. Eu estou aprendendo (a parte não-R5RS d)a linguagem "as I go", mas até agora a linguagem não me deixou na mão, a implementação é estável e gera executáveis pequenos e razoavelmente rápidos, e o sistema de pacotes funciona. (Rodar chicken-install pacote e consistentemente ver o pacote ser baixado e compilado sem erros era quase chocante no começo. O fato de que as bibliotecas são shared objects (a.k.a. DLLs) de verdade e carregam instantaneamente também muito alegrou o espírito, especialmente dada minha experiência anterior com bibliotecas em Common Lisp.) A única coisa que deixa um pouco a desejar é o error reporting, mas nada "deal-breaking".

Eu me dei conta de que uma das coisas que eu mais gosto em linguagens "dinâmicas" é a habilidade de rodar um programa incompleto. Eu já meio que escrevi sobre isso antes, mas eu já não lembrava mais quão deeply satisfying é poder rodar um programa pela metade e ver a parte que foi escrita até o momento funcionando. Por outro lado, é bastante incômodo errar um nome de função ou os argumentos e só descobrir o erro em tempo de execução. Faz muito tempo que eu acho que o ideal seria uma linguagem com análise estática de tipos, mas em que erros de tipo gerassem warnings ao invés de impedir a compilação, e que permitisse a declaração opcional dos tipos de variáveis e funções. Uma dificuldade que eu via nisso até agora é que enquanto em uma linguagem dinâmica os dados costumam ter uma representação uniforme em memória que carrega consigo alguma tag indicando o tipo do dado, e portanto é possível chamar uma função com argumentos do tipo errado e detectar isso em tempo de execução, em uma linguagem estaticamente tipada convencional os dados costumam ter uma representação untagged/unboxed e de tamanho variável, o que tornaria impossível compilar um programa com um erro de tipo sem violar a segurança da linguagem (e.g., se uma função f recebe um vetor e eu a chamo com um int, ou eu rejeito o programa em tempo de compilação, o que atrapalha minha habilidade de rodar programas incompletos/incorretos, ou eu gero um programa que interpreta o meu int como um vetor sem que isso seja detectado em tempo de execução, o que provavelmente vai causar um segfault ou algo pior). Porém, esses dias eu me dei conta de que ao invés de compilar uma chamada (insegura) a f(some_int), poder-se-ia simplesmente (além de gerar o warning) compilar uma chamada a error(f, some_int), onde error é uma função que avalia os argumentos e lança uma exceção descrevendo o erro de tipo. O resultado prático é que o executável gerado roda até o ponto em que é seguro rodar (inclusive avaliando a função e os argumentos) e interrompe a execução no ponto em que seria necessário chamar a função com um argumento de tipo/representação incompatível. Melhor dos dois mundos, não? Vai para o meu caderninho de idéias para a Linguagem Perfeita™.

Eu ia escrever mais umas notas sobre a vida, mas ultimamente eu ando mui receoso quanto a publicar coisas da minha vida pessoal – o que provavelmente é uma boa idéia. É fácil esquecer que qualquer um, no presente ou no futuro, pode ler o que a gente escreve nessa tal de Internet. Eu também já falei sobre isso mil vezes antes, which makes it all the more surprising que eu ainda tenha que me relembrar disso ocasionalmente. Anyway.

Unrelated com qualquer coisa, conheci recentemente uma bandinha chamada Clannad, na qual eu me encontro totalmente viciado no momento. Também conheci uma coisa totalmente excelente chamada Galandum Galundaina, uma banda mirandesa com certeza.

12 comentários / comments

State of the life

2014-10-17 01:37 -0300. Tags: life, mind, academia, mestrado, home, em-portugues

As pessoas gostam de dizer que o tempo passa rápido. Eu nunca concordei com essa afirmação; para mim, um ano sempre levou um ano inteiro para passar. Mas esse ano em particular está se puxando em termos de neverendingness. Para futuras consultas, e para quem tiver interesse, deixo aqui um registro simplificado dos fatos.

Em janeiro deste ano, meu pai se mudou para um apartamento em Porto Alegre, e eu, que até então morava em uma casa alugada de solidez questionável, me mudei para a recém desocupada casa. Após uma série de acidentes vivenciosos, cuja enarração está fora do escopo deste livro, encontrei-me por volta de julho dividindo a casa com meu pai e minha irmã, compartilhando com esta última um quarto de 2×2,5m, e tendo que cuidar da mesma no período da tarde. Uma vez que essa obrigação conflitava com a necessidade de comparecer à UFRGS para a bolsa do mestrado e a essas alturas eu já estava perdendo as estribeiras, em uma última tentativa de salvar um pouco da minha sanidade mental, falei com meus orientadores sobre a possibilidade de trancar a matrícula. No fim das contas, ficou combinado que eu poderia continuar realizando as atividades do mestrado remotamente (já terminei todos os créditos necessários (que a partir deste ano são 12, e não 24), e agora só me restam o Trabalho Individual e a dissertação e atividades relacionadas), eu fiquei mui faceiro, e ficou por isso mesmo.

Evidentemente, isso não foi nada produtivo, dada a falta de sossego e de coisas como uma mesa decente e isolamento e o fato de eu passar constantemente estressado ou cansado ou deprimido. Nesse meio tempo eu descobri que é possível comprar casas super-barato nas verdejantes terras de Viamãoheimr se o camarada não se preocupar com trivialidades como escritura e terreno em área verde, e comecei a catar locais para me mudar para no ano que vem. Depois de umas três ou quatro visitas a locais de solidez ainda mais questionável do que a anteriormente citada casa e em localizações pra lá de interessantes, eu larguei de mão essa idéia e decidi esperar até o fim do ano (quando eu me livro da obrigação de cuidar da criança) para alugar uma casa e me mudar.

No dia 15 de setembro, quando eu estava considerando trancar a matrícula pela (n+1)-ésima vez, eu me dei conta de que se eu alugasse uma casa suficientemente perto eu não precisaria esperar até o fim do ano para me mudar; eu podia me mudar agora e só ir para a outra casa à tarde. Até então eu estava tão fixado na idéia de comprar uma casa que isso nem me passou pela cabeça. Catei casa para alugar nas redondezas e encontrei uma elegante peça de 3×5m mais um banheiro para alugar por meia pataca. A saga para conseguir alugar esse bendito imóvel é uma história à parte que eu hei de postar em algum momento para a elucidação de todos os seres sencientes. Suffice it to say que sexta-feira da semana passada eu consegui me mudar para o lugar, e que turns out que 15m² são um tamanho bem razoável se bem utilizado e quando não se tem que dividi-lo com ninguém.

A situação está um pouco melhor desde que eu me mudei para cá. Por outro lado, até o fim do ano eu continuo tendo que brincar de babá às tardes e em outros momentos de interesse, entre outros eventos que me levam a questionar se o conceito de respeito pelo tempo dos outros existe na cabeça da população em geral ou se é alguma flutuação da minha imaginação, mas eu vou levando, pois é só até o fim do ano, e depois disso eu espero me sentir mais confortável em dizer não diante de proposições equiparáveis.

Quanto ao mestrado, by now I'm pretty sure de que eu não quero seguir a carreira acadêmica e viver de publicar papers. Aparentemente é possível ganhar uns bons trocos dando aula em instituições privadas de ensino superior sem ter que fazer pesquisa, e por enquanto este é o meu plano para depois que eu terminar o mestrado. (Para a minha definição de "uns bons trocos", pelo menos. Certamente não tanto quanto um professor titular de universidade federal, mas a carga horária é menor também. Eu não tenho a necessidade de ganhar rios de dinheiro e, contanto que eu ganhe o suficiente para levar uma vida decente e guardar uns trocados, eu prefiro ter mais tempo do que mais dinheiro. Eu me sinto um pouco desconfortável dizendo isso para as pessoas, porque é basicamente uma admissão de vadiagem, mas should it matter, se eu estiver me mantendo com meu próprio dinheiro sem pedir nada para ninguém? Enfim.) Eu tenho tido dificuldade em me motivar a fazer as atividades do mestrado, mas eu tenho levado, e o prognóstico de terminar isso tudo e deixar para trás é bastante animador.

By the way, lembram quando eu manifestei minha descrença pela idéia de que as aulas do mestrado "não são mais do mesmo"? Hell was I right. As predicted, as aulas são much the same thing (pelo menos as que eu tive). A melhor cadeira que eu fiz no semestre foi Programação Funcional Avançada, que nem era do mestrado (foi a cadeira que eu escolhi para realizar a Atividade Didática). Algoritmos e Teoria da Computação foi bacaninha também (em particular a parte de Teoria da Computação), mas nada muito diferente de uma cadeira da graduação. De resto, o semestre foi tolerável primariamente graças aos pães do Hélio. Also as predicted, a variedade de cadeiras (ou falta de) também limita as possibilidades de pegar apenas cadeiras em tópicos de interesse; aliás, os horários das cadeiras do mestrado são um tanto quanto mal-distribuídos (não há praticamente nenhuma cadeira às 8h30, por exemplo), o que aumenta a possibilidade de conflitos de horários entre cadeiras (semestre passado eu tive que escolher entre uma cadeira de programação paralela e uma de tendências em engenharia de software por conta do conflito de horários, por exemplo); soma-se a esse problema o fato de que a maioria das cadeiras é oferecida em apenas um dos semestres do ano, e que recomenda-se fortemente aos alunos cursarem todas as disciplinas no primeiro ano do mestrado. On the bright side, esse ano o PPGC resolveu reduzir o número de créditos obrigatórios do mestrado para 12, o que permite realizá-los todos no primeiro semestre.

Also on the bright side, eu consegui (depois de muitas conturbações, primariamente na minha cabeça) escolher um tema de dissertação em um assunto que me interessa. Vai dar um baita trabalho para implementar, mas pelo menos eu vou aprender coisas pessoalmente úteis para mim no processo.

Do futuro, falamos depois.

6 comentários / comments

A madman and a scholar

2014-07-06 20:41 -0300. Tags: life, mind, academia, mestrado, ramble, em-portugues

Recentemente, conversando com algumas pessoas sobre o mestrado, eu disse, with varying wording, que eu ando meio pirado. Não era figura de linguagem: I meant every word of it. Se eu ainda não perdi totalmente as estribeiras, eu provavelmente devo isso primariamente à Julie Fowlis; eu ainda sou capaz de pôr ela (e a Mari Boine) nos agradecimentos da dissertação.

Semana passada eu tive uma prova, na qual eu sabia não ter ido muito bem. Quinta-feira à noite as notas foram divulgadas por e-mail, e a professora (doravante Professora I) informou que as provas ficariam na secretaria da pós-graduação para quem quisesse pegar, e que só estaria de volta à universidade na segunda. A minha nota estava tão vergonhosa que eu não estava nem a fim de ir pegar a prova. Na sexta, a outra professora da disciplina (doravante Professora II) divulgou os conceitos da disciplina; eu estava de recuperação. Apesar de estar chateado e todo perturbado das idéias, eu resolvi ir pegar a prova na secretaria e dar uma olhada, just to make sure. Turns out que a Professora I somou errado as notas das questões e me deu 2.5 ao invés de 25 em uma questão que valia 25. Se a nota tivesse sido calculada corretamente, eu não teria ficado de recuperação.

Mandei um e-mail para a Professora I sexta ao meio-dia, com um scan da prova. Não recebi resposta até o momento.

Nos últimos dois dias, eu tive três sonhos. (Isso dá uma idéia de quão regulares andam meus padrões de sono ultimamente.) No primeiro, eu estava discutindo loucamente com a Professora I tentando convencê-la sem sucesso de que a nota tinha sido calculada errada. No segundo, eu estava discutindo louca e veementemente com outro professor que queria me rodar por FF a qualquer custo por eu ter faltado a um dia de apresentações. O terceiro foi uma variação de um sonho recorrente, embora infreqüente, em que eu descubro no final do curso que eu não assisti a nenhuma aula da cadeira de Álgebra Linear (da graduação) ou alguma outra coisa math-related e vou ter que refazer a cadeira. Dessa vez o sonho foi mais elaborado e eu tinha mais alguma coisa para fazer depois de apresentar o TCC, mas a essas alturas eu já não lembro mais dos detalhes concretos.

Eu estou meio que urgentemente precisando de umas férias, que eu não terei porque (1) um certo professor, por conta das aulas perdidas por conta da copa (o semestre já não tinha começado mais cedo para compensar isso?), viagens no meio do semestre, aulas canceladas por motivos pessoais e ausência generalizada de cronograma, vai dar aula até além do fim do semestre (pode isso? claro que não; faz diferença? claro que não); (2) bolsista não tem férias. Segundo o pessimamente mal-escrito regulamento do PPGC, o bolsista tem direito a um mês de férias (por ano? na vida? assumindo um mês por ano, dá para emendar o mês de férias de 2014 e o de 2015? por que escrever direito se podemos deixar ambíguo e interpretar como quisermos depois?), mas elas têm que ser combinadas com antecedência com o orientador, e o caso é difícil de defender, porque eu nem fiz grande coisa como bolsista so far. Em qualquer caso, não vale a pena pedir férias agora por conta da cadeira mencionada.

Faz algum tempo que me admira o fato de que essencialmente o mesmo cérebro que servia ao cidadão cavernícola de vinte mil anos atrás também é capaz de absorver e ser bombardeado por quilos e quilos de informação com variáveis graus de abstração numa proporção supostamente muito maior hoje em dia do que então. Hoje isso me levou a duas reflexões: (1) De um lado, uma apreciação do fato de que a vida intelectual do cidadão cavernícola talvez não fosse tão simples assim; aliás, deixo-vos a conjectura (sem qualquer argumento, qualificação ou conhecimento para fazê-la) de que viver naquela época era tão difícil que, tendo-nos livrado de parte dessa complexidade graças a avanços tecnológicos (agricultura e etc.), quilos de poder de processamento foram liberados para as atividades intelectuais mais "elevadas" que realizamos hoje. (2) De outro lado, óbvio que isso ia dar merda, e é por isso que tem tanta gente pirada pelo mundo.

Por que eu estou falando disso? Porque nos últimos tempos eu ando meio overwhelmed com idéias e coisas que seriam interessantes de desenvolver e coisas que eu gostaria de ler e coisas que eu não gostaria tanto assim de ler mas que eu preciso ler para o mestrado e trabalhos para fazer, e eu estou em um ponto em que eu já não foco direito em coisa nenhuma; uma hora estou lendo um paper sobre dependent types, aí não termino de ler e estou lendo fragmentos arbitrários da documentação do Chicken Scheme, aí depois estou lendo sobre phase separation em Lisps, e aí estou escrevendo um leitor de S-expressions em C. (Isso foi um resumo do meu dia de ontem-anteontem (dado meus anteriormente mencionados padrões de sono, eu já não sei quando começou um dia e terminou outro).) Eu quero criar uma linguagem de programação e uma conlang e um sistema de escrita e uma máquina virtual e pensar sobre o problema da minha dissertação e eu não consigo me concentrar em nenhuma dessas coisas por qualquer quantidade decente de tempo nem parar de pensar nelas. Talvez eu estivesse precisando ficar uns dias sem olhar para um computador ou para quaisquer coisas acadêmicas e curtir a vida de outras formas. Não me ocorre nenhuma possibilidade de outras formas, entretanto, e eu me pergunto se eu estou fazendo alguma coisa muito errada com a minha vida. Adicione-se a isso uma prova para a qual enquanto eu estudava e lia os exercícios e as respostas no livro eu me perguntava: "Como é que eu ia pensar nisso? Será que eu sou incompetente? E tu ainda pretende fazer o doutorado?" Adicione-se a isso mil outros problemas que estão fora do escopo do discutível neste blog.

Querida Professora I: Responda o bendito e-mail. Boa noite.

7 comentários / comments

Die, monster

2013-07-27 03:33 -0300. Tags: life, mind, em-portugues

You don't belong in this world.

4 comentários / comments

#123

2013-05-02 23:20 -0300. Tags: random, life, mind, ramble, em-portugues

Caro mundo,

Ao invés de estar aproveitando meu tempo de uma maneira produtiva, resolvi passar o final do meu dia lendo o Hyperbole and a Half desde o primeiro post. Por mais improdutivo que seja, não posso dizer que foi uma má decisão. Além disso, ler certas coisas me fez pensar que morar nessa casa com o chão todo torto e que está começando a ficar úmido com a proximidade do inverno e que em breve vai começar a verter água, ao mesmo tempo em que caracóis começam a invadir a casa, até que não é algo tão ruim assim. O tempo está com cara de tempestade iminente, o que significa que meu 3G vai começar a se arrastar como os recém-mencionados caracóis, o que pode dificultar minha continuada leitura do recém-mencionado blog, mas enfim. (A concretização da tempestade, por sua vez, pode levar à falta de luz na rua em que se localiza a recém-mencionada residência pela qual eu acabo de expressar renovado apreço, rua esta com uma infraestrutura elétrica menos que invejável. Mas enfim. O tempo está bonito, pelo menos.)

(As a sidenote, se por acaso alguém estiver preocupado com o sumiço da Allie no final de 2011, saiba que ela deu sinais de vida no Reddit em março de 2012. Eu fiquei contente quando encontrei isso, anyway. [Update: She's back! Good timing, huh?])

(Como se diz "sidenote" em português? "Preterlóquio?" (Estou surpreso pela total ausência de resultados na minha busca no Google por "preterlóquio". Considerem a palavra criada (ainda que, talvez, não necessariamente com o mesmo exato sentido).))

Mas não é sobre nada disso que eu vim falar hoje. O que eu vim falar aqui originalmente é sobre o design de shells. Lembram que eu escrevi um post quatro meses atrás dizendo que estava querendo escrever um shell? Pois bem, obviamente eu não fiz isso, mas nesse meio tempo eu tive idéias. (Se me pagassem para ter idéias de software de aplicabilidade questionável eu estaria com a vida ganha. Ou não.) Na verdade eu agora fui olhar o respectivo post e descobri que ele é muito maior do que eu me lembrava, de tal maneira que eu já nem sei se vale a pena escrever outro post sobre o assunto. Quem sabe assim eu resolvo criar vergonha na cara e de fato implementar as idéias, ao invés de ficar discutindo o quão fantasticamente legais elas são. Na verdade meu objetivo original era pedir sugestões, então talvez até houvesse um ponto em escrever o post, mas não sei mais. Se alguém quiser dar sugestões anyway, sinta-se à vontade.

Ao invés disso, eu vou falar de outra coisa: vou falar do fato de que os seres humanos se acostumam com as coisas e com o tempo passam a perceber qualquer situação em que se encontrem como algo dado e corriqueiro. Não, isso não é novidade nenhuma; você já se acostumou com essa idéia também. Mas às vezes o módulo de assumptions da minha cabeça tem um lapso de funcionamento e eu tenho um choque de realidade. Por exemplo, estava eu hoje à tarde debruçado sobre a mesa da sala da monitoria tentando dormir (já que normalmente não aparece ninguém lá para pedir ajuda e é difícil fazer qualquer coisa produtiva por lá, pois é difícil se concentrar com o barulho (mas não dormir, you see (embora eu não tenha conseguido dormir de fato (so far este blog contém 1083 pares de parênteses, por sinal, sem contar trechos de código entre tags PRE, mas isso não vem ao caso no momento)))). Sem sucesso em minha tentativa de dormir, levanto e resolvo sair para ir ao banheiro (leia-se: pretexto para caminhar um pouco). Em um estado semi-acordado, começo a andar pelo corredor para a rua. Nesse momento eu olho ao redor e penso: "WTF? I'm in the fucking Instituto de Informática? Na Universidade Federal do Rio Grande do Sul? Que viagem!" Não só estou no fucking Instituto de Informática, como também no final do curso. Especificamente, o curso termina em dois meses se eu me pilhar de terminar o TCC neste semestre (estrategicamente, entretanto, isso não tem vantagem nenhuma; é um semestre de RU a menos). How mad is that? E ainda por cima eu estou morando sozinho? Eu tenho uma casa só pra mim? Sou eu que pago as contas? Eu posso fazer whatever the hell I please da minha vida? Por que diabos ninguém tinha me contado isso antes?

E é isso, galera. A moral é que às vezes a gente precisa de uns tapas na cabeça para ela ir para o lugar certo. (Não digo "voltar para o lugar certo" porque às vezes ela nunca esteve no lugar certo.) Agora, se vocês me permitem, eu vou continuar lendo Hyperbole and a Half até dormir em cima do teclado, já que eu descobri há meia hora atrás que não vou ter aula amanhã.

5 comentários / comments

Blergh

2013-03-29 02:03 -0300. Tags: about, life, mind, rant, em-portugues

[Este post foi engolido por um tigre. (31/03/2013)]

13 comentários / comments

Irrealis

2013-02-12 07:10 -0200. Tags: life, mind, em-portugues

It's time to start living in the indicative.

Comentários / Comments

Divagações sobre a vadiagem, dominação mundial, e outras pertinências

2013-02-05 01:43 -0200. Tags: life, mind, comp, wrong, em-portugues

A situação ao final de julho do ano passado era a seguinte: depois de muitos semestres com uma quantidade apreciável de disciplinas menos-que-maravilhosas, eu teria um semestre com apenas 10 créditos de cadeiras, uma monitoria mui pouco time-consuming, morando sozinho, sem ninguém para me perturbar, ridiculamente próximo da universidade. Eu teria uma quantidade de tempo livre sem precedentes desde o início da faculdade. Eu poderia me dedicar a desenvolver a linguagem de programação perfeita. Eu poderia estudar todas as línguas que quisesse. Eu poderia aprender a tocar a shakuhachi que estava pegando pó um ano e meio. Eu poderia me dedicar a fazer o que quer que fosse.

Foi um dos semestres mais improdutivos dos últimos cinco anos.

Não que eu não tenha feito nada. Eu li uma quantidade praticamente nociva de blogs e papers e manuais e artigos da Wikipédia nesse período. Mas eu não produzi muita coisa nesse período: foi muito mais input do que output.

A moral da história é que muitas vezes a desculpa de não fazer as coisas por "não ter tempo" é um fraude. Ok, há pessoas que trabalham quarenta mil horas por semana e estudam e realmente não têm tempo de fazer mais muita coisa. Mas esse nunca foi o meu caso. Com exceção de uns poucos períodos em que o curso estava meio demás e eu tinha trabalho da bolsa para fazer, eu sempre tive um bocado de tempo livre, e se não o aproveitei direito foi por vadiagem, ou falta de motivação.

Na verdade eu andei fantasticamente desmotivado de fazer qualquer coisa nos últimos tempos, por mil motivos (sic), e por motivo nenhum. Não tenho bons conselhos a oferecer em termos de motivação. O que eu sei é que: (1) é incrivelmente fácil postergar indefinidamente, especialmente quando se tem alguma outra atividade que não exija esforço para consumir o tempo com; e (2) a Internet provê uma fonte infinita de atividades que não exigem esforço. Assim, limitar o tempo que se consome na Internet parece uma boa estratégia para levar uma vida mais produtiva. (No geral, as pessoas não gostam de ficar muito tempo sem fazer nada; normalmente elas acham alguma distração para ocupar seu tempo com. Elimine as distrações e o que sobra é o trabalho a ser feito.)

Nem todo o tempo que eu perco na Internet é totalmente inútil; pelo contrário, muito desse tempo eu passo lendo material técnico sobre coisas que me interessam e que são relevantes para o que eu gostaria de desenvolver. E aí reside um perigo, porque é muito fácil nesse caso justificar o tempo que se consome lendo ao invés de produzindo. Acontece que essa tal de humanidade já fez muita coisa, e se o camarada for parar para pesquisar tudo o que existe de "prior art" antes de fazer algo, vai acabar não fazendo nada. Pesquisar o que existe é importante (e freqüentemente muito interessante), mas uma hora a gente tem que parar de ler e pôr a mão na massa.

Outra fonte de postergação indefinida em desenvolvimento de software (pelo menos para mim) é se perder em questões de design e nunca decidir nada. (Heh.) Para projetos suficientemente grandes (e.g., linguagens de programação e respectivas implementações, sistemas operacionais), design é um problema tão grande ou maior do que implementação, pois há uma quantidade enorme de decisões de design a se tomar e possibilidades a explorar; decidir o que exatamente o software deve fazer, quais são seus objetivos, são as questões difíceis. Mas embora pensar com calma sobre design seja importante (afinal o objetivo é criar uma linguagem (por exemplo) que ofereça alguma vantagem significativa sobre o que existe), para sairmos do lugar, em algum momento temos fixar certas decisões (para valores suficientemente fluídos de 'fixar'), mesmo que não tenhamos certeza de que seja a solução ótima (ou que tenhamos certeza de que não é, mas não temos nada melhor no momento), e partir para a implementação. Assim, temos um produto concreto para experimentar e para nos guiar no processo de decisão. Em todo caso, produzimos alguma coisa, que se não é ideal, com alguma sorte é pelo menos um avanço em algum aspecto em relação ao que existe.

And now for something slightly different

Tendo tratado a questão da inércia, falemos da dominação mundial.

Em algum ponto de suas vidas, algumas pessoas têm o seguinte pensamento: "Os ambientes computacionais modernos estão completamente errados. Se eu fosse começar tudo do zero, eu faria tudo diferente. Hmm, começar do zero...", e começam a arquitetar como seria o sistema ideal e todas as features legais que ele teria. Algumas se arriscam a levar o projeto adiante. Afinal, não pode ser tão complicado criar um sistema operacional, não é mesmo?

Normalmente esses projetos não acabam bem.

A insistência em construir as coisas do zero, embora tenha seu apelo, tem um custo (freqüentemente subestimado) muito maior do que o benefício. Mesmo que seja viável escrever um sistema operacional inteiro "from the ground up", com todos os detalhes exatamente corretos, o tempo que se perde implementando funcionalidades básicas do sistema (gerência de hardware, alocação de memória, agendamento de tarefas, e uma miríade de outras coisas) é tempo que poderia estar sendo usado para implementar as features que realmente interessam, e que poderiam ser implementadas sobre um sistema operacional existente. Mesmo features que "contradizem" o sistema operacional existente muitas vezes podem ser implementadas com uma pequena dose de gambiarra. Quer um mecanismo de segurança baseado em capabilities, ao invés das permissões tradicionais do Unix? Coloque um servidor de capabilities e autenticação a rodar como root, rode as aplicações clientes com um usuário não-privilegiado, e faça o daemon transferir file descriptors para os programas não-privilegiados segundo as permissões dos programas. Deselegante? Mais complexo do que o necessário? Talvez, mas é fantasticamente mais rápido de desenvolver do que criar um sistema operacional do zero só para experimentar com segurança por capabilities. De brinde, você pode continuar executando suas aplicações convencionais em paralelo com o seu sistema alternativo. Na pior das hipóteses, você pode alterar o kernel ou criar um módulo para o kernel para conseguir o que quer, o que ainda há de ser mais produtivo do que começar do zero. Depois que você estiver com seu sistema funcionando sobre o outro (i.e., depois que você descobrir o que exatamente você quer que o sistema faça), você pode começar a pensar em substituir a camada de baixo por algo mais puro e ideal. Da mesma forma, se você estiver desenvolvendo uma linguagem de programação compilada, provavelmente é melhor aproveitar a infraestrutura de um compilador existente (e.g., fazendo seu compilador gerar C ou bytecode LLVM) do que gerar assembly na mão. Ou se você pretende criar uma interface gráfica, use o X (e algum toolkit gráfico pré-existente, se possível). Em suma: dê preferência por construir sobre frameworks existentes, e foque nos aspectos realmente inovadores do projeto.

Se a idéia de construir sobre as bases tortas dos sistemas existentes lhe desagrada, lembre-se de que mesmo eliminando o sistema operacional, você ainda terá que construir sobre as bases tortas das arquiteturas existentes. Não seria ótimo se a arquitetura oferecesse suporte a capabilities em hardware, ou alguma ajuda com tipagem dinâmica e verificação de limites de vetor? Ou se simplesmente o conjunto de instruções fosse minimamente ortogonal, e não a bagunça que são o x86 e x86_64? A moral da história é que, sendo economicamente inviável para nós reles mortais criar uma arquitetura nova e mandar fabricar (e convencer o mundo a comprá-la), teremos que lidar com a sujeira das arquiteturas presentes; e se vamos lidar com alguma sujeira, podemos igualmente lidar com a sujeira de um sistema operacional existente, o que dá muito menos trabalho (em tese).

(Curiosamente, há (pelo menos) um projeto lunático de sistema operacional que, embora hesitante a princípio, levou a decisão da "pureza" às conseqüências lógicas e virou um projeto de arquitetura, implementado em FPGA. O autor do projeto tem ciência de o quão imprática é a idéia, mas não está nem aí.)

Meu último conselho para dominar o mundo: não queira demais. Ou melhor, queira, mas dê um passo de cada vez. Se você tentar iniciar o projeto de um sistema que resolve todos os problemas do mundo, é possível que você sequer termine de projetar e comece a desenvolver o sistema, ou comece a desenvolver mas não saiba como seguir adiante. Defina subprojetos com ambições menores, e resolva um, ou alguns, problemas de cada vez; assim você terá foco o suficiente para poder saber o que fazer. Use o Grande Objetivo Final como guia para saber para onde ir, e não como uma especificação cujos itens devem ser todos satisfeitos de uma vez, e caminhe gradativamente em direção a ele. Talvez você nunca o atinja, mas pelo menos você está andando para a frente.

3 comentários / comments

Se lembra quando a gente chegou um dia a acreditar

2013-01-09 00:30 -0200. Tags: life, mind, em-portugues

Que tudo era pra sempre
sem saber
que pra sempre sempre acaba...

3 comentários / comments

Uma pequena expressão de frustração

2012-11-25 23:06 -0200. Tags: life, mind, random, em-portugues

:(

4 comentários / comments

Main menu

Recent posts

Recent comments

Tags

em-portugues (213) comp (148) prog (71) in-english (62) life (49) unix (38) pldesign (37) lang (32) random (28) about (28) mind (26) lisp (25) fenius (22) mundane (22) web (20) ramble (18) img (13) rant (12) hel (12) scheme (10) privacy (10) freedom (8) esperanto (7) music (7) lash (7) bash (7) academia (7) copyright (7) home (6) mestrado (6) shell (6) android (5) conlang (5) misc (5) emacs (5) latex (4) editor (4) etymology (4) php (4) worldly (4) book (4) politics (4) network (3) c (3) tour-de-scheme (3) security (3) kbd (3) film (3) wrong (3) cook (2) treta (2) poem (2) physics (2) x11 (2) audio (2) comic (2) lows (2) llvm (2) wm (2) philosophy (2) perl (1) wayland (1) ai (1) german (1) en-esperanto (1) golang (1) translation (1) kindle (1) pointless (1) old-chinese (1)

Elsewhere

Quod vide


Copyright © 2010-2024 Vítor De Araújo
O conteúdo deste blog, a menos que de outra forma especificado, pode ser utilizado segundo os termos da licença Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.

Powered by Blognir.