When I first learned to program computers, each project was a small task oriented towards teaching a specific concept, while building on the concepts that I already had learned. Small projects each solved a single problem or puzzle that you could only use the computer to accomplish.

Project Euler reminds me a bit of this type of individual puzzle, but it's lacking one essential element for learning: Passion. That's not to say the puzzles aren't interesting, and perhaps this is more a factor of my interests today as opposed to what they may have been when I was 8, but after solving a few of them, the novelty wears off a bit. They're not really solving any critical or fundamental life problem, and my interest in doing heavily computational math wanes in proportion to the number of every day problems I feel like I could be solving.

This ties in a bit with my graphic design for web developers idea. What would be ideal is a series of small projects that would be worthwhile to complete. Maybe a CV site? Maybe a redesign of my blog sites? These things would be useful and educational.

I'm curious about what will come out of the iPad 2 event from Apple that is supposed to happen today. With the market for tablets opening up, it's just a matter of time until someone releases a more functional tablet than the iPad that Apple provides. I say this having read about the reason that the iPad is so successful - Apple's ability to offer the device for a low price. But I think that the iPad is still just a bit deficient in a particular area.

Don't get me wrong, I use the iPad very often. It's not deficient to the point of being unusable. I'm using to write this post right now, in fact. With a bluetooth keyboard, the iPad is almost a computer. And that's the problem - "almost".

Sure, I guess that it's not supposed to do everything a computer can, and I guess that's ok, but later this summer, there will be many tablets on the market that can do just that. The Fujistu tablet I saw announced yesterday looks really nice (and I love their products otherwise), and even Palm come HP's TouchPad with WebOS on it looks like something I wouldn't mind having, because at least it's a light installation of linux at its core and can be augmented.

With the iPad, none of this is so. The only way to create applications for it is to use a Mac to compile one and then launch it (for widespread use, anyway) via the app store. For as much as Apple touts their products as educational devices, you'd think you'd be able to at least write a program on it in Logo, or something. It seems like a device prime for on-device coding; something that will make it possible to run small applications.

I guess Apple's getting miserly with their fortune. They must not be making enough money off of the sales of movies, music, and other apps to allow an app that builds apps to enter the marketplace. If they could make it possible for an app to build apps that could then be deployed via the app store, they'd just make more money. The only thing they'd lose is a few sales of Macs to people who really didn't want to buy them just to make apps but did anyway. Maybe that number is huge, but it smacks of the gym membership tax - charging people for something they stop using afte the first week.

Anyway, I'm not really sure what the problem is, or why Apple won't allow a high-level language app on their devices. It'll be the first thing that really differentiates other tablets besides price. I'm looking forward to that.

This is a weird topic, since I'm not sure if it belongs here or at RedAlt, but I think until such time as I do it (since it's not talking about program planning), it's here for me to talk about. But if I do create the thing, I'll put it on RedAlt for other people to use as a resource. Ok, with that out of the way...

I have a problem remembering the codes for the obscure date characters that PHP's date() function uses. I know, it's something I should just know, but it's not. Yes, I have trouble remembering whether "M", "F", or "J" outputs the abbreviated form of the month name. I can never remember how to get the number of the day of the year. It's a real mental block and an impediment to my day-to-day life.

In contrast, I have absolutely no problem remembering how regular expressions work. I know that "\s" is a whitespace, and it's capital, "\S" is not a whitespace. I know that "{,4}" means up to four times. I even know what the "ism" flags mean on an expression. I surely don't need to know that a dot matches any character, and that "^" and "$" mark the beginning and ending of a string, depending on the flags provided, of course. Why does this matter at all?

I have very specific needs for a PHP cheat sheet. I need it only for the things that I can't remember, but need to look up often enough that a sheet of them on my desk would be more useful than going to a web site that had it all. I really want most of the space used for the stuff I need to know rather than the stuff I already know, so 3/4 of a page of basic regular expression stuff (That omits the look-ahead and look-behind assertions? Oh, come on!) is not good for me.

There are only a scattered few things that I need to keep track of. The order of parameters of some PHP functions might be nice, since they change unexpectedly from function to function. Like, whether sort() returns a value. Useful stuff.

Some trickier HTML and CSS might be useful, too. Just the obscure stuff, nothing mundane. Some of the crazier MySQL hints, like how to effectively turn a query with an IN() into a more efficient query that's JOINed.

For this reason, all of the cheat sheets I've found on the web so far are too cluttered. I don't really want a novel on my desk for reference when a page of specific info will do fine. Yes, I'm just picky.

But I'm envisioning a tool that would let you enable and disable sections, hide and show specific functions, and rearrange topical blocks on the page to produce something useful to whoever had configured it. Such a tool could be of value to the universe. Perhaps I will build this tool. Ironically, it will probably require the use of a cheat sheet.

On a mailing list to which I still subscribe (registered users only), a message was recently posted about pre-testing programming aptitude. Being a programmer myself, these topics always amuse me, and will no doubt be the focus of at least 10 minutes of our next work lunch.

In particular, the ensuing discussion focused on whether it's easy or difficult to teach programming. The focus was perhaps more concerned with whether programming skills are important at all in comparison to problem solving skills, and the difficulty of teaching those. Being that one of the better sessions I attended at BarCamp Philly revolved around the curriculum required for community college computer classes to produce employable programmers, and the difficulty of finding programmers in the marketplace with any skill, I have much interest in this topic.

But rather than discuss any of that, I have a good story...

I may have mentioned in one of the prior ten years of blog postings that I was a gifted student in school. "Gifted" in the sense that I had special classes once a week, and generally did a lot of pushing on the doors labeled "pull".

In the upper grades, our "assignments" in the gifted program involved visiting elementary school gifted classes and imparting some of our venerated teen wisdom. Our victims: The second grade gifted class of East Ward Elementary School.

We had quite a few good field trips with the younglings, including one to the zoo, which is a completely different experience when you're a teen in charge of a group of 2nd graders that may be collectively smarter than you. But this post, "Peanut Butter Programming", has to do with a particular unit with those kids on programming.

The 2nd grade DEEP (Downingtown Educational Enrichment Program - the gifted student program) teacher was one I knew from when I went through the program. She had prepared her students for a programming lesson by asking them to form two groups and collaborate on written instructions for creating the universal 2nd-grader food -- the Peanut Butter and Jelly Sandwich.

Not really being told exactly what they were in for, we Seniors stepped in. In was just two of us, myself and one of my better friends, Derek. We were selected from the senior gifted class to do this assignment because of our experience with computers.

At a desk in front of the class we were presented with the components for assembling the PB&J sandwich; a butter knife, several slices of bread, and a jar each of peanut butter and of jelly. I went first.

"Take the jelly," read the first kid from their list of collaborated instructions. I took the jar of jelly.

"Put jelly on the knife." Hmm. Someone left the lid on my jar. I attempted to put the jelly on the knife. The jar just wouldn't stay.

The class shouted a chorus of, "No! No!" So instead, I attempted to force the knife through the lid of the jar. Once again, "No! No!"

The unwrapping of the bread also became an issue. The teacher took this "three strikes" opportunity to tell the students that they failed to create a list of explicit instructions that would result in the creation of the simplest of 2nd grade foodstuffs. She encouraged the second group to take a few moments to revise their script, and then Derek stepped forward.

There's something to be said about friends who are this cool. I think I find myself with a lot of almost highbrow intellectuals these days, people who have good thinking skills or recall, but have no creative synthesis. Derek was obviously gifted, and had no creative roadblocks.

The lesson ended with Derek shoving a surprisingly complete peanut butter and jelly sandwich in his pants pocket and running out of the classroom. "Take the sandwich" was the next to last command before eating. Had they simply optimized their code, Derek wouldn't have had peanut butter in his pants for the rest of the day.

What is the point of all this, anyway?

I agree that there is a distinct separation between learning to write code and learning to solve problems using code. And while I think problem solving is important, teaching it's application - whether it's by writing C++ or listing step by step PB&J recipes - is perhaps equally so.

Remaining for future fireside chats: Why I think you can't teach a programmer to be "great", how we might do better to succeed at striving for great programmers, and the magic of the elementary DEEP classroom, which is home to posters of feudal castes, diagrams of unimpeachable problem-solving processes, and a chart by the door detailing the procedure to follow in case of a tornado, even though tornadoes don't frequent our region.

I saw this posted in a couple of places, and thought it would be fun to give my own responses.

How old were you when you first started programming?

I was 8 in 4th grade.

How did you get started in programming?

My 4th grade year was the year when my teachers finally recognized some academic ability in me. My math teacher that year sponsored an after-school computer programming club on his own computers, and that's where I first came in contact with them.

What was your first language?

My first programming language was BASIC, since I was writing code on a Timex Sinclair 1000, and that was its default mode.

What was the first real program you wrote?

I wrote a few programs back in computer club, including one that made an animated E.T. (a very popular movie at the time) appear on the screen. I've written more serious programs since then, including a C compiler in 6th grade.

What languages have you used since you started programming?

Plenty. 6502 machine code, C, C++, Pascal, Visual Basic, Delphi, Perl, PHP, Python...

What was your first professional programming gig?

Professional meaning "paid for work performed", I wrote a small program for the county bail office that printed labels correctly on their label printer. Worked pretty good, too. I think I made $20 from that. I think I was maybe 9 or 10.

If you knew then what you know now, would you have started programming?

I'm trying to get my kids into it now... I don't know if they'll like it as much as I did.

If there is one thing you learned along the way that you would tell new developers, what would it be?

Stay humble and network. You don't know everything, and there are people out there who know can fill in those gaps.

What's the most fun you ever had programming?

Natural language parsers are a hobby of mine. I wrote a text adventure in college that included many of the people I knew and some of our group's in-jokes. It was fun to write and fun to watch my friends play.

What's the most fun you've ever had... programming?

No, probably not. I find programming fulfilling, but I doubt it comes close to some of the traveling I've done, games I've played, or activities I've participated in. It's an easy, constant high.