What makes programming languages easier?
Vickan's Goyal blog Make it easy about Bruce Tate's article started some debate about the advantages (and disadvantages) on programming languages being closer do English. I think booth have missed the point, and was typing a reply, but it became so big I decided to publish it on my own blog.
Natural language is imprecise, ambiguous, and its real meaning has to be inferred by the reader. Not all people who reads an article will understand exactly the same thing the author intended to tell them. This doesn't look to me as a good way to express computer instructions that should produce a reliable and predictable result.
If natural language were the way to develop better software, why would be invest so many time developing new modeling languages like UML, new specification languages and the like?
The problem is most people have trouble in thinking the precise, well-defined way a programming language requires. Learning how to program computers is hard. But people make the wrong assumption that it is hard because we use tools that are hard to use; the fact is that computer programming per se is very hard, and no tool will ever change that.
What did we get from "easier" development tools? The ones that from time to time promise "you won't need a real programmer if you use this tool"? Gartner and etc still says 80% of all software projects misses deadlines and cost by more than 50%.
That's why I like Extreme Programming: they focus on the real issues, that are people interactions and quality control.
We will always need programmers to develop software, and those programmers need to get proper education -- not just proper training, because they need to get the logic and other skills to be able to effectively use any programming tool.
It's just like giving a good programmer a course of drawing software. He may learn all about using the software, but he won't be able to create nice, pleasant figures. You need a different skill set to create graphics than to create software.
Actually, I think we non-English speakers (I'm Brazillian, my language is Portuguese) have a little advantage over Americans and other native English speakers: we don't fall into the mistake of trying to read a computer program as if it were natural language.
Programming language keywords are symbols with no relation to their usual meanings, same with function and method names: they are just like logical operators. But there are too many of them, so you cannot use symbols as mathematicians have used for centuries, and the fact most computers can't render and type symbols like "exists" (∃), "infinite" (∞) and so on simply gave more force to the temptation to "use natural language".
Our advantage is not bigger because most technical docs are in English.
I agree with Vickran in that I don't want Java to become neither more bloated neither more simplified. I also agree with John Reynolds that the Java Platform could make good use of domain-specific languages (that is, dynamic languages). But my vote in this respect is for Jython (a Python compiler / interpreter that generates standard JVM bytecode, built itself using Java).
We will always have new products and new technologies that promise to make computer programming easier, and most of then will continue to be vapor, although some of them will sell very well. But only the few ones that attack real issues, like Java did, and like Python, Ruby and others are doing right now, will have a real impact on programmer productivity.