terça-feira, 25 de dezembro de 2012

IT in 2018: From Turing’s Machine to the Computing Cloud

Nicholas Carr again. He has a point, but when we says software substitutes hardware, it should be universal machines (Turing machines) substitute particular machines.

OCaml: execellent example

of functional programming applied to a real practical situation, algorithmic trading. With great results. Author explains why, tells the story, shows why OCaml was chosen over Java and previous alternatives. With examples:

   Why the next language you learn should be functional

(Article comments are full of useful references, Example: Lisp in Small Pieces by Christian Quiennac

And here is a more recente reference to OCaml, same situation.

segunda-feira, 24 de dezembro de 2012

Is abstraction the key to computing?

Yes! But the examples in the article (Matisse, Underground map) are not really examples of abstraction and the use of Piaget theory doesn't apply directly. How about teaching Mathematics as a royal path to abstraction?

The Lisp Curse

thought-provoking essay. Good ideas. "Lisp's expressive power is actually a cause of its lack of momentum."

Mathematics and programming

Discrete mathematical structures form the foundation of computer science"": Article on translating math into code. See comments in this blog.

Okasaki's Purely Functional Data Structures is the reference (in library)

For the implementation, see Small Data Structures by Weir

Lambda Calculus and Functional Programming references


ebooks in \Library\Lambda

Many books references sent by Abraham Popovich


The Implementation of Functional Programming Languages, Simon L.P. Jones, Prentice-Hall. Lambda Calculus in chapter 2: practical tutorial, short explanation, bBibliography on page 23. Little confusing is the Beta-reduction explanation. The book is oriented to implementation and the Miranda language.

Addison-Wesley - Haskell - The Craft of Functional Programming, 2nd ed - Simon Thompson (1999) 

Wrox - Functional Programming in C# Classic Programming Techniques for Modern Projects (Jun 2011)

[Apress, 2010] Real-World Functional Programming – with Examples in F# and C#

Springer - Drawing Programs - The Theory and Practice of Schematic Functional Programming - 2nd Edition - Jan 2010: to explore, the idea of the failure of visual programming, and use of schematica functional programming the way engineers draw blueprints 

Springer - Advanced Functional Programming Edition 2009 (Elements) Haskell, Proceedings of a Symposium

Bird, Wadler. Introduction to Functional Programming.1ed. Good practical introduction, with Miranda examples

Dynamic Programming - Foundations And Principles 2Nd Ed - M Sniedovich (Crc, 2011): nothing to do with functional programming. This is about optimization techniques.

Cambridge - Steps  in .Scala An Introduction to Object Functional Programming 2010, RETAiL.EBook-DiGiBook

Introduction To Functional Programming (Lambda Calculus) - Mike Gordon - Lecture Notes: too terse, difficult, good history with references for further study in chapter 1 page 1. Introduction to the ML language with examples.

A Tutorial Introduction to the Lambda Calculus Raul Rojas 1997. Short and painless. With the definition of numbers, arithmetic and recursion.

Type Theory and Functional Programming, Simon Thompson 1999. Tough, rigorous, abstract, not practical. Touches on fundamental logic topics like type theory, model theory, logics. Bibliographic references page 31.

Springer - Functional and Logic Programming -Jul 2004 Symposium. Note the use of functional - and imperative - programming in quantum computing.

[O'Reilly] Functional Programming for Java Developers. Short and sweet. Full of teaser to the main ideas in functional programming.

Loverdos & Syropoulos - Steps in Scala - An Introduction to Object-Functional Programming

A Functional Approach to Data Structures and its Use in Multidimensional Searching, Bernard Chazelle, 1988: good example of mathematics development of a data structure useful in functional programming 

ebooks in \Library\Lambda

Many books references sent by Abraham Popovich

Why Functional Programming Matters, John Hughes, very good, goes to the point on why using functional programming, with detailed examples and concepts for the development of complex systems. Idea of modularity explained and detailed.

Introduction to Lambda Calculus, Henk Barendregt Erik Barendsen, Revised edition, December 1998, March 2000, detailed explanation of Lambda Calculus concepts, with complete description, definition, theorems.

See in the reference to Omega language a presentation by Tim Sheard on Lambda Calculus, LambdaCalculator.

Church’s Thesis and Functional Programming, David Turner, Middlesex University, UK: excellent, complete, short, with references, mentionned Miranda language.
From Lambda the Ultimate:David Turner gives a condensed summary of the lambda calculus and functional programming in this paper on Church’s Thesis and Functional Programming.The lambda-calculus, which Church developed during the period of convergence from which the Thesis emerged, has influenced almost every aspect of the development of programming and programming languages. It is the basis of functional programming, which after a long infancy is entering adulthood as a practical alternative to traditional ad-hoc imperative programming languages. Many important ideas in mainstream programming languages—recursion, procedures as parameters, linked lists and trees, garbage collectors — came by cross fertilization from functional programming. Moreover the main schools of both operational and denotational semantics are lambda-calculus based and amount to using functional programming to explain other programming systems.
The original project from whose wreckage by paradox lambda-calculus survived, to unify logic with an account of computable functions, appears to have been reborn in unexpected form, via the propositions-as-types paradigm.
Many of the PLT topics mentioned on LtU are covered - PLT in 20 pages or less. I'm still hoping for someone to publish a pop-PLT book that takes something like these 20 pages and turns them into a 800 page novel. In the meantime, this is a nice roadmap for PLT that helps provide the connections between such things as Curry-Howard, Coq, System F. (About as close to a cheatsheet for LtU that I've come across). 
The Untyped Lambda-Calculus, Hossein Hojjat, University of Teheran: good simple presentation

The Y Combinator: two good derivation, here and this one with Javascript

An Introduction to Lambda Calculus and Scheme, Jim Larson, 1996-07-26, short and good

Compiling to lambda-calculus: Turtles all the way down - post with brief ant to the point explanation of lambda calculus, with compilation. One of many useful post in Matt Might rich blog. Many bibliographic references. 

What is a Universal Computing Machine? by Jean-Cahrles Delvenne: interesting, but reader must be familiar with Universal Machines Theory. It is a proposal of a new definition. Related to Wolfram cellular automata.

terça-feira, 11 de dezembro de 2012

Is IT Falling Short of Business Expectations?

This papers complements what DeMarco said. Software should be used - developped - to do things companies are not doing.

Quoting: "...the most financially successful companies are doing things that others aren't doing. Notably, successful companies are working together with their IT organizations to develop new products and IT is used to help support business growth." 

sábado, 8 de dezembro de 2012

domingo, 2 de dezembro de 2012

Fighting Complexity

Getting rid of complexity is the theme of Dr. Neumann research in computers and network security.  See Killing the Computer to Save It

"... the insight that “complex systems break in complex ways” — that the increasing complexity of modern hardware and software has made it virtually impossible to identify the flaws and vulnerabilities in computer systems and ensure that they are secure and trustworthy."
 
“I’m fundamentally an optimist with regard to what we can do with research,” he said. “I’m fundamentally a pessimist with respect to what corporations who are fundamentally beholden to their stockholders do, because they’re always working on short-term appearance.”

Avoid Object Oriented Programming

Good advices: "In many programming courses and tutorials, everything is going along just fine when there's a sudden speed bump of vocabulary: objects and constructors and abstract base classes and private methods. Then in the next assignment the simple three-element tuple representing an RGB color is replaced by a class with getters and setters and multiple constructors and--most critically--a lot more code." in OOP Isn't a Fundamental Particle of Computing. It just put OOP in its right place.

See also Don't Distract New Programmers with OOP: "The shift from procedural to OO brings with it a shift from thinking about problems and solutions to thinking about architecture."

The cost of bugs

Infographic on the cost of bugs. Slightly biased to agile programming.

We do have a serious quality problem in software. Mainly driven by:

- Go to market pressure
- Lack of professionalism and craftmanship

2012: Software still sucks

We still have a record of bad software projects. See The Failed Record of the Software Industry. Questions (that we will try to answer):

1. Is it really so?
2. Why?
3. How can we change this?

domingo, 25 de novembro de 2012

The IDE divide

Good viewpoint on the world of developers: either you know well the language, or you know well the tool. See the IDE divide.

"The developer world is divided into two camps. Language mavens wax rhapsodic about the power of higher-level programming — first-class functions, staged programming, AOP, MOPs, and reflection. Tool mavens are skilled at the use of integrated build and debug tools, integrated documentation, code completion, refactoring, and code comprehension. Language mavens tend to use a text editor such as emacs or vim — these editors are more likely to work for new languages. Tool mavens tend to use IDEs such as Visual Studio, Eclipse, or IntelliJ, that integrate a variety of development tools."

"One consequence of the greater language selection available to the editor-only developer is it typically includes languages that are more powerful".
 

sábado, 24 de novembro de 2012

Software Is Mathematics

Software should be considered a part of Mathematics. Conventional Mathematics studies the existence of objects. Software is the branch of Mathematics which builds the objects.

Here, in What Does "Software Is Mathematics" Mean? - Part 1, considerations on this idea for courts in judgments about patenting software. Which should not be patented if it is considered Mathematics.

sábado, 13 de outubro de 2012

The best approach to software development in general

Methods, hype, fashion? See post at Crafted Software.

"... the vast majority of developers react to all these things. It is not just because someone, somewhere wrote a book, recorded a video or gave a talk in a conference about something that it will make that thing right, in all contexts"

See also Does that thing you like doing actually work? Quote: "I am, of course, asking whether there’s any evidence in software engineering

Super programmers

Practical ideas on programmer productivity

Buy x Build (software)

Great quote from DeMarco in the very well analyzed post The Buy-vs-Build Shift (part 1):
In 1982 Tom DeMarco opened his hugely influential book on Software Engineering with the line “you can’t control what you can’t measure”. Interestingly, in an IEEE paper in 2009[2] he writes: “For the past 40 years [...] we’ve tortured ourselves over our inability to finish a software project on time and on budget. But as I hinted earlier, this never should have been the supreme goal. The more important goal is transformation, creating software that changes the world or that transforms a company or how it does business.”

However, he thinks that framework are a good substitute for a components market, which looks like it make sense until you realize that using a framework means loosing the universal machine paradigm. Loosing the programmability.

On the other side, I fully agree with him when he writes that "It seems that even if software development was not a core competency for most companies it is rapidly becoming strategically important for many to make software development a core competency."

The halting problem

A different - and good for teachers -way to look at and explain the Halting Problem: Eric Lippert's blog.

Complex things are complex

But not complicated. People should understand that anyone can program a simple enough problem. Developing a complex system is another thing. It requires skill and knowledge. You are building a machine. This is the point made by MarkCC in yet another excellent post in his Good Math, Bad Math blog: Everyone should program, or Programming is Hard? Both!
"To write complicated programs is complicated. To write programs that manipulate symbolic data, you need to understand how the data symbolizes things. To write a computer that manipulates numbers, you need to understand how the numbers work, and how the computer represents them. To build a machine, you need to understand the machine that you're building. It's that simple."

domingo, 29 de julho de 2012

Do we need parallel programming?

At least a common sense view of parallel coding: Will Parallel Code Ever Be Embraced?
Answer: probably not. By a parallel programming practionner.

Future of AI

Artificial Intelligence is not a theme here, but its contribution to the art (and science and technic) of programming is strong. Interesting debate between Norvig and Chomsky.

Also refer to Judea Pearl (2012 ACM Turing award winner) on use of probability. CACM vol.55, no.6, June 2012: "I called it do-calculus because it allows you to reduce questions about the effect of interventions to symbolic manipulations."

Teaching programming

terça-feira, 3 de julho de 2012

Aligning IT with business is 'disastrous' for IT

Forrester has a point: IT doesn't have to be aligned with business, IT is about innovation and doing new business.


File: a simple but important concept

Why Files Exist remember us that this abstraction is important. Devices with no file access for users are "proprietary" devices. Again, this leads us to the seminal idea of a computer:  data = program.

Example: to load a program we load... a file.

domingo, 3 de junho de 2012

What is an algorithm?

Moshe Yardi in CACM vol.55, n.3, march/2012. Definitions of algorithms as an abstract state machine or a recursor. Which is analogous to the argument about imperative versus functional languages. Yardi end: "An algorithm is both an abstract state machine and a recursor, and neither view by itself fully describes what an algorithm is. This algorithmic duality seems to be a fundamental principle of computer science."

Unix as IDE

A different view of what should be an IDE. Plus the difference of the UNIX world, simple things like everything is a file and the use of pipes.

SOLID Code?

Do we need principles? Or simply good craftmanship?

Agile

sexta-feira, 4 de maio de 2012

Life Without Objects

A practitionner analysis:

"...objects have been a diversion away from building concise, well structured and reusable software... The benefits of objects have been gradually declining over a long period of time."

sábado, 11 de fevereiro de 2012

How to think about choosing a database

Good panorama of the NoSQL databases.  Finally, the end of the one model - relational - fits all.  Complex and diverse applications need diverse databases.

quarta-feira, 25 de janeiro de 2012

Is Open Source Easier Than Commercial Software?

Some points made in this post:

Control and vendor lock-in
Predictability at the expense of innovation
and more on ease of use

Main point: control

kLOC

Ideas on the usefulness of LOCs to measure programmer's performance. It works (says the author) if calibrated and in the long range.

Google acelerando o TCP

Ver artigo. E observar que a proposta é open source, no espírito da Web.

Aliás, uma pergunta: a Web é open source?

Resposta: é o melhor exemplo de open source - protocolos, não código - e uma caso estrondoso de sucesso.

E mais, vindo da academia

Frameworks? Plataformas? Ambientes?

E antes: máquinas, linguagens, sistemas operacionais.

Modelos de programação (de máquina universal) cada vez mais complexos, distantes da máquina universal Turing, Von Neuman e outras.

1. Framework: mais que o sistema operacional, mais que a linguagem, isola programadores, impede o uso de componentes, amarra programadores a um fabricante (Microsoft, Java, ...). E mais uma vez é um ambiente baixo nível, com componentes "pequenos". A cada vez o programador tem que cuidar de detalhes, e não da arquitetura da aplicação.

Sem falar das IDEs que vem junto, que fazem o programador ser muito mais um organizador de componentes em bibliotecas do que um elaborador de algoritmos. Trabalha num ambiente inerentemente frágil, está limitado pelo ambiente, e é o tempo todo impelido a "não codificar". "Veja como é fácil fazer x ou y sem escrever uma linha de código".

2. Plataforma: passo além do framework, voltamos à guerra de ambientes que eram os sistemas operacionais: Android, IOS, Windows Phone.

Mas... vejam Modern Cross Platform Development : coloca o problema e depois mostra diversas soluções cross platform.

E ainda aponta para a Web como A plataforma. O programador deveria desenvolver para a Web. A ver a referência que ele dá: "As Jeff Atwood discusses in his seminal blog post All Programming is Web Programming; "the web is the most efficient, most pervasive, most immediate distribution network for software ever created - its almost completely frictionless"."

quarta-feira, 4 de janeiro de 2012

Open means control

Post "Richard Stallman Was Right All Along" by Thom Holwerda. Makes a very good point comparing free software with the decrease in civil liberties now (jan/2012). And an important point showing that open software means control. If we want control of the increasingly present software, it has to be open.