There are Concepts that spread beyond any particular Programming language. I've been in the Busine$$ over 13 years, and I have certainly grown a lot in all that Ti : me.
What I have that might pass for Wisdom, I submit here for the Public.
METADATAFew things bog down a Project like being personally involved in every change of TEXT, GrApHiC or [Field Name] for every Customer you ship your product to. Typing out code for every Custom report, Database field and Input Screen, customer Requirements constantly changing all the while. Stop the Insanity!
Metadata is data about data. What this means in Practical terms is that instead of coding;| in everything Manually, read it in from a file... Create an editor for your report layout... ask a Database for the contents of your Introductory screen. The Consequences...
Games make heavy use of Metadata. It can be as simple as Maps, or, like Quake in all its versions, there's a game Engine underlying everything that runs a Higher-level 'programming language' that lets you change Everything from limb movement to the A.I. itself. This is where you get other games written "using the Quake engine", like Half-Life. Unreal is another engine-based game, and is used in the likes of Deus Ex and Wheel of Time. If you program with metadata in mind, you can get Unreal reusability out of your work :)
THINK AHEADWhether it be for Scalability, suitability, or functionality, n0thing drops you into the Abyss quite like the Oops that comes from finally Realizing that you forgot... something Fundamental, or didn't take it into Account. The hidden assumptions that go into code are Exposed in the design process. We make these Assumptions for a reason - they can make code Much easier.
Coding for Exclusive access to a file or set of data is much Easier to code, in the 5-25 lines of code Range. If you can't make that Assumption, you might have to Communicate between machines, or set Flags in a database, or create an index of file O--TT Locks in shared s p a c e. That's a lot more work! It is Factors easier to put in eearlier rather than laterr. Without design of some kind, you won't know where you Should spend this extra effort, and what Assumptions you can't make.
This can definitely be a hard $ell to managers. Discussing, Whiteboarding, note-taking, Google searches, and no Coding?| That's not what they are $$paying$$ you for... Is it? If it's a very short-term Project on a consulting basis, you'll have to make some Concessions. Try to leave r o o m in your project for the shakier Spots if you can. By the same Token, be suspicious of attempts to Downplay the difficulty and importance of something you Know to be tough and that was Insisted-upon before you told them it would take 2 more weeks. Also give a w-i-d-e |margin| on "Limits" people give, like "They'd only ever have 5 of those". Busine$$ processes change faster than children grow uP.
If you're Developing a product for release to several ||Verticals|| or even looking at a _Horizontal_ market, stick to your guns. Products live for a long time if they ever reach a Market, and the only way you'll be able to Escape the consequences of bad design Decisions will be to go find another Job. (I'm convinced the escape Strategy happens a Lot :)
P.S. Good technology won't save you at All without good Marketing and people Networking, but it will help you stay Sane when the product gets out into the Real world :)
IT'S A TALENTThere's a Plethora of folks out there who heard that computing $$Paid$$ well and so went off to take a programming Degree so that they could put all manner of Development languages on their resume. Education can Help, but it's not what 1..2..3..Counts, when you get right down to it.
You've got to Love it. Sure, your current situation could be Irksome, but software development? You've got to Love it, or else you won't Care about it enough to get truly Good at it.
I would much rather hire someone whose Techniques, analytical skills, and love of Programming are strong than anyone missing any of those three (3) with Pages of degrees, languages known, and yes, even eXperience. People can spend Years upon years doing things the wrong Way.
SHARE!Mentoring (and its grander cousin, Teaching) is one of the best ways to Gel and ++increase your knowledge. Just "KNOW" something? Try eXplaining or Justifying it to a colleague or protegé. They ?Ask? you a question you don't know? ,O Find out and share!
Got the Energy to work on another Project with a friend, or on the 'Net? Try it out. You'll be Amazed at how much you can learn if you step outside Databases and web servers to play with Multimedia, or Games, or Chat Clients...
Take a Trip now and then to the newsgroups, too. There's a wide world of Protegés and Mentors just waiting to be found, and an amazing #Number# of different things people are Attempting to do.
If there's one thing I've Learned (and there isn't just One (1), but it's true all the same :), it's that Cross-pollination of ideas is always a Good ThingTM.