The Source for Java Technology Collaboration
User: Password:



John Reynolds

John Reynolds's Blog

Teaching Kids to be Thoughtful Programmers

Posted by johnreynolds on April 26, 2006 at 08:18 AM | Comments (13)

(Cross-posted at The Thoughtful Programmer)

Today's kids are amazingly creative technophiles... If you have any doubts about that, just check out some of the videos posted at sites like YouTube.

My personal YouTube favorites are Chips (by Brookers) and Hey (by Tasha)... Both of these videos demonstrate a significant grasp of the art and technology of film-making.

Given that these young people grew up with MTV and a wealth of cable channels, it is not completely surprising that they've mastered the basics of film-making so well... Learning by example (especially when there are so many good examples to choose from) is a time-proven method for mastering a skill.

With access to low-cost (and fun) film-making tools like Apple's iMovie, kids can now easily emulate the movies and music videos that surround them. Raw talent is quickly refined by contrasting their own work with the pervasive examples of "Good Film-Making" that they see every day.

We've got a seemingly endless supply of great want-to-be-Spielbergs on tap... which is really fun... but sadly we don't seem to have a supply of great want-to-be-Programmers (let's face it, film-making is sexier).

Given the relatively small number of want-to-be-Programmers, it is increasingly important that those who do accept the challenge learn their craft exceedingly well... Quality is going to have to make up for a lack of Quantity.

To teach these new programmers, we have to take our cue from the film-makers. Today's new film-makers are successful because they have access to great (and inexpensive) tools, and they have access to great examples to learn from.

Today's want-to-be-Programmers do have a wealth of great tools at their disposal, many of which are free. What they lack are pervasive examples of "Good Programming" to learn from. We are surrounded by some really great programs, but they are almost invisible... even when we are aware of them, it's hard to "see" how they work.

Do you have any idea at all how Google finds answers for you?

I think that our task (those of us who would educate these new programmers) is to seek out "Good Programs", and to discuss them and analyze them in the same way that film critics discuss and dissect movies. This has very little to do with specific computer languages or specific technologies... it has more to do with craft, style, and techniques.

There is science to programming, but there is also art... and the combination of the two is what really leads to Thoughtful Programmers.


Bookmark blog post: del.icio.us del.icio.us Digg Digg DZone DZone Furl Furl Reddit Reddit
Comments
Comments are listed in date ascending order (oldest first) | Post Comment

  • Well, a full generation has grown with access to Internet. Using it, a great generation of excellent programmers was born. From Linux (and before) to the newest so-called Web 2.0 applications, the examples has been always there, accesible to such generation. I do not sense a lack of examples, but a lack of motivation. ESR wrote in his paper (http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/) that "Every good work of software starts by scratching a developer's personal itch". Motivation is what makes those young people to film movies and post it. Motivation has always been the issue, In My Humble Opinion.

    Posted by: arturotena on April 27, 2006 at 08:36 AM

  • Thanks Arturo,
    You make a good point, and I certainly don't discount motivation... but my intent for this particular blog entry is not about motivating youth to be programmers, it is about teaching those youth who do want to be programmers to program well.

    Bobbi Kursham recently blogged: What is an "Open Source Curriculum?"

    That is a good question... but I think we also need to examine the more basic "What should a programming curriculum contain?"

    Now back to film-making... when you take a film-making class, the first thing that you do is watch a lot of movies. You don't start by discussing how to pan the camera, or how to do a soft-focus or a fade-in... you start by watching lots and lots of movies.

    Would it be useful to "watch" great programs? Observe their operation, and their internals? Disect them the way a film critic would?

    I think even seasoned programmers would benefit from this approach... which (of course) is just my un-humble opinion ;-)

    -JohnR

    Posted by: johnreynolds on April 27, 2006 at 08:55 AM

  • On a related note: Sun should talk to Sony. The PlayStation 3, which hopefully will be released towards the end of this year, will feature an in-built JavaTV implementation as part of its Blu-Ray compliance. If this JVM (KVM?) could be made available to allow mere mortals to write simple Java games and demos for the PS3, it would provide an ideal platform to encourage new junior programmers.

    In the past Sony have been willing to support home brew development on their PlayStation hardware in a limited way (Yarose, PS2 Linux, etc) and I believe they are now touting user created content as being a big thing for the upcoming PS3. (Does this extend to user created software?) I think Sun should contact Sony and say "how about you let your users write, upload and swap simple little applet games on your PS3 community network? Would you be willing to sell (at cost, like the PS2 Linux) a simple programming starter kit aimed at newbies - with wireless keyboard and mouse, plus a user-friendly Java developer kit with IDE and easy-to-use APIs for writing games/multimedia apps etc...?"

    It might be a win-win for everybody. Sony gets, at minimal cost, lots of interesting free content on its online community which adds to the selling power of the PS3 a little. And Sun gets to spread the Java word to a new generation - plus it helps to further tie the Java brand with gaming (might be useful for selling 'Darkstar' to big developers?) And the kids get a friendly, exciting, and rewarding way to learn programming on a low-cost platform, hopefully with plenty of good quality demo material to learn off, and skills they can later transfer into the classroom and the workplace.

    Just an idea...

    Posted by: javakiddy on April 28, 2006 at 06:30 AM

  • Hey Teacher, Leave those kids alone!

    Posted by: marke on April 28, 2006 at 07:01 AM

  • So tell me Marke,Which one is pink?;-)-JohnR

    Posted by: johnreynolds on April 28, 2006 at 07:07 AM

  • It would be excellent for new programmers to watch great programs. About older programmers... leave those kids alone! ;-)

    Now, I'm curious about your un-humble opinion. What would be the criteria to select those excellent programs? Is the Linux kernel excellent code? Its modularization instead monolithic design was great and promoted contribution... Or it is the Java API a good example for design? I bet some of the API is, as it implements many design patterns. What about Mozilla source code? I know nothing about it, so I just should say I like Firefox a lot. :-)

    I agree, examples are good. Learning by example is great for many of us. But not for all. May be just for us the programmers. I have observed many code from others, and I always learn --bad code teaches too. Nevertheless, what have teached me more is not reading the code itself, but other people opinion about the code. It opens my mind to new points of view.

    Posted by: arturotena on April 28, 2006 at 10:05 AM

  • Perhaps you're right... we need both good and bad examples. I have plenty of code from my early career which would fit into the latter category ;-)

    -JohnR

    Posted by: johnreynolds on April 28, 2006 at 10:18 AM

  • John,
    thank you once again for an "thoughtful" article.
    I think you made a really good point. I consider myself as a code aesthete and mostly get nuts when I see the code of the junior developers around. So, introducing some kind of an "Oscar" for programs would certainly be a good idea to get onto the road to "Good Programs".
    Unfortunately, and I guess we all know that, quality does not necessarily mean success and, this is even worse, vice versa. Just think about Titanic. I don't know anyone stating that that movie was actually "good". But it is the most succesful movie so far. To go on with your analogy, you now may think of Windows. Most people dislike Microsoft, we all know of the security issues there are, and somehow there's this thinking in our mind, suggesting that the windows code base is not of a "good" quality.
    Nethertheless, windows is running on > 90% desktops and even at a higher percentage on notebooks.
    Actually, this is a situation found nearly everywhere thanks to our capitalistic system. Our bosses (and they're backed up by our society) don't care for quality. They just care for sales figures. So, what's behind the success of this "crappy" software? I think it's mostly about the idea and doing the (right) thing at the right time.
    Anyway, I'd be happy to have "good programers" and as it is often the case that really good films are known to only a few (compared to the billions that saw Titanic) people, I like your idea about announcing "good" software. Unfortunately, I think your meaning of "good" refers to the internals you usually don't get to see. So your approach (although the most meaningful in its core) is a really hard one for the critics ;)
    And for this reason, I cannot say that Google's calendar, Flickr, Firefox and Oblivion are "good" programs. But they feel so.
    sebastian

    Posted by: sebastiankirsch on April 28, 2006 at 10:45 AM

  • I'm going to comment from the other side: I'm a youth programmer. When I was in elementary school, I loved playing computer games. And I had ideas for new games that I wanted to make. I bought a book on html and learned how to code websites. I also learned how to make animated gifs from a set of still bmps I drew. Several months later, and I was tired of simple websites and I wanted to do more "programming." A $20 book on Java with easy to understand instructions on how to GET STARTED was the key. Its been 6 years, I'm a Junior in high school (17), and I am capable of writing almost any non-EE software in Java (because I have yet to see a good EE getting started guide). I have written one mature 1000+line project, among numerous small utilities, and right now I am writing what amounts to Ettercap combined with NMap in Java.

    I think that is the key: simple tutorials that explain how to do things. What the JDK is. How to run a program. What main() is (that isn't always apparent). And most importantly, make it shiny. Noone wants to count change--if you are getting a youth interested in programming, make them draw pictures first. Have them learn about MouseListeners and perhaps use AWT because of its lack of features (the migration to Swing is easy, but having little setup leads to faster and more gratifying results). Because now games are primarily on consoles and cell phones, so the availability of tools to create for those mediums is virtually nil. If I knew how to run my own code on my cellphone, I'm sure that people I know would want to be able to that--make their own games and apps for thir phone.

    Additionally, the hook is what matters most. Once I was hooked, I just keep wanting to learn more. When I had learned all about Applets, I moved on to Java2D and Swing. When I wanted to write a P2P program when Napster shut down, I learned the java.net api (the program never happened, however). When I learned about the NIO and buffers, I wrote demos just for the sake of learning the architecture. Now, the project I am working on needs to dissect and analyze raw packets and protocols, and so I have learned about the ARP, TCP, IP, and DNS protocol formats as of yet.

    If summer programming camps for youths didn't teach a change-making program or a bubblesort program first, but instead showed how to make a circle bounce around the screen, youths wouldn't see programming as boring or frustrating but as exciting and power-giving.

    My $.02,
    David

    Posted by: dsg123456789 on April 28, 2006 at 03:37 PM

  • Thanks David,Your fresh memories are great input.-JohnR

    Posted by: johnreynolds on April 28, 2006 at 05:06 PM

  • The current generation of kids has grown up with an attention span the length of a videoclip for some one day fly music star. That's rougly 2 minutes at most.

    Anything that takes substantially longer than that doesn't fit into their brains.
    I therefore severely doubt you'd ever shape the majority of them into people capable of doing the sometimes long research and study needed to create quality software. If it can't be clicked together in some flashy frontend tool they won't do it.
    Maybe I sound harsh, but spending hours on websites and forums trying to help people learn and improve programming skills has made me come to that conclusion: the majority of today's TV generation (and that includes the majority of that generation who find themselves in advanced enough school courses to get programming lessons) will never make it in any profession that requires attention to detail and an attention span of more than a few minutes.

    Posted by: jwenting on April 30, 2006 at 09:23 AM


  • I keep hearing that in 2010, there will be a large shortage of technical talent in the USA. Add in the mass-retirement of baby-boomers within the next several years, and the technical worker shortage amplifies. A lot of potential techincal students got turned off post dot-com bust. Common belief among many potential programmers today believe it is difficult to find a job in IT thanks to the dot-com bust & outsourcing of IT jobs to India.

    I'm not sure about the rest of the nation, but in Detroit, the job market for Java programmers is H-O-T. Add in that Michigan has one of the highest unemployment rates of the nation - and I assume its even more difficult in the rest of the nation to hire a decent Java programmer. Perhaps someone can speak from personal experience if there is a surplus or shortage of Java programmers about the nation?

    Posted by: phlogistic on April 30, 2006 at 05:53 PM

  • Thanks John for the article. Since you mentioned about youtube, take a look at this too. I think it is pretty nice: Back to School :)
    Have a nice day...

    Ogun TIGLI

    Posted by: otigli on April 30, 2006 at 08:57 PM



Only logged in users may post comments. Login Here.


Powered by
Movable Type 3.01D
 Feed java.net RSS Feeds