Ask HN: How to deal with the tedium of programming?

13 points by facepalm ↗ HN
I'm still excited about the possibility to build things, but I can not get my enthusiasm up enough to learn the latest technologies. Any way out? I can't really take time off because I need money.

(Context: I've been programming since I was 12, 30 years ago).

Edit: Thank you for all the replies! I can not comment individually at the moment because of HN posting limits.

33 comments

[ 2.9 ms ] story [ 78.2 ms ] thread
What do you mean by the "latest technologies"? Nothing really changed fundamentally during the last 30 years.
What a silly thing to say.
Yes, this is a kind of stuff people say when they don't have any proper arguments.
People look at e.g. Node.js and think it's a "new" "technology" or even in some cases "platform". In reality it's a well-known Reactor Pattern with some package management running on a not-very-slow virtual machine using exclusively a weakly typed dynamic language which takes years to update with features.
And yet a vastly more productive environment than actually trying to get the same thing done in C++.

I've worked with two commercial C++ systems designed around the reactor pattern, so perhaps not an expert, but this is not a drive-by comment either.

The C++ projects I worked on ended up requiring extra little "threads on the side" to deal with stuff like sync DB drivers or closed source libs. Little inefficiencies added up to the point where we may as well have done the darn things in JS anyway.

It's pretty obvious things have moved on massively since the 80s.

You're trying to make an (extremely weak) reductio ad absurdum argument, an intellectually bankrupt solipsist.

There's no point engaging you with anything more than exasperation, especially since the guy's asking for help, not useless snark.

Actually, to be completely honest, because you've made me angry now, only an asshole would say something like that to someone asking for help.

> It's pretty obvious things have moved on massively since the 80s.

Not that obvious for me. I cannot see any significant changes. Mind giving some examples?

> especially since the guy's asking for help

He's asking for motivation, not for help. And it should be good to know that he do not need to learn much, everything is pretty much the same as it used to be, just presented slightly differently. New terminology can be learned in a couple of days.

And this is the false perception that things have changed and there is a lot to learn that made the OP feel powerless. You're not helping him by reiterating the bullshit that have scared him in the first place.

Well I can't get a job as a JavaScript developer atm because I have never used any of the new client side frameworks like AngularJS or React. I have only toyed with NodeJS and CouchDB is the only NoSQL database I have tried.

I used to be a Java developer, but haven't monitored the developments of the language and best practices for the last 3 years. Also I don't really like Java anymore.

I ponder getting into Android, but it's Java again, and then I find I have to learn a whole new style language that is almost but not quite like CSS, but seemingly less powerful.

I don't really care about agile development or scrum, another deal breaker for many jobs.

I like data science, but it seems mostly PhDs fresh from university or other young people are being hired for that. I actually enjoy doing Coursera or Udacity courses in data science, but it's not enough.

> JavaScript

ECMA-262: around 250 pages, most of which is just water. One day reading. No new concepts are introduced over anything that existed 30 years ago, so it does not require any learning, just knowing where to look for a reference.

> client side frameworks

Who need to learn the libraries? They must have some documentation, I suppose. And again, I really doubt any of those managed to introduce a fundamentally new concept which was not known 30 years ago.

> but haven't monitored the developments of the language and best practices for the last 3 years

The safest assumption is that nothing really changed.

> I like data science

I.e., statistics, a > 100 years old science.

"Who need to learn the libraries? They must have some documentation, I suppose."

I am not saying it would be difficult. But I lack the energy. I have read a lot of documentation in my 30 years of programming.

You only need to read the documentation as you go, and only the relevant bits. Not in advance.
I like data science, but it seems mostly PhDs fresh from university or other young people are being hired for that.

Do you have any domain knowledge outside of programming? A data scientist who understands the domain they're dealing with is a rarity and at least in my opinion worth more than someone who knows all the math, but has no grounding in what he's actually trying to analyse.

"...I have never used any of the new client side frameworks like AngularJS..."

You have just saved a considerable amount of time and nerves. Not only will they fundamentally change it in version 2.0, they are going to use a different language - TypeScript flavour.

I had in fact started a learning project with AngularJS and the very next day they announced that they would change everything in version 2. Naturally I didn't feel like investing more time into version 1.
Thank you for that - you just made me snort coffee through my nose ...

In fact, I had to resort to a calculator to check my arithmetic, something I haven't had to do in a long time. I checked my calendar to make sure it really is 2015, and then:

  $ eq 2015-1989
  > 26
So the World Wide Web was invented 26 years ago, which is less than 30 years.

I, too, find myself falling behind. I don't know what a "container" might be, and I certainly don't know what "docker" is. I don't know how to write an app, and I've never seen code that uses react.js

In fact, with a few exceptions I don't know what any of these are:

> http://en.wikipedia.org/wiki/List_of_JavaScript_libraries

I have programmed in Python, Ruby, and Haskell, but if you think nothing has fundamentally changed in the last 30 years, good for you.

Hypertext systems existed long before WWW. It brought nothing new really.

> I don't know what a "container" might be

It's some poor man crap that mimics the IBM mainframes from 1970s.

> I have programmed in Python, Ruby, and Haskell, but if you think nothing has fundamentally changed in the last 30 years, good for you.

Smalltalk, Simula, Lisp, ML, Miranda, all are over 30 years old. Python, Ruby and Haskell did not bring anything fundamentally new.

If you want to write for IBM mainframes that's great, but if you want to write stuff in modern ecosystems there's a shed-load to learn. It's not about the underlying ideas of the fundamental technology, it's all the crap you need to learn to glue it together and make it run on science-fiction devices.

And I've programmed in Smalltalk, Simula, Lisp (of various flavors), ML, Miranda, C, BCPL, MCPL, Occam, zed (probably not the one you're thinking of), BASIC (probably not the one you're thinking of), ForTran (probably not the one you're thinking of, or that one either) and more, and to me, there's a great deal to learn to get to Haskell, OCaml, etc., and even more to learn to get into the current ecosystems.

> but if you want to write stuff in modern ecosystems there's a shed-load to learn

What exactly? If all that "new" stuff is just a poor, crappy execution of the concepts that had been around for over 30 years. There is nothing new to learn, same old stuff presented slightly differently.

> it's all the crap you need to learn

Do you really need to learn something as simple as a new syntax for the same old stuff? I hope you're not memorising APIs and command line arguments - it's always better to look this stuff up as you go.

> there's a great deal to learn to get to Haskell, OCaml

Mind naming any fundamentally new concepts introduced by Haskell or OCaml? Type classes? Not that new, and still worse than the good old SML modules. STG? Implementation minutiae. Or you're referring to "learning" the ghc command line options and things like hackage? Things you can look up in seconds are not worth any "learning".

While Haskell itself doesn't bring too much new things, is has been a good vehicle to explore new concepts. Mind you, all ideas need to mature before having widespread use, so is not hard to think on most of the ideas "being around for 30 years"

Applicative functors seems an example of something "new" as the paper introducing it is form 2008.

> is has been a good vehicle to explore new concepts

Which concepts exactly?

> Applicative functors seems an example of something "new"

Too small a thing to be fundamental, to require any degree of re-learning.

Of course there is a lot of new fancy syntax sugar and all that, but the nature of the lazy languages did not change a bit since Miranda. If you knew Miranda, you'll learn Haskell in no time, and 30 years in between them would not make it any harder.

for me a new-ish thing dependent types (I have a small experience with Coq)

But yeah, since Turing and Church the fundamentals of computation hasn't changed. Nil novum sub sole

Dependent types are making their way into more practical applications now, yes, but the concept itself is also not new at all, it stems from the Curry-Howard isomorphism, which is known for far more than 30 years.

So, back to the point: anyone who knew how to program 30 years ago would easily pick it up now, without any significant learning.

I guess my point is if you learned to program 30 years ago using functional programming with dependent types and category theory, it must have been an awesome place to work/study, and I envy you. Which university it was?
> Mind naming any fundamentally new concepts introduced by Haskell or OCaml?

For OCaml:

- row polymorphism (in particular polymorphic variants)

- higher-order and applicative functors (not the Haskell thing).

- first-class modules

For both:

- Higher-rank polymorphism

For Haskell (and now in both):

- GADTs

By introduced here, I'm ignoring them being implemented in toy languages first (since that is simply the first step of introducing them to programming). Similarly, it is not reasonable to say that F-omega or a dependently typed calculus already had such features, because that ignores issues of type inference and efficient implementation.

The Turing Tarpit remains sticky. The explosion of diversity has been in solutions. The problems have largely remained the same but for scale: Quantity has a quality all its own. [1] Containers malloc entire operating systems. React.js provides coroutines. Apps implement a consumer space evolution of IBM's leasing and licensing models.

[1]: My father always attributed it to Zhukov.

I would just build a few things however you want, not how you think you should. I wanted to learn some new languages but kept getting stuck not doing anything.

Instead I'm now mucking around with a Unity game, using C# which I already know, and have suddenly found the motivation to start the udacity android course.

Just do what you want to do, not what you think you should do, once you've got your enthusiasm for programming back you'll find an excuse to learn something new.

How about grad school?
I have the equivalent of a MSc (in maths). Sometimes I ponder doing a PhD for fun, but it would have to be on the side because otherwise it costs too much money.

Looking into data science, now is actually the first time I keep seeing PhD listed as a requirement for jobs that would interest me.

Maybe one day - atm I don't really have any connections into academia and wouldn't quite know how to find a worthy subject and a willing mentor.

Also, I am 42.

You get paid to do a CS PhD. I left industry to go back and do one - was only 26 but was married and settled with dependants and a mortgage and things. I Googled for and then cold emailed professors who did research I was interested in to get started.
A PhD is the ultimate leisure class purchase no matter how secure your funding. As a paid PhD student, my earnings are much, much lower than they were in my former professional career. And for the most part, a PhD isn't an entry into vastly higher paying work--especially as a programmer. So, there's definitely an opportunity cost. I'd advise anyone to skip the PhD unless they've got a burning desire to do the sorts of things people do with PhDs, and are drawn to lower / foregone earnings
What I've noticed when it comes to programming is that after a while, almost everything is a reinvention of the old stuff. Programming languages? Bah! Just same old stuff, if you are already well versed in something, then you are not phased by the new stuff, no new paradigms.

Then the annoying time it takes to setup frameworks and do the simplest things! IDEs? meh! Especially if you are super comfortable with your vi or Emacs.

So what do you do? Pick up a book with lots of examples, don't think too much about it. Just type in the damn examples like a zombie, breeze through the chapters, by the time you are half way you will start getting into the book, don't forget to modify the examples to your own taste as you learn.

Technologies change, math doesn't ;).
Go build something that doesn't require programming. Sounds like a simple case of burn out.

One of the most insidious ideas people fall into is that they have to spend all of their free time learning new things all the time or else they will fall behind. You should spend some time on professional development, but when you've hit the wall banging your head against it doesn't help.

Go build some hardware or a rocking chair, or a yoga studio or whatever. The lessons learned doing that can apply to your profession as well.