Ask HN: How often have you reinvented yourself (new tech stack)?
The interesting thing is that companies use years of experience as a proxy for quality, and a 'reinvented' dev doesn't score on that metric. Any tricks or workarounds you use?
The interesting thing is that companies use years of experience as a proxy for quality, and a 'reinvented' dev doesn't score on that metric. Any tricks or workarounds you use?
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.
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.
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.
Thats a little depressing, trying to extrapolate upwards mobility as my career progresses
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.
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.
[1] http://www.informit.com/store/pragmatic-programmer-from-jour...
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.
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).
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
I remember at one point you were talking about becoming a CTO for hire. Is that what you're doing now?
I'm also doing regular short-term software/hardware development projects in experiential marketing for major brands (Nike, BWW, Google, and Kellogg were my four most recent XM projects). Those are fun because you can do major tech-stack improvements on each project, and the projects are event-based and usually have really tight timelines, so they end relatively quickly. Pay is good too.
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.
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.
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.
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..