Switching Gears

New Horizons

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

F#

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.

lambda expressions

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

C# generics

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

Emacs

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

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.

Bash Shell

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.

Effective Java

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.

Intangibles

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.

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s