Saturday, December 02, 2006
In my current gig, I'm going to be working on a lot of software for Linux. This is good. I've always preferred UNIX-style operating systems to Windows. I see Windows as an operating system for regular people, whereas UNIX is an operating system for "real programmers." My first job included a lot of UNIX development, and since moving into the Windows world, I've missed it.
I'm re-learning all the UNIX skills and knowledge that I used to have. I've dug up my old O'Reilly books and skimmed them to refresh my memory, and I'm reading lots of man and info pages. In some cases, I need to learn how the Linux ways of doing things are different from the traditional UNIX ways, but for the most part, my old knowledge is still relevant.
I really enjoy having the variety of programming tools available on UNIX. Microsoft's Visual Studio is nice, but not having all those nifty utilities like make, vi, grep, find, awk, perl, sh, mail, and tar available by default on Windows machines has always been frustrating. Sure, I can get all those things for my Windows machine by installing Cygwin or other packages, but that doesn't help when I'm using another user's machine, or trying to create automated scripts that will run on anyone's machine.
I'm working with some people who have not had a lot of UNIX experience. They find Linux frustrating. There are no nice IDEs like Microsoft's Visual Studio available for Linux. They've tried Eclipse, kdevelop, Visual SlickEdit, and a couple of others, but none of them compare favorably to Visual Studio. They are also learning how to configure the systems, install device drivers, and generally try to get everything to work, and it's not as easy as it is in the Windows world. In many cases, it's just a matter of learning something new, but in many others, there is no denying that Linux is just difficult.
The boss is trying to get us all to standardize on Visual SlickEdit for Linux development, as it is the most similar IDE to Visual Studio. It's nice, particularly with its support for source browsing and automatic completion (like Visual Studio's IntelliSense). It has support for emulating a lot of editors, like Vi and Emacs, so I haven't had to re-train my fingers to use a new editor. While it is nice, when my 15-day SlickEdit evaluation license expired, I went back to Emacs. The boss is going to get me a real SlickEdit license, but I may never find time to install it.
The boss also wants all the source code that is currently in CVS repositories to be moved to a SourceSafe repository. I hope I never find time to do that.
I have a couple of different ways to do development. When I'm in the office, I ssh into the Linux development machine, and then run Emacs with Cygwin/X on my laptop. That works really well; the experience is indistinguishable from sitting at the actual machine.
When I'm not in the office, or when I need to avoid screwing up the shared development machine, I have a VMWare virtual machine running Linux on my laptop.
A dual-monitor setup works well with these arrangements. Putting all the Linux windows on one monitor and all the Windows windows on the other helps me remember when to do Linuxy things and when to do Windowsy things.
When I first started programming, I hated UNIX. As a Mac devotee, I thought UNIX's commands were too cryptic and that features were too hard to find. I still think Linux has a long way to go before it can be used by "regular people," but as I've gained more experience, I've gained more appreciation for the philosophy behind UNIX. It doesn't make things easy, but it doesn't get in your way and it provides a lot of power.
With Linux, I hope my job will suck less.
Other people have pointed me in the direction of Python, but from what I have seen of Python it doesn't really appear to be a something that I can build Linux applications with. I think that C is more of the Linux language.
Python is not a bad choice. It's a good easy-to-learn general-purpose programming language, and there are enough people out there using it that you shouldn't have trouble getting advice and support.
C and C++ are low-level languages, which means you have to understand a lot more about the details of how computers work. The benefits of these languages is that you can write high-performance software, device drivers, and kernel extensions. Again, these are popular languages, and there are lots of resources out there.
If you have no programming experience, and are going to be teaching yourself, I'd recommend starting with Python. That will get your feet wet, and you'll be able to try a lot of different kinds of applications (GUIs, web apps, command-line utilities). You can eventually move on to C/C++ if you need that kind of power.
If you have a particular kind of application in mind, or a particular job in mind, then find out what language is used by the people working on it.