1. I think almost everyone using something like C or Pascal regularly already knows how to do a linked list, hash table, etc. It's standard first or second year computer science stuff.

    I think that C users often use arrays or linked lists more often than hash tables, because it's easier to do, but that doesn't mean they don't know how to use hash tables or that they're coming at the problem from an interesting angle :)

    I agree with John Eikenberry, about his ideas on restrictive programming languges. However, I've also had small bursts of creativity when programming closer to the metal in assembly, especially on RISC architectures.
      posted by Bob Ippolito at 11:38:42 AM on February 01, 2004  
  2. I think there's a distinction to be made between restrictions that meerly add tedium and those that add a challenge. A programming language like Path or Intercal or Brainf@#$ or assembly language forces you to deal with hard problems on a much simpler level, or in a different mode of thinking.

    Normally, programming in Perl or Python I just throw everything in a hash table and rejoice that I solved that part of the problem in 4 simple lines of code. In Java or C/C++ or whatever, I probably have a similar solution even though it'd be longer. If I have to do something in assembly, implementing, or even using a library implementation of a hash table is just too complicated. I _have to_ come up with something creative and small, perhaps even a bit sneaky and dirty. Something like Brainf&#$ breaks computation down into such tiny constituents that it requires a new way of thinking. Sure, implementing something iterative or even simple single recursion is pretty straightforward, but implementing something with multiple recursion like the Towers of Hanoi (which is trivial even in C) requires bending your brain a bit.

    Is it restrictive to use a language that enforces the use of type declarations? Probably, but that doesn't make it interesting, just tedious. Writing a DOS .com file in assembly such that it only consists of 7-bit clean printable ASCII characters? That's a Hard Problem(tm).

    I like the ESR comment about Lisp -- I think it's an important excercise for a good programmer to work in an unfamiliar and strange environment on occasion, even if it's just to work on simple problems. Nothing's quite like the utter horror I feel when I see someone looping over the rows of a SQL query in the host language, only to do more SELECTs inside the loop. My God man, haven't you ever heard of a JOIN?

    http://www.phong.org/bf/ - The aforementioned Brain$&% implementation of the Towers of Hanoi, a Path quine and a polyglot quine in Perl, Python and C/C++.
      posted by Tom Schumm at 12:14:54 PM on February 02, 2004  
  3. So it is Python is more restrictive than Pascal (and the like). Python has many features and libraries built-in and this invites a programmer to use them - if s/he is not a complete whacko, or an adventurer.

    So I fairly agree with that rescritive environments stimulate creativity.
      posted by Jiri Barton at 02:10:54 AM on February 03, 2004