Re: Here we go
"Law Of Software Envelopment : Any program will expand until it is able to read email. Those that can't will be replaced by those that can."
Learn to write Libraries
When i work in java (my primary language now, 'cause i get paid for it), i tend to automatically layer the problem, look for "reusable" stuff right away, code those first, and then assemble the reusable stuff along with stuff specific to the problem to create the final app.
this is the (well, a) difference between "programming" and "software engineering". I realize, that SE is not exactly a common self-taught thing, and in fact isn't even taught in basic C/S departments in universities. you're taught to get the job done, cause you've got 5 other teachers demanding your efforts all at the same time. so you code to get the job done, and everything is locked in to everything else. there's no distinction between gui and non-gui. this tends to stay with most programmers even 10 years into "real-world" programming.
thus, its damn impossible to do stuff like "port a kde app to gtk". every single "function" of the app is treated in the code as an effect of a gui action. since the widgets and callbacks are all different, there's no direct 1-to-1 connection one can do.
and using an Object-Oriented language doesn't help matters much. they teach basic OO, and the syntax, but only experience at this point can really teach decent design. OO programs have to be thought about and worked out on paper for days before you write 1 line (well, class) of code. in the database world, they teach "normal forms", of working through your data on paper until its optimal, THEN you make your SQL tables.
there isn't an equivilent for that in the programming world, and there needs to be.
most freshmeat programs work, and work well. they can be maintained and developed in and of themselves, but they (often) aren't designed or written in such a way as to facilitate trickier mods to either the gui or the backend.
thus, we have some 12 or so mail programs for gnome because the "mail" functionality as a common library, where your taste in gui can be added later, was an afterthought, not part of the base design.