I started programming in 11th grade. I went to secondary school after primary school and chose one with computer science as specialty, because I was always interested in computers and programming. I already wrote some Visual Basic when I was 8 year old or so. Therefor I knew what I got into. And I liked it a lot. We learned Java, as most schools teach nowadays. I was good. I was really good. I learned faster than most others and was almost done with all tasks for the remaining year after a couple of weeks.
I started to get frustrated about Java. I knew it is an important language and the whole JVM-thing is a great concept (I still think so), but it was to verbose for me. Friend of mine told me I should have a look at other languages, he mentioned Python. I didn’t like it (see below for reasons). Then I ran into this Ruby thing. I was really fascinated, Ruby is a great language. It was not really common to write Ruby these days, Rails just came up! I wrote only Ruby for one almost one year. Then I got frustrated about it, too. It was (and still is) so slow. I started learning C. I always thought C was the one language. I thought, if you master C, you are at the top of what you can learn in manner of programming languages. I know C really well by now, I wrote smart stuff using C and submitted to open source projects, too. I even submitted patches to the linux kernel (just stylefixing and such stuff, as I don’t know the infrastructure of the kernel by now). Today I think that C is the right way. The concept of C is the right one. You have to copy your sources together and compile it into one executeable, that what C is made for. No messing around with package managers, installing packages and libraries and stuff. Just compiling into one executeable, which gets linked into the basic system libraries (as stdlib and so on). The concept of having a package manager which is used to install libraries and so on kind of sucks for me. I know, it is because these scripting languages need it, as the sources of huge programs get really huge if you need to have all libraries next to the sources. But this does not mean I like the concept! You maybe already noticed: I got frustrated on Java, I got frustrated on Ruby. I didn’t got frustrated on C by now, but I got frustrated on some things which are related to C. You have to put in much effort if you want to write big C programs. I know, this is related to the purpose of the language and I totally agree that this is how C has to be. But I want something more powerful.
I want an allrounder
I want to learn a new programming language. I already searched the web, had a look at wikipedias list of programming languages , took a look at some interesting ones. But I’m still frustrated. What I want is really simple: I want a fast (therefor compiled) programming language. I want a powerful programming language, probably object oriented. I want an easy programming language - not messing around with the language but instead writing less code which does more. And I want the same concepts as C - copy your stuff together and compile it to one executeable - no messing around with package managers. So lets have a look at some programming languages. I sorted them in a way you may not expect, but here we go:
First of all: If you read this, please don’t judge me. This is just my opinion on things! If you have another, that’s fine! I would love to hear your opinion on my thoughts, but please, please, keep it constructive!
First of all, I want to cover the scripting languages which popped into my mind:
What they have in common: Well, they’re scripting languages. They have package managers and, probably worst fact, they are slow. You may argue now. Ruby is slowest of these, but never mind, I already know Ruby. Maybe not how to write great apps or so, but I know it as language for basic scripts and use it some times if I don’t want to use Bash. Well, Bash is only listed because I have to use it on a everyday basis. Python and JS are faster than Ruby, yes. But I don’t like them for other reasons. Lua is fast, but feels odd for me. Maybe I have to dip in deeper into it.
You may think “what a jerk” if I say that I don’t like the syntax of Python. I understand the concept of using indention for blocks, I know it leads to really clean programming if several programmers participate. But I don’t like it. It just looks awkward to me. And, the syntax of a language is really important if you want to learn it: If it fits for you, never mind. But if it doesn’t you always have this weird feeling writing code in this language. Therefor I don’t like Python.
Well, I already had some basic contact with Lua and I like it. But I think there is not much infrastructure available around Lua. There are not so much libs available and so on. But basically, Lua is a nice language. I still can not imagine how to write big programs in Lua! And, of course, I don’t think that’s the purpose of Lua - It is for embedded stuff, I guess!
There are two main languages I want to write about in this section:
I know there are much more JVM-based languages, for example Clojure, Groovy or these Ruby/Python implementations for the JVM. But I don’t think the first two are really relevant in these days in manner of use in industry. The latter two are just a bit faster implementations of Ruby and Python running on the JVM. I don’t know what to think about these. But lets talk about the languages I picked.
Java sucks. That’s my point. You can argue your way through this, but that’s
basically it. It is full of inconsistency. My most popular argument on this: Why
can’t I call the method
5 ? Five must be an object, too! It
just feels absolutely not sane that five is not an object. You can argue that
this is from my Rubyish background and I totally agree with you, but that’s what
an object oriented language has to provide: Everything is an object.
First of all: I understand the concept of having a JVM and Bytecode which gets interpreted in it. I know the big benefit of having a platform-independent bytecode. Even if it is not as platform independent as it should be! I messed around with a Windows-VM two semesters at my university because of our english courses! These were programmed as a Browser Java App, but didn’t run under non-Windows operating systems. Back to topic: I understand the concept of the JVM and everything. But it is still closed source. I don’t like closed source! And I don’t like the security holes the JVM introduces to my system. Therefor I don’t like the JVM. Well, the idea of Scala looks neat for me. It seems to be the better Java. But I don’t know if I want to write Scala code for the reasons I listed in the paragraph above. It just feels so Windows-ish for me writing for a virtual machine which is closed source. Yeah, I’m a really great open source fanboy!
Well, finally we hit the compiled languages. There are six main compiled languages I give a shot in here:
And I want to take them in this order, for an obvious reason…
Well, Assembler is not really compiled, it is just assembled. I don’t think I have to say much about assembler. It is not platform independent, it is not easy to write and nobody wants to write big software in it, even if some already have (BareMetalOS as keyword).
> Lisp is ().
Lisp is one of the oldest programming languages (besides Fortran) which is still spread. This is almost quoted from wikipedia. But I never saw Lisp out there on the internet. Are there people out there who write stuff like Desktop applications in Lisp? I don’t think so (Tell me if I’m wrong). I think, Lisp is just for educational purposes.
I already wrote that I once thought C is the one language and if you know C you are on top of what you can learn in manner of programming languages. Well, I know C! Now I think Haskell is the one programming language. I really would love if there was a course at my university for learning Haskell. I already tried to learn Haskell. I struggled. Maybe I have to try again. This is basically a language I would love to learn.
Maybe you think, if I know C and want similar ideas in a more powerful language, than I should have a look at C++? Well, once upon a time I thought so, too! But C++ is so damn verbose! I don’t like this verbosity. But still, everything else seems fine when talking about C++. I would like to have a closer look, but there are more languages out there which seem to be better for me…
Go seems really neat. But wait, there is a package manager? Wait, what? This feels so scripting-language like. But maybe I can stick with this! Go has great concepts when talking about parallelization! The syntax of Go seems a bit confusing to me, but maybe this gets clearer when taking a closer look. So Go seems to be unfamiliar but worth a shot!
D is basically one of the languages I would like to try. But! There is alwasy a “but”: It was written for beeing a replacement to C++. For my taste, they failed. D is still verbose, complex and a huge step towards confusion if not written cleanly. But still worth a look.
There are some languages I didn’t look at by now, but I want to in near future:
Well, I got these languages (in no order):
Which seem to fit my needs. All others seem to suck at at least one point, so I don’t like them. But which one out of the upper ones shall I learn now? I don’t know. I always keep the use in industry in my mind, too! I have to make money some day! Would it be better to learn Go or Haskell for my job? Or maybe D? I really don’t know. I hope you did not take the article personally! I don’t want to annoy anyone! Just writing down my thoughts and frustration on programming languages!