Hacker News new | ask | show | jobs
Ask HN: Should I switch to a new stack professionally?
11 points by jfletch1925 5361 days ago
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.

10 comments

My answer to question 1) would be, "are you happy doing what you're currently doing?" If the answer is "yes," then it might not be worthwhile unless you enjoy it for its own sake. I'm older than you and learning rails just for fun. Perhaps it'll result in a career move, perhaps not. I figure, at a minimum, it can't hurt.

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'm reasonably happy, but I'm currently working for a big corporation and there's nothing very exciting about what I'm doing for work. I have been doing projects in Java, Python and Ruby on the side, but my question is more about making the switch professionally. Most companies want to know how many years you've been working with a particular language or technology. If I switched I'd be going from 10 years experience in .NET to 0 experience in another. I'm guessing that switch in experience would result in less pay on a new stack.

I don't have any trouble learning new languages. It's more about how I'm able to present myself to new employers.

Do you see programming as a means to a paycheck? If you see it as that you may want to reconsider your career. Most people high in their respective fields make it as such from a passion for their work.
I don't think I agree completely with that philosophy. I've heard a lot of programmers say that if you program it shouldn't be about the money. It's as if we should all be devout monks of technology eschewing worldly pleasures in the pursuit of high and noble technological purity. Meanwhile, the business/sales people use all our skills and efforts to make themselves rich. I can't agree with that. I do like programming and I do program for fun in my spare time. However, money is still important. It's an important consideration in choosing what you want to do with your future. It isn't the ONLY consideration, but it's still important.
I think it's worthwhile, if only to see what all the hype is about. You may like it or you may not. That's a decision you will benefit from being able to make, though. If you know enough tools to be able to approach a particular problem and then assemble your tech stack based on which of those tools solves it the best, or to your highest liking, then you're better off than you were when you only had C# to choose from.

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.

Back end technologies are becoming less and less critical in modern web development. The web is no longer chained to the server stack that is chosen. My suggestion would be to learn a RESTful API on the existing stack that you know.

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.

Actually, I have already done something very similar to that and I did it on the job. At one gig, we used Ext JS to create a front-end web app. This web app would make calls back to server methods written in C#. All the data was passed between the frontend and the server in JSON. It is much more modular and makes the frontend more portable as you say, but I was really more interested in getting away from doing the server side programming in the Microsoft stack. Something completely different.
So take that same front end stack and implement your services in python, or Ruby or Java or Node.js.
If you are curious about it then, for all means, try it. I used to work with the .NET stack at work while on my own time I hacked with Linux and C++. I got curious about Python and Django and decided to create some small personal projects to learn it. After a while I found ut that I couldn't stand it doing web development with ASP.NET MVC after learning Django.

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.

My advice to young aspiring programmers is to pick up more than one stack.

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 agree with your advice to younger aspiring programmers and I do think of myself that way. I have no trouble putting in the time to learn another stack. I'm really asking more about how to show a potential employer that it would be worthwhile to take my on as a programmer in a new stack at a pay not too far off from what I'm getting now.
While recruiters (inside a company and those hired by the company) will try to fit you into "buzzword jail", the message to bring to potential new employers is what business problems you can help them solve--the skill that you have in translating a business need into a delivered project or stream of projects. Only a part of that is your skill in a particular 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.

I am more or less in the same position, I'm 39 old with a very good programmer job, in this case with a Java stack. My personal opinion is that Java, J2EE, .Net will continue to be relevant because many business have migrated his legacy cobol apps to this stack, but sad but true, .Net and Java are the new cobol... you can retired woking with they, but they are not the future any more.

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

Glad to hear from someone in the same boat as me!

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.

Late answer, but a good question (hope you notice the answer). Putting up a rails or django app would probably not be all that terribly difficult for you, I would look into the following broad areas (frequently headhunted for, and probably the path of least resistance would be F#):

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.

I was in exactly the same position as you a few years ago (I am 38). However in the last two years I have embraced OSS technologies and have not looked back. I feel like I wasted too much time in .NET land, and the best bit is that programming is actually more fun for me now.
That's very good. How exactly did you make the switch? Did you start to participate in an open source project? Did you just start learning it on your own and then gt hired somewhere? I'm very interested in hearing aboout how you made the switch.
The best way to find direction is to study the framework of high load sites such Facebook,EBay... Each of them is a valueable tech stack.
Most of the concepts you've learned still apply. For web, you will still use HTML, CSS, JS on the front end.

You 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.