This is a post I’ve been writing for a long time in one form or another, in my head and in various drafts I’ve attempted along the way. It’s tough because the more experience I gather the dimmer my memories of being new to all this become. Recently my youngest daughter decided that she wants to be a game programmer when she grows up and thus I’ve been charged with the task of remembering and passing on as much of my knowledge as I can to her.
She’s not yet of the age where she can read this and truly appreciate and relate to what I’m saying, but these are some of the principles I will teach her as she grows and progresses.
Programming is a craft
Craft (noun): An activity involving skill in making things by hand.
Like an artist, a programmer will accumulate knowledge and practical skills over their career that will in turn “unlock” further knowledge and skills. You can’t skip steps and you can’t fast forward so take your time and don’t feel pressured to absorb too much too quickly.
And don’t be afraid to take a break when you’re tired or frustrated, everyone gets a creative block sometimes, even programmers!
Learn to learn
Without doubt this always will be the number one skill in your tool belt. Even if you keep the same job and work on the same product your entire career — which is possible, but highly unlikely — change is absolutely unavoidable.
But being able to absorb and apply information efficiently buys you much more than keeping up with your job. It also gives you freedom to move around the industry as you desire, trying out new things to decide where you want to be and what makes you happy.
There’s no one-size-fits-all method of learning. Some people (myself included) learn best with practical example and experimentation, and some people are more academic and can absorb a book cover to cover. Find what works for you and do it often. Try things out just for the hell of it. Throw away code is not a waste because every program you write will teach you something.
Learning is as much a skill as any other and needs to be nurtured over time to become second nature, so don’t worry if you struggle - be patient and persistent and you will succeed.
Learn wide as well as deep
At some point in your career you will almost certainly need to specialise in something — your bread and butter that pays your bills — and you will get to know that subject intimately (or deeply), but don’t stop learning other things just because they’re not relevant to your specialist subject or you’ll miss out on a wealth of new ideas and information.
Be a jack of many trades, and master of a few that you love!
Don’t be afraid of losing code
In fact, I actively encourage it! The first time you tackle a new problem your first implementation will likely not be the best you can do and trying again will invariably produce a better result given the things you will have learned the first time around.
As you gain experience you’ll notice patterns and your success rate will increase, but even after nearly two decades as a programmer I still write multiple implementations to experiment with new solutions.
Deleting code is liberating, and if you use source control (which you absolutely should) you can never really lose it permanently anyway.
Bugs happen
Fact of life, get used to it. You will never write code that never has bugs. The key is to catch those bugs before they get released, and to learn to be good at catching them and ultimately preventing them.
The “industry” isn’t big and scary
One thing I clearly remember from my early days as a programmer, way before I landed my first professional job was that from the outside the IT industry seemed like a scary machine that would spit me out if I wasn’t quick or clever enough.
But I soon learned it’s not big scary entity it appears to be. It’s a patchwork of groups and individuals of all levels of skill and experience, and there’s room for everyone and their interests, including you and yours.
You’re still one of the first
Programming as we know it has not even been around for 70 years. The first software programming language was invented in 1949, and the first widely adopted high level programming language was invented only 5 years later in 1954. The first internet service providers only turned up 27 years ago in 1989. A mere blink of an eye in terms of human innovation!
This industry is so young that I’ve seen it appear out of nowhere in my lifetime. So young that you and I are amongst its pioneers. Don’t let anyone lead you to believe they know all there is to know or that you’ve missed out because you’re new at this, because they don’t and you haven't.
The simple truth is that we are all making this up as we go along, and in terms of the future of technology — what we have now is so primitive that centuries from now people will wonder how we ever coped.
Join in, get involved, you’re part of the future too ;-)