Fog Creek Software
Discussion Board

Projects to learn by

What sort of self-inflicted programming projects are most useful nowadays for working through the basic and not-so-basic concepts of software engineering?

My interest in this is gaining useful experience in real-world programming.  I'm on the cusp of being an intermediate level software engineer, but the opportunities in my current position for writing applications are very limited (the company largely relies on using Access as a somewhat-thin client for SQL Server, and while the I.S. department is feeling out new areas for system development, the business itself will always act as a brake on whatever projects we come up with). 

I understand that twenty years ago, everyone wrote their own text editor as their masterpiece (in the old sense of the word, meaning a demonstration of apprentice skills well-learned).  Nowadays, there's so many around, and so many widgets that do it all for you anyway, that a text editor seems limited for both practical use and learning experience.  Also, what's current in the applications field seems far more advanced than simple text-editing.

So what sort of project is now considered best for a young programmer to cut his teeth on?

Sunday, December 2, 2001

p2p apps.  Biotech projects.  It's a big field, but you probably want to turn your eyes towards things which are about connectivity, transfer of information, storage of information, or replacing of humans.

What advantages do computers offer to normal reality?  Storage, communication, rigorous calculations.  Entertainment.  Things which scale because information is often free.  I would add games to the list, the perennial favorite of new coders.  Just make sure it is network playable.

Sunday, December 2, 2001

I'm biased (work for PayPal) but I'd recommend a shopping cart and/or store-front builder. While there are a zillion of them out there, they mostly really stink. By making the PayPal the payment option, any seller can use it immediately without the hassles of a merchant account. Depending on how sophisticated you make it, it can introduce a range of solid development learnings (order/customer/sessioin mgmt, sorting, search, transaction processing, etc.). Best of all, unlike most development efforts, it will have real-world applicability and may even generate revenues!

Patrick Breitenbach
Sunday, December 2, 2001

It should eat its own dogfood -- it should be software that you use yourself.

I'm doing

Traditionally "text editor" is a theme but there's a meta-theme of software that works with itself: you write a text editor so that you can edit the source code for your text editor ... similarly with compilers ... my first practice was writing an assembler in basic, then writing it in assembler, so that it could assemble itself (and then a text editor) ... then the guy hiring me asked if I knew assembler, and I allowed that I did ... the first guy I then interviewed and recommended for hire (I still work with him 10 years later) had written an *incremental* assembler with a built-in debugger (break-point, memory dump, single-step, ...) and editor (which he used himself as his IDE).

An older tradition eg in carpentry is for an apprentice to make as his 'masterpiece' his own toolbox.

Anyway, this 'xwells' project too is self-referential : for example, it's written to post itself on the Web, based on requirements for a newsreader application which were discussed in a newsgroup.

>> My interest in this is gaining useful experience in real-world programming.

So long as you use whatever software you write, then.

Christopher Wells
Thursday, December 13, 2001

*  Recent Topics

*  Fog Creek Home