Ask HN: Should I switch to a new stack professionally?
Hi all. I've been reading Hacker News obsessively for quite a while now, but this is the first time I've ever submitted a question.
I'm a senior software engineer living and working in the northwest suburbs of Chicago. I'm 36 years old. For the last 10 years I've been working on the Microsoft stack (mostly C#, ASP.NET, SQL Server and more recently ASP.NET MVC). I've been doing a lot of tinkering with more open source languages the past few years. So I have two questions:
1) Is it worthwhile to considering switching to a different stack like Ruby/Rails or Python/Django at this stage in my career?
2) If I were to switch, how do I go about doing that exactly? I mean, I have no professional experience in other stacks so I would guess it would mean a significant reduction in my pay.
I'm interested in hearing all your thoughts. Thanks.
19 comments
[ 3.1 ms ] story [ 43.0 ms ] threadYou will have to learn the language and the particular quirks of the framework you choose.
Also keep in mind that Ruby and Python are inherently slow (~20x slower than C#). It's rarely a problem, unless your app does a lot of calculations. Most web apps I've dealt with were DB or I/O bottlenecked.
Start with creating your own project from scratch. And not some "hello world" bullshit, but an actual useful app.
The future is in languages as Scala, Python, Ruby, Javascript and ideas as Node.js, NoSQL.... you want to create a new stack to play... review that are using the top startup and you will see a clear map.
My strategy is to use this new technologies in my side projects, nobody pay me for that (yet) but allow me mastering what is comming. Make this transition with a full time job, family, wife and kids is a big challenge. I want be part of the new wave in IT and no spend the rest of my life in legacy technologies.
Let me know and I can show you more ideas how start the trip...
J
I realize this is the case for Java and .NET which is probably the main reason I'm thinking about switching. I've done quite a bit of work with OO Javascript professionally, but I've only done side projects in Python and Ruby. I've done some reading on Node.js and NoSQL, but that's about it.
I want to be part of the new wave in IT as well. I don't have a wife and kids so I definitely have more free time.
I'm interested in any more ideas you have on getting started down this path.
You most likely won't find a company that is willing to pay you while you learn one of these new languages, entirely. I suggest just diving in, and choosing a language that you think you would enjoy. One of my personal priorities is to find one that has an active community (with an IRC server on Freenode preferably). Then, pick a web framework for that language and a database to use and start hacking away at something simple, like a to-do list application. Make it a goal to use some cool tech, like a trendy database, a distributed task queue, full-text search indexing, web sockets, rpc over http, or anything. The goal here is not to build the to-do list app, but to learn about the tools out there, so go overboard with it and even though a to-do list app might not need a distributed task queue, use it anyways. (or not, I'm just a mega nerd and love seeing all these moving parts working together) You'll learn a ton during this process. Most importantly, you'll find that you have been building your tech stack of choice, all along.
For question 2), a lot of people suggest creating a side project as a sort of demo/walking resume. The limiting factor there, esp. if you're older, is simply the time/effort required to do that outside of work. I'm also curious about the pay issue. Are there any stats comparing jobs by dev stack?
I don't have any trouble learning new languages. It's more about how I'm able to present myself to new employers.
And don't plan for a reduction in pay; follow patio11's advice and think of yourself as a solver of problems, not restricted to any given stack.
I know of at least one company who hires programmers without Ruby skills, yet everyone at the company programs in Ruby after they join.
Mentally review your career and describe the leverage you have personally been to the effort and what you have accomplished.
One day at work there was a small project to be done and since it was a quick project and I was one of the only programmers involved with it I proposed Django for the task. The project was a success and everybody that got involved with it loved it.
Then came another project with an insane deadline and I said: "There's no way we can do this in .NET with this deadline, if it was to be done in Python I could deliver it on schedule...". The result? Another success case with Python.
Nowadays, my company has it's own product (developed in Python as the ease to use was what inspired the product) and we are using more Python than .NET. My company was a 100% .NET company but everybody fell in love with Python and Python, combined with Django and other open source modules enabled us to do some amazing things that were just not feasible with .NET.
Set up RESTful JSON services and build a web front end with just HTML, CSS and JavaScript. Try out Dojo and jQuery and use them to completely replace ASP.NET. Write your entire UI independent of the server stack and have it retrieve data and execute business logic via the RESTful services you stand up. Try to implement everything in HTML files with no server side scripting.
From there, you can take that knowledge to any back end stack, further once you know how to write web apps independent of the back end stack, you can learn to stand up services in other languages. Once you master this development style, it become very easy to learn a REST API on a new platform and languages so you can quickly adapt your development to whatever back end a company uses.
Further, it makes you front ends far more portable among back end architectures, Mobile becomes just another front end consuming the same REST services and HTML, CSS and JavaScript provide a far more responsive and usable application, when you liberate the UI from having to POST back to the server for every action you can create a lot of workflows that are just not possible with the old page-POST model.
1. Languages classified as FP: F#, clojure, scala, ocaml, haskell (I say classified as becuase the OO part is important in F# and scala).
2. Message exchanges/actor model languages: scala/akka, rabbitMQ/erlang, zeroMQ, F# MailboxProcessors
3. noSQL/doc store/KV store databases, or whatever you like to call them: riak, mongoDB, redis. And don't forget mySQL/postgres, they're eveywhere!
4. intermediate Solaris/linux/BSD admin skills
5. javascript is its own fast moving universe: coffeescript, Node.js, clojurescript etc
6. expertise with configuring Hadoop on amazon EC2
7. crawling/scraping, info extraction; fulltext indexing/search and "next steps" like named entity recognition, basically commercial applications of NLP
Oh, and signup for meetups/user groups that are engineering-related, even if you don't know anything about the topic. You'll get the pulse of emerging techs, and meet lots of VP Eng types who are hiring.