Hacker News new | ask | show | jobs
by DonaldFisk 3178 days ago
My language of choice is Lisp. I'm also comfortable programming in C and Java, though I'm not really a fan of either of those languages.

C is a simple language, and I prefer simple languages to complex ones, as in my experience most complexity in computing is accidental, rather than essential. As a low level, portable, assembly language substitute, C is a reasonably good choice. As a high-level language, it leaves a lot to be desired: its lack of a garbage collector, weak type system, lack of safety, numerous gotchas, etc.

You cannot make a good language by starting with a bad one and just adding features. You first have to remove the features which made the language bad.

C++ is a derivative of C, and began life by adding object orientation. Then it continued to add features (references, templates, operator overloading, lambdas, etc.) without any attempt at cleaning up the language. So it's now an extremely complicated language, used for high-level programming, based on (and for the most part backwards compatible with) a language (C) unsuited for high-level programming for the reasons I just mentioned.

A better approach was taken with Java. The language is simple (albeit slowly becoming less so), strongly typed, and safe. The approach seems to have been to remove all the things that make C unsuitable as a high-level language, add a garbage collector, add a simple OO variant (Smalltalk--), and stop there. Complexity is buried inside libraries. Java also enforces the link between classes and files, so you know where to find stuff.