I had an opportunity to audit a computer science class this week at Washington University, a class that was teaching students how to write iPhone apps. It was their final presentation, and I got to see a dozen apps that were very impressive. As I was watching the kids present, I was thinking back to my college days and the similarities and differences about my education.
Of course, back in my day real programmers wrote in Assembler, and maybe Fortran. None of this object-oriented stuff had even been invented. We also had punched cards, which is probably why I never became a programmer. In grad school, we had video terminals because PCs were still being tinkered around inside Silicon Valley garages.
In the Wash U class, most of the students had their own Macbooks, some better than my own. Each was given an iPod touch to use during the semester and this session was the moment of truth, where they had to demo their apps in front of the class. Most of the programming projects were functional, although there were a few students that had obviously been putting some long hours trying to get the bugs out of their apps. One of the kids was working on his presentation and actually debugged his app during class. Some things never change.
I was impressed first of all with the apps, which ranged from tracking what is in your fridge to being used by a personal trainer to track their clients’ workouts to locating friends on a campus map during free times. There was an app that taught people how to count cards at Blackjack –this could have helped one of my dorm-mates who would periodically make a run to Tahoe where they still used single decks and come home with enough money to pay for his living expenses. Another was used to collate and tag photos from Flickr. Each team had to research and find an app to build that wasn’t yet sold on the App Store, too.
I hope the kids take the time to finish them and post them to the App Store. Some of the apps were very polished and could probably be used as is with almost no additional effort, while a few just crashed with the slightest tap on the screen. I was also impressed with the quality of the presentations and how polished the kids were in front of the class. This isn’t what I remember of my nerdy classmates back in the day, where we seldom even spoke to each other, let alone spoke Powerpoint. Most of the kids put together a few slides that showed their decision-making and progress during the class. Some of the apps were built in teams, some solo. There were about 25 kids in the class, with two women. (This is about the same sad gender ratio in my day, too.)
These were not beginning computer science students by any means. Each of them had to have an understanding of a lot of different pieces, including the graphics interface of the iPhone itself, database calls, Web services, and the Apple development environment that is used to build the app itself. That is a lot for any programmer to handle, but the kids took it in stride. You could tell that they learned a lot during the semester, and were proud of it too. Heck, I was proud of them and I didn’t even know them.
One of the things that I was struck with during the class was how collaborative the kids were. This wasn’t the introverted nerds of my misspent youth — these kids were calling out suggestions to help each other and try to remove the remaining roadblocks in each other’s apps. Some of them had tried to go down a particular path with one tool, only to change horses and use something else. It was fun to watch them get all excited about some arcane code fragment. Part of this I think was because the iPhone environment is so new and so contained that it makes it easier to collaborate, because there are so many things to learn that are outside the normal coding process.
They also learned first-hand about feature creep and trying to hit their requirements on time and how to balance making things work with making things look pretty.
Speaking of which, most of the students had high standards for the look and feel of their apps. There isn’t much screen real estate on the iPhone to fool around with, and you have to make every pixel count. Some of the kids took the time to find the right icons to display on screen, and they all took pains to make use of the various menus and screen controls that make the iPhone apps easy to use with one or two fingers. That was impressive, and showed me that the iPhone really has a future and why 100,000 plus apps have been already created.
You could also see the beginnings of professional computer scientists here too. A few of them mentioned how they coded in pairs, using extreme programming techniques. I think that meant that the pair stayed up all night to meet a particular deadline, but still, that is how it happens in the real world too. And learning object-oriented languages is part and parcel to today’s programming world, unlike the world that I entered after college.
One kid had the funniest line, talking about his mother, who is a project manager and a programmer. “My mom is very old school and knew all these Unix shell script commands that she never told me about when I was growing up.” Oh, youth is so wasted on the young!
If your local university offers a class on iPhone apps, you might want to stop by and be inspired. I know I was. Thanks to the teacher Todd Sproull for letting me sit in.
David,
Did you find that the students had a grasp of the core fundamentals of what they where building? Network components and in depth UI design? It has been my experience in hiring and training the latest round of college graduates that many of them lack the basic troubleshooting and understanding of the fundamental components that make up the Internet. Things like DNS, IP addressing, TCP/IP protocols and skills that are still essentially in working in today’s IT climate. Sure they can build a pretty good and functional iPhone app, but getting them into an existing team of professional developers has been a challenge and a steep learning curve. We have tracked most of this back to not learning those fundamentals like assembler language (hated that class but it did provide me a sound base to work from) taught us back in the day.
I know that schools have been confronted with teaching the latest and greatest technologies to attract people into the programs, but they are losing site of the key core concepts that many of us grew up on in the process. Although it was very encouraging that you mentioned pair programming and agile concepts seen in this particular class, maybe there is hope after all.
Thanks,
Ian
I think there always will be people who will skip steps, and certainly the ability to subnet a class B network is a dying art. And while the network troubleshooting skills are always going to be in demand, I think that there are better tools so in some sense you need other skills to stay on top of things. But as you say, there is hope. Thanks for your insights and comments.
Hi David- I really enjoyed reading this piece today. I’m a recent iPhone convert and am amazinged by the device on a weekly (if not daily) basis. I troll the app store weekly for cool new stuff and probably have downloaded about 40 apps to date. They range from finding new restaurants to online banking to playing Scrabble with friends, although I probably use the Facebook one the most.
It’s so interesting to think about the college set building iPhone apps in class, and on a platform that didn’t even exist a couple of years ago. It’s a very, very exciting time in computing and a really fun time to be working in tech. Thanks, as always, for sharing your observations.
Pingback: Developing the Next Gen of iPhone Apps Programmers « The SiliconANGLE
David, thank you for writing up this class. Todd put a lot of work into organizing and running the class, and I’m glad you picked up on the collaborative nature of our approach to computer science pedagogy.
I agree with the comment that students need more than iPhone experiences, and there is much more to our program than that. Our students do learn about protocols in our intro sequence, and they have the option of studying networking in much greater depth. It turns out to be an area of strong expertise in our department.
Most students experience assembly language programming and it serves well to connect vertically from their experiences with high-level programming languages to how computers actually do things.
I serve as our department’s associate chair, and as such I help with the curriculum issues. Thanks again for attending the demos and writing this up.
Ron,
Great that you commented and good to hear the emphasis on fundamentals in your program. I think the heart of my comment around assembler language wasn’t to actually teach it, but the critical thinking and troubleshooting skills gained while doing that kind of low level work. The critical thinking and scientific method of thinking I learned during my engineering program in college has served me so well in the technology space where I’m constantly having to learn new things, reinvent myself, and troubleshoot new technologies.
One of the standard interview questions I’ve made part of my routine is to ask people what the OSI model is and how it applies to what they do, because it gets to the heart of them really understanding how to apply the concepts not just the book answer to the question. WYSIWYG editors, class abstractions, drag and drop development is great as a tool, but nothing teaches you the core concepts like coding HTML from notepad and getting down and dirty with the technology.
Again great piece and good conversation!
Thanks,
Ian
This is inspiring I think I will start a blog myself one day in italian of course. Great post, grazie.
Pingback: How Washington University is Developing the Next Generation of iOS Programmers
Pingback: How Washington University is Developing the Next Generation of iOS Programmers | Techlies - News for the Herd - Headlines that Shatter