Last week at work I got a new project on .NET Framework. As a good developer I tried to run it on Linux using .NET Core but I failed and my work's laptop didn't had Windows installed, what could I do?.
So, I went running with the tech support area, told them the problem and after some research the only solution was: delete Linux, install Windows and install Linux again.
Fucking Windows. 😡
But that inspired to me to write this post.
This is what I consider a good environment to develop quick, easy and be coolest in the office. Don't judge me!
P.S.: I'm using Ubuntu 18.04 because why not? I had Fedora 27 before eveything happened and it's still my favorite but I will give Ubuntu a try again.
Let's get started!
1. Install essential tools
We need the basics, you will suffer if you don't have them:
sudo apt-get update
sudo apt-get install build-essential git curl xclip
2. Install zsh
Zsh (also called Z shell) is an extended version of the Bourne Shell (sh). It has many cool features against original bash:
- Plugin and theme support
- Spelling correction
- Automatic cd
- And more!
Just install it with the follow command:
sudo apt-get install zsh
3. Install Oh My Zsh
Now we have a good shell, great. But Oh My Zsh will give us extra power:
Then, just copy the follow command:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
And you will get this:
4. Start using zsh by default
If you restart your terminal it will be using bash again. Why? because you need to change it explicitly with the follow command:
# Change the shell to zsh
chsh -s `which zsh`
The bad thing is that you need to restart your computer 🙄.
# WARNING! It will shutdown immediately :(
sudo shutdown -r 0
But after rebooting this will be the result 😍:
5. Install vim
It's time to get into hacker mode 👨💻 :
Just kidding.
In my experience, working with vim has been the best idea ever because:
- It's lightweight
- It's everywhere (even on Window's Git bash)
- I feel that I write code faster
- Don't even use the touchpad (or mouse)
- I'm forced to learn things such as package names and understand they purpose
- Syntax highlight for many programming languages
- Shortcuts as Sublime Text or Visual Code Studio
So, why don't you give it a try?
sudo apt-get install vim
This is the end for the part 1 😋.
In the next post I will cover:
- Configure vim and add steroids
- Fixing some vim weird errors
- Mastering vim
See you on the next post!
Part 2: https://dev.to/jorge_rockr/my-development-environment-setup-part-2-4ck9
Top comments (39)
I still don't understand this idea that Linux somehow has something that Windows doesn't when it comes to development. I develop in multiple languages and have never found the need to use Linux or found Windows lacking in any way so it would be interesting to hear what you think Linux brings to the table that Windows does not as surely a good developer should just be using what they feel most comfortable with?
My last windows development experience is a bit dated and many things happended - especially WSL happendend. So what I have to tell is cum grano salis. My last experience is from late 2014/early 2015.
I was a Java developer - no problem here. But what made me go away was, that I was a) accustomed to a linux shell (cygwin is no help) and b) part of my toolchain - e.g. git - needed a minimal unixy environment done with MSYS. And the really awkward part started, when you whad severeal MSYS environments on your machine which interfered with one another (+ your cygwin environment) and required you to carefully rewrite the sequence in the $PATH (what should trump what) so to say.
So doing Java everything was fine. But doing additionally scripting in ruby and having somewhere a perl in your cygwin could make your life harder.
My conclusion is:
developing C# in windows with Visual Studio (Professional) works like a breeze and has everything to offer, to develop for windows
developing Java is nice under windows and linux as well. I experienced no differences
using something like ruby (or e.g. python had some known bugs on windows and who cares for that?) in combination with other *nix-centric ecosystems made my life harder as it should be
From my experience, *nix systems were per se developer centric - you could fix your own system, if you leave apple out in this point - and offer a rich integration, which microsoft for years neglected.
Only the last years, they are going to reconquer developer's hearts with WSL.
windows sucks away lots of resources and it have many background services that keep my laptop busy (security center cannot be disabled, cannot switch to manual updates, etc).
With many Linux distros you can have more control over your workstation and more resorces available.
I can only see this as a problem if your machine isn't up for the task in the first place. Again, I've never had any issues with Windows.
Well, yeah, if you are filthy rich and can afford a filthy powerful machine, then you can even use a virtualized MacOS xD.
Jokes apart, you are right, but in my case I have to do very different types of work on my machine: python development, nodejs, frontend, spin up virtual machines, use containers, etc, so I always felt I need as many resources as possible from my laptop. For instance, I think disk usage is an issue with windows. I'm developing a xamarin app, and visualstudio+xamarin take gigas and gigas of disk space (it's not the OS, though, maybe I am a little OT :). Ever felt this way?
You can disable those by booting windows in safe mode
I actually never tried that. I always though that you have to use safe mode when something screwed up your pc. It is usable? Have any downsides?
See my post below about coming from a Unix background...
For me, until Windows 10 introduced WSL, it was not a place I could get my work done in a way that I found productive. I use a visual code editor (vscode) when doing much of my actual coding but for the other times, I am editing configs, running scripts, testing out code in REPLs, doing package management, using git... Etc. For all those things I immediately turn to the command line. Vi is magic for quickly editing a conf file. Bash/zsh are great for simple but powerful scripting. Yum/apt/etc are great for quickly getting software on your machine. Node or python or Elixir are great to test ideas out in their interactive modes on the cli. Cli is the fastest and, in my opinion, easiest way to use git. It's all made powerful by a great terminal and great shell. I find Windows lacking in both... until wsl came along.
I just find that really difficult to contemplate. I've been a Windows user all my life. I edit config files in Notepad++ and really don't understand the need for anything else. I use git through a standard CMD prompt in Windows and again have never needed anything more when I've been developing in .Net, Java, JavaScript, Python, PHP and PL/SQL.
I don't mean any disrespect but the point is that you will never contemplate the *nix way if you don't try it seriously. The only problem there is with Linux, in my opinion, is that starting is hard. I was lucky to have a lot of friends that help me go through the first steps of learning.
It's not a problem with starting with Linux. I'm fluent in using Linux from having to learn it at University but the point here is after using both Windows and Linux I fail to find any issues with just using Windows. It just seems everyone seems to be using Linux to develop on because it is seen as 'trendy' rather than actually being more productive.
I can't talk for others, but provisioning tools such as SaltStack, the POSIX terminal (that I'm sorry, Powershell is a long way off) and the ease of use of SSH (in both ways), all of that combined with the fact that the majority of servers on the Internet are running Linux (and the place I worked and my VPS provider does too) and the cost of Microsoft license is the reason why I prefer Linux over Windows. Furthermore, I've always hated the Windows Filesystem. I can't count the number of time I had ACL issues on Windows, sometimes I needed to use third-party super-user plugin to force a folder to be read-write for everyone (like an upload folder for instance).
I'm not a stubborn person, and I can admit that VisualStudio is probably the best IDE, after trying IntelliJ, Eclipse, Netbeans and XCode. SQL Server is a real good SGBD for the price to pay (compare to IBM DB2 or Oracle Database 12i). The real problem is the licensing: so complicated for nothing. SQL Server can be bought per number of people connecting, or per core processor. You are forced to buy Windows Enterprise or higher.
Lastly, Linux can run efficiently on older, less powerful computer compare to Windows. Running a dozen websites on a Windows server costing 4k might not be to the reach of small enterprise. It may be more efficient to buy 3, less powerful computers, to run with a load balancing, a fail-over system that cost the same price running Linux. The money you spend on licenses (that can easily cost in the thousands) can be invested in training. To be fair, it is easier to find professional for windows compare to Linux.
As developing using Python, I have found many packages have weird issues working with windows. WSL is great, However, takes some extra step to get into (start ssh server, tell pycharm to use wsl python as the default one)
You can't run docker container natively hence the missing unix namespaces. I'd image some performance bottlenecks/higher cpu & ram load since your docker engine runs in a vm.
well if you work in some enterprise companies, you have very limited windows with slow security scans, or.. linux :D
Okay pardon my newbie and dumb question, but can I run bash scripts(.sh) using Zsh?
And also, and this is just my opinion, have you given Ubuntu MATE a try? I prefer it above all Ubuntu flavors... specially the flagship Ubuntu that now comes with GNOME Shell...
Lastly, yeah, fucking Windows...
There aren't dumb questions :) Feel free to ask.
Yes, you can run bash scripts because zsh is just an extension.
And no, I haven't tried Ubuntu Mate yet, maybe I should give a try at home's computer :D
“There arent dumb questions”. Try this on stackoverflow and you would wish u didn’t exist 😜
I am mostly with you. I jave a few variations on your setup though.
I prefer Neovim to vim
I prefer Prezto to oh-my-zsh
In terms of Windows, what I always found lacking was a decent terminal and shell. Those are different things.
For terminal, I now use ConEmu (and wsltty sometimes) and love it... A lot.
For shell, cmd is too different from *nix shells to be useful to me. And I have never been comfortable with PowerShell, though I wish I was as it's very powerful. For me it comes down to growing up using Unix command line and finding that to use Windows, my knowledge only makes me better on Windows... but learn *nix shell scripting and you can use that anywhere.
I wanted to start using VIM but it feels like it's too hardcore for me, I'm just a beginner, Although I've thought about forcing myself to use it
In my next post I will cover the commands I use day-to-day. So don't worry, I know it's hard, but with this setup made it easier
Use whatever u r comfortable with, although it s a must to know basic vim commands. Is handy when u need to log in to linux servers for basic dev tasks
Re-opening your terminal would be enough.
I tried but no luck hahaha. Restarting worked, I dont know why.
You don't need to restart. Just open your regular terminal/shell and type
zsh
and your current shell will be replaced by it. If you want to start to use it without this workaround, you can close your current user session and open it again, after you changed your shell configs.Sorry that Windows blue-screened on you, Jorge. Glad you were able to channel your anger into something constructive (i.e., this post).
Windows is a very good development environment. Especially if you are all-in on the Windows way of developing.
If you have not drank the Windows flavor-ade, you can still go a long way using WSL, or Cygwin, or even SFU (although I think WSL supersedes SFU, but not everyone is on Windows 10). One foot in each world. Of those, my personal preference is Cygwin.
There is a native (GUI) Windows build of Vim. (Just as there is a native build of Vim for Mac, called... MacVim.)
For doing .NET development, Visual Studio is hard to beat. If you are doing Mono development on an non-Windows platform, Visual Studio (formerly Xamarin) for that non-Windows platforms is highly recommended. I did all my F# coding for Mono on a Macintosh, without a hitch. Only thing lacking was WPF, since WPF is tightly coupled to DirectX — probably why Microsoft hasn't open-sourced WPF as they've done with so many other .NET technologies. (Open-source kudos to Microsoft under the Satya leadership era!)
Code on!
I usually use neovim instead vim on Ubuntu.
Out of curiosity, what drives you to Neovim instead of Vim Classic?
You can read more here.
Roadmap: Roadmap
In essence, neovim provides many common default settings for you. It is a refactor of traditional vim, keep good parts of vim and also an effort to make vim more productive.
You don't need to restart the computer, however you have to logout and login again.
Cheers on the setup.
I can't believe it when Microsoft launch .Net Core and say that can runs in Windows, Linux and Mac.
I decided migrate my bash/bat scripts and test in a console application and it's fucking true.
Now with vscode and .Net Core no matters the OS that you choose as developer.
In past years I worked with Windows, Linux and now with MacOS... and learn that all have problems and BSD (freezes and restarts). Even need formated time to time, all of them.
Remap capslock to esc and vice versa :)