
Ask HN: How often have you reinvented yourself (new tech stack)? - urlwolf
For example, you were a Rails person and are now going as a Scala expert. Or trying to. I think I&#x27;ve done it every 5 years or so.<p>The interesting thing is that companies use years  of experience as a proxy for quality, and a &#x27;reinvented&#x27; dev doesn&#x27;t score on that metric. Any tricks or workarounds you use?
======
doozy
I am, as they says about Unix: Always changing, yet never changing.

I'm still using much of my original stack. The trick is not to chase fads and
focus instead on core skills and technologies.

I've been using a Unix-like operating system since my first contact with
SunOS, I've been developing in Python since version 1.x, C since Borland ruled
the DOS world, JavaScript since it first appeared in Netscape 2.0 and Java
since I saw the first applet (Java 1.2, perhaps?), PostgreSQL since, I dunno,
whatever version shipped with Red Hat 5.0.

Of course I reserve the right not to mention my previous experience with
Delphi, TCL, Symbian, J2ME, or (increasingly) Perl, if it suits me.
Selectively forgetting no longer relevant technologies is a very useful
workaround.

------
NetStrikeForce
For someone that's not a developer, using the words "reinvented yourself"
because you've changed your programming language sounds a bit exaggerated :)
of course I'm not the bearer of the universal truth, so please just take this
as one more opinion.

Reinventing yourself IMHO could be to go from dev to manager, to product then
to architect... Tackling different challenges, having different goals, dealing
with unrelated technology, not just another way of doing the same.

If you are a very senior developer you don't suddenly become a junior
developer because you've changed language. However if I'm a senior architect
and I want to become a developer I'd hardly land a senior developer gig.

------
phpdevster
Went from PHP to UI engineer using primarily Angular. Had 10 years of PHP, but
0.5 years of Angular and only a few years in very scripty/hacky jQuery / JS.
Didn't stop me from getting a $23,500 raise though.

It really depends on the company. My company looks for people who have
programming experience in general and care about code craftsmanship. Sure,
some languages and paradigms are VERY different (e.g. Java vs Haskell) that
many skills won't translate well to, but in my case, PHP -> JavaScript, many
skills transfer over.

And at the end of the day, the programming is the easy part. It's the problem
solving and reasoning skills that make a dev valuable, so if the company is
hiring based on those, your (lack of) experience in your reinvented stack
shouldn't necessarily prohibit you from getting a job in that new stack.

~~~
cloudjacker
"Had 10 years of PHP, but 0.5 years of Angular and only a few years in very
scripty/hacky jQuery / JS. Didn't stop me from getting a $23,500 raise
though."

Thats a little depressing, trying to extrapolate upwards mobility as my career
progresses

------
cableshaft
Boiled down, over the course of 20 years:

HTML -> PHP -> Flash -> C# -> Java -> Obj-C -> Python -> C# -> Angular.

Across these platforms: Web, Mobile, and Games

So about once every 2-3 years I change, although I have to go back to previous
tech stacks for some jobs too (like I used PHP at a job only a few years ago).

I realize these are languages and not tech stacks, but I thought it got overly
messy when I was being more specific, so the stacks are implied by these
languages.

Usually I've learned the tech at least somewhat on my own before encountering
it in my profession. For example, I made a simple personal site in Angular a
few years before I started a job that didn't mention Angular in the interview,
but involved a lot of Angular development, so I wasn't completely lost when I
needed to start using it professionally.

------
Spooky23
I'm on the IT side of the house. I went from a UNIX DBA / system programmer to
running configuration management, exchange and ad on the Microsoft side of the
house. Since I have been in both individual contributor and director level
roles with security and other domains.

You need to present yourself as someone who solves problems. At the end of the
day, any engineer who is applying technology (vs inventing) is studying
problems and breaking them up into smaller, solvable scopes and finally
delivering solutions to those problems.

Scala, C++, databases, etc are just tools in the toolbox.

It doesn't work for everything. If you want to be a world class practitioner
of a tool or technique, whether that's C, Oracle or a guitar, you need to
focus. There are entire companies on earth whose sole purpose is to build gas
station signs -- they own that market because of that focus.

------
ozten
> Learn at least one new language every year. Different languages solve the
> same problems in different ways. By learning several different approaches,
> you can help broaden your thinking and avoid getter struck in a rut. [1]

[1] [http://www.informit.com/store/pragmatic-programmer-from-
jour...](http://www.informit.com/store/pragmatic-programmer-from-journeyman-
to-master-portable-9780132100670)

I've taken that advise and learned a new language every 18 months for most of
my career. I mostly used the language on side-projects, but occasionally on
work projects for internal tools. Occasionally, a language I had learned 3
years prior became "the next mainstream thing" and it was easy for me to
"reinvent" myself based on these past investments. So it can be a more organic
evolution.

------
erichocean
I spend a portion of each project swapping out parts of the tech stack for
better options. Fortunately, I work in a short-project part of the industry so
I can do so 3-4x a year.

On the current project I'm on (since May), the codebase was moved from
TypeScript to C++14, serialization from MsgPack to Cap'n Proto, messaging from
WebSockets to Aeron, and we're also using a more sophisticated encryption
approach (but still based on NaCl).

~~~
arisAlexis
Typescript to c++? Thats a rare change and seems a bit backwards

~~~
erichocean
I was worried about that as well, but the change has been very positive. I've
found modern C++ to be very productive to code in ('auto' and lambdas are
huge) and the libraries I have direct access to now (vs. working through a
compiled Node extension) have significantly improved my productivity relative
to Node.js/TypeScript.

I'm currently evaluating moving a few other codebases I've built from
TypeScript to C++.

The main thing that's made C++ work for us, though, has been embracing
Bazel[0] as our build/package management system. I had no idea how big a
difference that would make, but it's been huge and I would go so far as to say
that without Bazel, we would have probably abandoned C++ (at least for our use
cases).

We do still have a few services that are still written in Node.js, but these
are micro-services that use a vendor's Node.js library to call some
API—typically < 100 LOC each. They connect to our C++ server over a WebSocket
and we message them with JSON (currently) as needed. So we're not 100% C++
right now, but all of the primary logic is in C++ today.

[0] [http://bazel.io](http://bazel.io)

------
dynofuz
Looks like im average new stack every 2-3 years

2008-2010: ios

2010-2013: python / machine learning

2014-2016: nodejs

2016 - present: iot devices (c++)

These are more additive as i still use prior stacks with current work.

------
wikiwatchme
I've enjoyed building side projects with unfamiliar technology. Use MySQL at
work - build a side project with MongoDB. Use Apache at work - build another
side project with Nginx.

Those side projects add to your portfolio and often make great interview
topics. This has enabled me to upgrade positions/companies every 4 years or so
and change up my day stack.

------
robodale
I'm doing that right now. Former stack: .NET (14 years) New stack: node-react-
flux-mongo-postgres

------
DyslexicAtheist
not much. The underlying skills (linux, C/C++, scripting languages, shells,
gnu toolchain, ...) have been portable across IT, Telecommunications,
Automotive, Energy. I prefer evaluating what actually constitutes a skill vs
learning some tool or method based on closed/proprietary standards.

Reinvention took mostly place in terms of learning the new organizational
languages, terms acronyms (which mean the same thing) in these different
industries (IOT in Telecoms means Interoperability Testing and existed way
loner than IoT). Also I found that many organization make us believe we learn
new "skills" that are of no use outside that organization.

------
wingerlang
2005-2007: Like JAVA and C++ (School etc)

2008-2011: C# (University + 1st job)

2012-Now: Objective-C, iOS, Unix/OS X (lots of scripting), Python every now
and then

If I do some web stuff, I use plain PHP since 2005. But those are mostly one
off scripts etc so..

