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.