Slashdot Mirror


What are the Next Programming Models?

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?"

99 of 540 comments (clear)

  1. FP by tigersha · · Score: 5, Funny

    Functional Programming, not First Post!

    --
    The dangers of excessive individualism are nothing compared to the oppressiveness of excessive collectivism
  2. Things will always change by bahwi · · Score: 4, Insightful

    Nothing is permanent. However, after so long you're gonna start getting rehashed methods. It's like a big circle everyone is running around in, looking for the absolute best. Yes, there are ones better than others, but there is no perfect one. Need OO for a simple 10 line php script? Hell no, unless you're relying on a lot of 3rd party libraries. Need Ruby on Rails for a statistics generator with no front end what so ever? Nope. It all changes, but there is some good stuff we take along the way. But I don't think we'll ever find something that is just "perfect", more of a never ending quest to find the better one, and to stay on top of all the ones from the past.

    1. Re:Things will always change by Coryoth · · Score: 2, Insightful

      From a quick reading it sounds a lot like (in terms of stucture - not the visual development method) what Object Oriented Programming was originally supposed to be: synchronous independent process objects that communicate over channels by passing messages. Could be interesting to see how well this works out. It sounds like they are expecting a little much in the way of simplification to naturally occur from handling things this way though. I am dubious as to whether they will actually achieve the lofty accomplishments they claim.

      Jedidiah.

    2. Re:Things will always change by MOBE2001 · · Score: 2, Interesting

      Compare that to CCS or CSP which actually provides an algebra via which you can logially reason about the system and hence formally mathematically prove things about the system... I don't see how COSA offers anything comparable - unless I've missed something.

      Math has nothing to do with it. COSA solves the nastiest problem of complex software programs: blind code or unresolved data dependencies. That is, something is modified in one part of the program unbeknownst to another. This makes it almost impossible to modify complex code without introducing dangerous and unforeseen side effects. The second greatest cause of unreliability is non-deterministic timing. COSA solves this problem through synchronicity.

      All other programming problems are, as Fred Brooks put it, are accidental and can be easily dealt with using traditional methods.

  3. No, no, no, no, please, no. by erotic+piebald · · Score: 4, Funny

    No new 'paradigms' until we get all the other 'salvations' under control.

  4. Or even better: by Anonymous Coward · · Score: 5, Funny

    Who are the next programming models?

  5. How about spagetti? by G3ckoG33k · · Score: 4, Funny

    That's the first one I learned. Now I'm in to the lasagna model, with nice layers. Anything beyond that? Well, not me.

    1. Re:How about spagetti? by I8TheWorm · · Score: 4, Funny

      I've seen a lot of tortellini coding lately, where all the programmers basically run around in circles.

      --
      Saying Android is a family of phones is akin to saying Linux is a family of PCs.
    2. Re:How about spagetti? by colinrichardday · · Score: 2, Funny

      What about ravioli programming, where you wrap the meat in shells?

  6. Miss Universe by khendron · · Score: 4, Funny

    Here's a new model who can program:

    "Prior to being crowned Miss Universe 2005, 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..."

    --
    Life is like a web application. Sometime you need cookies just to get by.
    1. Re:Miss Universe by ch-chuck · · Score: 2, Funny

      if there's any reason for the aliens to wipe us earthlings off the face of the galaxy, it's for having the audacity to call our beauty contests "miss universe". I mean, really, how typically presumptious.

      --
      try { do() || do_not(); } catch (JediException err) { yoda(err); }
    2. Re:Miss Universe by learn+fast · · Score: 2, Funny

      Technology Management and Marketing

      Nooooooooo!!!

  7. What about Small by mu22le · · Score: 3, Interesting

    I have heard marvels of Embryo Enlightenment version of SMALL

  8. Don't forget the ways of Apple by kinkadius · · Score: 3, Interesting

    the Cocoa/Objective-C implementation might be worth talking about, especially as how it has evolved from it's roots in next step.

    --
    www.omglolh4x.com
    1. Re:Don't forget the ways of Apple by TheRaven64 · · Score: 2, Interesting
      Actually, the Cocoa hasn't gone that far. Bindings are new, and nice. Core Data is a lot like EOF (although more document-centric). Everything else has been around since OpenStep (although it's slightly more refined).

      NeXTStep was a lot more primitive - no Foundation, just AppKit and C-based libraries.

      It really is depressing watching demos of C# and .NET/Mono, and seeing them being touted as new and shiny, and seeing how far they are behind where NeXT was a decade ago.

      --
      I am TheRaven on Soylent News
  9. How about... by spikexyz · · Score: 2, Insightful

    ...we stop creating new languages and use what's out there to do something useful for a bit.

    1. Re:How about... by statusbar · · Score: 2

      This is more than just a little insightful.

      How many times do we have to re-invent the wheel? How many languages promised re-usability? How many object oriented class libraries were written that couldn't be effectively re-used?

      --jeff++

      --
      ipv6 is my vpn
    2. Re:How about... by Bob+of+Dole · · Score: 2, Insightful

      How many languages are broken by design and will never be fixed because "It's always been that way"?

      Reinventing the wheel isn't a waste of time if the old one is square.

  10. Not truely new by Frans+Faase · · Score: 4, Insightful
    That a certain technology is a hype does not mean that it is new. These are not really new programming models. And whether we should be happy about them, I don't know, because they seem to make thing more complicated then they are already. I wonder how long it will take until we will see some programming models that are more specification oriented, then just being another type of implementation oriented way of programming.

    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.

  11. Ye gads by hey! · · Score: 5, Insightful

    I won't discount the importance of Ajax and "RIAs" as a deployment model -- even as a kind of domain within in which system architectures could be grouped. But these aren't new programming models. We use the same old programming models to build new kinds of apps.

    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

    --
    Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
  12. New Models, New Ways of Working by under_score · · Score: 5, Insightful
    One of the common anti-patterns is over-relying on tools and frameworks instead of inventing new programming models.

    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 discusses this at length. This is one of the big reasons I'm so interested in agile methods and principles.

  13. RIA, the next NEW thing? by seafoodbuffet · · Score: 5, Insightful

    Rich Internet Applications are hardly the next "new" thing. The idea of doing asynchronous applications HTML/DHTML has been around since at least 1997. It's only the recent broad-based browser support that has led to the growth of AJAX, etc. However, trying to program an RIA that targets multiple browsers is like trying to write portable C code all over again. Thought CSS was screwed up between Firefox and IE? Try looking at the JavaScript implementation differences between the two platforms. Throw in a bit of Safari and Opera and you have all the makings of some super-gross client code.

  14. Re:This is the missing model. by squiggleslash · · Score: 2, Funny
    The step between 1 and 2 is "Hire a bunch of consultants". Nobody writes spaghetti code like contractors and consultants...

    You know what I'm talking about, yeah, you do.

    --
    You are not alone. This is not normal. None of this is normal.
  15. Web as new platform by Sv-Manowar · · Score: 2, Interesting

    The trend towards RIA's/webapps has traditionally been restricted to those in a database centric role, but with the increasing use of AJAX and the like, the webapp is pushing further into the desktop application space. Obviously the centralization and server-side nature of the applications helps deployment and maintainance, but developers are basically trading the platform of an operating system for the platform of a web browser, with all the intricacies and compatibility issues that follow both.

    Webapps are a good direction to take for data access apps, but where the line becomes less clear cut and extreme amounts of javascript/dhtml are needed to achieve behaviours, the apps can become somewhat clunky and difficult to use. To me, it's essential that the designers of today's webapps realise the limitations of what they're working with and when to use traditional desktop apps.

  16. But what new models are missing from his essay? by myowntrueself · · Score: 5, Funny

    Well lets see now, programming metaphors for the modern age?

    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.

    --
    In the free world the media isn't government run; the government is media run.
  17. Lock-free and Wait-free programming. by pjkundert · · Score: 4, Informative
    For low level stuff, Lock-free and Wait-free algorithms are the next hot thing. For massively parallel systems, they provide levels of utilisation and efficiency that are un-reachable by using code involving locks.

    http://www.nwcpp.org/Downloads/2005/Lock-Free.pdf

    --
    -- -pjk Perry Kundert perry@kundert.ca http://kundert.2y.net
  18. Mod parent up. by moultano · · Score: 2, Insightful

    Functional programming is awesome, and I'm thoroughly convinced that it will take over just about everything its feasible for it to take over. There is nothing like the feeling of writing a program, having it type check, and not having to test it because you can look at the code and tell that it proves its own correctness.

    1. Re:Mod parent up. by Fahrenheit+450 · · Score: 2, Funny

      Hmmm... forgot my footnote:

      [1] Unless, of course you muck with the type system via things like OCaml's Obj.magic, improper use of Marshaling, or being less than careful when you interface with C.

      --
      -30-
    2. Re:Mod parent up. by exp(pi*sqrt(163)) · · Score: 3, Insightful

      Wow! You're not joking. My preferred programming language for personal projects is Haskell these days. But I'd hardly say I could 'just tell' my code worked by looking at it. And a piece of functional code is a proof of something (by Curry-Howard), but it's not a proof that the program does what a specification says it should do.

      --
      Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
    3. Re:Mod parent up. by exp(pi*sqrt(163)) · · Score: 2, Interesting
      the code itself is structured as a proof
      The code is structured as a proof that the function maps to objects of the correct type, not as a proof that it works. What's nice about pure functional code is that it's structured like a mathematical proposition and so you can use ordinary mathematical proof techniques to prove correctness. So I think you meant proposition, not proof.

      I just wrote some Haskell code to manipulate formal power series in Haskell. One thing that was cool was that I was able to take propositions that I could prove mathematically and simply rewrite them as code. It was pretty mind-blowing. Things that were traditionally hard to compute became one liners because of lazy evaluation. On the other hand, almost trivial changes to the code that still resulted in true mathematical propositions didn't result in working code. Essentially the problem was to do with what precisely depended on what. The wrong mathematical proposition and a1 depends on a2 which depends on a3 up to infinity so the code never terminated. In fact, it's very easy to write code that looks provably correct but doesn't terminate. I just came across a paper on this very subject - the fact that some things we take for granted in mathematics aren't true of guaranteed to terminate functional programs. Pity I can't find the link.

      --
      Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
    4. Re:Mod parent up. by exp(pi*sqrt(163)) · · Score: 2, Informative
      translating from through specification to code is trivial
      OK. I want a function that takes as argument a list of integers and returns a list in non-descending order. Tell me the name of a computer language in which translating this specification into a program is trivial and show me the steps involved in the translation.
      --
      Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
  19. funny AND interesting, but yeah FP... by MarkEst1973 · · Score: 4, Interesting
    Paul Graham has written extensively on how languages are becoming more and more like one from yesteryear: LISP.

    See Beating the averages 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...

    1. Re:funny AND interesting, but yeah FP... by Atzanteol · · Score: 4, Funny

      LISP proved one thing. It doesn't matter what features your language has, if it has a crappy syntax nobody will ever use it.

      (I'd (stab (my (eyeballs out)) (if I needed)) (to look)(at LISP) all ) day)
      ))))))))))))))))))))

      Obligatory 20 closing paren's that inevitably appear...

      --
      "Ignorance more frequently begets confidence than does knowledge"

      - Charles Darwin
    2. Re:funny AND interesting, but yeah FP... by Tumbleweed · · Score: 4, Funny

      If languages continue to become higher and higher level, wouldn't we need to investigate this weird AI language from 1958

      "Doh! Why do we need all these _new_ languages? Everyone knows programming languages were perfected in 1958. It's a scientific fact!" :)

    3. Re:funny AND interesting, but yeah FP... by llamaguy · · Score: 5, Funny

      Q: How do you know when you've achieved Lisp Enlightenment? A: When the parenthesis vanish.

      --
      HAH! I just wasted a second of your life making you read this, but I wasted a minute of mine thinking it up. DAMN.
    4. Re:funny AND interesting, but yeah FP... by StarvingSE · · Score: 3, Funny

      The best way of debugging lisp is to keep adding closing parantheses until the interpreter stops giving you errors...

      --
      I got nothin'
    5. Re:funny AND interesting, but yeah FP... by Coryoth · · Score: 3, Insightful

      LISP: Lots of Irritating Silly Parentheses.

      In practice it has a very clean and elegant syntax though. If your editor doesn't do bracket matching you might have a few issues, but then what sort of half assed editor are you using?

      Besides you can always try ML or Haskell which are much more pure functional than LISP and have hardly any parentheses (which I actually find occasionally irritating).

      Jedidiah.

    6. Re:funny AND interesting, but yeah FP... by Richard+W.M.+Jones · · Score: 2, Informative
      ... and the irony is that the parentheses aren't necessary. camlp4 is a macro language for extending ocaml and it shows that you don't need to express the language unnaturally just to allow macros.

      Rich.

    7. Re:funny AND interesting, but yeah FP... by srussell · · Score: 2, Insightful
      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.
      How do you define "functional language"? The key features of functional languages are that they (a) they reduce, or entirely eliminate, side effects, (b) have functions as first-class objects, (c) provide support for function currying, and (d) provide lambda expressions. Not all functional languages are strict about of these features, but I'd be wary of calling a language a "functional language" if it didn't at least number these as part of its core philosophy.

      Among Ruby, Python, and Javascript, none provide currying and all are strongly oriented to using side effects; in particular, one of Ruby's strongest features is that it is truely object oriented, and OO is side effects. They all provide some support for closures, but only Javascript can claim to treat functions as first-class objects. Consequently, none of those languages are anywhere close to being functional in nature, and although you might make be able to make a case for Javascript, purists will tell you that any language that has variables (as in, able to re-assign the value of it) isn't functional.

      That said, you're not the first person I've heard say that all languages are, ultimately, Lisp machines, and there's some merit to that. You can do procedural, OO, or functional style programming in almost any language, if you bend over backwards far enough; however, the term "functional programming language" does have meaning and shouldn't be applied arbitrarily just because you can write code that looks functional -- perhaps moreso than other paradigms because functional languages are often more strict about purity than other languages.

      The exception being O'Caml, which is a mutant.

      --- SER

    8. Re:funny AND interesting, but yeah FP... by 2short · · Score: 2, Insightful

      "Javascript has been called Lisp in C's clothing."

      So the ways Javascript differs from C are due to being LISP like? I find it hard to imagine a more damning indictment of a language.

      "All things being equal, you should generally choose the most powerful language you can all the time"

      But all things are not equal. Being able to use that power is important too. Sure, LISP is powerful, in theory. But writing it makes me yearn for the straightforward simplicity of C++!

      LISP fanatics bug me. If everyone just acnowledges that LISP had every language feature possible way before any thing else, can you give it a rest? Or at least stick to explaining why a language that is the greatest one ever, and has been since the 50s still has about as many users as it did in the 50s.
          All the "new" features of today's languages have been available for decades in LISP, as well as in every other turing-complete language; it's a matter of how easy it is to use those features.
          I've written code in a bunch of languages, including quite a bit of LISP. LISP is great if you want to do a mental puzzle resulting in aesthetically beautiful code. If you want to get stuff done, LISP blows big hairy chunks.

    9. Re:funny AND interesting, but yeah FP... by GCP · · Score: 3, Interesting

      For newbies to Lisp, the parentheses don't vanish because of some mystical enlightenment. They vanish primarily because you've written your code according to a standard that specifies how it is to be indented. You parenthesize correctly when writing then simply ignore the parens when reading and look at the indentation level.

      Of course I'm doing some handwaving here about the writing it correctly part. Until you memorize the major idioms, you'll often experience starting something with a single paren when it really needs to start with two, for example, and you'll get weird behavior that ends up driving you to randomly adding and removing parens until it seems to work. Admittedly that's a bit of a hurdle at first, but after some experience, that part gets easy. (Like glancing at for (int x=0; x10; x++) and reading "do it ten times" without having to think about it. A lot of people forget how much thinking a newbie has to do to parse such an expression the first few times.)

      The real problem with Lisp isn't the parens. Once you get over the initial hurdle, you just look at the indentation. The problem is that dev platforms these days are so much more than just a language. The basic concepts underlying a Lispy language are almost timeless. The whole rest of the dev system, though, has a shelf life of about a decade or less, after which time the way it is made available, the libraries, the editors you have to use, the string model, the constraints it's optimized for, the compromises it has made, its interaction with other technologies, etc., are all out of touch with current realities. Such is Lisp today.

      (Paul Graham once seemed like the guy who could rejuvenate Lisp, but each year that passes makes that less likely. Speaking of out of touch with current realities.... Even Microsoft's secret projects are more open.)

      --
      "Those who have never entered upon scientific pursuits know not a tithe of the poetry by which they are surrounded."
    10. Re:funny AND interesting, but yeah FP... by PhotoGuy · · Score: 2, Funny

      Reminds me of a post I saw on Usenet (r.h.f.?) many years ago; I can't find a reference to it any more, but it was someone claiming to have a copy of the LISP source code to SDI (Reagan's Star Wars project, from way back). They proved it by showing the last page of the code:

      Slashdot won't let me post it, but it was a solid page of ))))'s.

      --
      Love many, trust a few, do harm to none.
  20. All buzzwords no meat. by Anonymous Coward · · Score: 3, Insightful

    What on earth? This article is tripe unfit for anyone but managers. He's put new buzzwords on the things he's describing here, but not one of them is actually new.

    First off, the "rich internet application" model he harps on is at this point about ten years old, since CGI programming first appeared. It hasn't changed that much since then. We figured out the idioms and patterns to make that work very quickly, and we've been using them since then. The only new development here is the "on rails" type stuff-- but that is nothing more, or less than the same model as all CGI has used, only now it runs faster. It is an optimization. Not anything new.

    Second off, what the hell is a "composite application"? Seriously? It sounds like he's just describing an application which embeds a client server model. Well lah de frickin dah. This is not new, this is not at ALL linked to "java and .net", and . We have some new and better tools for RPC-based programming, what with WDSL or WSDL or whatever and all these other new acronyms, but we're still doing the exact same thing in the exact same way that we were doing in the 80s with CORBA and Distributed Objects.

    If when this guy says "recent" he means "the last 20 years", then yes, that is a good coverage of the improvements in programming we have had since 1980. But since he seems to mean things a bit more recent than that, it looks like he's just playing the old analyst game of putting a new name on an old concept and pretending it's the most important thing ever. Unfortunately, giving something a buzzword isn't the same thing as inventing it.

  21. Re:Maybe im missing something but... by Brandybuck · · Score: 2, Insightful

    It's not a programming model, it's a delivery model. As near as I can make out they're just web apps that rudely offload processing onto the client. The actual programming model stays the same whether it's a desktop application, webapp or RIA.

    --
    Don't blame me, I didn't vote for either of them!
  22. Functional Programming: Haskell by Paul+Johnson · · Score: 4, Interesting
    See Haskell.

    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.

    --
    You are lost in a twisty maze of little standards, all different.
  23. Good Design by Tiger4 · · Score: 5, Insightful
    never goes out of fashion.

    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...

    --
    Behold, this dreamer cometh. Come now, and let us slay him... and we shall see what will become of his dreams.
    1. Re:Good Design by Tiger4 · · Score: 2, Interesting
      "building one to throw away" is actually a worthwhile process

      I can agree with this, as long as you actually do throw it away once the learning process is done. I realize you said this yourself, but it bears repeating. Too many people are afraid to "throw away all that effort" (translation - don't make me think about it again, or don't make me pay for it again) and want to reuse a prototype as production. It takes a lot to talk them out of it.

      A good development plan can tolerate a learning curve to get the job done right. A bad development plan is just trying to push some crap out the door, hopefully AFTER it stops stinking (but that isn't a requirement).

      I personally worked a hw/sw development where we did build a prototype just to learn the real problem. Cost about $1.5M. We learned a lot and sent it off to graceful retirement, then built two full production designs for about $3M each. They worked great, even got shown on the History Channel (for about 3 seconds :-) ) Sure enough, management and the customer came back and asked how we could reuse the prototype. Threw another $100k at it for upgrades and never did get matching performance. It was like trying to get an old VW Beetle to upgrade to a Porsche 911 or 959. They just couldn't let a good decison that "wastes" money go.

      --
      Behold, this dreamer cometh. Come now, and let us slay him... and we shall see what will become of his dreams.
  24. We need a way to avoid duplicating work by starseeker · · Score: 3, Insightful

    To my mind what we need is not more models, but some FINAL model - i.e. a way to impliment programming logic in such a way that it will never need to be implimented again.

    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.

    --
    "I object to doing things that computers can do." -- Olin Shivers, lispers.org
    1. Re:We need a way to avoid duplicating work by Coryoth · · Score: 3, Informative

      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.

      That already exists, and the specification is indeed amenable to proof tools (several specification languages use HOL as their proof assistant even!). Check out B-method, HasCASL, SPARK, Extended ML, or even Z and VDM. There are tools like Perfect Developer. There are specification extensions to Java like JML that support extended static checking and proof via other tools.

      Uptake has been slow, and the tools associated with this stuff are still maturing (despite the fact that formal specification is a relatively old field - tracing it's way back to Djikstra and Hoare in the late 60's). Doing specification properly tends to require a little more math background, and does take some work. More importantly, for a great many projects, it simply isn't suitable. There is no magic process you can follow that makes everything work, and there is no "final" programming model. There are whatever mix of techniques and models suit the project at hand. Good developers are ones who know lots of models and techniques and adapt them to best fit the problems at hand.

      That said, specification is sorely underrated and underused as a programming technique. Too few people are well acquainted with it, and almost all the complaints that often get raised are based on myths and misnomers. It's not right for everything, but there are plenty of places where perhaps it could and should be used. Knowing how to do proper formal specification is simply another weapon in a good developers arsenal, and I wish more people spent the little extra time required to learn something about it.

      Jedidiah.

    2. Re:We need a way to avoid duplicating work by Coryoth · · Score: 2, Interesting

      Oh, don't get me wrong, I'm not arguing against formal methods (click the link in my sig and read my journal if you don't believe me). I'm just trying to point out that formal methods are not a solution to everything. They're great, and a very powerful tool to have on hand. I'm just trying to argue that they can and should be used where appropriate rather than as a "fix everything" hammer.

      Formal method advocates (and I am one!) need to realise that claiming formal methods as the ultimate solution is actually counterproductive. I would suggest you'll find far more converts by simply arguing that formal methods and formal specification is a faulous tool that developers ought to learn for those projects that happen to need or benefit from it. Once people actually learn a bit about it they'll see how many projects could benefit from some level of formal specification that aren't currently using it.

      "Formal methods aren't right for everything, but if you're a serious software engineer you owe it to yourself to learn how to use them for when you strike a project that can benefit"

      is a much better tack to take IMHO.

      Jedidiah.

  25. Re:This is the missing model. by orderb13 · · Score: 2, Insightful

    Sounds like the mindset of the place I used to work. It went something like this.

    "Hey! If we write a whole bunch of spaghetti code that only we can read, and that breaks a lot, then people will see us doing stuff all the time and we will have job security."

    The sad part is that it seems to have worked in that company instead of them getting fired for incompetence.

  26. Re:Did you understand all that? by javaxman · · Score: 4, Insightful
    Is it just me or is this guy speaking English? I'm not a web programmer but geez...that article seems like a steaming pile of drivel.

    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.

  27. Continuations by Masa · · Score: 3, Insightful

    Functional programming and continuations. One present day example is the UnCommon Web, which is a web application framework implemented with continuations.

  28. Re:Maybe im missing something but... by wrook · · Score: 3, Insightful

    I totally agree with you. I won't get into details about why I think the FA was referring to the latter (or even better -- how naive programmers don't even know the difference). Instead, I will mention two ideas that I think will keep nibbling on the edge of expanding our understanding of programming.

    1) Generative programming. OOD is a relative good technique for representing the design of an a program. Especially combined with some of the recent (in the last 15 years, say) understanding of OO design patterns. However, OOP does not allow effective reuse of code without compromising the flexibility of the design. Enter generative programming. Essentially you write computer programs that can generate the code you need in different circumstances. A simple example of generative programming is using C++ templates to generate a sorting algorithm for various different types of objects.

    2) I know some work is being done in this next area, but I don't know what it's commonly called. Basically allowing the programmer to manipulate the code based on the AST using a refactoring browser. This is essentially a literate programming technique. The "source code" is merely the output of the program that the programmer can use to read the program. However, all interaction with the code is done using a refactoring browser.

    So why do I think these are new programming techniques rather than just technological gimmicks? First, I think it is important to distinguish between design techniques (such as design patterns, or OOD) and programming techniques. Programming techniques are how we use technical tools to solve our problems (e.g., using a virtual function table to give us polymorphism).

    I would like to also make a distinction between programming techniques and technical tools. For instance, a class library is merely a technical tool. It might reduce my work, but it doesn't give me flexibility to use a language to express different ideas than are in the library. Using templates (or generics) is a programming technique that allows me to do some generative programming (i.e. represent my ideas in a more efficient form), while an "event" in C# is merely a tool that saves me from having to implement the observer pattern.

    One can see that a language designed around generative programming ideas, as well as a language that is designed to be manipulated using a refactoring browser can lead to a difference in the way I think about programming. It will change the way I communicate with the computer and my fellow programmers. RIA appears to me to be just a set of tools that might save me time. But perhaps I just don't understand what the FA was talking about.

  29. DP by SimHacker · · Score: 2, Insightful
    Declarative Programming, not Data Processing!

    -Don

    --
    Take a look and feel free: http://www.PieMenu.com
    1. Re:DP by glwtta · · Score: 2, Funny
      Declarative Programming, not Data Processing!

      Boy I was way off, then...

      --
      sic transit gloria mundi
  30. The best web dev framework you've never heard of by frenetic3 · · Score: 2, Insightful
    Well, for web development (God, do I now have to call this "RIA development"?) I found a diamond in the rough.

    It turns out there's this Python-based application server/templating language called SkunkWeb (http://www.skunkweb.org/) which seems to be the Holy Grail for me of, well, a Python-based web framework that doesn't completely suck (Okay, I know 1995 and CGI was awesome and everything, but no one should be writing "print '<html><head>'..." statements within Python code to make web pages, and don't get me started on Zope.) And no, I'm not affiliated with the project or its developers.

    I don't know about Ruby/Ruby on Rails, but I'd rather write in Python which, to me, has a more accessible syntax and a truly badass standard library. And doesn't make you want to jump blindfolded off of tall buildings.

    Skunkweb lets you combine the best of Python and PHP -- you create real Python classes to do the heavy lifting/DB accesses/app logic (and you can unit test those separately) without the PHP spaghetti code mess, and then you use Skunkweb's refreshingly sane blend-of-HTML-and-Python template language (contrived example -- need a list of usernames? It's this easy)
    <:import foo:>
    <table>
        <:for `foo.Users.getSome()` u:>
            <tr><td><:val `u.username`:></td></tr>
        <:/for:>
    </table>
    to tie it all together. The win is that this way you can separate logic (standalone Python modules) from presentation (templated HTML/Python) in a much cleaner manner than other web development frameworks.

    In addition, it was built from the ground up for scalability (ok, the application server itself is probably slower than Apache/PHP, but I don't notice the difference, and you can use psyco or other methods to speed things up) and has caching and db connection pooling and other performance-oriented features built in.

    I've been doing web development for nearly a decade, and Skunkweb has recently been my best-kept secret and a big competitive advantage. It's at the core of two companies I'm starting (one of which is a comprehensive online SAT prep course and is already profitable, the other which is earlier stage but angel-funded) It lends itself to clean and quick development and if it didn't have the stupid name (good luck convincing your boss to bet the farm on something with "skunk" in the name) it would have taken over the world by now.

    Anyway, you heard it here first, folks. If anyone else out there is using Skunk, drop me a line (houston at mit.edu) because it would be nice to start a little community.

    -fren
    --
    "Where are we going, and why am I in this handbasket?"
  31. It's not the model, but the one who uses it. by tarzeau · · Score: 3, Insightful
    That counts.

    Let's have a look at programming languages http://www.linuks.mine.nu/gnustep/langs.txt

    And an excerpt from a book (I can find you the title and ISBN if you want): Although both Objective-C and C++ derive from C, C++ is a systems-level language, whereas Objective-C is an applications-level language. The distinction can be summarized by saying that C++ was designed with program efficiency in mind, while Objective-C is geared more toward programmer efficiency. The difference is substantial--C++ is driven by a philosophy of efficiency and compatibility with existing C which, while necessary for a low-level language, proves quite restrictive in other contexts.

    And now, the almighty Allen-Booze study: Quote of the Booz-Allen Study

    * took 100+ senior programmers and trained them on NeXTstep, then asked them to write the same app on both NeXT and their previous system.
    * First application written was written 2 - 5 times faster.
    * Savings were 90%
    * 83% less lines of code in the NEXTstep version
    * 82% said NeXTstep was better in ALL categories
    * It isn't faster to code on NeXTstep; you just have to write less of it. The revolution is "getting rid of software".

    more about all this stuff, here: http://livecd.gnustep.org/

    --
    Windoze not found: (C)heer, (P)arty or (D)ance
  32. Afraid of parenthesis? Stay away from XML! by SimHacker · · Score: 3, Funny
    If you're afraid of parenthesis, then you'd better not use XML! It has TWICE as many parens as Lisp. You should get a job flipping burgers or something, instead.

    -Don

    --
    Take a look and feel free: http://www.PieMenu.com
    1. Re:Afraid of parenthesis? Stay away from XML! by mrchaotica · · Score: 4, Informative
      It just is.

      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
      (((((this)))))
      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!
      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    2. Re:Afraid of parenthesis? Stay away from XML! by zarr · · Score: 2, Interesting
      "XML isn't a programming language?"

      Some very sick people disagree...

    3. Re:Afraid of parenthesis? Stay away from XML! by justine_avalanche · · Score: 2, Insightful

      hold on, you're saying that reading:

              <1><2><3><4><5>this</5></4></3></2></1>

      is easier than reading:

              (((((this)))))

      ??
      I'd rather read the lisp, there's just one thing to read: 'this' whereas the xml has all those numbers, and they have to match, and they have to be in order, what matters 'this' is now buried and do not stand out whatsoever; what the?

      Sure, I don't want to count parenthesis, that is why the editor takes care of it; a tool to do a boring repetitive task, nothing new here.
      Also, not unlike Python, you somewhat need to indent your lisp code to make it readable (correct in python). It's really not unlike xml, pretty unreadable if not indented properly. So all in all, the parenthesis issue is really not worth getting scared of, and is usually bypassed after a day or two.

    4. Re:Afraid of parenthesis? Stay away from XML! by SimHacker · · Score: 2, Informative
      Your score is zero out of two.

      1) Lisp is a data format, as the previous poster pointed out. Shame on you for missing one of the most important points about Lisp.

      2) XML is a data format, which is used for many different programming languages. Shame on you for missing one of the most important points about XML.

      Even if you didn't score zero out of two, what is it about XML's angled brackets that make it ok to use twice as many of them, than Lisp's parenthesis? Is it the smooth curves of the Lisp parens that you object to? Or is it the fact that XML has twice as many angled brackets, that makes XML ok? Or do you have a better reason for your fear of parenthesis?

      Another point: Your "(((((this)))))" example is a straw man argument. Lisp programs use white space and indentation to make the structure clear, just like any other programming language.

      Please show me how you can express an 5-deep nested array in any other language, without using some kind of parens, or several lines of imparitive code like "a=new Array(); b=new Array(); c=new Array(); d=new Array(); e=new Array(); e.append("foo"); d.append(e); c.append(d); b.append(c); a.append(b)". (That imparitive approach uses 20 parens, instead of just 10!)

      -Don

      --
      Take a look and feel free: http://www.PieMenu.com
    5. Re:Afraid of parenthesis? Stay away from XML! by mrchaotica · · Score: 4, Interesting
      Here's why. Take this LISP code example:

      )

      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.
      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    6. Re:Afraid of parenthesis? Stay away from XML! by Tiny+Elvis · · Score: 2, Insightful


          <tag2>
              some data
          </tag1>
      </tag2> ; OOPS

      (tag1 (tag2 some data))

      I'll take the second one thanks. My editor can show me which closing paren corresponds to which opening one.

  33. RIA is not a programming model by ThinkTiM · · Score: 2, Insightful

    RIA is more of a type of architectural pattern...it is definately not a programming model like modular programming, object oriented programming, etc... Although I guess "programming model" could mean just about anything. The author of the article should not have mixed something very specific ("framework") with something very general ("programming model").

  34. Author discounts Java by throbbingbrain.com · · Score: 4, Insightful
    Java doesn't cut it, primarily for [highly interactive user experiences] reasons
    Java will do everything the author wants but he completely discounts it because of some poorly coded Swing applet that crashed his 486 PC. Java will provide any user experience that a developer is capable of creating.

    1. Re:Author discounts Java by SamSeaborn · · Score: 2, Informative
      Mod parent up -- he's right!


      Java applets are ideal for RIA. Swing and Java2D provide everything a developer needs to make a world-class GUI; and technologies like Thinlet have lots of potential too.


      But a JMS server on the back end and you have an ASYNCHRONOUS rich-internet application -- which is unheard of in other technologies like Flash and even Flex.


      People say "Java Applets are slow" and that may have been true 5 years ago, but machines are much faster now, and everyone I know have at least Java 1.4 installed on their PC.


      The ideal technology for RIA is Java.


      Sam

    2. Re:Author discounts Java by owlstead · · Score: 2, Insightful

      Except the one that the user is actually used to: native widgets. SWT is the way to go, not swing. Swing will always be the emulation of the real thing. Still Java, but it might take some time for the GUI (toolkit) developers to realize this. Test Azureus (bittorrent client) and Eclipse (really good, free Java IDE) to get an idea. On Java 1.5 of course, any other Java runtime is (or, shoudl be ) history.

  35. Re:Duplicating work may be perpertually cheaper by starseeker · · Score: 2, Insightful

    That's why I'm advocating a formal approach - done correctly, the idea would be that you COULD NOT SPECIFY a problem properly without giving the database the ability to determine whether it has been done or not. You still need intelligent people to specify the requirements, but the idea would be that once you DO fully specify them it would be immediately clear what exists, courtesy of the searchable central archive.

    That's one of the problems that needs to be attacked - too many problems have been solved only in old code, or an obscure library, or only in one language. We need to make programming solutions both general and searchable, which requires a rigorous system.

    Now I agree that it might sometimes be faster to just code the darn thing than learn to use such a system (probably quite often, really), BUT. Once learned, it would make all future tasks both easier and FAR more robust.

    It's the same old problem - it takes effort to learn an app/language/system, and people will always take the shortest path, generally speaking. What I'm saying is that we should use organization, education in schools/college, and formal methods to make a system so powerful and robust it will be wasteful and expensive to use anything ELSE. Do it Right once and build off of it. Most of the work in an application design is designing the solution - most of the pieces, logically speaking, should already exist. So once you know WHAT you want (I know, that can change, but if you're going to do it you've got to have some idea) the actual DOING of it should reuse proven, solid parts. Creating that system will be really, really hard but would allow us to build much more powerful software - think about it as using steel beams and architects to create a skyscraper instead of knocking together a wood hut to keep the rain off. The skyscraper requires a heck of a lot more supporting industry and design, but look at what it achieves.

    --
    "I object to doing things that computers can do." -- Olin Shivers, lispers.org
  36. Re:funny AND interesting, but yeah Smalltalk. by Atzanteol · · Score: 2, Insightful

    I started on BASIC, then learned PASCAL. Moved on to C, then C++. At some point I did scheme, Java, korn shell scripting, bash scripting, Perl, PHP, jsp, javascript, etc. Many of those languages are not alike.

    This is not about similarity. This is about an *aweful* syntax. Just plain bad IMHO.

    --
    "Ignorance more frequently begets confidence than does knowledge"

    - Charles Darwin
  37. Erlang by DavidNWelton · · Score: 2, Interesting

    I used Erlang professionally some, and liked it, but I have some doubts as well. It did not make me 10 times more productive, nor my code error free. It was not quite as good as a "scripting language" in terms of productivity, I felt, although it runs quite quickly, and like the concurrency model a lot.

    In any case, I was left with a feeling of "yeah, I like this and would use it again, but it's not something that is going to wipe the floor with older models".

    Also, I have some doubts as to how much FP "Scales Down" in the sense that it initially confuses people who are used to "normal" languages. I think perhaps FP might be more successful if someone were to take a more bottom up approach - let it "escape from the ivory tower". Languages like Erlang are doing this already, and of course people will be able to provide links to this or that Haskell or ML system used commercially, but to really make inroads, you've got to bridge the gap...

    Just some musings.

  38. PLOP by lheal · · Score: 3, Interesting

    I'm pretty sure it will never be the rage, but I like Programming Language Oriented Programming for difficult problems that don't seem doable in C/++ or something similar.

    Most programs can be written practally in most languages, since all you really need is "if", "decrement" and "goto". Some problems aren't a good fit for a given language. That's why there's more than one.

    Any program that breaks its problem into chunks is in effect creating its own mini-language. Whether you call it Abstact Data Typing or Object Orientation or Functional Programming or even Top Down Design, what it comes down to is dividing the problem into manageable chunks and working with those chunks until done.

    I wish all CS students were taught from day one, or maybe day fifteen, how to create their own programming language. Usually you have to take a compilers course to get that.

    Creating a new language is not that hard. It gets a bad rap because people think they have to write a backend for a given architecture, but writing the backend to generate C++ or some other HLL is just as good, since they've already done the heavy lifting and you can automate the compile train with your favorite maker.

    --
    Raise your children as if you were teaching them to raise your grandchildren, because you are.
    1. Re:PLOP by LordNite · · Score: 2, Informative

      You should look at functional languages like LISP and Scheme for good examples of this. LISP is a simple languages that is used to create small languages to solve specific problems. The programmer uses LISP as a meta-language.

      --
      If it looks like a duck, and quacks like a duck, it must be a duck.
  39. The Next Programming Model I Want by ZorbaTHut · · Score: 4, Informative

    nobody seems to be interested in developing.

    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.

    --
    Breaking Into the Industry - A development log about starting a game studio.
    1. Re:The Next Programming Model I Want by kraut · · Score: 2, Informative

      I'd love to help you out, but you haven't actually told us what you want improved in C++. Not garbage collection, so D (http://www.digitalmars.com/d/) is probably not interesting to you.

      But seriously, I find modern C++ a pretty amazing language, and you can get enormous benefits from libraries such as boost (http://www.boost.org/

      --
      no taxation without representation!
    2. Re:The Next Programming Model I Want by uid8472 · · Score: 2, Informative

      You might be interested in Cyclone, a safe variant of C that's influenced by ML and attempts to retain as much of the low-level control of C as it can; it uses what's called region-based memory mangement, which in theory provides useful alternatives to regular GC. (I haven't actually tried to write anything in it, though, so I can't say how practical / easy to use that kind of thing is.) MLKit does something similar, I think.

  40. Domain Specfic Languages/Language Oriented Prgmng by MilesParker · · Score: 3, Interesting

    The winner is...
    I think DSLs are going to radically change the way that people code. DSLs potentially provide the meta-prgramming ccapabilities of LISP with the transparency and idiot-proofing of a language like Java. We may even see a hierarchy of software engineeringh develop, with one type of hihg-level coder deveoping DSLs and others able to use these languages easily within their own areas of expertise. For more, check the following links:

    http://www.jetbrains.com/mps//
    http://www.martinfowler.com/articles/languageWorkb ench.html
    http://intentsoft.com/

  41. Good Design - but sometimes it emerges... by H0p313ss · · Score: 2, Interesting

    Good Design (aka Big Design Up Front) is very effective when the problem domain is well understood or there exist a reasonable number of known solutions to choose from. Text editing is a good example of this, people have been writing text editors for over 40 years so there shouldn't be too many surprises and there are lots of examples. (Telephone signal exchange is similar...) For these problems a very formal approach should work well and result in a well documented and well designed system.

    Other problems, usually in newer fields of endeavor, lend themselves to more dynamic software creation strategies with less stringent design phases such as hacking, exploratory programming, prototyping and good old XP. It's very hard to write requirements, functional specifications or even UML diagrams for a system that does things nobody has even dreamed about.

    In an ideal world both approaches will result in a good design. What started as a hack can turn into a prototype and evolve into a design, the trick is to document it all... but that would require infinite time and infinite resources. This might occur in large open source projects where the user and development communities are large enough to represent statistical universes but in the corporate world where the bottom line drives everything and therefore time and resources are limited shortcuts are taken. Sometimes this results in brilliantly designed but undocumented applications, but just as often the result is a giant ball of mud that will scare the willies out of the first intern or student hired to maintain code.

    --
    XML is a known as a key material required to create SMD: Software of Mass Destruction
  42. What I like about these new programming models.... by threaded · · Score: 2, Insightful

    What I like about these new programming models such as Ruby, Ruby on Rails etc. etc. is how much like Lisp they are.

    If you've never done a real programming course you've never been taught Lisp...

    Yippee, less bluffers in the pool, more fish for those who can hunt.

  43. Re:funny AND interesting, but yeah Smalltalk. by SimHacker · · Score: 2, Insightful
    Is it about "*aweful*" syntax, or awful spelling? Or are you full of awe?

    What's wrong with parenthesis? If you hate parenthesis, then do you hate XML twice as much as Lisp?

    Lisp syntax is excellent because it's simple and consistent, and that's the reason Lisp macros are so powerful. Perl syntax is absolutely awful, and that's the reason Perl will never have macros like Lisp.

    -Don

    --
    Take a look and feel free: http://www.PieMenu.com
  44. Re:Multi-Core by TeknoHog · · Score: 2, Interesting
    What we need is a parallel programming language that makes it easy and natural to take advantage of multi-core processors.

    These have been around for ages, but mainly for scientific computing. For example Fortran 90 and later versions, but there are also variants of C++ and others. Usually they take advantage of obvious parallelity in the data, for example matrix multiplication, and make the processors handle the separate bits without bothering the programmer with threads etc. It's also the kind of computation that takes place in graphics cards with their multiple pipelines.

    I don't see any easy way to do the same for general programming. For example, separate threads for user interface and the actual processing is a good idea, but a very high-level one, not the kind of thing that would be done automatically by a compiler.

    I hope that the existing parallel programming languages would be more widely used for the computationally intensive parts. It seems so silly that home computers have focused on pushing single processor performance for all this time, while 'real computer science' has been reaping the benefits of parallel processing for years.

    --
    Escher was the first MC and Giger invented the HR department.
  45. Smalltalk still is the silver bullet by DirkWessels · · Score: 4, Informative

    All improvements I have seen the last 10 years in programming language have already been done in Smalltalk from the beginning.
    That is because everything is an object, even the programming constructs (like classes which are objects, and if/then which are called #ifTrue:ifFalse).

    The future languages might even be more dynamic, and include Lisp (or Hascell) like constructions that solve problems by defining the answer (functional and logic programming).
    Which is in the smalltalk-syntax: [i][:x| x*x=5.0] SolveFor: #x.[/i]


    While smalltalk (ST) is advanced, it also encounters the problem of managing 60,000 classes (or more). And everyone can see that simply grouping the classes in seperate modules does not help, which is done in Java. Even the Object-class should be redefinable, preferably on local level. There are some programs on top of ST that help a bit, but I would personnaly like to see it a bit better
    Another problem is that there are so many interfaces to different storages and systems. So we need C-interfaces, C++-interfaces, SQL-interfaces, XML-interfaces... etc..

    So any future programming model should have:
    - objects everywhere. (ST)
    - Be very simple and compact. (ST)
    - Easy to use and understand. (ST)
    - allow scripting (or runtime compilation) possibilities (ST)
    - easy modularizing of classes, methods and objects.
    - Allow distributed data and execution. (ST)
    - Allow easy interfaces to different storages and systems.
    - Integrate easily in the system

    Any future Object-system will be graphical and allow different programming models (logical, functional, procedural, storage, user-interface) to be build in graphical building-blocks..
    Already we can see some of this happening in:
    * XML-tools (data-definitions and interfacing),
    * visual-age (procedural program definition, ST again).
    * net-beans / delphi /visual-basic (user-interface) (skipped many ST examples)
    * web-tools (ruby-on-rails (ruby is based on ST), seaside (build in ST))

  46. Re:Last decade called... by TheRaven64 · · Score: 2, Informative

    I love the way he wants to get away from decade old programming models to Ruby on Rails, which uses the same programming model found in NeXT's WebObjects in...1995.

    --
    I am TheRaven on Soylent News
  47. Re:The best web dev framework you've never heard o by shmlco · · Score: 2, Informative
    Wow. Calling out to components and embedding tags with code. You're right, the win is that this way you can separate logic from presentation in a much cleaner manner than other web development frameworks.

    Well, other than some, that is...

    <cfinvoke component="foo.Users" method="getSome" returnvariable="q" />
    <table>
    <cfoutput query="q">
    <tr><td>#username#</td></tr>
    </cfoutput>
    </table>

    ColdFusion's only been doing this sort of thing for years now...

    --
    Any sect, cult, or religion will legislate its creed into law if it acquires the political power to do so.
  48. Django (Python) by gwjc · · Score: 2, Interesting

    I'd include Python-"on-rails"; Django.. it's even been /.'d before:
    http://it.slashdot.org/article.pl?sid=05/08/02/005 1258&from=rss

  49. Re:The best web dev framework you've never heard o by sammy+baby · · Score: 3, Interesting
    So, in that model, you have an abstracted version of your database logic mixed in with the presentation stuff. Meh, pass. RoR defers the "which database objects will I need on this page?" question to the controller. This allows you to put only the barest minimum of stuff in the actual template for the web page: just exactly enough to get the presentation right:
    <table>
    <%= render_collection_of_partials, "user_list", @users %>
    </table>
    In your users_controller.rb file:
    def list
    @users = Users.find_all
    end
    And in a seperate file called _user_list.rhtml:
    <tr><td><%=h user_list["username"] %></tr></td>
    Of course, if you prefer, you can iterate over the list right in the page, but if you're doing more than a single line or have some hairy presentation html in there, you have the option of just dumping it in another file, as demonstrated.
  50. MVC? by 5n3ak3rp1mp · · Score: 2, Insightful

    I think the most promising thick-client app development model is the Model-View-Controller paradigm, as seen in such well-designed app frameworks as Cocoa for OS X, and of course Ruby on Rails, and although I see Skunkworks improving the "typical" drudgery of web-app dev, I would wonder what it provides in the way of code management when it comes time to test your controller without worrying about how the view renders it or the model stores it.

    And I know this is a personal preference and all, but... Python's significant whitespace? Yuck... I hope you don't copy/paste much, you might forget a tab somewhere (not to mention, copying from webpages is an adventure in itself...) To me this is like drinking cider instead of beer. Why would anyone consider such a thing worthwhile? Just to avoid some begin/ends or curly braces?

    Python does have a more complete library but I am pretty sure Ruby and friends are catching up (and of course, no real word on Parrot yet...) Ruby also just seems to do the whole object-oriented thing nicer (abbreviated getter/setters, everything is an object, no self-referential hacks or whatever...)

  51. Our Programming Model by Soulflame_2 · · Score: 2, Funny

    There isn't enough time to do it right the first time, but there's time to do it four or five times.

  52. Re:The best web dev framework you've never heard o by owlstead · · Score: 2, Informative

    Or you can define your tags in Java (JSP), or use PHP, ASP ...

  53. The Next New Programming Model is very logical... by Znord · · Score: 2, Insightful

    Stop me when you see the pattern. The problem is getting tougher.

    We abstracted out the machine-dependent opcode models and unintuitive math calculations.
    We abstracted out stack locations and global locations.
    We abstracted out dynamic memory and filesystems.
    We abstracted out file devices and (UNIX) device/network access.
    We abstracted out physical memory limits and actual addresses.
    We abstracted out OS identity and permissions.
    We abstracted out virtual machine vs. real machine.

    In modern times ('90s), recently, we've...

    We've abstracted out location/platform of viewer for a document and GUI-widget scripts
    We've re-re-re-abstracted out implementation platforms... because standards that are in place are still many and they suck.
    We've abstracted (some languages) automated memory management one level better.. dynamically.
    We've half-abstracted (some languages) GUI-setup/GUI-widget and GUI-operations code

    Umm. We're starting to pick low-hanging fruit if you ask me. We will not proceed farther until we address what we sweat over working on:

    We have not abstracted out automated API-use and correct use
    We have not abstracted out automated parallelization and network-separated splitting of tasks
    We have not (fully) abstracted out GUI/browser-setup code from widget-simulation and user-operation code [interdependencies are not automatically handled]

    And of course....

    We have not abstracted out everything not necessary to accurately determine the minimum amount needed to convey a functional output from input.

    Until 90% of the programming is essentially a library of "compiler hints" that get some code to work in the proper balance of optimisation, we have no choice but to spew an endless surf of compiler-required arbitrary drool-proof-paper decisions that we can barely keep in our skulls.

    In sum.. we need to automate the hard parts of programming without errors. That's all. (Hint: we're not done yet.)

    --
    Nietzsche is dead - God
  54. Beyond Aspect Orientation by juanescalante · · Score: 3, Informative

    I once read a paper written by Cristina Videira Lopes, a pioneer of aspect oriented programming, in it she stated that AOP is a significant breakthroug, but that the next step is to include elements of natural language in programming languages.

    She says that natural language is not suited to write computer programs, but it has powerful elements that can be useful in transferring ideas more closely to the way we think. An example of such elements are temporal references such as before and after.

    You can read the abstract to one of her papers here. Very interesting stuff.

  55. Better runtime environments and IDE's by owlstead · · Score: 3, Insightful

    These will be more important than any programming language. The way Java or .NET handle components should be an eye opener. What you want is code you can control, what does what you expect it to do.

    On the runtime part:
    - plugins (see Eclipse and OSGi technology)
    - assemblies/libraries (see .NET framework)
    - VM support (garbage collection, overflow handling, exception handling, bounds checking etc.)
    - runtime information (reflection)
    - supporting components (application servers, message services)

    On the IDE part:
    - parsing editors (see Eclipse)
    - code analyzers (PMD)
    - semantic links from code to design tools (needs a parsing editor to function best)
    - unit testing

    I see a mayor shift towards runtime technologies coming up ahead. I can see more flexibility coming up in how programs are run and objects are used. Compilers are already running in the background to use Java both as script and as compile time language, for instance. Java may be to strict on some issues however.

    For programs, components, OO and the imperative model will probably be here to stay. Other languages will be used for their respective domains, but the language wars seem to be over for now (as each programming language looks more and more like its siblings). Lets focus on the runtime and supportive technologies. And getting the things running reliably, for crying out loud.

    I don't think using multiple languages that try to accomplish the same thing is such a good idea (see .NET C++, C#, VB7 and J#). You end up learning all of them (see MSDN). Mixing with languages that use other programming paradigms could be usefull though.

    And yes, this is also an opinion piece, as is the parent.

  56. easy by geekoid · · Score: 2, Funny

    BEPL

    --
    The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
  57. Re:Lisp is the "highest language"? by jericho4.0 · · Score: 2, Insightful
    Lisp will probably always have this place, just like Godel's Therom will always have it's place in mathamatics, for the fact that they are so fundemental. Lisp is a meta-language, a way of describing algorithims. Metaprogramming is not a fancy trick in Lisp, but how you get it done.

    With other languages, a compiler 'parses' your code into an Abstract syntax tree, in Lisp, your code is that tree.

    --
    "A language that doesn't affect the way you think about programming, is not worth knowing" - Alan Perlis
  58. Design first, language second by cscalfani · · Score: 2, Interesting

    Language developers need to decide what well structured programs look like. (When I say structured, I don't mean "Structured Programming.")

    Once the rules for how to structure logic has been determined (to the best of ones ability) then a language that formalizes those constructs should be created.

    We have plenty of languages that are great for defining logic, but none for structuring it.

    So how do we do this? I suggest looking to the universe for answers.

    In the hardware world, there is no need for garbage collectors. The laws of the universe restrict hardware engineers and so they must decide which hardware device is going to exclusively own a resister or a capacitor.

    The reason for garbage collection is because of the unrestricted nature of the state-of-the-art languages. Any old object can point to any other object.

    If hardware was designed like software, then a circuit board plugged into you motherboard would share a resister or two with the circuit board on you hard drive. It wouldn't take a genius to see that this is a bad idea. But in software it's done all the time.

    There are many other such problems that garbage collection causes like breaking encapsulation, causing memory leaks (i.e. objects aren't collected because some object incorrectly is still referencing it), slowing down your program, indeterministic destruction of objects, etc.

    There are many other problems with programming that need to be solved, e.g. how to easily develop multithreaded programming without little or no extra coding. (I've personally developed such a model, one that also gives the developer the speed of manual allocation of objects with the automatic deallocation of a garbage collector with no extra CPU cycles wasted AND deterministic destruction of objects.)

    Also, imagine only needing a single collection class instead of dozens. (I've also achieved this.)

    With proper models, we can achieve such things.

    We need to reconsider everything to innovate. Nothing is sacred. Everything should be up for a redesign.

    Unfortunately, all we seem to do is evolve languages to add a special flavor of a loop construct.

  59. Pendulum by Tablizer · · Score: 2, Interesting

    I see a pattern of shifting back and forth between data-oriented techniques and behavior-oriented techniques. I personally prefer data-oriented techniques, and enjoy "collection-oriented programming" using concepts from the likes of relational and APL's step-children languages.

    OOP is perhaps the pennicle of behavior-oriented in that interfaces tend to be thought of as behaviors applies to things. It is about time we swing back to the data side for a while.

    I would also like to see more exploration of "separate meaning from presentation" such that syntax or views of logic can be customized to the developer and/or a particular need. Microsoft's CLR (or is it CRL?) is a baby step in that direction because it allows multiple syntaxes on top of more or less the same interpreter.

  60. missing acronyms by anomalous+cohort · · Score: 2, Informative

    With this topic, I expected discussions on such technologies as MDSD, MDA, or AOP yet there is no mention of these here. Does everyone here consider them to be DOA?