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!
Scripting languages
First of all, I want to cover the scripting languages which popped into my mind:
- Ruby
- Python
- JavaScript (Node.js)
- Lua
- (Bash)
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.
Python
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.
JavaScript
> Nobody wants to write plain JavaScript nowadays!
This is so true. You simply don't want to. You want to write for Node.js or
jQuery or so, but JavaScript feels like “huh, now I'm a scriptkiddie” for me. I
know JavaScript is really, really fast. Sometimes almost as fast as plain C! But
the whole infrastructure of JavaScript kind of sucks for me – There is this
package manager “npm” which I basically don't get. Maybe I'm just too old for
this kind of language.
Lua
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!
JVM-based Languages
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
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 toString() on 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.
Even 5!
Scala
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!
Compiled Languages
Well, finally we hit the compiled languages. There are six main compiled
languages I give a shot in here:
- Assembler
- Lisp
- Haskell
- C++
- Go
- D
And I want to take them in this order, for an obvious reason...
Assembler
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
> 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.
Haskell
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.
C++
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
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
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.
Other languages
There are some languages I didn't look at by now, but I want to in near future:
Let me put some points on each:
Dart is meant to be the better JavaScript out there. And maybe it will be. I
hope so! Looks like Java with a bit of syntastic suggar, but seems to be nice.
Groovy: For the JVM again, but it seems to be less verbose than Java or Scala.
Not worth a look, at it is for JVM, but interesting language!
Crystal is meant to be “Compiled Ruby”. I hope it will get popular, as I like
the syntax of Ruby a lot. If this leads to be fast Ruby, I will get one
programming language for free in my repertoire!
Rust is the last programming language I want to cover in this article. I don't
know much about it, but it is meant to be compiled and has a Ruby-like syntax,
hasn't it? Maybe worth a look!
Summary
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!
tags: #programming