Ask HN: Making the move from Windows/.NET to Linux/Python/Ruby/etc?
Despite this, I've always felt that committing myself to a single stack isn't ideal. My experience outside of the .NET platform includes PHP and Python, but the last time I touched either in anger was about 5 years ago, so things have obviously moved on since then.
As of right now, I have three options to consider:
* Stay where I am, do what I do best. * Move to a different company, doing the same kind of thing. * Move to a different company, and work on a Linux stack
I recently received an offer for the latter, at a company that is largely language agnostic. It's an exciting move for me, but it's one that worries me a bit, because the experiences are going to be so vastly different. I'll be going from my usual toolset on Windows and a managed framework on a staticly-typed language, to a stack I know next to nothing about.
Have any of you made the jump from experienced .NET developer to inexperienced Linux-based Python/Ruby developer? If so, would you recommend it? Did it improve you as a developer?
Finally, are there any good resources for transitioning over to a Linux stack? My command line knowledge is pretty poor, although I'm fairly handy with git and Powershell. Ideally, I'd like to spend the next 2-3 months solidly learning the tools I'll need to transition easily between stacks. I'll need to learn enough of the language and surrounding frameworks to be dangerous too, but I'm banking on that not being as difficult considering I'll be moving from MVC to MVC in most cases.
(Since someone will likely raise it, I'm not interested in moving to .NET Core at the moment. While I love C#, I feel that .NET Core is still very bare-bones, and will need a few years until it's anywhere near the level of the standard framework.)
3 comments
[ 2.4 ms ] story [ 17.5 ms ] threadThe company I work at has projects in these languages. And I have contributed code to some of them. Don't make the Jump. Expand. There is no need to leave .Net/C# behind, keep your skills current with DotNetCore, C#, etc. but continue to expand your learning.
Python/Django/Celery is awesome by the way, and there is no jump, just new frameworks. If what you mean by jump is to focus on a new language/stack/framework, do it.
It is never ok to just stay with one. Find a company that uses different languages/stacks/frameworks across the company and keep learning.
If the company understands engineers, they will be looking for problem solvers and not framework experts. You will be considered a senior engineer regardless of what stack you have most experience with.
I meant jump as jumping between companies, as I could always stay where I am. The main problem I've found is that very few companies go by the same belief that a developer can transition between languages/stacks. A while ago I applied for a job requiring a Scala developer with 2 years experience, and was turned down despite having 8 years experience with .NET.
Despite looking for stuff outside of .NET, I'd happily stick with the framework. Windows rarely lets me down, C# is a fantastic language, and I know the tooling around it well enough to benefit most teams in some way. Outside of moving for other reasons, I just feel that it can only benefit me to learn another stack. It's just a scary process, as for the first time since work experience during uni I'll go into a company not feeling comfortable in my knowledge of the language/stack.
I would first brush up on actual MVC concepts and truly under stand the 3-tier architecture design patterns. The C# MVC framework hides some crucial concepts away from the application developer. I would also brush up on CGI and FCGI programming just to get a bigger picture of how things are/were done. Then make suer you have a firm grasp on the HTTP protocol etc... Understand RESTful webservices, SOAP webservices, start looking at RPC ( webservices not over http).
Then... I would find a crash course on Unix/Linux, Linux acadamey, youtube lectures, books ("running linux" is a good primer), search .edu sites for online course materials, etc...
Third install a linux distrobution. spend some time with it getting comfortable with the command line. Then install a different distrobution and keep "distro hopping". The goal is to find the one you like the best and use that for your projects. My first distor was Slackware back in 94. then I landed on RedHat, then I ran Mandrake, then Debian, then proper Unix (freeBSD) for awhile. I currently run Ubuntu at home.
I bring this up because I have clients that run Mac's, other clients on CentOS/RHEL. You never know where your code is going to run. Especially since Python and Ruby can run on many different platforms.
I should also suggest that you read the Linux from scratch documentation. This will help you get a firm grasp on how a GNU/Linux system is put together. then at some point in your life actually build a LFS system.
The reason is so you can understand that not all GNU/Linux systems have the same tools. That there are some overlaps and but some major differences (like location of logs, install paths, package management) doing things in Debian is different than Fedora/Redhat, which is different than Suse.
Yes what I said above will take time to learn. Think of this as a side quest towards your ultimate goal. The skills you will learn along the way will help with all future endevors with doing Linux/Unix development.
Once you have a Linux distro installed, go through the process of setting up Apache. Then Nginx. Essentially set up a basic LAMP stact. While your goal is Python/Ruby there is some overlaps, and it will give you the basic skill set of administrating those environments.
Next install Python and Ruby. Start going through tutorials Build some things.
Remember there are many ways to do web development, and there are pros and cons to each way. Just keep learning, Sometimes a new way of doing things comes out of other area's. A good idea is a good Idea, Being able to take what you know from C#, or something say the NodeJS folks are doing and implementing it in Python/Ruby could be a very good thing for those languages.
Also here are some other topic you might want to look at:
* learn how to use the man program. run $ man man * using different shells, csh, bash, etc... there scripting languages. Learn to not be afraid of the command line. * build tools: make, autotools, cmake, etc.. build some software from source code to understand how different projects are put together. * compilers: gcc, clang/llvm * debugging tools: gdb, strace, dtrace, etc... * system monitoring: top, htop, iotop, glance, free, df, du. * system administration tools: kill, ps, ip, ufw, etc... it's nice to know how to find and shutdown a runaway program. also nice to know how to get your IP, opening and closing ports in the firewall. * learn how to use curl. So that you can test hitting a url from a commandline. curl with a bash script can automate some of your testing/debugging....