So I started a job at a new company, a famous search engine! One consequence is that I am no longer using Windows and the Microsoft Stack, instead, Linux, shells, and emacs.
What do I miss from Windows development
This is a really cool functional language that has some nice facilities for parallel and async programming. Unfortunately, I wasn’t able to use it at my work.
Visual Studio Intellisense
Eclipse has this and Emacs has some completion and search facilities. But, Visual Studio’s blows both of these away in it’s speed. With Eclipse I often find it faster to type out the whole token instead of waiting for it to complete something.
var keyword in C#
Using java now, I am frustrated by its verboseness. This is especially a problem when one makes heavy use of Generics.
Many classes here require function objects. The workaround is to usually create an anonymous class that implements one method on an interface. The syntax is much bulkier than C#, let alone F#.
Java’s generics feel clumsy and less powerful. The main source of this clumsiness is the constant compiler warnings one gets and has to supress when using generics in java.
What do I love about Linux development
Ok, this is an insanely powerful and addictive tool. Many people hate it but once you start to use it you want to spend more and more time using it. It has all these nooks and crannies to discover. For instance.
Org-Mode is a combination of a note-taking mode, to-do list, and publishing framework. People have found many ways to use it. In fact, this blog post is written within org-mode and published using org2blog without ever leaving emacs. org-mode has tags to make it super easy to embed source by bracketing it with tags.
Other Emacs stuff
There is a killer twitter application built into emacs for reading and publishing all your tweets. And the Calc application is a very advanced RPN Calculator with symbolic computation capabilities. The power of using these different tools from within emacs is the ability to use emacs text editing and scripting capabilities in a consistent way in each of these. Also, it makes integration of input and output from these different things very easy.
Windows shell is really sad and the paradigm there is to do everything with the mouse. There is something liberating about being able to do so many things without lifting your hands off the keyboard, through, emacs, the shell, and all the utilities on Linux. Little things like the history and grep and the ease with which one can whip together shell scripts to automate things. I know one can install things like cygwin but it is all a bit of hack on windows.
Yes, its just a book, but I haven’t seen many books of this depth on programming. It illuminates many pitfalls and gotchas and emphasizes immutability, correctness, and efficiency. I think any programmer would benefit from reading this.
The feel of programming with the Linux stack is different, IMO. With Linux there are so many choices for tools and how to combine them. In contrast, on the windows platform, almost the entire stack comes from Microsoft from the OS, to the language and tools. While this simplifies certain things it feels limiting in a way. In Linux, I feel like I am exploring a vast ocean of possibilities.