Mobile development. That's what I see when I look forward. The place where I work is getting into iPhone development. I tried to get my department to give the windows mobile platform a shot but even I couldn't take WinMo 6.x after a while. Maybe Windows Mobile 7 will be better but for now it's the iPhone. People like using their iPhones. People love it when you write an application that gives them yet another reason to whip out the iPhone and start two finger tapping.
So far I've been writing the back end web services that handle the data part of our iPhone applications and my co-worker, Kotaro, has been writing the front ends on his Mac in Objective C. The web services part is great because since it's just XML/Soap, any platform could connect to it and make use of the services, with proper authentication of course. What I'm trying to do now is expand my skill set to include actual iPhone development using tools from Mono Touch by Novell. The Mono Project is an open source .Net framework that allows a developer to write .Net code and target Windows, Mac and Linux. I want to do iPhone/iPad development with it but it'd be great to get familiar with those other platforms as well by writing code for them.
Why learn a new development platform? Same reason I learned the first one, because it's fun.
I've also been thinking about the gaps in my skill set. One of the problems that comes from being a self taught developer is that I've wasted many hours writing something that has already been written. Also, there's this gnawing concern that there is so much about development, even on the Microsoft platform, that I don't know that...I don't know what I don't know. Sometimes I come across posts like this and this and think, "Dangit! I've been doing this over a decade and I've never even heard of some of this stuff!" At first I tried to tell myself that it was just one guy's opinion (it is) and that there's lots I know that isn't on those lists (also true) and I've been doing this for years so I must be doing something right (right?). But the more I thought about it, the more I realized that I was just a few Google searches and test projects away from being able to answer all of the questions in those two posts. Just another visit from the binary thought system 0 (I'll never figure all this out) and 1 (Why shouldn't I be able to figure it out?).
Still reading? Even after that 0 and 1 nonsense? Okay. I'm trying to go deeper. In episode 6 of This Developers Life, Scott Hanselman and Rob Conery talk about "The Stack" and how much a developer should know about it. Professional developers are constantly running into things they don't know how to fix (at first). Take a look at this Twitter stream and you will see. The Stack is all the stuff between what a developer types and the 1s and 0s the system actually works with (sort of). For example, when I write code in a high level language like Visual Basic .Net or C#, it looks something like this:
string firstname = "John";
string lastname = "Smith";
string fullname = firstname + " " + lastname;
Not beautiful code, but you get the idea. I click "Build" and several steps later it's processed into something like 10011010010101110001010...and the machine does something. The point is, I don't really know how to program a computer at all. I stand on the shoulders of giants standing on the shoulder of giants so I can reach high enough to pull the lever and make the computer spin. I only know how to write descriptions of what a program should do and then I let the magic of MSIL and various compilers actually write the program for me. So when I say I want to get deeper into the Stack, I mean that I want to learn more about what goes on after I type up all my C# or VB code and hit Build. That means getting into things like C++ and Assembly.
Now it's possible I'm going to get into the Stack and run screaming from what I find there. There is a part of me that says I'm 36, I am what I am and it's hard enough to learn all the new stuff let alone all the old stuff.
But thinking about this stuff reminds me of a story I read about a modern boat that ran aground several years back because of a GPS error. The crew on board could have used their map or just looked out the window but the GPS said everything was fine so they went full speed ahead until the hull split open.
So I'm going to write a program in C++ that does something useful but simple. Then I'm going to write a program in Assembly.
If you made it all the way to the end of this post and you want more, I suggest:
- A Brief, Incomplete, and Mostly Wrong History of Programming Languages
- In the Beginning was the Command Line
The next post will be...a true life entry.