quinta-feira, 30 de dezembro de 2010

Turing

Programa da TV France Culture sobre Turing. Considerações interessantes de três cientistas sobre Turing, o homem que introduziu a escrita na matematica. O movimento. A máquina.

sábado, 25 de dezembro de 2010

Editores de texto e programabilidade

Programabilidade significa ser uma linguagem universal. Turing complete.

Há editores de texto programáveis, assim como planilhas programáveis. Não é o caso das impropriamente chamadas "macros" que permitem uma programação limitada, não universal. Exemplo de editor de texto totalmente programável: Emacs, com seu ELisp.

MarkCC (do excelente blog Good Maths, Bad Maths) está desenvolvendo um editor de textos programável, Apex. Com referências a Teco (de onde vem Emacs), Sam e Acme.

Pista a seguir: programas de uso geral, com interface familiar ao usuário - editores de texto, planilhas - com programabilidade.

domingo, 19 de dezembro de 2010

Visualizações

Alguns links sobre visualização:

50 Great Examples of Data Visualization

Scientific Designs and Tutorials That Will Inspire You

A Tour through the Visualization Zoo

O livro de referência sobre o assunto é Tufte, E. 1990. Envisioning Information. Graphics Press.

E uma dica de Courtnay Guimarães, não é tanto visualização, é como apresentar idéias business:  Dan Roam, The Back of the Napkin, ed. Portfolio

http://www.simplediagrams.com/ faz exatamente o que o nome diz

Dica de Warley Reis (contribuição da Silvia):  "O Portugues chama-se Manuel Lima. O projeto dele é o http://www.visualcomplexity.com/vc/"


Não esquecer do "homem das bolinhas": http://www.gapminder.org/ e http://updateordie.com/blog/2010/11/30/the-joy-os-stats-hans-rosling-bbc2010/

Série da O'Reilly sobre visualização, Visualization deconstructed: New York Times "Mapping America"

sábado, 11 de dezembro de 2010

Spreadsheets: looking around

Spreadsheet OS: the idea of user interacting with a spreadsheet, and the multiple dependencies of the spreadsheet are maintained dynamically. This to be extended to an operating system.

Org as a spreadsheet system: Org is an Emacs with several features to organize outlines, agendas, documents and spreadsheets. Spreadsheets can use standard formulas or Lisp expressions. To explore and to possibly use some of the ideas.

VisiCalc-like development in Lisp: Cells extension to CLOS in Common Lisp that allows one to code Lisp applications that dynamically react to changes in slot values, much like the way spreadsheet cells behave) and Cello (a GUI framework built on top of Cells). Good ideas but looks like development stopped in 2004.

Free Spreadsheets running on Linux: several interesting products/projects: SIAG, Disaml, Esheet and SES, Gnumeric... Doc and sources for Linux spreadsheets. 

Siag Office, a free Office Package for Unix with an X-based spreadsheet written in C and Scheme, extensible using Scheme. SIAG is Scheme based. Fast and small, for light Unix distributions. Permit extensions in several languages. Is a complete office suite. Based on SIOD, Scheme in One Defun.  Manual here.

Dismal, a spreadsheet for Emacs written in Lisp.

Esheet and SES, also running on Emacs: Simple Emacs Spreadsheet (SES, ses-mode or SesMode) is major mode in Emacs that mimics traditional SpreadSheet software, and uses EmacsLisp formulas


Oleo seems pretty weak. Lightweight free software under GNU.

Abacus student project at Portuguese university. See files at abacus-0.9.13


Spreadsheets under BSD, comparison and evaluation, part 1 anda part 2.


Resolver, a Python based spreadsheet. Approaches very closely the idea of a functional spreadsheet: the read-eval-print loop, the program containing cell. See First look at Resolver for the concepts. In Resolver each cell formula is dynamically translated to its Python equivalent. It's “a somewhat pathological but entirely new way of programming using a spreadsheet.”


XXL is an  interesting project of spreadsheet development.
. Author Vincent Granet ideas on the numerical errors in spreadsheets: "... Writing a spreadsheet is an error-prone activity. A very interesting study by R. Panko (see Resources) shows that a significant error rate exists in the production of computing sheets of various sizes, even when done by experienced developers. He also demonstrates the frequent lack of validation methods for building computing sheets and the scarce use of a posteriori checking tools. It is also surprising to learn that many companies use simple spreadsheets for developing large accounting applications instead of using more reliable software products that are better suited to handling a large amount of data".
. And considerations on spreadsheet as a programming model: "A computing sheet is a set of values linked by references, which constitute a sort of graph. The formula denotations of most spreadsheets, based on cells which refer to other cells, provide very low-level semantics for describing the spreadsheet structure. Mutatis mutandis (the necessary changes having been made), this is similar to the programming languages of the early 60s, with the goto statement used as the main means for structuring code. This analogy with programming languages is not fortuitous. Building a computing sheet is similar to building a program. For at least three decades, work in the programming world has been done in order to offer numerous tools and methods for building programs that are structured, reliable, extensible, etc. Apparently, such work has not yet been done in the area of spreadsheets or at least has had no visible effect in most software products."

. good short history of spreadsheets
. project divided in spreadsheet and graphical interface. 4 students.
. Language STk, implementarion of Scheme with the Tk graphical toolkit. STk superseeded by STKlos. Implemented R5RS Scheme standard.
. Xxl is written in STK: STk is a free software Scheme implementation, adhering to the R4RS standard. STk is now succeeded by STklos. It has bindings for the Tk graphical toolkit and is supported by SLIB, the portable Scheme library.
. tkTable widget for dynamic table update and presentation.
. LaTex for printing.
. Review:  several hints at other developments like Oleo, Gnumeric and Siag
. Project description:   downloaded
. STK homepage
. XXL Spreadsheet, several non-working links (dec/2010)
. Reference 



The Gnumeric spreadsheet is part of the GNOME desktop environment: a project to create a free, user friendly desktop environment.
"The goal of Gnumeric is to be the best possible spreadsheet. We are not attempting to clone existing applications. However, Gnumeric can read files saved with other spreadsheets and we offer a customizable feel that attempts to minimize the costs of transition". (Wikipedia) 
Gnumeric source code available.
[Downloaded at  Gnumeric source\install_moduleG9qzXv\gnumeric-1.10.15\src ]


Spreadsheet example in Susman Scheme book. A good starting point:  ssch25.pdf


Look at Excel, 123, and Google Docs:

- Google Docs: simple, practical, good visual, lot of fucntions, import-export, Javascript/HTML gadgets


Tools for spreadsheets:


How to automate Microsoft Excel from Microsoft Visual C# .NET

10 Useful Google Spreadsheet Formulas You Must Know – woorkup.com


Ultimate guide to table UI patterns

Excel Reporting Samples for Microsoft .NET, ASP.NET, C#, VB.NET, XLS and Microsoft Visual Studio .NET 


Scripting Google with Google Apps Scripts - Enterprise Applications from eWeek

Creating Flash Charts From Google Spreadsheets

How to use Pivot Tables for Google Docs

Miscellaneous:



(This is more on cloud computing... to put the spreadsheet in the cloud) PiCloud | Cloud Computing. Simplified.

A general reference on spreadsheets, Wikipedia. 


Centro de Excelencia em Planilhas - Cursos de Excel

Spreadsheets FAQ

List of spreadsheet software - Wikipedia, the free encyclopedia

Wikicalc

ZK Spreadsheet is an Ajax spreadsheet component

slsc: this is a much modified version of the public domain spread sheet sc, posted several years ago by Mark Weiser as vc, originally by James Gosling.

To look carefully, the idea of spreadsheet central for apps development: Excel Document-Oriented Database with Python Map & SQL Reduce | Gobán Saor

Why the interest in spreadsheets?  Look at
    https://sites.google.com/site/gcoendeposito/sicp-discussao-ideias-planilh
    You will find the first reference on my idea of a functional spreadsheet. And a discussion full of ideas to develop.
    The idea of a functional spreadsheet comes first with the observations that it is very easy to write a spreadsheet in a functional language. Just eval each cell and that is it. You may have numbers (atoms) or expressions (in functional notations). Just evaluate it. You are done.
    This idea can be carried a step further with each spreadsheet cell being a full functional program. We can even think of it as parallel programming framework since spreadsheets usually have a logic to detect dependencies between cells.
    It is also a developper/programmer framework, observing that a spreadsheet works on a typical REPL cycle.

Computadores são previsíveis?

“Informática não é ciência exata, não é ciência humana... É ciência oculta”
Conversa com Warley Reis, citando Angelo.

Esta frase, e variantes comuns nas conversas sobre TI, mencionando defeitos intermitentes, bugs imprevisíveis, problemas impossíveis de reproduzir, mostra que se perdeu na prática uma característica da máquina universal: a total previsibilidade. O contrôle completo que se tem em uma máquina que executa um algoritmo.

Como recuperar este controle? Programabilidade é uma parte da resposta. Programas corretos é outra. E principalmente não entrar nos caminhos que levam a situações não reproduzíveis, como multitarefa com programas não 100% encapsulados.

Programabilidade é fundamental

It is no exaggeration to regard this as the most fundamental idea in programming:

The evaluator, which determines the meaning of expressions in a programming language, is just another program.
 
To appreciate this point is to change our images of ourselves as programmers. We come to see ourselves as designers of languages, rather than only users of languages designed by others.

Structure and Interpretation of Computer Programs, Harold Abelson and Gerald Jay Sussman, The MIT Press, 2nd edition, 1996, p.297

domingo, 5 de dezembro de 2010

Padrões: falta de

A explorar, muito, o impacto dos padrões - falta deles - sobre a evolução do uso de software.

Desde o começo das linguagens de alto nível: Algol 60, um dos primeiros padrões internacionais, não foi adotado, provavemente por ser europeu e não americano.  Só 20 anos mais tarde é que começaram a aparecer as linguagens estruturadas, Pascal, C, mais recentemente Java, etc.  20 anos perdidos com linguagens como Cobol ou Basic.

Exemplo contrário: Cobol 60, padrão adotado, por pressão do DOD americano. Padrão infeliz, que até hoje pesa na programação comercial, com sua decisão desastrada de não formalizar a linguagem e sim procurar imitar linguagens naturais.

Lógica linear

A explorar: Lógica Linear chega à maturidade, abre perspectivas novas em linguagens de programação, redes de demonstração e aplicações em segurança. Ver Linear Logic, Alex Wright, CACM oct 2010, vol.53, n.10

Ver também:




E o artigo inicial de Jean-Yves Girard: Linear Logic, Theoretical Computer Science, London Mathematical 50:1, pp. 1-102, 1987

sábado, 27 de novembro de 2010

Complexidade, Software Engineering

Retomando o tema software engineering, Ervin Varga: The Holistic Approach to Software Engineering as a Way to Handle Complexity.  Tenho reservas quanto a considerar desenvolvimento de software como uma engenharia (ver por exemplo The Angry Monkeys Blog, de Alan Downie, Why you absolutely MUST write an API when you write your next app com a idéia do programador como um jardineiro que cria um jardim mas que também pode trabalhar como um engenheiro de software).  Varga parte do Congresso inicial de Software Engineering de 1968 e aponta os temas atuais - paralelismo, formação em Ciência da Computação, reinvenção do business de software - e pede uma abordagem nova para lidar com a complexidade.

Recomendações do autor:
  1. To accentuate loudly that software development is a complex endeavor!
  2. To highlight the fact that complexity entails completeness!
  3. To start educating software people that only a holistic approach to software engineering is the right way to go in order to triumph over the current “software crisis”!
  4. To get people certified!
Outro ponto de vista, analisando as rupturas históricas em Software Engineering, Jean Bezivin citado por Jean-Jacques Dubray: Four Decades of Software Engineering, are Changes Coming?

    domingo, 14 de novembro de 2010

    Computação Experimental?

    Inquisitive Computing, seria uma espécie de Ciência Experimental da Computação.

    Ver sugestões em Calculemus! Celebrating 25 years of celebrating computation, Brian Hayes. 

    Inclui uma sugestão de uso de Sage, programa matemático tipo Mathlab, Mapple ou Mathematica, open-source, em Python.

    Máquina de Turing

    Uma homenagem a Turing, que merece. Fundamento da computação, criptografia, contribuição enorme para a vitória dos Aliados na Segunda Guerra Mundial, e mais. Uma vida difícil, perseguição (homofobia ou espionagem?), suicídio.

    Apresentação de Turing Machines, Stanford Encyclopaedia of Philosophy.

    Biografia: Code-Breaker, The life and death of Alan Turing, by Jim Holt, Feb 6, 2006.

    Resumo claro das idéias de Turing: What computers can't do, M.Yates,  . Não confundir com o livro de mesmo nome de H.Dreyfys, filósofo, sobre a falácia da idéia de Inteligência Artificial.

    LISP

    Muitas referências:

    The Roots of Lisp, P.Graham, 2002: o que McCarthy descobriu

    Lisp e Java, Lisp e XML:  Lisp and Java by Dan Milstein, 03/24/2004.  LISP is better than XML, but worse is better by Rick Jelliffe, December 5, 2004.

    And more: Why I Love Lisp  and  The Future of Lisp.

    Programação funcional

    Lisp, Scheme, Haskell... linguagens antigas voltando, programação funcional em Javascript, em F#.  A idéia vem vindo, talvez substitua o modismo orientação a objetos.  Talvez mais, seja a chegada da Teoria da Computação aplicada à prática.

    A functional approach to data structures and its use in multidimensional searching, B.Chazelle, 1988,  como desenvolver matemáticamente o tratamento de estruturas de dados. Tratamento matemático sério. Vide de Chazelle também os artigos sobre algoritmos, um novo paradigma.

    Why functional programming matters, J.Hughes, 1984, como usar programação funcional para estruturar programas. Na linha de Structure and Implementation of Computer Programs (SICP), Abelson e Sussman, MIT. Ver também Why why fucntional programming matters. Ver ainda Lisp: A Language for Stratified Design, Abelson and Syssman, 1987, também na linha de SICP.

    Functional Programming for the Rest of Us, 2006,  porque programação funcional, de abstração de estruturas de controle até closures.

    Church Thesis and Functional Programming, D.Turner:   dos fundamentos, Church, Lambda-calculus, até a linguagem Miranda.

    Lambda Calculus

    Um dos fundamentos da computação. Atualíssimo. Linguagens funcionais são cálculo lambda aplicado. Funciona. Ajuda a estruurar programas. Fundamenta abstração.

    Introduction to lambda calculus, H.Barendregt, 2000,  completo e matemático.

    A tutorial introduction to lambda calculus, R.Rojas, 1997,  mais simples, boa introdução às noções básicas.

    An Introduction to Lambda Calculus and Scheme, J.Larson, 1996, mostra rapidamente o que é o cálculo Lambda e como Scheme o implementa. Muito prático.

    The Untyped Lambda Calculus, H.Hojjat, Un.Teheran, powerpoint apresentando bem o cálculo lambda.

    Engenharia de Software?

    Acabando com a falsa idéia de Software ser uma engenharia. Não é. Não constroi a partir de uma ciência e uma prática. Cria entidades matemáticas, algoritmos.


    Is software engineering engineering? P.Denning and R.Riehle, CACM march 200.

    Uma opinião diferente, valiosa, de um pioneiro em métodos e engenharia, com muitos trabalhos publicados, David L. Parnas, em CACM, oct/2010, vol53, n.10, Risks of Undisciplined Development.

    Considera que engenharia é uma disciplina, e que software está longe de ser uma disciplina. Quem sabe tenhamos um dia, daqui a muito tempo, uma engenharia de software? Que seria muito diferente das engenharias atuais, ligadas à física e química. Uma engenharia relacionada com matemática. 

    domingo, 17 de outubro de 2010

    Ciência da Computação

    Is the Thrill Gone?

    Artigo de 2005, ainda atualíssimo. Como atrair jovens brilhantes para Ciência da Computação?

    O ramo é fundamental, nele se produziu e se continua a produzir uma revolução do tamanho da Revolução Industrial ou da invenção da Imprensa ou ainda do alfabeto.

    Idéias importantíssimas para a computação e para a Ciência em geral: "Universality, the duality between program and data, abstraction, recursion, tractability, virtualization, and fault tolerance are among its basic principles. No one would dispute that the very idea of computing was one of the greatest scientific and technological discoveries of the 20th century. Not only has it produced huge societal and commercial effects, its conceptual significance is increasingly felt in other sciences."

    Um universo está sendo descoberto.

    Como fazer bom software empresarial

    3 Reasons Enterprise Software Doesn’t Have to Suck: boas considerações. Parte da diferença entre software de consumo, feito para ser desejado, e software de empresa, feito a partir de especificações, com resultado péssimo. Indicação da solução: SaaS, software como serviço, software para empresas feito para agradar aos usuários.

    Data Science

    Boa introdução, com referências a análise de dados, navegação na Web em bancos de dados de grande porte, apresentação e visualização:  What is Data Science.

    Nota: o primeiro exemplo, CDDB database, é um caso de dados + programa+cooperação social na Web.

    IDEs: precisa? Ajudam? Atrapalham?


    Diz praticamente tudo sobre IDEs. Tudo de ruim. Para um programador, basta um editor de textos.

    E vai mais longe. Para um programador, o importante é a abstração. É construir ferramentas à medida em que econtra problemas.

    Nada de esquemas prontos, nada de preenchimento automático. Isto é para codificadores. Programador cria.

    Program or be Programmed


    Visão radical, mas que me parece muito correta. Análise histórica: na Antiguidade, com invenção da escrita, o poder é dos escribas. O resto do povo ouve. Continua a análise histórica, e chega à invenção da máquina universal, o computador. Programável. O poder é de quem sabe programar. O resto do povo usa programas prontos.

    Instigante.

    Me parece corretíssimo. Ou temos software programável, aberto, acessível, passível de evoluir. Ou seremos meros usuários.

    Tem analogias com o ensaio de Vilém Flusser: Texto/imagem enquanto Dinâmica do Ocidente.

    Arquitetura

    Provavelmente a parte mais difícil de qualquer projeto de software. Desenhar a solução, definir abstrações. Como fazer? Partir dos requisitos? Partir da tecnologia disponível? Partir da versão anterior? Top-down? Bottom-up? Há métodos ou ferramentas para desenhar arquitetura, ou é pura e misteriosa criação?

    Exemplo prático no artigo Tackling Architectural Complexity with Modeling. Bem prático, com casos reais em que o autor trabalhou, sucessos e fracassos. Mas não se trata propriamente de arquitetura de software, e sim de arquitetura de infra-estrutura. Tema também difícil, onde a complexidade impera, e onde faltam modelos abstratos. Mesmo porque para quem vende hardware, componentes, redes, sistemas de armazenamento, etc... a simplicidade não interessa.

    sexta-feira, 15 de outubro de 2010

    Programar é arte

    Simples assim. Como disse o mestre Knuth, "The Art of Computer Programming". Arte no sentido de ofício, arte no sentido de criar algo novo, arte no sentido de construir uma arquitetura consistente, arte no sentido da satisfação com o resultado da obra, de querer mostra a obra.

    Isto dito de forma clara em Putting Art Back Into the Art of Software Development.

    domingo, 26 de setembro de 2010

    Agoritmos = mudança de paradigma

    Textos de Bernard Chazelle:

    Lei de Moore deixará de funcionar por volta de 2050, por limitações físicas. De certa forma, uma boa notícia. Aí seremos obrigados a olhar os algoritmos, a nos preocupar com eficiência, a (re-)descobrir que se pode fazer muito mais com o que temos de potência de computação. Isto ao invés de desperdiçar memória e ciclos de CPU. Conhecido meu, brilhante desenvolvedor de software, fez um ERP que roda em máquinas desktop comuns consumindo no máximo 1 a 2% de CPU...

    Computação, segundo Chazelle, é o ponto de encontro de 3 grandes idéias: universalidade, dualidade, auto-referência. Mais os conceitos de tratabilidade e o revolucionário paradigma do algoritmo.

    Vamos analisar. Em itálico.

    Universalidade: num computador há dados e programa, ambos representados como números (0 e 1). Há o contrôle, que lê o programa e executa suas instruções cegamente. O contrôle não sabe o que faz. Executa instruções. Só.

    A idéia de separar programa (software) de contrôle (hardware) foi do Turing.

    Fundamental é também a idéia de que programa e dados são a mesma coisa. Levada adiante por Von Neumann em sua máquina, que é o atual computador. Na mesma memória vão programa e dados.

    Dualidade: sequências de 0 e 1 podem ser interpretadas de duas maneiras. Como forma, dados, ou como conteúdo, programa.

    Isso do ponto de vista do contrôle.

    Auto-referência: o programa pode referir a si próprio. Analogia aqui com DNA.

    Isto é recursividade.

    Tratabilidade (tractability*, fácil de tratar, de manejar, de persuadir): verificar se um teorema é válido é mais fácil do que provar o teorema. Problema P=NP. De verdade não sabemos (2010).

    Assim como não sabemos se um problema é "programável", mas em geral achamos que sim, e se sua "programação" será simples ou não. Na prática, em problemas do dia a dia, digamos, administrativos, achamos que sim.

    Algoritmo: "programa com cara humana", diz muito bem Chazelle. E diz mais: "Um algoritmo é, em essência, uma obra de literatura". Finaliza: "As ciências quantitativas do século XXI (genomica, neurobiologia por exemplo) completarão o destronar da fórmula cclocando o algoritmo no núcleo (core, coração) do modus operandi. O pensamento algorítmico causará provavelmente a mudança de paradigma mais radical (disruptive) na ciência desde a mecância quântica".

    Muito mais que a mudança da mecânica quântica. O algoritmo, a máquina universal, são uma revolução no mínimo tão grande quanto a Renascença, quanto a Revolução Industrial, quanto o surgimento da Ciência Moderna. Rivalizam com o surgimento da Matemática.



    Idéias semelhantes, importância do algoritmo na ciência moderna, em versão mais light: All Science is Computer Science no New York Times

    * tractable:
    1. Capable of being easily led, taught, or managed; docile; manageable; governable.
    2. (obsolete) Capable of being handled or touched; palpable; practicable; feasible.
    3. (mathematics) Sufficiently operationalizable or useful to allow a mathematical calculation to proceed toward a solution.
    4. (computer science) Of a decision problem, algorithmically solvable fast enough to be practically relevant, typically in polynomial time.
    (Wiktionnary)

    Calculemus

    The only way to rectify our reasonings is to make them as tangible as those of the Mathematicians, so that we can find our error at a glance, and when there are disputes among persons, we can simply say: Let us calculate [calculemus], without further ado, to see who is right.
    Gottfried Leibniz, The Art of Discovery, 1685, Wiener 51

    segunda-feira, 20 de setembro de 2010

    Homoicônica?

    "Clojure é uma linguagem homoicônica, ou seja, as mesmas estruturas de dados usadas nos programas são usadas para representá-los internamente" em Programação Funcional e Concorrente para JVM com Clojure: boa apresentação de linguagem funcional, Clojure. Onde está a referência a homoicônica?

    "Aproveite o poder e expressividade de uma linguagem homoicônica", simpática paródia do clássico "Use filtro solar".

    Linguagem sucinta: PicoLisp

    Um Lisp minimalista. Funcionando há anos. Usado para aplicações comerciais reais. Com boa performance. E pouquíssimo conhecido.

    Perfeito exemplo de linguagem sucinta (ver simplicidade):
    . it's tiny
    . it's very succinct
    . built-in support for web applications
    . integrated object-oriented database, with direct bindings between (web) UI widgets and database objects
    . actively maintained and improved (around 4 new releases per year, latest release is from Dec 30 2007)
    . mostly cross-platform (Linux, Mac OS X, FreeBSD, Cygwin on Windows). Unfortunately it doesn't have native Windows version.
    . open-source (GPL)
    (picoLisp - Arc before Arc)

    Picolisp

    Principal artigo, Pico Lisp A Radical Approach to Application Development

    PicoLisp in Rosetta Code

    Picolisp in Wikipedia

    A comparar com OpenLisp

    Performance:
       Picolisp and openlisp: new eval speed champions
       PicoLisp takes the performance crown?

    domingo, 19 de setembro de 2010

    Como formar desenvolvedores

    Experiência rica em Unique Software Degree Program Restarted: um programa de graduação em desenvolvimento de software diferente. Tem aprendizado, no sentido dos estudantes serem aprendizes em projetos, escolha de temas para disciplinas dentro de um leque de possibilidades, busca da teoria a partir da prática. O estudante se gradua com projetos realizados em seu currículo, com uma rede de relacionamentos profissionais. Durante o curso, interage com seus pares e com os professores. A avaliação se faz a partir do perfil do estudante, demonstrando domínio de competências e ferramentas práticas e teóricas.

    Alguns pontos do programa:
        * People - reminder that our goal is to serve people and that developers must be respected as people
        * Systems - we enhance business and social systems, not simply produce artifacts.
        * Agility - we are interested in results not formalisms
        * Craft - we recognize the development is an art form not a production process
        * Software - the medium in which we practice our art

    Observem o penúltimo: desenvolvimento de software como um ofício, eu diria "arte e ofício".

    Programar é difícil


    Menos conhecidas? Muito importantes e pouco comentadas. Programador tem que trabalhar muito. Programar é difícil. Programador tem que pensar. Há diferenças de produtividade imensas entre bom programador e mau programador.
     
    Esta última mostra que programar está mais próximo de criação do que de trabalho sistemático, mais para arquitetura que para engenharia. O que acaba com o mito da engenharia de software.
     
    Software é desenvolvido por indivíduos, não por equipes. As várias metodologias que falam em peer programming devem ser reconsideradas.
     
    O artigo cita o estudo do Standish Group que mostra melhoras no índice de sucesso de projetos de software. Cuidado, os critérios do Standish Group não são claros, a amostra cobre projetos muito diferentes, e a própria definição de projeto é discutível. Pergunta: a melhora foi na produtividade em software ou no gerenciamento de projeto?
     
    Programar é trabalho pesado: as inúmeras formas de "facilitar" a programação, via IDEs, linguagens "fáceis", frameworks prontos, iludem o candidato a programador. Não há caminho suave para um trabalho que exige reflexão.

    sexta-feira, 17 de setembro de 2010

    Jogos

    Muito movimento na área de jogos. Negócios - jogo é business grande - e pesquisa - idéias, pistas, novidades -.

    Com sugestões do Gregorio Ivanoff, e material de aula no mestrado da PUC com Alexandre Campos, aqui vão algumas pistas: jogos como forma de cooperação social, jogos educativos (desde animais até qualquer povo, selvagem ou não, crianças aprendem brincando), jogos obras de arte, jogos de pesquisa matemática.

    Na cooperação social, explorar a semelhança entre jogos cooperativos e desenvolvimento de software livre. O modelo é o mesmo?

       

      
      
      
    Concepção e entrega de um produto feitos socialmente


      
    Life game, e aqui e aqui e muitas referências mais

    domingo, 12 de setembro de 2010

    Simplicidade

    Simplicidade. Essencial para obter bom resultado, boa perfomance, boa arquitetura. Próxima de abstração. Difícil de se conseguir.

    Exemplo de opinião sobre simplicidade: Google executive frustrated by Java, C++ complexity.


    Boris Lublinsky falando de Steve Jones sobre simplicidade, Simple IT: SOA Done Right

    Abstração


    Tema forte, provavelmente a mais importante de todas as considerações sobre como fazer software: abstração.

    É a chave para arquitetar - no sentido de projetar, elaborar, desenhar, design, criar - software.

    Historicamente, desde que se programa computadores, houve várias tentativas para formalizar a abstração. Que me parece não ser formalizável.

    Do lado programação, tivemos a programação modular, a programação estruturada, a organização de programas e subprogramas em bibliotecas, programação orientada a objetos e correndo em paralelo a todas estas, a programação funcional.

    Do lado modelos, tivemos sucessivamente as máquinas abstratas, como Turing ou Von Neuman, precedendo o computador. O computador como o conhecemos até hoje (2010), que é uma máquina de Von Neuman. A linguagem de máquina e linguagem Assembler, passagem essencial do hardware para o software: desaparece a eletronica, surge um modelo de como programar. E depois linguagens de alto nível, procedurais. E de novo, em paralelo, linguagens funcionais.

    Muito a dizer e a pensar sobre abstração. Ai vão 2 posts que valem como depoimentos práticos de desenvolvedores de software:

    Programming with reason: observem a regra número 1, Abstraction, or "Just Wrap it!". E o tema da simplicidade, outro tema fundamental em programação, "simplicity equals elegance".

    So long and farewell to the IDE: não é somente uma crítica, forte e correta, das IDEs. É uma receita de como fazer abstração na prática, no dia a dia do programador.

    P ≠ NP by Deolalikar

    Pesquisador da HP, publicou (2010) uma prova do famoso desafio matemático-computacional, provar que a classe de problemas P é igual à classe NP.

    Muitas referências aí, começando pelo artigo do NYTimes Step 1: Post Elusive Proof. Step 2: Watch Fireworks que denuncia a manobra clássica: publicar uma prova difícil de verificar, aguardar o barulho em torno disso. Até me pergunto se a publicação por um pesquisador da HP não tem também a intenção de desviar atenção do escândalo da demissão do CEO da HP, por pagar despesas de viagem a sua secretária-modelo. Mas mesmo assim, e mesmo que a prova seja demonstrada falha, o que é muito possível, o simples fato de atacar um problema destes já abre caminhos incríveis em matemática e em computação.

    Aliás, sem entrar em detalhes, que estão todos nas várias referências, P = NP é claramente problema fundamental em computação e em lógica, tem a ver com definir o que pode ser computado. Nada fácil.

    P versus NP

    P versus NP problem

    A questão "P = NP?"

    P vs NP Problem, Clay Institute, que oferece US$1.000.000 a quem resolver este problema, e alguns outros

    P vs. NP for dummies, com boas referências e boa discussão

    terça-feira, 7 de setembro de 2010

    Functional programming = fun.....

    Putting the fun in functional programming:  depoimento de um profissional, que trabalhou com OO, foi para programação funcional, gostou, descobriu que pode fazer muito mais com muito menos, que programação funcional é igual a orientação a objetos sem o formalismo pesado. Que em programação funcional os objetos - ou funções - nascem naturalmente, que tendem a ser re-usáveis, que os programas ficam menores e mais expressivos.

    Palavra-chave nisso tudo: abstração.  (sobre abstração: vide - e estude - SICP)

    "in the OOP world, programming quickly became more about structure and frameworks than about solutions": programação fica burocrática. Acaba a criatividade. Acaba a descoberta de abstrações, o que acontece naturalmente em programação funcional. E não é "fun".

    domingo, 29 de agosto de 2010

    IT today: Unsustainable, unhealthy and just plain screwed?


    Exatamente. Mirchandani toca nos principais pontos: IT depende de supply chain externo, depende de vendedores que não inovam mais, IT interna não é estratégica, é manutenção de infra, os CIOs se preocupam com compliance e controle (minha observação: política e compras) e não com inovação.
    Falta explorar a história do IT comercial para entender como se chegou a esta situação.

    Interessante comparar com o novo artigo de Nicholas Carr, IT in 2018, From Turing's Machine to the Computing Cloud. Mais uma vez, ele anuncia o fim da TI, computador substituído pela rede, pelo Cloud. Mas me parece que ele erra ao partir da máquina de Turing. Acerta quanto ao conceito de software, expresso na máquina de Turing, mas erra nas conclusões.

    A explorar mais.

    O fim do Software?

    Ou o começo?  Ou o re-começo?
    Melhor ainda: software - ou qualquer área, disciplina, indústria, técnica - se re-inventa periodicamente.  A não ser que esteja estável, tenha atingido todos os seus objetivos.  O que é raro.
    Software, sua utilização, explodiu a partir dos anos 50. E está hoje (2010) numa situação ambígua. Em pesquisa, em novas técnicas, em inovações, no mundo academico, se produzem novas idéias, se desenvolvem novos caminhos. Linguagens, sistemas, técnicas, métodos. Mas no uso, tanto individual com computadores pessoais e outros dispositivos de consumo, quanto empresarial, sistemas administrativos, pode-se dizer que o software acabou. Ou parou.
    O que aconteceu? Historicamente? Quais foram as razões do que eu chamo o fim do software? Como aconteceu, quais foram as forças que levaram a esta situação que parece um retrocesso à época das máquinas de contabilidade não programáveis.
    Há uma saída? Sim, com certeza, e ela é muito simples: usar o software. Como invenção. Para aquilo que ele foi feito. É difícil mas totalmente possível.

    E este re-começo do software que quero explorar aqui neste blog.

    Benvindos.