Vukoje's blog about software development

From junior programmer to master

A decade ago I had many, many questions and doubts about programming. How does programming look in real life on big projects? Is it too hard? Will I be any good at it? Over the last few months I have been mentoring talented junior programmers in my company from whom I’ve come to have great expectations. This is what motivated me to write this post and share it with young talents with whom I will hopefully work one day soon.

Learn, learn, learn

You will learn some things in the university, but they are not enough to make you excellent. You should keep learning new things all the time because technology is complex and constantly changing. For every subject you are interested in there is a fabulous book out there full of knowledge.

Once a friend told me “If I read 10 pages of an IT book every day, imagine how many books I will have read in few years, and what I will know”. Well, of course, I didn’t keep up with that pace, but I pressured myself to always read a lot. I keep a public list of things I read as a public CV and a motivator to keep going.

Technical blogs are becoming a main source of information and more and more often people publish books by refining content already published on their blogs. So pick a favorite RSS reader and start building you feed collection that will keep you up to date. For a start, here are some of my favorites:

You become an excellent programmer in you free time

Formal education is a good start, but it’s not enough. Work experience is mandatory, but you only advance in practical stuff you solve at your desk. It takes time and passion to go deeper into problems and get your eureka moments. Don’t expect that others, teachers or colleagues, will teach you how to code.

This doesn’t mean that you will have no free time. It only means that programing will be one of your hobbies and that you will annoy your non-programming friends with your technical discussions.

Learn how to write code

If you are going to be a programmer, you will be staring at code editor and writing code most of your work day. You should write code like a pro. Some programmers tend to think that architecture and fancy patterns are important and that code is just something in between, but I would strongly disagree. I’ve never seen app with great architecture and crappy code.

Not having enough time is a common excuse for writing bad code. Avoid excuses. Once you master the skill of clean code it will come naturally to you, at no cost.

So how do you write code like a pro? Well read a book of course! I read Refactoring by Martin Fowler but I’ve heard that Clean Code and Code Complete are also great. Actually I remember an older guy at the university who told me to read Refactoring and that it will make me twice the programmer I was. Till this day I believe this to be truth.

There are also code conventions and code analysis tools for specific platforms. They will come in handy. Why waste time and energy on trivial decisions when you can follow guides.

Is it hard?

Well, it can be, when not done the right way. You could end up with an application that is very hard to maintain because of the huge complexity and a lack of tests or documentation. On the other hand, when development is done properly, programming seems more like a fun game than work. As you get better you will build better apps and your job will be easier.

Sometime you end up with a problem you just cannot solve. In that case you either solve it and feel like you’re on top of the world, or somebody else does and you learn from him or her.

Do the hard stuff

Some guys constantly run away from tough tasks. My advice is to do just the opposite, ask for the toughest. Tough problems will make you a tough programmer and speed up your learning. Also, if you go for the hard things you will never be bored at work.

It’s ok to be scared

So you are starting to feel comfortable as a programmer and you are successfully completing your tasks. It feels good. But then one day a new task comes along. A new task requires new technologies, tools and domain knowledge you don’t have. You get scared. You doubt if you will you be able to complete the task. It’s OK to be scared. The only difference between you and a more experienced guy is that he has been scared many times before and probably successfully completed such tasks and now he believes in himself. Everybody feels like a phony at some point.

It isn’t only about code

Writing code is not all there is to being a programmer. Your job is to create successful software. In order to do that you will be testing, writing specs, talking to customers, organizing tasks, installing machines, motivating and mentoring coworkers… Even carrying equipment and much, much more… Don’t underestimate value of pure business domain knowledge. It can be much more valuable than programming skill.

There are always guys who insist that their job is only to write code and not know anything about the business domain or anything else, but they are usually jerks.

Don’t be a jerk

Because nobody wants to work with one. If you behave like one you will be alone in solving problems although it much easier to do it together.  Be a humble programmer.

Comments (5) -

  • Toma

    1/9/2015 12:41:15 AM | Reply

    Hi Vukoje,

    I couldn't agree more about the importance of constant learning. It's sometimes scares me how little average developer reads but on the other hand it's a opportunity for those who read ;). I would also encourage you to read Code Complete 2 but not because I think you will find there some technical skills you don't have but because the book will make you a better mentor, team leader and it will help you making other people in your team better developers. Book contains unbelievable amount of empirical evidences about how some coding bad practices impacts the team productivity, maintenance costs etc. It talks about the optimal development and testing procedure along with precisely defined steps. This is personally my favorite part of the book that blew my mind when I figure out on how many levels things were wrong in a way how I and the team where I was part of was working ;)

    Steve McConnell as author of this book also runs his own company and in the book you will find a lot of advises on how to train your people and how to align their productivity. He even has a list of books that ALL developers have to read based on the level (novice, experienced, master) and he underlines this with great importance that everybody has to read so everybody can understand the language other people talk. He also puts a lot of importance on studying other people's code and advise teams to do that together. I have never thought about that before, but his analogy of professional sports team and team of developers when all team players sit on a regular bases, watch full game and discuss about good/bad parts, made me thing why developers don't do that. Imaging calling all developers in your team once a week for an hour and discuss some code on the whiteboard or projector. This also can be done with discussing parts from some book that everybody should read and so on. Larman also in his book "Applying UML and patterns" also speaks about importance of using Whiteboard for brainstorming and knowledge transfer.

    I already went too long but this is my favorite topic where I see huge potential for improvements in every team where I was working so far.

    Best regards and keep going Smile

    • vukoje

      1/9/2015 6:17:38 AM | Reply

      Hi Tomo,

      Congratulations on longest comment on this blog Laughing

      I actually started reading Code Comlete long time ago but moved one to some other books. After your remarks I will definitely read it on day.

      Is this the McConell's reading list you where mentioning?

      By the way, next week we will probably do review of book Refactoring followed by a practical demo. If you are around, stop by.

  • Toma

    1/9/2015 6:35:18 AM | Reply

    No, there is another one. If you have Code Complete 2 near you jump to "Chapter 35:Where to find more information" and then there is a title called "A software developer's reading plan".

    It's great to hear that you are doing book reviews at work. Fowler is a classic Smile

    • Vukoje

      1/10/2015 5:13:08 AM | Reply

      Well they didn't let us do the wine testing Smile

  • james

    11/22/2016 9:45:19 AM | Reply

    Only self-improovement and constant work helps. Really.
    In my study sometimes I used additional help, and I think it also useful, especially for general subject. Thanks to

    In programming the same. It's important to ask specialist for advice.