Software Developer, a “Programmer” even an “Engineer” or a “Craftsman“, although there are substantial differences between these according to some people, when we say any of them we mean one thing….an organism that transforms coffee into code 🙂 so I will continue with the term “Developer” and I wouldn’t like to go into that discussion right now because it can turn out to become a book.
We have come a long way from being the “basement” nerds, that nobody wants to talk to, to the modern day mixed media served image of super-rich-enterpreneur-programmer(which is sadly just a few lucky ones). So where is the truth? What are we, where are we? How do we manage to form a picture of ourselves and waht we want to accomplish in todays diversity of technologies and approaches to software development?
I know it maybe not much. But, having been there for quite a while both as amateur since I was a little kid typing random programs in Basic on my Commodore 64 back in the 90’s, then professionally since 2005, all the way until today. I will try to share my view and experiences of what I consider the most important values of a modern day developer by answering dozen of questions.
So, here we go.
1. Ask yourself honestly. Do You Want To Do This?
Being a participant is different from being good, which is different from being great. Being a software developer requires many sacrifices. Staying in late, long hours, weekends, constantly reading and watching videos, training, conferences, being active in the community etc. etc. etc….If you’re not willing to make them and you are constantly grumpy about it, maybe you should consider a career change.
It is not only sitting in front of your computer in your basement, with your headphones on anymore. It’s about collaboration, it’s about discussion, constant improvement. Stop participating. Start being great.
2. Don’t write the books off just yet
Read books. Or, at least read the classics in the area. There is great wisdom in them. Much greater than you will figure out yourself, because most probably what you figure out as a solution to a problem, somebody else before you already did(technically speaking). Furthermore,they give you in-depth systematic knowledge. Far more important starting point for your GDD(Google-driven-development) or SODD(StackOverflow Driven Development).
Martin Fowler, Kent Beck, Uncle Bob Martin, The Gang Of Four(Design Patterns), Scott Meyers and many many more. Read, read, read, never stop reading.
3. Yes, you are a a tester as well
Don’t hate the testers. Become one of them. Become your own tester. Remember, your QA friend/colleague should find nothing, never(OK, not absolutely never, but you get the point).
4. Don’t be afraid of criticism
Criticism is the best thing that can happen to you, believe me. And the more you get it, the more aggressive it is, the better. It means you’re doing something right.
Even if says that what you are doing is complete crap.
Nowadays, it’s all about the “Lean” movement. Most likely the first solution that comes to your mind is not the best and the most intelligent one. You want to be able to learn from what you did. You want it exposed so that you can have feedback as early as possible, so that you can consider your next steps. So, the best way to get to the best and the cleanest solution is actually putting it out there and have it criticized. How else are you gonna know if you’re doing it right? And if you don’t want to, or you’re too afraid to do it please consider point 1. above. In the end, how would one become a paratrooper if he/she’s scared of heights?
Which brings us to the next few items crucial to the modern developer’s skills.
One of the most important re-discoveries of this and the past decade is Test Driven Development. It changes the attitude towards the game in so many ways that I think even Kent Beck was not completely aware of when he was considering it those first times. Take the previous two points for example. You want to accomplish to have the most efficient and the cleanest solution in terms of code.
How are you gong to accomplish that? By typing all the code in one breath and give it off to the testers and then argue how they are wrong and that your code is actually the thing that needs to be put on a throne and everyone should admire?
Are you sure?
How many times have you by now been proven wrong on that account?
If not, then you’re a genius. No need to read further. Close this page and walk off.
For the rest of us mortals, that doesn’t work.
We need to have immediate feedback if a part of our code works. We need to evolve the code around this feedback. The faster we get it the more far we can go. The less stress we feel and the less we are afraid.
And that second, third, fourth better solution/refactoring we wanted to accomplish. We are most likely going to accomplish it if we know we didn’t break anything in the process.
6. Pair program
What better way to expose your code than to your closest peers? Don’t be afraid.
The speed of the feedback you get, and the amount of thoughts that come into play during a pair programming session and the intensity of the process has often proven to be more productive for me. I have often been able to accomplish something in a few hours that would otherwise take days.
And the result. OMG, the result is something everyone in the team is proud of.
7. Be socially active
One part of seeing how good you truly are, and not just in terms of your code quality, but as a person as well. Is to go public. Remember….”Lean movement“, an agile approach to things can be practically be used in any aspect of life. Remember that the more you’re there, the more feedback you will be able to gather from that.
Publish your interests. Put pictures of your cat out there. Publish your code. Start a blog. Start answering questions on StackOverflow. It doesn’t matter. You are what you are. Make the buzz, get noticed.
It has all the positive benefits to both you and your company.
Just remember, if you consider yourself a professional, you have to act as one. Having 10K reputation on SO does not allow you to go around insulting people. Nobody likes a wise-ass, or, furthermore, and asshole.
8. Don’t limit yourself to specifics
Languages, frameworks, technical details that take 5sec to google.
It’s all about the code.
Learn how to code well. Learn how to write clean code that works. And it will not be so important.
Of course you have to know the basics. But if the task requires. You should be able to step in for your Java, C++ collegue and change those buggy lines.
Read this awesome article by Chad Fowler.
And if you’re in one of the contingents that favor one over the other imagine what would happen to you when your language is dead. What if your favourite language starts falling behind. What will happen if your bike is not as shiny and new and cool as it once was. What if it became old and all the other kids start making fun of it.
Modern day developer, a software craftsman, should be able to write code any time anywhere, without going into pointless “enterprise war” discussions about whether Java or C# is better.
Keep Your options opened. Always. Embrace new ideas and new technologies, because, that’s what it’s all about.
9. Continuous Integration/Deployment
As CI becomes inevitable part of our lives. In order to bring competitive advantage to the companies we work for, or our clients. We should know all about it. We should know enough to sit down with DevOps and work together all the way trough. You need to take care of your components. You need to think where they will end up.
It’s gonna be ugly. And you’re gonna have to do it. No other way.
No other process is less defined and less known than this. It is the collaboration and the dialogue between the developers and the DevOps that makes this magical thing happen.
The ideal end result is awesome. One-click deploy and lightning fast feedback.
10. War stories
Read war stories. One of the best ways to learn is to see how other successful stories went trough.
But, don’t copy.
Where others have found success, you might not. But it is good to know that someone else has encoutered the same problems as you have and how they dealt
One of the good or bad things(depends how you look at it) with our industry is the lack of standards. And that leads to numorous interpretations of the same things.
War stories are a good help to make you reach your decision by putting things in perspective.
So, there you go. These are my two pennies on the subject.
Hope this helps someone out there.
I know may will disagree or even hate some of the things I wrote here. But, as I said, the freedom that we have in being creative in our industry allows us many perspectives of the same things. That’s what makes this art so beautifull.