Say Something Nice About Every Language You’ve Used
December 8th, 2010
In Michael Easter’s recent post, I was struck by his comment that Guy Steele like all languages. Seems like a pretty chill way to live a programming career. So I wondered, do I like all languages? Can I say something nice about every language I’ve used? As the saying goes, “If you can’t say something nice, don’t say nothin’ at all.”
Let me give it a try in rough chronological order of the first time I used each language in anger:
- Pascal - Ouch. My memory is so fuzzy I can’t even think of something bad to say about it. So we’ll count “no comment” as nice and move along …
- C++ – Another toughy, but this time because my memory is so sharp. Hmmm. Uh. C++ has a really nice personality. Next.
- Matlab – Pretty cool array slicing notation. I don’t know if Python stole this from Matlab, but when I first learned Python I was like “Hey, this is Matlab!”
- Common Lisp – Generic functions and multiple dispatch are cool.
- Visual Basic 6 – Seemless integration with COM and built-in support for the observer pattern.
- C – As Linus has pointed out, you need almost no context to understand a random chunk of C code. It is what it is and nothing more.
- Java – It’s simple enough that really powerful, reliable tools can be built for it. If you change the signature of a method in Eclipse, you can feel confident that it actually worked. (unless you’re doing reflection…)
- Tcl – The entire language is expressed in 11 simple rules and it’s homoiconic. Once you accept that everything is a string, you’ll enter a zen-like trance and every atom of your being will vibrate in harmony with Tcl’s interpreter. Or something. Finally, whenever you write a quick test script, you get to name it “test.tcl”
- Python – Python taught me about list comprehensions and bound methods. It’s stupid, but I also always liked that you could multiply a string by a number to repeat it.
- Soar – Fast, rete-based pattern matching is cool. Everything that’s really easy in a procedural language is hard in Soar, but some things that are hard are easy.
- JavaScript – Taught me that objects are overrated and started my reptilian, OO brain down a brighter path.
- Ruby – I think blocks are a neat bit of syntactic sugar. I like that everything, including nil, is an object.
- Scala – Introduced me to implicit typing and opened my eyes to how much I actually have to type when I’m coding Java.
- Clojure – It’s fun, has a nice cross-platform VM, persistent data structures, a good concurrency story, and is apparently saving Lisp from itself.
Wow, I feel really great now.
Note that every one of these could have easily be extended with “even though”, “except for when” or “but sometimes”, but I resisted the urge, mostly.
Can you think of something nice to say?
c++ — its multiple inheritance isn’t the mess that folks think it is, and does a great job of handling AS-A (as opposed to IS-A) designs
Dave, we disagree on C++, but that made me laugh. Really liked both this and the etudes post; I’m looking forward to more.
No PHP? Never used or nothing nice to say? :)
Visual Basic: Can be used to create a simple GUI in a very short time.
C: Allows the developer to control everything that they want to control.
Java: It’s expressiveness lets little to be guessed about the programmer’s intentions.
Haskell: It provides a great model of dealing with processes in a a almost side effect free manner.
Lisp: It’s syntax is simple by having very few special symbols and characters.
Python: It allows for intuitive and useful scripts be written with trivial amount of work.
Ruby: Makes it easy to put your idea into code.
Assembly: Assumes nothing, and in the end, you are just dealing with bytes.
Javascript: So much easy control of what goes on in your browser.
Lua(PSP interpreter): You made it sooo easy to create a graphically interactive program.
Erlang: Tried and tested for the real world.
Matlab slicing is actually more similar to Perl or Puby than Python. It uses ranges as indices, whereas “:” in Python is just special syntax.
Delphi/Object-Pascal — Very powerful for GUI apps (back in the day!)
Java — My first language. Amazing stuff still happening on the JVM.
C++ — Templates still rock my world far more than modern generics.
C — Love the power and control, helps ensure that libraries are available for all my favourite languages. Created my first ever non-Swing GUI program using Win32 & C.
Python — Stupidly expressive. Taught me the power of first-class functions.
Ruby — Retardedly expressive, and Rails changed the way I thought about web development.
JavaScript — Getting more and more exciting as HTML5 gets closer to the line. Node taught me about async event-based servers.
Scala — The rightful heir to JVM blub. Hopefully. I was beginning to conceive of a better Java that only required type information at the interface level … a few months later, I found Scala.
Clojure — The first lisp I “got”. Taught me the power of a few simple constructs.
Lua — The first compiler and interpreter with source code I could actually mostly understand.
Go — A statically typed almost-Python that compiles to native code. Amazing. Beginning to love it.
Perl — Nothing better for processing text, was actually recently impressed by how much Moose improved things.
C# — WinForms beats the hell out of Win32. Another “better Java”.
PHP — Still my go-to guy when I want to build something “real” for the web.
> Roby – I think blocks are a neat bit of syntactic sugar. I like that everything, including nil, is an object.
I thought blocks weren’t objects?
LOL – this is very funny. My addition:
Haskell: “A programming Language for Geniuses”(Larry Wall). Made me realise I like compilation. ALL the neat features in other programming languages were implemented first in Haskell ;). If “the dude” were a programmer he would use Haskell.
PHP – Quick & easy for small simple hacks. Get’s the job done.
I can’t believe there are no comments!
I’ll just go with the languages I know… from most knowledgeable to least.
PHP – I definitely know the most about this language because it’s my favorite… and for good reasons. I know it’s somewhat frowned upon by a lot of gurus because it’s almost too easy to get the hang of… but to keep it short, I love its flexibility/quickness with types and that the vast majority of them require no initialization and/or casting – emphasis on multidimensional arrays.
Javascript – The ability to manipulate pretty much every element within a page through the DOM has made cross-browser support (cough IE) much easier.
C – My experience with C is limited to embedded systems/robotics… that said, I can’t imagine using another language for the task. It does the job and it does it well!
C++ – This is gonna be hard haha… I’ll just say its (extremely) vast array of libraries and usage throughout all kinds of applications really says something about its power.
Java – I’ve only used java for some basic DSP but I’ll say that netbeans is freaking sweet! I know netbeans isn’t java but let’s get real here… who writes java without netbeans? (Seriously though, I’m curious. Who and why?)
Matlab – Well, I’ve only used it for some class assignments but it is some seriously powerful stuff… and I’m sure I’ve only seen a fraction of what it can do. I’ve been thinking about integrating it with my data-driven web app some time in the future to give people more than just a 2D view of multidimensional data. I’m sure there’s other software out there that could do it but I’m sure they pale in comparison to matlab.
Visual Foxpro: Not reinvent the wheel
Commodore Basic – Taught me how to program
6502 Assembler – Taught me how to work with limited resources
Turbo Pascal – Gave me the ‘A ha’ momment wr Pointers
C – Economy of expression, a thing of beauty
VBA – Alt F11 Excel Magic
Perl – Power behind BBC Interactive Wimbledon magic
Python – Unit testing fitted as standard FTW
Nice. I did the same thing in http://www.rfc1149.net/blog/2010/12/09/something-nice-about-every-language-i-use/
I’m glad to see everyone’s getting in the spirit of the post. The C++ entry is mostly there to stir the pot. In fact, while I was sleeping I thought of something nice to say about it:
C++ – It’s Turing complete.
Cheers!
Forth. Here is an IDE disk driver:
: bsy 1f7 p@ 80 and if bsy ; then ;
: rdy 1f7 p@ 8 and if 1f0 a! 256 ; then rdy ;
: sector 1f3 a! swap p!+ /8 p!+ /8 p!+ /8 e0 or p!+ drop p!+ drop 4 * ;
: read 20 sector 256 for rdy insw next drop ;
: write bsy 30 sector 256 for rdy outsw next drop ;
( from http://www.colorforth.com )
Eiffel – I hear modern implementations don’t crash as often as they used to
python – I want to do more with this function.. And the decorator’s jazz band featuring the metaclass started playing… oh and so much more!
perl – Man I have to process all these files.. Handy perl reporting for duty!
sh (..csh, tcsh, bash) – Man, this is going to take forever.. oh, wait!
PHP – It’s like being spoiled by grandma!
LISP – Woa… I did not know I could do that with my computer!
C – It just makes perfect sense!
ASM – I see what you mean!
@Andy blocks are instances of the Proc object, so just like everything else they are an Object too.
AppleSoft BASIC – Easy to learn, easy to understand. Wrote a BBS in it.
Apple Pascal – Wizardry series. ‘Nuf said.
RealBASIC – Easy to target multiple platforms.
C – Pointers. Which are also the worst thing about it.
C++ – Inheritance: Is-A vs. Has-A
Java – The library, and GC.
Obj-C – Message-passing. And in 2.0, @property/@synthesize.
Forth — produces a very tiny executable.
BASIC–you get to build programs with it!
FORTRAN–you get to build programs with it!
COBOL–well…you get to build programs with it!
Pascal–you get to build programs with it!
C–you get to build programs with it!
C++–you get to build programs with it!
Smalltalk–best language ever, why make things any more complex? plus… you get to build programs with it!
Java–you get to build programs with it!
C#–you get to build programs with it!
Ruby–you get to build programs with it!
Python–you get to build programs with it!
In chronological order of me learning them:
Logo – more powerful than meets the eye, fun for pre-schoolers
Basic – gee, lots of built-in graphics keywords (that’s the nicest thing I can say…)
Pascal (the Borland flavour) – declaration syntax much saner than other mainstream languages, very easy to parse, and you get nice machine code nowadays
Pilot – uh, it’s very simple…
Assembly (6809) – well, you can’t get more powerful than that
C – everything is obvious when you look at it; no overloading flim-flam
Forth – very, very compact runtime, still unmatched by so-called “first tier” environments. Boots in a few kB. Sometimes I miss that a lot.
C++ – gee, you can express pretty much anything in that language, it’s so open-ended!
Visual Basic – I don’t have to use it anymore :) (seriously, I have nothing nicer to say about this monstrosity. And I tried really hard… I know I’m sort of transgressing the rules)
Assembly (68000) – this is nearly a high-level language… what a nice architecture!
Assembly (80×86) – hmmm…. well, at least segment registers are not really used in flat 32-bit mode. That’s the nicest thing I can say about this architecture…
Ada – GREAT error detection from the compiler
Bash & co – this is way more powerful than dos batch files; you can actually implement real logic in it. Pretty concise for simple scripts.
Tcl – the syntax is really minimalistic, thus easy to extend; this is almost like Lisp in some ways. Dead-simple integration with C libraries.
Perl – nice, I can do more complex scripts now.
Python – nice, I can do more complex scripts *and* I’m able to read them later. Also, this has got to be the closest you can get to pseudocode and still have something executable. Hm, I have to stop now, it’s really my favorite language, and I’ll just gush endlessly.
Java – well, all things considered, it’s a very solid language for industrial use; has a lot of the “what you see is what you get” properties of C, a VERY nice runtime library, and a straightforward runtime object model.
JavaScript – hm, it’s widely available?
C# – more or less the same thing as Java, except for the runtime library. It’s nice that it has more modern features (closures, the expression tree/LINQ stuff, etc) that Java is just playing catch up with.
Lisp / Clojure – wow, this language has all the amenities of other modern languages… the original implementation was THAT long ago?
I probably know a few more that elude me right now, but those are the ones I did at least one major piece of code with.
Hey, that’s cheating!
SML – when you eventually do get it to compile, it mostly does what you intended!
C: speed, simplicity, system prog.
Caml: high-level, good speed for such a high level language, genuine strong type safety, curry-howard.
Python: for scripting and quickly layed out things, nice syntax.
Perl: great for regexp base works.
Ada: I don’t say nothing at all
ColdFusion – Fast typing, fast processing, easy to learn, powerful, the first RAD environment, the first of real RIA, tag, OOP, procedural, Open Source (www.getrailo.org), lovely and helpful community.
Pascal: at the University in 1979, the compiler was much faster than the PL/1 compiler, which was a big deal when your edit/compile/run cycle consisted of submitting a card deck to the computer operator and then waiting for the output to come off the line printer.
Also: PL/1 had pointers.
Prolog – describe your program’s intention clearly – and you’re done! (and it helps you work out how to do it clearly . . .)
AppleScript: There’s a python module (AppScript) to replace it!
Delphi (Object Pascal) – Hard to write bad code. Love how any ordinal datatype (like bool) could be used as the index of an array. Loved the set operations.
Foxpro – Loved how fast things could be if you used the indexes right.
@Andy
blocks are objects… indeed you can get any specified as a param
def method_missing(sym, *args, &block)
@subject.send sym, *args, &block
end
In chronological order (IIRC):
- Some proprietary BASIC interpreter: opened my eyes to the world of programming
- C++: Statically typed languages in my opinion are the greatest way to learn about data types. Faster than any interpreted language.
- Visual BASIC: Uhm, GUI’s could be built quite quickly.
- PHP: Excellent documentation.
- Python: It was easier to code at 8AM in the morning.
- Ruby: Beautiful. Code.
Erlang – distributed computing rocks, especially with zyllions of asynchronously comunicating processes. Doing it fast, and constantly crashing without problems :)
C – simple and portable assembler. Everybody likes pointers wizardy.
Python – You can learn it in 15 minutes! Start by typing “python” in terminal :) Forces you to write beautiful code.
PHP – Just works. Zero configuration.
D – Ubercool extension of C, with exceptions, classes, virtual functions, best templates, modules, unittesting, contracts, assertions, scope/failure handling, shared/consts, foreach, delegates, dynamic and associative arrays, complex numbers, functional programming, metaprograming, mixins, compile time evalutions, etc. etc.. Evenrything built-in. Fast and free.
JavaScript – language of the future (if you like it or not). it is everywhere.
Haskell – Just to know that sometimes compiler is more clever than you.
C++ – Just to know that sometimes people are more stupid than they think.
Perl – Language in which your program have more regular expressions and different opertors than code lines.
Java – Even lazy and bad programmers cannot break it. Solid. Fast virtual machine with good state-of-the-art garbage collector.
Nemerle – uber cool hybrid functional / objective language, with greate metaprogramming capabilities, including dynamically changing syntax by adding new language constructs.
BASIC – C have goto, so have BASIC. C is greate, so is BASIC.
Pascal / Ada – still the best language for teaching algorithms, as it is safer than C, and still more low-level than Python or Java. Forces you to think deeply about problem.
Sisal – everything is… object (and probably also an iterator)
Fortress – everything is… LaTeX equation :)
Bash – I hate it, but I know all about it, and use it every day.
Tcsh – fast configurable shell.
FORTRAN77 – Uber fast, good robust compilers and scientific libraries.
Assembler (x86) – assembler you would like to hate, but you cannot.
Assembler (ARM and 68060) – assembler you would like to love, but you cannot.
Fortran: Great for implementing numerical algorithms.
APL: Map, reduce, etc. Great for one-liners. Also nice for doing some numerical stuff.
COBOL: Don’t bother it and it won’t bother you.
Basic: Got me a job one time.
C: Produces fast, tight code. I don’t have to depend on a complex compiler to get it either.
C++: Nice for oo work and it’s still pretty efficient.
Z80 Assembly: Pretty good for a little 8 bitter. Great way to learn assembly language.
68000 Assembly: Nice – not too much lower than C.
Verilog: Lovely for doing hardware design.
CSH/BASH etc: Great for speeding up development cycles.
AWK: Made documenting code easier pulling comments & function decls. from code.
Object Pascal: Properties, and a great GUI Builder in Delphi.
Python: List comprehensions, enough functional programming concepts to allow concise, expressive code; properties, decorators (functionals or operators, for us math guys), metaclasses. Easily my favorite language.
ADA: Great for managers who are extremely paranoid about programming errors.
@witek
Maybe few mores:
LUA – simplicity, single paradigm, VERY small, fast and safe (no crashes, no memory leaks, cpu, memory and function usage under control). Easily connects to other languages.
Brainf*ck – because we can!
LISP – universe is written using it. Basically all clever things was already discovered and implemented in lisp in 1950s. And it is probably have even simpler syntax than brainf*ck
Erlang += best pattern matching in the world. :)
Arabic is quite interesting I think, however Latvian is one of the most interesting (they have no possesive to have verb.)
Actionscript 3: Complete control over the UI, anyone can run it, good performance, ‘javascript-with-less-limitations’
German: Through its use, acquired many delicious beers in Deutschland.
Sorry, just couldn’t believe this hadn’t been done yet.
Python : Fun! Off and coding in seconds!
Java : Taught me a the importance of data typing early on :)
Actionscript: Creative coding, in under 1 min.
Javascript: Brings websites to life.
Written in September 2006, but I think it’s relevant. I call it 0×88 Lines, in reference to the song 88 Lines About 44 Women, by The Nails:
BASIC was a clumsy plaything,
Good for kids and not much more;
Fortran was a revelation
Back in 1954;
Forth was built for one curmudgeon,
Never should have been released;
Pascal taught that chains and bondage
Are required to tame the beast;
PET machine code seemed nostalgic
Even when it first came out;
COBOL was for dull accountants,
Not for humans, have no doubt;
C was PDP assembler,
Yet was used for every task;
Prolog answered all the questions
That you don’t know how to ask;
MS-DOS was good for scripting
Only if your dreams are small;
Six-Eight-Thousand was symmetric,
Animate a bouncing ball;
Parlog taught new ways of thinking,
Shame it only worked in school;
Ada — Ronald Reagan’s baby –
Like him: ugly, bloated tool;
Logo had some clever features
Hid behind its turtle face;
80×86 Assembler,
Ugly muscle won the race;
Dear old Billy’s Visual Basic
Gave crap shareware to the masses;
C++ was bloat on steroids,
Kneed our groins and kicked our asses;
Delphi found the perfect balance,
Shame about the market share;
CSS is website ethics
In a world that doesn’t care;
Lexx and Yacc are good for making
Yet more entries in this list;
JavaScript’s the tool of choice for
Little boys who’ve ne’er been kissed;
Perl’s the great Swiss Army Chainsaw
(Cat’s walked on the bloody keys!);
Lua’s built to Keep It Simple,
Found the sweet spot, aims to please;
SQL is Bertrand Russell
Reinvented by the blind;
XSL was never meant to
Be approached by human mind;
PHP was Perl for those who
Wished that Larry’d not been born;
HTML filled the web with
What the people wanted: porn;
Intercal’s an evil joke (on
Purpose, which is something odd);
BrainF*** demonstrates the fact that
Turing knew the mind of God;
Scheme was far too clean and simple
To be used by mortal men;
Unix shell-script still has uses
Here and there and now and then;
LISP may hope to reach its heyday
In another fifty years;
Billy forced C# upon us
‘Cause of looming Java fears;
Python turned its whitespace gimmick
Into some religious dream;
Smalltalk drove a single concept
To its ultimate extreme;
Haskell’s quite a clever concept
If you’ve got a PhD;
Ruby’s slow but – maybe, one day -
It could be the one for me.
php is GOOD!!
rudy is great!
java is awesome!
BUT HTML IS THE EASY ONE!! ITS THE BEST!! wahhahah.. LOLS
In the order of my discoveries… time machine on.
BASIC Z80-Amstrad: It was just… simple. Created a first program of Astronomy with it putting graphic caracters at (col, lin) position. Did I say easy?
sh: because you know I had to configure my internet access and start my specific command line in 1991. Oh… and that was fast and it is still.
Fortran: Analyzing data the easy way… at least in 1992. Taught me that position is important. It formatted my mind for Python, I guess.
Applescript: Showed me that a black box could come to live.
TCL: for managing strings, strings, strings for a mail server. Again easy to learn.
Perl: Taught me to be patient. Ah understood! ah no! ah yes it must mean that or maybe this, ah no no now I get it it is… or maybe.
Java: Taught me punctuation
Python: I can be that fast coding stuff. wow.
Pascal – Its great to start
Delphi – Its great for making fast UI
C++ – its used for writing games
Java – Powerful IDEs
C# – its like Java++ without powerful IDEs
Javascript – it lets you change not your own sites
Scala – It sounds great in theory, you can/must program like at Sun(in notepad) and you learn what compilation errors are.
Groovy – Scala with IDE support
Ruby – it has made Groovy
PHP – easy to learn
Batch – great for scripts
Bash – great mini-programs like grep, touch, etc. too bad its not portable.
@Benoit Goudreault-Emond
Agreed, 68k assembly was a joy to program. When moving to x86 CPUs and reading the Intel docs I quickly switched to C++ instead. :)
I’ve learned a lot of languages but recently I’ve been awakened to the idea that using to many is a bad thing. I actually code in c now just because it is “vanilla”, it’s turring complete, and has access to everything (granted almost all languages do, but not all). Really the story of using different languages isn’t about strengths but rather weaknesses. You can do almost anything in any language but bash handles different characters weakly, especially if you have bash running in bash and some of that bash is generated dynamically from other bash. Java requires you to handle simple things like files in overly complex ways. PHP wont accept POST written on more than one line if you are doing ajax. C doesn’t have namespaces. Oh were it to have namespaces. C++ is complicated and requires to much “context” to really read it, it has too many ways to do one thing.
They all are great languages. Every one has a short fall. This isn’t to be negative. It’s just to say that we should look at the glass as almost entirely full and recognize that we need other languages to make up for the rest. That’s the only reason to use multiple languages. Everyone should try to use just one and know all the others well so they can make up for that languages short falls.
I decided to play along with this meme here. (Admittedly, I may have a more difficult time than most coming up with charitable things to say about programming languages, but I really did try with all the sincerity I could muster.)
Basic: I have to love the first thing I learned…
Pascal: Correctly uses = to mean equality comparison, and uses a different symbol for assignment. Every other language I’ve used gets this wrong.
C: First introduction to syntactic sugar?
C++: First introduction to Objects?
Fortran: Easy to write clean, readable code
Perl: Enables very terse writing
PHP: Great for one-offs and bits of web automation with little server setup
Bash: I’m sure something about it would be cool if i ever really learned it instead of just hacking
Java: Guaranteed refactorability enables awesome IDE support, first introduction to design patterns and good code structure
Ruby: Enables super-readable code style and incredibly efficient use of my time as a developer
Javascript: I’m sure something about it would be cool if I ever really learned it instead of just hacking
I’d like Ada wich is by far the most strongly typed langage i’ve never had to deal with. The coding process can be tedious but the whole job can be tremendiously accelerated by this feature.
The “modern” versions VB i mean .NET, are now proposing a not so bad way of strongly type behavior but, i think it’s not by now exactly what it should be. The .NET library have a component that i hate more than every shity things MS Corp. has made and this is the System.Data.BindingSource. I always get lost in the pitfall of thinking that binding UI with Data should be with a minimum coding but since VB6 and after smashing my head on my keyboard and swear to my screen, i know that automated binding is just something like demonstration software.
I’d never like Java and i do not really know why! I don’t hate this langage wich have a C like syntax and is a totally OO langage. Maybe my remebering of early days of managed langages such this one running on win95…
I cannot finish with the worst i’ve ever encontered in my life. Casted on the perfect bureaucratic civil servant (but business oriented) and i named the Report Program Genertor or RPG. I just can’t imagine someone had think about creating such monstrosity! Worst than COBOL i think!
But it was long ago…
Dave:
Soar is not a programming language.
awk and sed are special purpose languages that have perfect syntax for their niches. Instead of trying to make that one language to rule them all, which is probably never going to happen, we need more special purpose languages and better ways to make them work together.
Also this:
http://steve-yegge.blogspot.com/2010/12/haskell-researchers-announce-discovery.html
@Joseph In Soar (the implementation), I type in code and run it to perform some task. It even has syntax. Sounds like a programming language to me :)