
What should I learn next as a programmer? - ingve
https://medium.com/@_cmdv_/what-should-i-learn-next-as-a-programmer-477728c5c3c4
======
jasim
Stop, stop!

Don't learn anything new. Go build something substantial. Write a compiler,
build a database, create a browser renderer, make a game engine. Build
something that is not CRUD, and is over ten thousand lines of code, something
that takes you years - a Forever Project. Keep at it, hone the fundamentals.
Go deep, and learn to enjoy the pursuit.

Everyday you'll learn something new about how you like to think. You'll
develop a voice so to speak. You may realize that language doesn't matter, or
you may find a language perfect for you, maybe you'll itch to build one. Our
tastes are as unique as us, there is no perfect answer, and no technology that
will improve our craft magically. The only way is to write, deliberate, read,
and rewrite, and keep doing it for a long time.

~~~
danso
I have to both agree and disagree with this. Yes, the OP should build
something...but I believe that for most people, they shouldn't necessarily
build something so computer-science focused -- such as their own compiler,
database, engine -- unless that's what they really want to do, eventually
(i.e. go into computer science, or game development).

For people learning general programming...they should build something that is
useful to them, in the very near future. When I had to learn Ruby on Rails for
my new job, coming from PHP (and, well, a computer engineering, FWIW)...I
learned Ruby quickly by using it to scrape Craigslist for apartment listings
to my own CSV files for easier organization. It's a task I could already do in
PHP, but now I could reap the benefits of a faster apartment search while
learning a new language. As a new programmer, it's also helpful to understand
what it means to build for an end user, even if that end-user is you. Even as
an experienced programmer, I find it very helpful to do selfish-side-
projects...because knowing what I _need_ to have at the end of the day helps
me get over the many obstacles I throw in front of myself (e.g. Am I following
proper style? Should I refactor this now or later? etc. etc) that usually
hinder my enjoyment of programming.

~~~
jasim
Thanks for this response. Completely agree that we need to build things that
give us quick-wins. Writing a quick script that does something convenient
illuminates the joy of programming like no other.

My point was of a more general nature, for those of us who want to make a
long-term career out of programming, and keep getting better at it. A lot of
us (myself included) get stuck re-building simple stuff in a newfangled
technology every few months and mistake that for progress. If we are to ever
get to a place where we have the confidence to build larger and more complex
things, we have to try making them, instead of being slaves to the latest
project with the most Github stars. It won't be easy, but that is the point of
deliberate practice - do something that is slightly beyond our reach and
slowly push the bar.

------
tfgg
I'd say stop worrying about the technology you use and start worrying about
the question you're trying to answer and problems you're trying to solve.

> Programmers should really take a leaf from the Mathematics & Sciences. In
> those subjects they are endlessly looking for new solutions and then
> crediting or discrediting each other, in a logical manner with the use of
> facts, calculations, proofs and actual data. Not gut feelings, random
> beliefs and twitter debates!

This problem is worse in the sciences, there are even more 'schools of
thought' and people stuck in certain modes of thinking. "Science advances one
funeral at a time" is a well-known quote for a reason.

That all said, yes, go explore new technology, try it out, do what you enjoy,
I find it's only ever been beneficial :)

~~~
progrocks9
Totally agree. The motivation for learning a tool starts trying to solve a
related problem. In me case I want to explore which programing languages are
more relevant today so I made a little experiment at nkittsteiner.github.io
for measure more popular languages but without the context of the problem we
are trying to solve it's irrelevant

------
DaveSapien
My advice (to the question, not the brilliant article), is to learn how to
cook. A good or great diet, with fun food as well as easy healthy food is one
big way to improve everything about your life. Its truly amazing what a
difference it can have.

~~~
pieceof314
Ok. How?

~~~
jarcane
As a former professional cook, my advice has remained consistently "Watch
every damn episode of _Good Eats_ you can get your hands on."

Alton Brown's recipes aren't always my preferred method, but he's an excellent
teacher, and great at explaining the science and the "why" behind how cooking
works instead of relying on pure folk wisdom like most cooking teaching.

Honestly, if you watch all 10 seasons of _Good Eats_ you'll probably get more
out of it than you would a culinary degree from all but a handful of schools.

~~~
st3v3r
"Honestly, if you watch all 10 seasons of Good Eats you'll probably get more
out of it than you would a culinary degree from all but a handful of schools."

But there were 14 seasons...

~~~
jarcane
Damnit, I always forget he came back after S10. IIRC there was a break for a
while.

Watch all 14 then.

------
deepaksurti
Why not learn just one of these: \- programming languages with different
paradigms (Functional, Imperative, Logic etc) \- Data structures and
algorithms (implement a few in each paradigm) \- Compilers \- Digital
electronics \- Operating systems \- Networking \- Math for CS \- Orthogonal:
Art of debugging, collaboration, technical writing for documentation

Learning the fundamentals, becoming better at these will help one see through
the 'stack of tons of languages, tools, frameworks' and yet be able to handle
all of these with relative ease.

I wish 'Elements of Computing systems'[1] were there when I started as a
programmer.

[1] [http://www.amazon.com/Elements-Computing-Systems-Building-
Pr...](http://www.amazon.com/Elements-Computing-Systems-Building-
Principles/dp/0262640686)

------
roel_v
Pardon my French, but this is one of the most idiotic things I have read in a
long time.

\- author starts with saying he's a beginner. But somehow, this gives him
better insights than others, because 'fresh pair of eyes', and 'resistance to
new things'

\- then he says (about the industry in general) 'To me it seems really slow to
adopt new concepts.' (wtf?)

\- except _then_ he says 'Programmers should really take a leaf from the
Mathematics & Sciences'. Because they move faster than programming, he must
mean? To paraphrase Babbage badly - 'I am unable to comprehend the sort of
confusion that could lead to such a statement'.

\- then he says that the 'the primary source of innovation in the it industry
is from open source projects'. (yeah, sorry to be _that guy_ , but imma need
to put some 'citation needed' on that one)

\- and then, somehow, this leads to a justification on why he wants to learn
about some javascript framework (because of course - 'learning' as a
programmer is about getting used to the idiosyncrasies of the umpteenth
'framework' that does the exact same thing as the other ones before it, except
in a way that is shitty in another way. O excuse me, 'having it under your
belt'.)

\- but of course, if experienced people call out the futility of it, they are
idiots! Because he started off this whole thing with 'I’ve experienced a
strange culture of the better a programmer becomes at a subject the less they
feel the need to learn.'!) So ignore people who've been there because they're
just old geezers who don't know anything anyway!

What ticked me off enough to waste 10 minutes of my life on writing the above,
was the claim that software should be more like proper engineering and science
- and _then_ going on to claim that the way to do this is by jumping from one
navel-gazing fad framework to the next _even faster_! Lol this attitude would
be laughed out of a proper engineering firm so fast it wouldn't have time to
take its jacket off.

And of course, everybody is free to post whatever they want on the internet,
so why do I care; but cultish nonsense like this _does_ actually harm
newcomers who think it somehow represents truth, and who might waste years of
their career on chasing technical details while in the mean time neglecting
(or not even realizing the existence of) what truly matters for progression as
a software engineer: the bigger picture within the business, evergreen CS
fundamentals, complementary technology, etc.

Now if you'll excuse me, my local senior center's workshop 'Dealing with age-
induced grumpiness: an introduction for those who see 40 looming!' starts in
half an hour...

~~~
cmdv
Hi, I'm the author.

I think you've done a lot of reading between the lines. The intention of the
article was to get people inspired to try experiment and explore new things.

I did say I was painting with a wide brush. That doesn't excuse some
inaccuracies you don't agree with.

I'm not a grad student or a young whipper snapper, being closer to 40 than my
30's.

These are only observation I've experienced so far and appreciate your view on
the mater.

I've also been learning Haskell so I am interested in the whole FP paradigm,
so though I've only been do JS so far would really like learn other languages.

Maybe my experiences so far aren't what most people experience coming into
programming.

I'm sure what ever I say won't make a slight difference but wanted to clarify
a few points.

Happy Hacking

~~~
mikekchar
First, thank you for the article. I found it interesting reading and I know it
is quite hard to take a risk by writing something that might be interpreted
badly by others. But since you are here, I thought you might appreciate some
feedback.

One of the biggest problems with programmers in general is _not_ their
conservatism, but rather the wide variety of opinions that are incompatible.
Or, possibly in a less polite way of framing it: programmers are often wrong.
One time one of my young colleagues opined that while he was sometimes wrong,
there was no way that he could be wrong all the time. I had to think about it
a lot, but I realized eventually that, yes, it is actually quite easy to be
wrong all the time as a programmer.

You speak very enthusiastically about measuring your success and taking action
based on a rigorous scientific approach, but I don't think you will be
successful. Or at least, if you are then you are doing something extraordinary
and I will very much look forward to your next blog post ;-)

A massive problem in this industry is confirmation bias. That's when we have
an idea and we go out looking for evidence that it is correct. If we find said
evidence, we often feel vindicated in our beliefs. Unfortunately if we have
not also searched for evidence that we are wrong, then we have fallen victim
to this bias.

Reading blog posts of people you respect and trying out techniques to see if
you agree is fantastic. However, it's also a great way to fall victim to
confirmation bias. Soon, you start to see thing coloured one way and people
who do not agree seem to be wrong, or at least out of date.

1.5 years is not enough time to be able to form reasonable judgements about
whether the application of a technique is good or not. At the very least you
need to be able to build a huge code base and let it crumble under its own
weight before you can even begin to see the issues involved. Write at least
100,000 lines of code first and then re-evaluate your position. Better to
write 500,000 or even a million lines.

I started programming at the age of 9. I'm 48 now. I got my first paying gig
at 18 and there have been many, many more days in my life where I have been
programming than where I haven't. I can tell you that I'm not holding on to my
old techniques with a death grip. It's just that in several decades of being a
professional programmer, I know thousands of ways to fail and only a few to
succeed.

I sincerely wish you the best in your adventure and I hope you keep the spirit
you have now. Just understand that the terrain gets considerably more rocky as
you go forward ;-).

~~~
cmdv
Hi,

thank you for your constructive response, I agree with what you are saying.
Due to the length of my experience it's going to be hard to give my beliefs
any sort of foundation to an experienced programmer. With this in mind I also
wrote the article to hear and learn from other people's constructive views.

I believe there is no shame in being wrong, because to me that is the only way
one will ever learn and improve. I also try to be aware of trying not to fall
into the bias trap, so I try to use the null hypothesis when it comes to
choosing what to follow or learn. But most importantly I want to learn a
subject in which I take a real interest and passion. Then branch out from
there.

Like I mentioned before, the primary goal for my article is to inspire people
to experiment and try things that might not be what the mass agree with and
actually give it a go and taking it further than checking if the repo has
enough stars.

Plenty of companies pay for developers to experiment and it would be
impossible for all companies to afford this. At the same time there are plenty
of chip100 companies that don't have any OSS projects yet they are clearly
reaping the benefits. That comment is me being optimistic and potentially not
a realist due to the harsh nature of business.

Thank you again for the response. :)

------
eddd
Learn different things - I recently started my side project in a bunch new
technologies to myself like

* swift2 (iOS)

* elixir, phoenix framework, ecto (not that new to me, but I've never shipped anything to prod with it)

* elm - javascript replacement

Everything that is completely different from your current "stack" will give a
new perspective... JS dev? Try elm, look a pure functional languages.

~~~
markatkinson
Same... I started learning Elixir and doing side projects in Elixir branching
away from C# and WPF.

I must say Elixir is pulling me into it's functionally warm arms and I don't
want to leave.

------
progx
As a programmer, i always have the problem "shit, from where should i have all
the time to learn so many things?"

I must select. Funny that people have the opposite problem (or the don't have
a family, other projects (house etc.), or other hobbies?).

------
iolothebard
How's this even a question?

My learning list is so long by the time I get to it half the stuff I'd like to
learn is already out of date or discontinued.

Sometimes get too wrapped up in getting stuff done to spend time learning.
Can't go for too long though, or you get left behind.

------
epx
I feel this problem in relation to frameworks. Job listings, etc. tend to ask
for specific frameworks or libraries, but they come and go too fast. Normally
I do 'lazy evaluation' and only worry about learning a framework when I really
need one.

------
thesz
Physics.

Really.

