
Writing Software is Hard - brianprovost
https://m.signalvnoise.com/writing-software-is-hard-388d5e982ad9
======
ceronman
I completely agree with the idea that we are overestimating the impact of
tools, specifically, programming languages.

I often see startups that rewrite their software one or more times just
because they think that changing the tools is the key to success. They switch
from PHP to Python, then from Python to JavaScript then from JavaScript to Go.
It's so easy to say "We failed because X language, now we have to use Y".

The case when choosing a given language will give you a considerable advantage
over choosing another one is very rare.

The worst thing is that we tend to say that languages suck while completely
ignoring all the evidence of the opposite. How many times we have heard that
PHP, C++ or JavaScript suck? How many amazing software projects have been
built using these technologies?

On the other hand, look at the tools that self proclaim the best ones (lisp,
haskell), how many big complex software projects have been built with them?

In the end they're just tools. Yes, they make a difference, but it's tiny
compared with all the other pieces of the puzzle of how to build good
software.

~~~
ssalazar
> The case when choosing a given language will give you a considerable
> advantage over choosing another one is very rare.

> How many times we have heard that PHP, C++ or JavaScript suck? How many
> amazing software projects have been built using these technologies?

Languages are better or worse suited depending on the application. How many of
these amazing software projects in C++ are web backends? Most of entire Web
2.0 boom has been built on higher-level languages/frameworks like Rails/Ruby,
Django/Python, and more recently Node/JS. Its simply not possible for the
average software engineering team to build systems as fast and as reliable in
something like C or C++. Similarly, the revolution in applied machine learning
we are currently seeing would not be possible without tools like NumPy or
scikit-learn and the frameworks that have been built on these. On the other
hand, 3d game engine code is almost universally written in C/C++.

Sure, choosing between Rails or Django will not matter all that much to your
stack in the long run. And its just as important to build a good team around
your tech. But the best team in the world is not going to be able to write a
highly optimized game engine in Python or quickly prototype new NNs in Ruby.

New languages become popular because they address some need that was not
previously met. Understanding these roles different languages play is an
essential skill in software engineering.

~~~
mixmax
>How many of these amazing software projects in C++ are web backends?

Varnish cache is written in c

------
snarf21
Writing software is hard but to me the hardest part is always taking a random
abstract concept from someone's mind (or worse, several people) and converting
that into something "real" in a fixed timeline and budget. There will have to
be lots of tradeoffs and miscues by definition. We are always making something
that doesn't already exist, it is creation and creation is hard.

I do agree that tools (and process and ....) can make it less hard but that
requires real, active participation. And I think that is even harder...

~~~
Clubber
I will parrot what a professor told me years ago. The hardest part of writing
software is proper requirements gathering. He said it was like pulling teeth.
By proper I mean the developer knows exactly what the client wants and the
client knows exactly what will be delivered. A "meeting of the minds," I call
it. I always tell clients this is the hardest part.

~~~
rileymat2
I am not sure I have worked on a project where gathering requirements was a
problem. But, most of the time my work has been on systems that have been a
work in progress as they were actively being used. The needs are normally
abundantly clear. I am not sure I have worked on a product not currently in
use.

------
amelius
In my opinion the biggest reason why writing software is hard is that the
requirements are often not clear from the beginning. Changing requirements can
kill a software project. What makes it even harder is when data has to be
migrated during the process.

Analogy for clueless manager types: in many cases, software is 99% plumbing.
But imagine the cost of changing the plumbing after the house has been built
:) Also consider the problem of changing the plumbing while people are
actually living in the house.

------
hacker_9
Writing software is hard yes, but I disagree with the author: I _do_ blame the
tools. Every language since C has been created as a reaction. What I mean by
this is:

> C++ was created as a reaction to OOP being so difficult to do in C.

> Java as a reaction to memory management being difficult.

> C# as a reaction to Java not being concise enough.

> Javascript as a reaction to HTML not being dynamic enough.

> Go has a reaction to parallelism/concurrency being difficult.

> Rust as a reaction to what C++ has become.

And it goes on. There are many other languages too that you won't hear of that
are created as a reaction to the status quo not being good enough either, but
those ones I listed were backed by a big enough majority to become known.
There is also the Lisp family and the functional paradigm too, which come
round again and again in popularity.

All these languages/tools are the problem because no one is sitting back, and
pro-actively realising that the _entirety_ of these languages are no good. I
am not saying this to start an argument, I have happily been a programmer for
15 years. But I recognise the problems, and they are the same problems, that
will repeat over and over again ad-infinitum. I actually started writing down
problems I've found and possible solutions and it's already reached over 30
pages.

What it boils down to is that all languages share the same flaw; they specify
the _what_ and the _how_ , but never the _why_. Until we figure out how to
encode the _why_ , we will forever be going in circles.

~~~
ohgh1ieD
This might be related:

[https://xkcd.com/927/](https://xkcd.com/927/)

Edit: Besides that, I agree, except one thing, I'd say C# is just MS's
reaction that there is something awesome which does not belong to them.

~~~
nxc18
It doesn't matter which way you look at it, Java today, after all the work put
into catching up, still pales in comparison to the C# of 2007.

Really, C# is a public service to correct for something that for so many
reasons should be awesome having turned out so-so at best.

(You may say writing a million getters and setters, declaring types twice,
stuffing your code in deep directory hierarchies, and dealing with bizarre
licensing/version issues feels normal; that's the Java talking.)

------
blueyes
I'm surprised at how little DHH says here. He could have stopped writing after
the fifth paragraph. Or just added the phrase "Don't blame your tools" to the
headline. Like bad code, this post is verbose and most of its verbiage
redundant. Good writing, like good code, is a long apprenticeship.

------
65827
Yeah if my horse was tied to RoR I'd start criticizing people who criticize
tools as well.

~~~
preordained
If your horse was tied to an insanely successful framework? I'm not sure if
you are criticizing "horse-tying", or mocking the post itself. In the latter
case, I think hacker-news aficionados and the like will be deeply disappointed
where hot framework X is in a few years...or, you could do a lot worse than
Rails.

