I was in PRECISELY your situation in 2000 and have felt your pain.
I read a 1-year taught masters degree in Comp Sci and haven't looked back. I paid back the costs of the degree within 3(ish) years, including the year of "lost" salary where I wasn't paid for study. This included a 2-year stint where I was underpaid compared to the average junior developer, and this was immediately post the 911-attack where the job market in the UK wasn't exactly fantastic. If possible I'd go for a pure Comp Sci degree, the web ones
As ever, there are a few caveats:
Make sure your finances can withstand the costs & time taken out to study
Don't believe the average graduate wages claimed for a new developer by your university. There are a few graduates who get taken up by the large consultancies who get paid a whack-load of dosh, this skews the average upwards. If you get a well paid job, you're in clover.
You'll still have to deal with lusers, and they don't get any cleverer when you're trying to get specifications (or common sense or abstract thought) out of them
You should be learning new technologies at home anyway...
There's well-known.netter out there called Scott Hansleman, he's written a freeware program called Baby Smash for windows, which might be a better option.
http://www.hanselman.com/babysmash/
Baby Smash locks down the keyboard and responds to "keystrokes" (ie baby-smashes) with coloured shapes / letters and numbers. Letting junior learn that input gets a response on a computer. Except after BSOD:-).ALT-F4 exits the application and Shift-Ctrl-Alt-O opens the options. Scott has a link to "Alpha Baby" if you prefer to use a Mac (in fact he says himself Baby Smash is a "homage" to Alpha Baby).
This doesn't solve the problem of keyboards and salivia not mixing terribly well however....
The answer is like getting to Carnegie Hall: Practice.
There are two schools of thought, both think that they are the "proper" way to do it:
Design first, Write a spec, then code to the spec. The code will need explaining with comments.
Write the code in conjunction with unit tests. If the code looks complicated or unclean, refactor (i.e. re-work) it. Nested statements are a sure sign that you can refactor out a new method/ function. Give them a sensisblle name then only does what is says on the tin. If you get the refactoring right, you'll not need many comments as the code becomes self-descibing.
I was firmly in camp 1, until a more experienced developer "showed me the light". I think my code has improved 10-fold since then, but who knows, as I gather experience & tools change I might go back to the first camp (though I doubt it right now!). Whichever camp you start off / end up in the following always apply:
Practice practice practice practice. Not just with your work langauge but with other ones, and not just with similar langugae "paramdigms" (e.g. if you use java, have a look at perl & scheme at home)
Requirements you are given will never be correct or complete (except in very, very, very, exceptional circumstances). Accept this, but do what you can to improve the requirements gathering process
Learn from more experienced developers. Don't just get a quick answer, find out how to do things better
Be analytical of you own code & always look for improvements (unless the deadline looms:-)), do the same with the code of others
Coding is a journey, I'm still learning and hope to be until I retire (still 20 years to go....)
Never underestimate the stupidy of the end user
Oh, did I mention, never underestimate the stupidy of the end user. No Really.
Even after 5 years of coding I write code that I think WTF was I thinking when wrote it after a couple of weeks away from it.
Rather than conentrating on java, the most important things to look at are:
1) Good OO-Design Programming (along with design patterns, the latest in thing , "Head First Design Patterns" is a good book). My workplace (a.net shop) employs Java developers over.NET candidates where they are strong in these.
2) Expose yourself to different syntaxes & programming paradigms: Doing this will help you pick up any framework. For example functional programming is beoming increasingly important in the.net world for certain tasks.
I'd personally go with.Net, it has made huge strides in the latest release (3.5, especially with sp1), even.net 2.0 was pretty good. It doesn't suffer from the lack of integration in the technology stack that Java has which I hear about when talking to my Java Colleagues, also productivty seems higher, though this might be aprocryphal.
As ever, there are a few caveats
There's well-known .netter out there called Scott Hansleman, he's written a freeware program called Baby Smash for windows, which might be a better option.
http://www.hanselman.com/babysmash/
Baby Smash locks down the keyboard and responds to "keystrokes" (ie baby-smashes) with coloured shapes / letters and numbers. Letting junior learn that input gets a response on a computer. Except after BSOD :-) .ALT-F4 exits the application and Shift-Ctrl-Alt-O opens the options. Scott has a link to "Alpha Baby" if you prefer to use a Mac (in fact he says himself Baby Smash is a "homage" to Alpha Baby).
This doesn't solve the problem of keyboards and salivia not mixing terribly well however....
I was firmly in camp 1, until a more experienced developer "showed me the light". I think my code has improved 10-fold since then, but who knows, as I gather experience & tools change I might go back to the first camp (though I doubt it right now!). Whichever camp you start off / end up in the following always apply:
Even after 5 years of coding I write code that I think WTF was I thinking when wrote it after a couple of weeks away from it.
Rather than conentrating on java, the most important things to look at are:
.net shop) employs Java developers over .NET candidates where they are strong in these.
.net world for certain tasks.
.Net, it has made huge strides in the latest release (3.5, especially with sp1), even .net 2.0 was pretty good. It doesn't suffer from the lack of integration in the technology stack that Java has which I hear about when talking to my Java Colleagues, also productivty seems higher, though this might be aprocryphal.
1) Good OO-Design Programming (along with design patterns, the latest in thing , "Head First Design Patterns" is a good book). My workplace (a
2) Expose yourself to different syntaxes & programming paradigms: Doing this will help you pick up any framework. For example functional programming is beoming increasingly important in the
I'd personally go with
Take a look at http://weblogs.asp.net/scottgu/archive/2007/07/16/linq-to-sql-part-5-binding-ui-using-the-asp-linqdatasource-control.aspx for an example of a tiered application and the screen-cast at http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx to see what has been acheieved in terms of productivity