
Programming
I spend my time (recently) writing a mishmash of Python, C++, and Java. It’s interesting to switch back and forth.
What’s a good idea and what’s a bad (or dangerous) idea in computer language design? We’ve got a lot of candidates, and a lot of opinions.
I’ll list a few here, along with a few places where they show up. I’m not saying C macros are the same as, or even similar to, Lisp macros. Just trying to clarify the spectrum.
I’ve heard someone, at some point, say each one of the items below is a good idea / bad idea. Dangerous in the hands of a novice? Yes, but then so is any computer with a network connection.
- Preprocessors (C, C++)
- Macros (C, Lisp)
- Multiple Inheritance (C++, Smalltalk)
- Operator Overloading (C++, Python)
- Closures (Lisp, Haskell)
- Generics (Java, Ada)
- Template Metaprogramming (C++)
- Casts (C, C++)
- Strong or Weak Typing (Scala, Lisp, Python, ML)
- Fixed-Point Math (C# and COBOL)
- Fixed Integer Types vs. “Numbers” (C, Lisp, Python)
- Garbage Collection (Java, Lisp, ML)
- Manual Allocation / Deallocation (C, C++)
- Everything is an Object / Some Things are Primitives (Smalltalk, Java)
- Auto-(Un)Boxing (Java, C#)
- Indentation is Significant (Python)
- First-Order Functions (ML, Lisp)
- Lambdas (ML, Lisp, Python)
- Type Erasure (Java)
Did I leave out your favorite / most reviled language feature? Complain below. I included type erasure at the end of the list. Does anyone think this was a good idea for Java???

LISP macros rock, C macros suck. LISP macros are LISP, C macros are crazy preprocessor crap with line continuation characters. Just say no to preprocessors.
Generally the programming is dangerous in the hands of a novice. Each programmer must know what he/she is doing. Otherwise it is dangerous – not matter what language is used.
Strong or Weak Typing: All mentioned languages are strongly typed. You probably mean static or dynamic typing.
Plus, I do not see in which case Type Erasure is a good thing. When I see what weird things the Scala folks did to preserve the type information, it just gets ridiculous.
@Marek Lisp isnt strongly typed; its strongly untyped. Python is weakly typed. ML is strongly typed. Scala is strongly typed. I’m with you on erasure. I mean, WTF???