
What Good Are C, C++, and Java? - oskarth
http://danluu.com/boring-languages/
======
swalsh
I once watched a video about languages by I believe the designer of F# (could
be wrong). He talked about a graph with a horizontal axis measuring
"elegance". On the right hand end is your highly elegant mostly functional
languages. On the left hand side are the rugged languages like C++ very few
people would call it elegant. However on the vertical axis is Utility. on the
bottom are "not very useful at all", and at the top is "very useful". These
languages are solidly in the upper left hand. The ultimate goal is to find
something on the upper right hand side... but nothing has quite achieved it
yet.

~~~
nearmiss
[https://www.youtube.com/watch?v=iSmkqocn0oQ](https://www.youtube.com/watch?v=iSmkqocn0oQ)

~~~
swalsh
oh cool, that's the same guy... same concept, but different video.

------
chillingeffect
One simply must admire the optimism of another who proposes to publish a list
of desktop apps written in C++.

Meanwhile Javascript is "so ubiquitous that making a list seems a bit
pointless."

:)

------
yarper
What Good is Green?

The following things are green;

trees grass moss apples ...

------
bthrn
We should also consider that a lot of popular interpreted languages -- Ruby,
PHP, Python, JavaScript -- are implemented in 'boring' C/C++.

Abstraction is a beautiful thing, but we should not forget our roots!

~~~
jtreminio
I recently read someone saying that there exist so many interpreted languages
built on top of C because no one really wants to write C, they would rather
have a language built on top of another language.

After starting to learn pure C myself, I have to agree.

------
malkia
I really like sqlite, lua and luajit's "C" implementations.

For C++ I think Qt is pretty reasonable, also the Unreal Engine.

I'm using Java at work at the moment (Google Web Toolkit mainly, and learning
it on the fly), but feeling the love in there. Some things are crazy (enums
:)), others looked strange at the begining (dependency injection), but I
really like the interface / class split - the interface "Set" vs the
implementation "HashSet" (or something else).

~~~
innguest
Raise your hand if you've never been able to compile Qt outside of Linux.

/me raises hand

~~~
malkia
Ask me questions, I've had success building Qt from 5.0.2 to 5.3.2 for Windows
- 32/64-bit with full debug info (in release too!).

------
simplicio
I can think of a lot of things to call C++, but "boring" isn't really one of
them.

~~~
jahnu
Established would be a better term.

------
alediaferia
Why not making this list open source? I mean, this is not complete at all and
you won't be able to fill it in all on your own. Just my 2 cents :)

~~~
Kurtz79
I don't think it's meant to be a comprehensive list, just a reminder that
languages that many people consider "dead" or just "old fashioned" are in
reality quite pervasive and power up many of our daily tools and apps.

~~~
innguest
... because those maintaining those dinosaurs haven't died yet and are holding
back the next generation of programmers.

Thanks, green-fielders, for ignoring all Programming Language research. If it
weren't for you we'd be "stuck" with Smalltalk instead of Java and Lisp
instead of C. So thanks (not).

~~~
nickcano
Are you sour because you don't understand pointers, or something? I'm 22 and I
almost exclusively use C++, C, and x86 assembly. These types of languages are
not going anywhere, and a fair portion "the next generation of programmers" is
perfectly fine with that.

~~~
innguest
No. I understood and wrote tutorials on pointers when I was 17. I never
understood what people don't get about them. They literally exist in real life
in the back of any indexed book.

I'm just angry that new programmers still have to pay towards the technical
debt of old school programmers.

It's sad to see that we're losing new programmers to old paradigms. Just so
you know the state of the art, there are people out there mathematically
proving that the operating system cores they wrote have no bugs. So long as
you insist on managing everything yourself because "speed, man" you will
continue to work overtime chasing bugs that aren't your fault (the fault is
squarely on the paradigm called Von Neumann). Good luck wasting your life away
making programs the most complicated way possible so you can feel productive.
I'll be putting these Haskell Lego pieces together over here and let the
compiler do all the work that you do manually. Because apparently your type of
person (the type that accepts that status quo and thinks it's the best we've
got and doesn't contribute to pushing for better things) will keep coming -
these types of people are not going anywhere.

~~~
nickcano
And yet, under almost every high-level language that "does all the work that I
do manually", what is there?

Under Python in C++

Under PHP is C++

Under Haskell is a variant of C called C--

Under Lua is C

Under Perl is C

Is this because "the dinosaurs haven't died yet"? No. It's because writing a
high-level programming language almost always requires a lower-level language.
Under all of your high-level abstractions, there needs to be some compiles-to-
assembly language that has access to memory management. Under all of your
fancy high-level language debuggers, there needs to be some disassembly and
translation of the assembly code to match the symbol databases for your high-
level code. Under all of your binaries, there needs to be a kernel that can
translate API calls, handle interrupts, dispatch exceptions, manage memory
protection, and schedule threads.

Can you do all of this with Haskell? Sure. But the first Haskell compiler
written in Haskell needs to be compiled by _something_. It can be C, C++, C--,
or even assembly for all I care, but it has to exist. Even the first C
compilers needed to be written in something that wasn't C.

The bottom line is that it has nothing to do with "technical debt". These
languages exist because they can work on hardware without heavy frameworks
weighing them down. They rely on the bare system, and not on a bunch of
abstractions. And that's why they can be used as a layer between hardware and
the much-needed abstractions brought to us by high-level languages.

These "old" languages have many strengths, and you're foolish to write them
off just because their strengths don't fit your use-cases. Without the
programmers that are "lost" to these "old paradigms", you would have nobody to
maintain, develop, or secure your new paradigms. And that's a consequence that
only considers one of the many strengths of these languages; there's many more
consequences that we'd face if nobody new learned how to use them.

~~~
innguest
That's the Stroustrup argument - it's everywhere so it must be good! Like
dust, or herpes.

Your argument is its own counter-argument. Why is everyone running away from C
so badly that they are even willing to put up with PHP? That's how much C
sucks. The evidence is in everyone making other languages as soon as they can
to get away from C. Look at Lua. People cannot even put up with writing their
whole applications in C, it's such a pain, they need an escape valve called
Lua so they can breath a little.

That things are built atop C is the story of Academia in the USA. They have
predominantly taught ALGOL-like languages and favored the Von Neumann
architecture to complete detriment of Lambda Calculus. So it's because it's
all people know, and they don't know any better. C is so much the wrong
language to write programming languages in, that they wrote Yacc, Bison, etc
because programming parsers and lexers are so impossibly difficult to write in
such a limited language like C, that people gave up, and made tools to
generate C code for them. Eww. And that's the industry standard, some smelly C
code that vomits more C code that no one can write because C doesn't offer the
appropriate abstractions to deal with the problem. That's technical debt. Your
language is so weak no one has the balls to write a parser on it? Well guess
what, throw it in the garbage and start over. Do not pass on that technical
debt to further generations. If a language is weak, stop all work on it, move
on to a stronger language that can express more things.

Which is why from very early on two schools of thought diverged and... just
read "Worse is Better". :)

Point is, C people think worse is better, they don't want to take the time to
make sure their stuff is solid because they like to brag that they get so much
done and so clearly C must be better. I can make 10 sand castles in under an
hour but when the sea flows it takes them with it. But no tsunami can take a
stone castle. Why don't you want to strive to build stone castles?

As a final point, consider that your precious C programs and the C compiler
can only run because of the CPU, which was not written in C nor in any Von
Neumann language - oh no, they were written functionally, with only logic
gates, in a dataflow-oriented way, because you know, they really needed this
to work. That's why CPUs don't have bugs - they picked a better starting
language than C, with a principled approach (logic) that is amenable to
mathematical verification. Guess what - functional programming languages are
also increasingly more amenable to mathematical verification. Once this is
popularized, you'll be delegated to maintaining the old sand castles from
dinosaurs while we will be building stone castles over here. Join us. :)

~~~
nickcano
I give up. You are literally drenched in a dogmatic hate for low-level and far
too under-educated to argue with.

~~~
codygman
It doesn't seem like innguest hates low-level to me. Kind of random question:
What do you think of Rust and ATS?

------
joshuapants
> Also, does anyone know what EC2, S3, and Redshift are written in?

Well, Redshift is in C with some Python

------
nice__two
This is so kindergarten-level, I have no idea why it's on HN.

BTW, Stroustrup himself has a list of applications written in C++:
[http://www.stroustrup.com/applications.html](http://www.stroustrup.com/applications.html)

~~~
oskarth
I see you are new to HN. Welcome to the community!

In case you haven't seen it already, I would like to draw your attention to
the HN guidelines posted here:
[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

Specifically the part that says _Avoid gratuitous negativity_. That means that
your first sentence could probably be phrased in a different way, for example
in terms of why you think the list of technologies isn't meaningful, or why
it's a bad metric. On HN it's also generally frowned upon to complain about
things being posted - if you feel it's truly off-topic, you are free to use
the flagging privilege. This requires a certain amount of karma to use,
though.

