Slashdot Log In
What are the Next Programming Models?
Posted by
Cliff
on Wed Aug 10, 2005 01:51 PM
from the code-for-the-next-generation dept.
from the code-for-the-next-generation dept.
jg21 writes "In this opinion piece, Simeon Simeonov contemplates what truly new programming models have emerged recently, and nominates two: RIAs and what he calls 'composite applications' (i.e. using Java, .NET or any other programming language). He notes that Microsoft will be trying to achieve RIAs in Avalon, but that it's late out of the gate. He also cites David Heinemeier Hansson's Ruby on Rails project as showing great promise. 'As both a technologist and an investor I'm excited about the future,' Simeonov concludes. It's a thoughtful piece, infectious in its quiet enthusiasm. But what new models are missing from his essay?"
This discussion has been archived.
No new comments can be posted.
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
Full
Abbreviated
Hidden
Loading... please wait.
FP (Score:5, Funny)
funny AND interesting, but yeah FP... (Score:5, Interesting)
See Beating the averages [paulgraham.com] for a well-written and thoughtful essay.
In a nutshell, languages themselves vary in power. No one disputes that. All things being equal, you should generally choose the most powerful language you can all the time. As we move more and more to server-hosted software, your choice of language is incredibly important because a) it's your choice, not forced on your by being the language of the OS and b) it can be a huge competitive advantage.
Matz (Ruby's creator) acknowledges ripping off ideas from Lisp (but putting a friendlier face to it). Python is Lispy. Javascript has been called Lisp in C's clothing. These are all functional languages, or can be used functionally.
Graham noted how all languages are trending more towards Lisp in terms of features (see the essay linked above). Want further proof? C# 2.0 is getting lexical closures. Innovation from Microsoft! These were available in Lisp for 30 years, javascript for 10 (since it was created), they're in Perl 5, Ruby, I can go on...
If languages continue to become higher and higher level, wouldn't we need to investigate this weird AI language from 1958 and see what features it doesn't have in order to do more meaningful research? 'cause these days, all the "new" features of today's languages are decades old...
Parent
Re:funny AND interesting, but yeah FP... (Score:5, Funny)
(I'd (stab (my (eyeballs out)) (if I needed)) (to look)(at LISP) all ) day)
))))))))))))))))))))
Obligatory 20 closing paren's that inevitably appear...
Parent
Re:funny AND interesting, but yeah FP... (Score:5, Funny)
Parent
Re:Afraid of parenthesis? Stay away from XML! (Score:5, Informative)
Also, the facts that they're never nested directly next to each other and that they describe themselves helps. With LISP you get stuff like where it's difficult to count the number of parens, and what they close depends solely on their placement. In contrast, something like
<1><2><3><4><5>this</5></4></3></2></1>
would be the equivalent in XML. As you can see, even though there's no whitespace it's still easier to read because each tag describes what its closing and is easier to pick out from its neighbors (for easier counting).Of course, all this ignores the fact that LISP and XML can't be directly compared anyway, since one is a programming language and the other is a data format!
Parent
Re:Afraid of parenthesis? Stay away from XML! (Score:5, Interesting)
)
Now tell me what it means. Specifically, tell me what expression it ends.In contrast, take this XML example:
</p>
Now tell me what expression it ends. See how much easier it is?See, that's the difference: In XML, the angle brackets aren't units really units of syntax in and of themselves; tags as a whole are. Moreover, in XML these units of syntax are self-discribing. Also, angle brackets are never nested; they always occur in "" pairs without any more brackets between them.
Parent
Re:funny AND interesting, but yeah FP... (Score:5, Funny)
"Doh! Why do we need all these _new_ languages? Everyone knows programming languages were perfected in 1958. It's a scientific fact!"
Parent
Things will always change (Score:5, Insightful)
No, no, no, no, please, no. (Score:4, Funny)
Or even better: (Score:5, Funny)
How about spagetti? (Score:5, Funny)
Re:How about spagetti? (Score:5, Funny)
Parent
Miss Universe (Score:5, Funny)
"Prior to being crowned Miss Universe 2005 [missuniverse.com], Natalie was a motivational speaker, model and a fundraiser. She recently received a Bachelor's Degree in Information Technology Management and Marketing from Ryerson University..."
Not truely new (Score:5, Insightful)
In a specification oriented programming model, you specify the behaviour, not all the million little steps that are needed to perform it. A specification oriented programming model is independent of the underlying techniques, such a networking protocols and marshalling techniques. I think such a specification oriented programming model should be data oriented, meaning that data is the starting point, not an event driven GUI front-end, as it is now with most programming models.
Ye gads (Score:5, Insightful)
Examples of Programming Models:
0) Hardware based programming (plugboards etc)
1) Stored program (program as data)
2) Assembly programming
3) High level language programming
4) Structured
5) Functional
6) Object oriented
7) Aspect oriented
New Models, New Ways of Working (Score:5, Insightful)
Actually, he missed the anti-pattern. It's really: One of the common anti-patterns is over-relying on tools and frameworks and programming paradigms and processes instead of improving the skills and knowledge of the people doing the programming.
I've been programming for a long time too, and I don't think that new programming models do all that much for productivity compared to finding good people or investing in improving the people you have. The recent Joel on Software article [joelonsoftware.com] discusses this at length. This is one of the big reasons I'm so interested in agile methods [agileadvice.com] and principles [agileaxioms.com].
RIA, the next NEW thing? (Score:5, Insightful)
But what new models are missing from his essay? (Score:5, Funny)
Theres oil-oriented programming (everything is a pipeline), terror-oriented programming (everything is a suicide bomber) and dollar-oriented programming (everything has a mandatory dollar sign at the beginning), to name but a few.
Lock-free and Wait-free programming. (Score:5, Informative)
http://www.nwcpp.org/Downloads/2005/Lock-Free.pdf [nwcpp.org]
Functional Programming: Haskell (Score:5, Interesting)
Functional programming greatly simplifies the task of the programmer by removing execution order from the things that programmers have to keep track of. Just as garbage collection in Java got rid of the need to recycle memory manually, so in Haskell the execution order is a matter for the compiler to optimise rather than for the programmer to worry about.
Historically functional programming has had problems doing IO: languages have had to admit impure side effects to do IO. Haskell has a wonderful solution to this problem, which unfortunately this post is too small to contain (really: go see!).
Paul.
Good Design (Score:5, Insightful)
Pick a good language/environment, even a not so good one, say C and a text editor, and then use some engineering discipline to really DESIGN THE DAMN application. Don't just throw features at it, don't just hack the code. Think about the real world problem you are supposedly trying to solve and work your way through it. Build it right, you don't have to worry about operation, maintenance, or longevity. Build it wrong, and you make a career of fixing it.
Ooops, maybe I've stumbled onto the real secret of IT...
We need a way to avoid duplicating work (Score:4, Insightful)
Think about it - how much programming out there is a duplication of some other effort, at least in some of its logical components? I'd say what we need is two things:
a) A database of implimented programming logic - maybe not a database proper, but something that contains the ability to say "given this, do this" exists.
b) A programming method that involves designing an application such that you break each top level logical component/ability down until you a) know that you have to impliment it or b) it is found to have already been done. I'm guessing b will be the norm, and as more and more logical components are added to the database the point at which b) is found should get higher and higher in the design stage.
And the programming language bias should, at the database level, be a moot point. The database itself should define its algorithms and logic in such a way as to be workable in automatic proof assistants like acl2 and HOL4, and generate code in the required language as needed. Surely for a properly specified algorithm there must be some well defined way to generate it as code, provided the language specs are up to par. This is deterministic behavior, after all. Perhaps different algorithms for the same function can be added, and a choice made on a per language basis, but I'm dubious that this would be needed in an ideal world.
In a world with open source as a working reality, there should never be a need to impliment anything non-trivial. Design should be specifying only things that don't already exist. Object oriented programming is a nice step in that direction, but that doesn't let people know a) what's out there and b) what the quality of it is. I say let's bring formal methods to their full potential, and reduce the amount of work the programmer must do to the irreducable minimum. Programmer time is too valuable to waste on re-implimenting things. Standardize everything that can be done "right", and have the human being do ONLY the part he/she is good at - deciding what needs to be done from a USER standpoint - i.e. WHAT to do. How to do it should be, as much as possible, decided once and correctly, and then not again.
Author discounts Java (Score:5, Insightful)
The Next Programming Model I Want (Score:5, Informative)
I program console games. We've got very strict RAM limits - from 384kb on the GBA to 64mb on the amazingly spacious XBox. (With some curious design decisions that can make it feel smaller than the 32+4mb PS2, but I digress.)
On systems like this you've got to track pretty much every byte. One meg of garbage collector overhead means one meg you don't have available for useful stuff. I generally don't use standard dynamic allocation - at all - it's just too expensive. Maybe one big pool to load files into on the PS2 that can be cleared entirely between levels. Nothing like that on the GBA of course.
As far as I can see, there's three languages that provide this necessary feature - ASM, C, and C++. So I use C++.
I'd love to see an "improved" C++. But it seems like every time someone decides to improve C++, the first thing they do is tack on a garbage collector and get rid of direct memory access. And, you know, those are features I desperately need. Frequently those unwanted features are the only way I can even display graphics.
And yes, it's possible to write modern games in languages with garbage collectors (as I understand it, the entire Jak and Daxter series was written in Lisp) but I know what lengths I go to to squeeze performance out of these systems - I really don't need a garbage-collected albatross hanging off my shoulder.
And before anyone says "garbage collectors are faster than deallocating things manually!" - if I don't *allocate* anything, what makes you think I need *deallocation*? There is no heap. Move on.
Re:Did you understand all that? (Score:5, Insightful)
I'm increasingly finding that web programers ( and their managers ) can be like that. Meaning that they're increasingly trying to find ways to make "HTML-server based application with some client interaction" sound new and exciting.
Not that using advanced Javascript||.NET||Java||C||Objective-C||Python||wh atever on the client to communicate to a server running Perl||C||Python||Java||.NET||Ruby||Objective-C||wh atever using XML( or whatever ) isn't interesting or useful, it's just... like calling a personal log-format web page a 'weblog'; it's not really something new in the abstract, it's a new way of doing something that's been done before. In other words, it's marketing hype to make you think you're seeing something truly new. At least in general, the implementations are new, not the ideas.
Parent