I've been professionally developing software for four years now and thought I'd reflect on what I've learnt over that time. I've gone for the traditional bullet-point style (hope you don't mind), and they're in no particular order.
Loyalty to your employer is good as long as it isn't blind
The software industry moves fast, but the systems at your current place of employment aren't as likely so. As soon as you feel like you've stopped learning in your current job, it would be wise to get looking for a new one. Too often people stick to a job for too long, only to realise their skill set has become irrelevant (VB6 anyone?). Therefore it is always wise to try your best to be in employment with skills that are currently in demand.
Know it's impossible to know everything, so concentrate on learning what's important (whilst knowing what exists)
Because the software industry is so large and constantly changing it's simply impossible to know everything. However it's equally important to not reinvent the wheel. So you should keep reading
blogs, contribute to
stackoverflow and go to as many user groups as you can. It's totally ok not to know everything about new technologies, just concentrate on what they can bring to your projects because
good developers can learn on the job.
Get a fresh pair of eyes on your problem as soon as you've tried everything
As soon as you find yourself stuck with a particular problem ask one of your peers to take a look. Don't worry about appearing stupid, your employer would much rather you be productive as soon as possible. Too many times I've wasted time debugging a problem, only for a colleague to instantly know the solution. Also others have experienced what you haven't, so make use of it. When offered advice
take it and ask questions.
Teach and be taught
Sit with your colleagues,
write a blog, build up a
stackoverflow reputation, but most importantly
do anything which gets your thoughts peer reviewed. The only way you learn is by
knowing you already don't know everything, or having a long held belief proved wrong wrong.
Absolutely everything should be as simple as possible
Your brain can only hold a handful of concepts at once,
around about seven in fact. It therefore make sense that absolutely everything you do should be broken down into the most simple form possible. Read
code complete, constantly refactor your code, and use source control to store the the reasons for your changes.
Users don't always know what they want
This is a big one. Users cannot always conceptually visualise what they want, and only get a narrowing of their requirements when they see something tangible. This is where methodologies such as
Agile come into play, their iterative processes promote keeping the users in the loop, who can then crystallise their requirements before you've done too much work.
Ask prospective employers lots of questions (and) understand you can't trust recruiters to do this for you
When looking for new employment
you should be interviewing the company as much as they're interviewing you.
This means lots of questions. Use your experience to avoid previous employment pitfalls, ask them about the state of their source code and what they expect of you. In fact you should have
lots of questions that you've been collecting over your career.
As for recruiters, my experience is that many are only focussed on their commission and will do whatever they can in order to achieve it. However there are also
really good recruiters out there who genuinely keep your interests at heart. When you cross paths with such a rare breed you should keep in contact with them
even if not looking for employment, because you never quite know when you might need them. I personally use
linkedin to keep in contact, and have recommended the best.
Your experience
That's the end of my list, and hopefully I'll have a handful more points over the next four years. Perhaps you think I've missed some big ones? Use the comments to share your experience, and perhaps I'll learn from you too.