Ask HN: Time to update my skills. What should I do?

19 points by gadhra ↗ HN
Growing up, my parents (both teachers) had to put in 100 hours of professional development every 5 years; I've tried to do the same as a developer, and I feel the time to put in my 100 hours is nigh.

I just turned 40, been in the industry for more than 20 years. Management experience, lots of PHP, Python, bash shell. MySQL, CouchDB, and Redis. Plenty of network administration, web server, and infrastructure design / setup, including AWS for the past 5 years or so. I've got no formal CS training, just what I've picked up on the job. My tech portfolio has afforded me a good living working for startups as anything from systems administrator to front-end developer to back-end work to managing developers.

I hate to say it, but I don't feel like I've got a great handle on the Next Important Thing. Is it Go? Haskell? Ruby? Docker? Will learning any of those leverage my brain into important programming concepts, like the way C++ and PHP taught me the importance of OOP so many years ago? Are any of those programmatic approaches going to be cornerstones for the future?

17 comments

[ 3.4 ms ] story [ 46.6 ms ] thread
Formal Methods and systems like Agda, TLA+ or other where you develop proofs of your algorithm. For me this seems like a very rich and deep direction for software engineering. This is very much the atomic sledgehammer approach to "first: make it correct; then make it fast."
It sounds like gadhra wants to learn things that will advance his/her career, rather than stimulate his/her intellect. With that in mind, I'm going to strongly disagree with you. Agda and TLA+ are not going to open many doors to jobs in the next five years.

Instead, I suggest learning Android. It's my "next five years" step.

What a difficult question. I think it's confusing for the same reason that there are so many options, we don't know what the future will be.

All I can tell you, and what most people will be able tell you is, what tech we are exploring. For me that is React + Flux on top of a c# or groovy backend. Docker is very exciting, but it is not exactly ready since the containers you create in Docker don't actually contain.

If I had to reduce my decisions on which new tech to adopt to a primary factor, I'd say it is, does this tech promote a decoupled code base? Applications are getting huge, and whether you are trying to superman a solution as a solo dev, or trying to clearly define a separation of responsibilities across a team, the ability to make modifications to the code with as little knowledge of the application as a whole is what will allow you to develop a large app which is still maintainable.

React + Flux - yes

c# + entity framework + webapi - yes

groovy + gorm - yes

docker - yes

I don't think you can plan this for more then 5 years out, if that. The industry is moving to fast lately - new ways of doing things are constantly coming out, new frameworks, etc...

I like to watch the job boards (regardless if I'm looking or not) careers.stackoverflow.com, cybercoders.com, dice.com - search a keyword (angularjs, docker, nodejs, etc... ) and see what you get - if it looks like there's a good amount of demand, run in that direction.

Personally, my money is on frontend (angularjs, react), nodejs and mobile (react native, obj-c, swift) - all signs point to an increasingly mobile world - it's time to start learning those things to stay relevant.

(comment deleted)
Of the languages you mention, Haskell is the one that's probably going to take you the furthest out of your comfort zone because there are a lot of practices from other languages that just won't work...but I'm not sure that 100 hours will be enough to recarve all the brain wrinkles that could be recarved.

An alternative would be a course on one of the MOOC's. Say algorithms or cryptography or discreet optimization or whatever. That might fill the formal CS training gap you've mentioned rather than layering something up on either side. If the future is one in which computer hardware doesn't continue to get exponentially faster, CS is going to be a cornerstone.

Good luck.

Maybe it's time to start a project of your own? (startup?)
I agree with this. The act of delivering a solution to paying customers tends to bubble correct enough solutions to the top. The optimal choice of platform/stack and other dodads are a function of this.
The next important thing is most likely not a programming language (and certainly not a framework). At that level, there's a real breakthrough only once every decade, if even. Everything else is noise that you can happily ignore. If a job description demands an alphabet soup of noise, ignore it. It will turn out to be a lousy job anyway. Download and read decent code from github. You will find most code to be noisy. This is normal because 90% of all code is noisy. According to Sturgeon's law, the reason for this is that 90% of everything is noisy. Read a lot of code, write some once in a while, and don't work for -- or with -- idiots and you should be ok.
I don't think learning another new language or admin tool is going to really make a big difference ( it's an easy thing to learn once you know all the previous one). Since you have no CS education, i'd think you should improve your math / algorithmic skills. Such as :

-logic / type theory kind of skills. Seing how the recent batch of PL ( rust, swift) are influenced by research, i bet a lot of the industry is going to have a much higher demand for formal prooves, and all the topics you usually find associated to functionnal languages. If you need something practical, try getting your hands around Coq proover.

-AI : with the lastest hipe around deep neural network, and recent industry success such as SIRI or anything Google does, i also bet having a good general knowledge of AI algorithms and techniques is going to be an important thing for people in software development ( not necessarily to develop new ones, but at least know what's possible and how to use libraries). So, pick any course on coursera and try to follow them, there are fantastic ones, and they're very easy to find.

What does 'prooves' mean?
sorry, i'm not a native english. i meant formal proofs.
Ah, no problem. Thanks for clarifying! I thought it might be some terminology I did not know.
Learning a functional language (and way of thinking) was pretty enlightening to me.

I've also been looking into learning a bit about machine learning and data science via https://www.kaggle.com/. They run contests with some very interesting problems.

I don't know if these are the next 'big things' but i certainly don't regret learning them.

Me too. I found advanced C# expression shenanigans very confusing. Then I learned Haskell. Now I see the C# but think the Haskell and it is a lot easier to deal with even the most hardcore expression jujitsu that I see in the codebase.

And that is just one example.

Haskell is not the Next Important Thing, but rather the ideas that it reifies. When Haskell is yesterday's news, the successful ideas will remain, but in the next generation language. That said, learning Haskell will put you in front of these big ideas, and I believe will make you valuable. That said, keep an eye on Idris, and dependent types.