Ask HN: Making the move from Windows/.NET to Linux/Python/Ruby/etc?
First thing is make a plan on what you want to learn.  It seems like you have a firm goal of Python&#x2F;Ruby.  keep in mind there is lots of &quot;things&quot; you can learn.  It&#x27;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.<p>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&#x2F;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).<p>Then...   I would find a crash course on Unix&#x2F;Linux, Linux acadamey, youtube lectures, books (&quot;running linux&quot; is a good primer), search .edu sites for online course materials,  etc...<p>Third install a linux distrobution.  spend some time with it  getting comfortable with the command line.  Then install a different distrobution and keep &quot;distro hopping&quot;. 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.<p>I bring this up because I have clients that run Mac&#x27;s, other clients on CentOS&#x2F;RHEL.   You never know where your code is going to run.  Especially since Python and Ruby can run on many different platforms.<p>I should also suggest that you read the Linux from scratch documentation.   This will help you get a firm grasp on how a GNU&#x2F;Linux system is put together.   then at some point in your life actually build a LFS system.<p>The reason is so you can understand that not all GNU&#x2F;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&#x2F;Redhat, which is different than Suse.<p>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&#x2F;Unix development.<p>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&#x2F;Ruby there is some overlaps, and it will give you the basic skill set of administrating those environments.<p>Next install Python and Ruby.   Start going through tutorials   Build some things.<p>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&#x27;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&#x2F;Ruby could be a very good thing for those languages.<p>Also here are some other topic you might want to look at:<p>* 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&#x2F;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&#x27;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&#x2F;debugging.
* learn how to set the sshd and using ssh to remotely connect to other machines.<p>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&#x2F;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&#x27;t mean it&#x27;s useless). I have many books that discuss the inner workings of protocols that newer books on the same topic leave out.<p>Lastly, have fun while you are storming the castle, Don&#x27;t make this into a job&#x2F;work or you will get burned out.