+100. I did exactly this. After working for 12 years, took a break, learnt 3D game programming and actually shipped a playable 3D sport simulation game on iOS. Enjoyed graphics programming a ton. Also prototyped the game in Common Lisp before porting it to iOS.
End result: I now work as a scientific software developer specializing in 3D visualization all thanks to the graphics knowledge gained in the process of shipping the game.
So I would say once you have covered enough fundamentals, you must ship something you think is hard but just harder and not completely beyond you.
For me the fundamentals are: 1. Multiple programming paradigms 2. Algorithms 3. Data Structures 4. Digital Electronics 5. OS 6. Networking and 7. Math for CS. This will take a lot of time. I invested a lot in 1 - 4, skimmed 5,6,7; shipped a game and things unfolded.
Do you mind asking you a couple questions? Where are you based? How does the market look like and what kind of pay can you expect as entry-level/experienced scientific programmer (i.e. is it a significant hit pay-wise when compared to standard enterprise/finance/google developer career track)?
If you are at entry level, I can think of having a related self project or contributing to any of the numerous open source projects in the scientific stack will do the trick. Hope this helps.
As for getting a self project - I'm thinking of doing a physics engine focused on static forces - something inspired by structure engineering methods (solving with finite element analysis for example). I have no idea if I can make things bend or break believably in real time but it seems like a cool idea to pursue.
How many job offers do you see looking for a smart Perl programmer. How many do you see listing 10+ technologies, plus experience in scrum? (Does doing a stand up every day make you better at it? )
(Anecdote: I rejected an offer from a YC startup once because ~60% of the process was them fretting about me not having Ruby on Rails experience. I didn't (and don't) want to work for a CTO that doesn't understand that fundamentals travel between languages.)
As the GP said, any CTO or dev lead worth their salt would hire a dev with good fundamentals in the 'wrong' language over one with poor fundamentals in the right one.
You have to do some legwork to identify who these CTOs and dev leads that care about good fundamentals are. You'll need to engage with the tech community around where you are/want to work and talk to people. It's not a numbers game.
For sure. You can learn a new language in a few months, but not how to think like a programmer.
However, there could be an argument to be made for holding out for someone who is a good programmer AND knows the right language. Especially if it was a future leadership position. In the busy world of a startup, I may not have 3 months for you to learn Ruby / whatever language of the day.
If you coded in C for your business and two identicAL in every way people applied.. one only knew ruby and one only knew C.. which do you hire?
You don't need loads of offers, though.
- HR requirement that all positions be advertised externally, even when there is an internal candidate who is suitable and people are happy with (similar rationale for the H1B policy but at a smaller scale and less likely to engender foamy-mouthed rantings)
- hiring company is actually an agency who is fishing for CVs
And then probably you are Indian, and Indians from what I noticed are extreme bigots towards their own minorities, not to mention raping women is like national sport in India.
Ignore the laundry list of requirements.
By the way, these things are hackable, too. It only takes a bit of practice to become a better salesperson than most programmers, and only a small amount of effort to look more professional, too. (And a good suite can even be comfortable.)
Was much cheaper than 1000 USD in Hong Kong.
I looked into online tailoring services, but didn't trust doing the measurements myself.
More generally, by fundamentals I mean a pack of things including CS101, basic understanding of C (K&R), data structures and algorithms (those available in coursera courses are enough to get the basics), good use of source control systems, and project architecture basics.
As someone who's been at it for years, I'll just give you one little piece of advice. If you've already been through the fundamentals, you've done enough. Now, instead of focusing on learning technology, focus on building things, this is what real engineers do.
Let me explain. You'll probably get much better with at least one thing once you ship a real project to the end, and this is where you'll get better.
One of the best programmers I've ever worked with was a PHP guy when I met him, and he was good because he shipped efficient, tested, and working code fast, all while being able to document and communicate about it with his team. That's what being a programmer is. You won't become a good professional programmer by chasing after hip technologies (even though learning different paradigms always help), but by building things, and preferably with people, because this is how things work in the real world.
As long as you stay with startups and technology companies, you'll see that any CTO or lead dev worth his salt would rather hire a smart Perl programmer with strong fundamentals who shipped things over someone (maybe smart too) who knows a bit of JS, a bit of Java, and a bit of Haskell. This is, however, not true with a lot of non-tech companies, where keywords on resume, a professional-looking attitude, and some good sales skills will usually get you better positions.
It's never too late, don't fear irrelevance, build things, and have fun!