Why iPhone?
When I attended college at the University of Wisconsin - Milwaukee in the very early 90's there was these Software Engineering I and II¹ classes that served to teach one how to work on a real-world project rather than writing small programs to learn specific computer science concepts. Instead one was expected to work on a team, create a schedule, test procedures, and of course finish by the deadline which was the last day of class. One was expected to use big-project tools such as make rather than running gcc by hand and using source code control (at the time RCS was big) rather than keeping around various .orig, .old, and .this_one_really_works versions of your code. All-in-all a pretty good class that definitely helped me get my first real job.
At any rate, first day of this class was to choose a project to work on. You see, just like the real world, you didn't just start coding something from scratch. Instead, the professor had a whole batch of different projects available that had been worked on by students that had taken the class in prior semesters. it was up to you to choose a project and then implement additional features as defined by the professor. Many of the projects were X-Windows based applications which at the time meant low, low level X as there was no GWT or Qt back then. A couple were PC/Windows 3.0 based apps, and then there was one, just one, NeXT project. I had seen the single black NeXT Cube machine that often sat unused in one of the EMS building's 7th floor labs and knew right then and there I wanted to work on that.
The project was called ACrypt (Analog enCryption) which was kind of an audio encryption education lab sort of application. It allowed one to record audio using the NeXT's built in microphone (which in and of itself was a big deal back then) and then encrypt it using a variety of algorithms. Various panels and inspectors would allow the user to change parameters to see how they would affect the outcome. Of course one could then take an encrypted sound and decrypt it to turn it back into the original. The new feature myself and my teammate were to add was this new-fangled wavelet encryption algorithm which also "had promise as compression algorithm too" according to the professor. (Little did we know that wavelets would form the basis of a number of compression algorithms used now to stream audio and video over the 'net.) My first semester teammate was a math wiz and just happened to be married to one of the tenured professors in the math department so her job was to write a C library that implemented the wavelet encryption and decryption algorithms. My job was to work on the front end, record sounds, display them graphically to the user as a nifty waveform, allow for various parameters to be tweaked and pass the sound data as a big array of bytes to/from the library written by my partner.
Little did I know how difficult that would be. Back then one couldn't just look up things online to figure out new stuff. The internet existed but one largely used it for e-mail, newsgroups and FTP² there was no world-wide-web and certainly no Google to help you find things. I had only the printed NeXT documentation, sample code, and what the prior semesters team before me had left behind to teach myself Objective C, the Interface Builder, and Next's AppKit library. The NeXT machine being such an oddball in the lab meant that nobody else really knew how to use it much less how to write NeXTStep applications. I was never sure but given the state of the code I started with I think the team before me dropped the class having decided it was easier to try again next semester and choose an easier project. I remember many, many, late nights sitting in that lab simply trying to figure out how to connect up a button to call a method on an instance of an object and even figuring out what objects themselves were supposed to be as object oriented programming itself was a pretty new thing as well. But, in the end we finished our project and had a successfully working application that knocked the socks off of everyone else who had been slugging it out with X-Windows coding all semester. We had a snazzy UI, could record and playback CD quality sound, and encrypt it all at the same time. The interesting side effect to boot was that the encrypted sounds files were smaller than they were beforehand! The professor was impressed and we each received a nice solid straight A for our efforts.
Although the ability to write NeXT software seemed like an interesting but overall fairly useless skill fast forward to 1997 when Apple purchased NeXT and then to early 2008 when the iPhone SDK was released and the result of all those late nights almost 20 years ago is that I had really taught myself how to write iPhone software! That old 68030 NeXT machine certainly didn't do multi-touch, didn't have a GPS receiver, or even a color display but there is an awful lot of it in the iPhone and the tools and techniques used to write iPhone and NeXTStep applications are largely the same. Much of the Cocoa class hierarchy is the same as that which existed on the NeXT and tools such as Interface Builder work much in the same way as they did back then. I quite enjoy carrying around and working with my iPhone and imagining it as a souped up, shunk down, version of the computer I used to learn all about it long before it ever existed. Naturally, when the 3G models came out, I bought the black one. After all it's the only appropriate color for a NeXT!