Further Your CS Development with Mac OS X

I've been involved with computer science and related education as a student, staff, and instructor for more than 13 years. In that time I've seen the emergence of more "casual" computer science students -- those who have chosen computer science and have rarely played or experimented with UNIX, do not feel especially comfortable at a command line, and sometimes do not appear to enjoy programming.

It's true -- contrary to popular belief, a computer science undergraduate education alone does not make you a programmer or software developer. You know what I'm referring to -- the assumption that a CS degree means you know something about software development.

While many fine developers have arisen out of the traditional computer science undergraduate curriculum, that's not always a result of the actual education. You would be surprised at the percentage of professors teaching computer science who do not program often. The fact of the matter is that computer science is a huge field and not all areas require regular use of programming skills. Programming assignments are an excuse to get students to learn about concepts by doing.

How Can You Get the Most Out of your Education?

Perhaps running Mac OS X as your sole computer system while in college offers a way to further your educational and professional development.

The marketplace likes its engineers to have some knowledge of popular operating systems used in corporate environments, most notably Windows. But to solely focus on that OS could hamper your progress. Let's face it -- Microsoft designed Windows to be easy to use for users and developers. Perhaps they went too far?

I'm always dumfounded while teaching to see that some seniors can't use the UNIX command line. It's not just that they haven't seen or used UNIX systems much. It's getting to the point where one never needs to open up the command line on Windows systems. Everything is point-and-click, sometimes without analogous command-line tools.

While this is admirable for typical end users, it's almost a detriment for inquiring students. The lack of exposure to a command line while on Windows systems makes the jump to UNIX systems even more difficult for some. This is a shame, since much more has been documented and (oftentimes more openly) developed for UNIX systems, making understanding of the core technology easier on UNIX than Windows systems.

If you're not comfortable on a command line, you just might be destined to a script-kiddie existence in which you will be at the mercy of others to develop neat, new technology with a GUI for you to accomplish tasks. This is perfectly acceptable for normal computer users, but it would be nice if our students studying computer science and related fields had a bit more expertise.

On one end of the spectrum, we have relative computer science neophytes versus insatiable curiosity seekers. Often, but not always, it is the former on Windows systems and the latter on UNIX systems. For almost two decades, students have been using UNIX or UNIX-like operating systems such as the Berkeley (BSD) variants or Linux to build and learn more about computer technology. There has also been the whole open source software (OSS) development movement of the past few years, where most projects originate on Linux or UNIX and are then ported to Windows. OSS development is fantastic for computer science students, since it gives them an outlet to hone their development and personal communication skills while testing and extending their understanding of systems.

OK, What About Linux Then?

Why not run Linux as your sole operating systems with the combination of VMware for x86 emulation, WINE, and homegrown OSS packages for productivity? While there are ways to get Office and other productivity software running on Linux, not everyone wants to make a huge production for every new application installed.

Linux is a great choice as a server, just not as the preferred desktop productivity environment -- at least not quite yet. For example, Open Office falls short of Microsoft Office -- which is a bargain at $149 for the Student and Teacher edition when you consider all the features provided.

Commercial software is not a bad thing. When you decide your time and level of productivity outweigh the cost of acquiring OSS or commercial software, you make the investment. There are students who will take the time needed to make their Linux installations productive environments. However, I'd wager the time needed to load and configure an equivalent amount of productivity tools on MAC OS X or Windows is less than on Linux. And the number of people willing to invest that extra time is much smaller than those willing to get a Mac or Windows system. Before you come up with ways to contradict me, raise your hand if you're using a Linux box as your sole productivity OS.

Wouldn't it be nice if there were a productive operating environment in between Windows and Linux that had the power of a UNIX system for computer science education and development, as well as an easy-to-use environment in which to get everyday work done? Isn't there a system out there with these characteristics that still offers an opportunity to develop a variety of marketable skills in the workplace come graduation?

Actually, there is. From what I've seen in the past few years, Mac OS X offers the best combination to satisfy your inner geek and get your day-to-day tasks out of the way. Sometimes you want to explore, other times you just want to avoid hassles and get your work done.

In my recent time at a research university, I've seen more and more notebooks sporting a glowing Apple logo gracing the desks of students and computer science faculty alike. It is no wonder so many faculty are switching -- OS X is the first UNIX variant to be truly usable as your sole workstation. It has many features UNIX geeks have grown to love in Solaris, Linux, NeXTStep, *BSD, and HP-UX, but with an interface advanced users can really use and enjoy every day. Computer science students should consider a Mac for the upcoming school year due to two issues: productivity and hackability.

Productivity

You have a finite amount of time in a 24-hour day. Daily life is about making constant tradeoffs of your time and money as you choose what you want to accomplish. How you make those decisions, based on your resources and your desires, determines your overall productivity. Time is still valuable for college students in terms of studying, having a part-time job, attending classes, doing independent development, or attending to other recreational pursuits.

To help get your day-to-day productivity tasks accomplished, there are many high-quality software packages available on OS X. While the number of commercial software titles available on Windows dwarfs OS X, remember to factor in quality not quantity.

Core productivity software is available for development (Xcode), email (Mail.app, Entourage, Eudora, Mulberry), web browser (Safari, Internet Explorer, Camino/Mozilla), office productivity (Microsoft Office, Appleworks), and digital media organization (the iLife suite, including iPhoto, iTunes). Some software, such as OmniGraffle (for diagramming and charting) and most of the iLife suite, are available only on the Mac. Many times when OS X versions of popular Windows applications have not been produced, such as Microsoft Access, equivalent if not better solutions fill the void, such as FileMaker Pro.

Aside from core productivity, X11 (a windowing system originated from MIT) is also available as part of Mac OS X. With X11 you get the output of 20+ years of other folks grinding out useful tools and applications -- commercial and otherwise. In case you need any other software, many packages available on other flavors of UNIX have been ported to OS X. There is even a project, Fink, to manage the process.

It's like getting the qualities of Linux and Windows you really want and need without dual booting. But it's even better because the integration and overall design of Mac OS X meld the best of both worlds.

Just in case you find an application you can't run natively on Mac OS X, there is the option of Virtual PC for OS X ($129, no Windows OS included). If your computer science department participates in the MSDN Academic Alliance, you may be able to obtain copies of Windows and select other Microsoft software to run in Virtual PC. This is a great solution if you have the odd Windows program you need to run, or want to put in your time to master Windows and be truly well rounded. Be forewarned, as typical of an emulator, you will want the fastest processor and amount of memory you can afford if you plan on using an x86 emulator frequently.

The final point to productivity goes to security. Mac OS X saves you some worry by being relatively secure out of the box. If you run the netstat command on a brand new OS X system, you will find just two open ports: TCP 631 for CUPS printing, and TCP 1033 for account management purposes. Both are for local use only; other computers on your network cannot connect to those ports by default.

While no computer on any network can be guaranteed secure, a large step to thwarting attacks is to close all avenues of entry, such as open ports. You should not run into instances of your newly installed system being hacked over the network before completion of system updates and patches. Less to worry about again translates into more productive time for you.

Hackability

I'm not talking about hacking in a malicious sense, but rather poking around a system to learn about it and create functionality. With its BSD heritage, OS X is not some newbie operating system. It is a mature, extensible one. On Mac OS X, you actually have two parts to the overall system: Aqua, helping define the Appleness to the OS graphical user experience, and Darwin, the core UNIX foundation the system is built on.

Apple made the unusual step of choosing an open source core, Darwin. Anyone can download Darwin; it has even been ported to x86. Apple releases its changes to Darwin to the community, fostering a collaborative environment. Once more, it's the best of commercial software and the open source movement working together.

When it's time to work on programming projects for school or personal curiosity, install the developer tools, gratis in OS X. GCC, Java, Perl, Python, Objective-C, and Ruby are all at your fingertips. About the only languages or compilers I can think of not included are Fortran and C#.

Once you're in the Terminal program for command-line access, you'll also find the familiar GNU tools, as would be found on most UNIX systems. There are even open source x86 emulators, such as BOCHS, if you want to spend time tweaking your own emulator instead of purchasing Virtual PC. Essentially, the visually stunning Aqua user interface doesn't prevent the inquisitive user from going to town customizing the system and developing tools just as Linux users do.

Final Thoughts

Because this article is running on O'Reilly's Mac DevCenter, I know that to some degree, I'm preaching to the choir. I'm sure there will be disagreements about particular points I've raised.

But the real issue here is this: In your world you are considered a computer expert. Therefore people come to you asking your advice about what hardware and software to use. I hope that some of the points I've raised in this article help you articulate why Mac OS X might be a good choice for serious CS students.

I've been a user of the Classic Mac OS, DOS, NeXTStep, Solaris, Windows, OpenBSD, Linux, and finally Mac OS X throughout the years. Mac OS X is the place I now call home. I think many others would be happy here too if they realized the benefits this platform provides.