
Ask HN: Making the move from Windows/.NET to Linux/Python/Ruby/etc? - EnderMB
I&#x27;ve carved a nice little niche for myself as a .NET developer with experience with a number of solid Content Management Systems, and it&#x27;s served me well.<p>Despite this, I&#x27;ve always felt that committing myself to a single stack isn&#x27;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.<p>As of right now, I have three options to consider:<p>* 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<p>I recently received an offer for the latter, at a company that is largely language agnostic. It&#x27;s an exciting move for me, but it&#x27;s one that worries me a bit, because the experiences are going to be so vastly different. I&#x27;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.<p>Have any of you made the jump from experienced .NET developer to inexperienced Linux-based Python&#x2F;Ruby developer? If so, would you recommend it? Did it improve you as a developer?<p>Finally, are there any good resources for transitioning over to a Linux stack? My command line knowledge is pretty poor, although I&#x27;m fairly handy with git and Powershell. Ideally, I&#x27;d like to spend the next 2-3 months solidly learning the tools I&#x27;ll need to transition easily between stacks. I&#x27;ll need to learn enough of the language and surrounding frameworks to be dangerous too, but I&#x27;m banking on that not being as difficult considering I&#x27;ll be moving from MVC to MVC in most cases.<p>(Since someone will likely raise it, I&#x27;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&#x27;s anywhere near the level of the standard framework.)
======
aespinoza
It depends from what you mean by "Jump". I used to do .Net/C# only. Then I
decided to learn Python, and to be honest it has only made me a better
engineer. I am now learning Go.

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

~~~
EnderMB
I've got the full intention of keeping up to date with .NET. After all, no job
is permanent, and there's every possibility that I'll be using .NET/C# in my
new job anyway.

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.

------
iamNumber4
First thing is make a plan on what you want to learn. It seems like you have a
firm goal of Python/Ruby. keep in mind there is lots of "things" you can
learn. It's a marathon not a single race. Once you have your main plan, learn
this, learn that, etc... Also set aside some time to look into other concepts
to pick up along the way.

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. * learn how to set the sshd and using ssh to remotely connect to other machines.

Some final thoughts; Find your learning resources. Find tutorials on the
topics you want to learn. Look at .edu sites as that you can find free course
materials and lectures. Look for lectures on youtube, start listening to
Linux/Unix podcasts for new topics and news. Put together a reading list on
the topics you want to learn (also keep in mind that just because the book is
old doesn't mean it's useless). I have many books that discuss the inner
workings of protocols that newer books on the same topic leave out.

Lastly, have fun while you are storming the castle, Don't make this into a
job/work or you will get burned out.

