Fast learning for ambitious programmers

Learning has been one of my favorite activities since my childhood. I’ve tried many methods and found those that were the most appropriate for me. We are all different and the method that works perfectly work for George could fail with Amy.

Developing your ability to learn, before everything else, is the only viable job security strategy you could have. In fact, stopping learning is the most effective way to screw your career. Developing your ability to learn will not only help you to get more attractive jobs, but it will also increase your intellectual performance.

In this post, I’ll describe a few techniques I found useful during my career in the hope you find them interesting too.

Practice

The most obvious one you may think, but it seems that it’s also the most overlooked. I see many developers reading a technical book from cover to cover, closing it, then starting a new one. This is far from being effective.

I hear and I forget,
I see and I remember,
I do and I understand.
[Confucius]

This is really my favorite quote because it summarizes it all.  You should put everything you read into practice, when possible and when appropriate.  It’s how the learning process works best.  Many of the things we read are not understood until put into practice. And it is very likely that you’ll forget what you don’t understand, or worse, apply it improperly.

Without going into details, there is a technical explanation for this.  Practicing involves many other areas of your brain and it helps integrating everything. Here is some additional advice specifically related to technical books, blog posts or conferences:

  • When you finish a chapter, do the exercises. All of them, even the most simple ones. In fact you should give priority to books with exercises.
  • Try to summarize every chapter to a colleague. It will force you to deconstruct and therefore understand it. Talking about something you read also involves a different part of the brain and it helps with integrating the knowledge. You don’t have to speak to someone: you can just simulate a discussion. It will work just as well.
  • Put it together in a test project you build from scratch.
  • Don’t limit yourself to the single source of knowledge. Google everything you learn and read the different positions and perspectives available. Writing your own synthesis can help a lot too. Why not in a blog post?
Get feedback. Give feedback.

As an extension of practice, seeking feedback is another great learning method.  In programming, one of the most effective ways I know is pair programming & reviewing.  Don’t wait for it.  Ask for pair reviewing or programming actively.  If you are a solo developer, consider online reviewing platforms.

Also be sure to read as much code as you can. Open source projects are a great fit for that. It’s how many of us learn the features of the framework or language they are using.

Oh I wasn’t aware I could do that in just one line of code! [Random learner]

Another  effective way to learn is to actually teach. Teach another what you are supposed to learn. When you teach others, you are responsible for the information you give and you have special motivation. That one to many relationship is not the only available one. Participating in communities can stimulate your learning process. “Being there” makes you learn from other’s knowledge & experiences.  As a bonus, you learn how to teach or transmit your own knowledge.

Overcome information filters

Our brain is constantly overloaded with environmental data and we have developed a kind of mental filter that is supposed to let pass only the information important to us. This type of filter also stops our creativity from expressing itself and blocks the acquisition of knowledge – even the knowledge that will be useful in the future.

Stanley Kubrick has developed a special technique that he describes in his biography. According to him, this technique has allowed him to acquire considerable knowledge, increase his creativity and his ability to learn. The most visible and obvious result is his films.

The technique was extremely simple: he went regularly to a library and picked up a book at random, without even looking at the title. He read to the end even if he did not like it. This technique has forced his mind to expand into new territories by preventing the mental filters from operating. The new knowledge gets integrated with the previous and creates new perspectives.

You can train yourself like that with anything, not only books. As a programmer, it is often recommended you learn a completely different language than the one you have used every day for years. Just to give you another perspective on things. In fact, too much bias towards technologies or ideas often stops you from advancing and evolving to the next level.

Fail

If you don’t fail sometimes, you are not putting enough effort into what you are doing.

Failure is the most natural learning process you can find. In fact, we are physically and mentally wired to learn from failures.

I make more mistakes than anyone I know. And eventually I patent them. [Thomas Edison]

I do not suggest that you start doing anything carelessly. I suggest that you stop being afraid of failure. Fear of failure prevents you from doing the necessary experimentation to advance in life. Fear of failure is also completely irrational. Since most people try to hide their failures, we only have a tiny part of the information and we think people who never fail are the norm.

Experience is how you should describe failure.

Learn by choice

I kept the most effective way to boost your knowledge for the end. This is a very simple technique that I developed over years. In my research of novelty, I was always attracted by new technologies and new domains. I discovered that this way of behaving helped me to gain knowledge faster than choosing the path of least resistance.

Every single time I had to choose between two or more projects, I took the most difficult and challenging one. The one that contained the most unknown technologies or the one in a new domain I wasn’t familiar with. Never stay in your comfort zone.

The most difficult part is not deciding to take the hardest path. The most difficult part is to justify your lack of experience in a given technology when an employer is specifically looking for it. Hopefully, you’ll be able to convince them that you are a fast learner and someone will give you the opportunity to show it.

And there is a positive side effect with this method: job satisfaction. The combination of competence & challenge leads you to satisfaction. I will end this blog post with a link to a video related to this that is really worth watching.

 

How to convince your boss

When you need to convince your boss about something, such as upgrading your development machine, the most common mistake you can make is to talk about your problem. You’ll face some situations in which your opinion, your problem, your pain is not really that important compared to all the other issues your boss must deal with. In fact you should never make the assumption that the person you will talk with is going to put your interests before his own. Of course you know many people that will be genuinely interested in your well being, but most of the time, convincing someone to do something you think is good can be very difficult, especially for the introverts. Coming up with a solution instead of the problem alone is not enough. You must learn to focus on other people’s interests and come armed with facts rather than opinions.

Focus on him, not yourself

Focus your argument on your boss’s interests, and avoid mentioning yours. Let’s take the example of the machine upgrade: you want a new machine because your existing one is too slow and you really dislike working on it. Don’t go to your boss and tell him: “I need to upgrade my machine because mine is too slow, it is painful to develop on it”.  If your boss cares less about your comfort than his budget, you will certainly get answers like “Maybe later” or “I’m out of budget” or even “But you are not blocked right?”. Instead, put yourself in his shoes and try to identify what’s important for him.

To help you with that, try to ask yourself how he is evaluated by his own bosses (or customers). How does he report his own performance? In that particular scenario, there are good chances that he will be praised if his team brings new functionality on time and blamed in the case of late deliveries. Your lack of productivity is the pain. Try to tell him: “I need to upgrade my machine because my productivity is really badly affected right now”. Be prepared to get another kind of answer! At best a formal acceptance without resistance but in many cases, a demand for clarification.

Come with facts

Any serious boss will ask for more information to understand your needs and eventually use it to validate their decision. You will certainly meet bosses that use them to cover their own backsides. Don’t wait to be asked for it, and augment your request with facts that demonstrate the real positive impact on the pain you identified earlier. Be sure to use real facts: articles written by an industry authority is not enough. There are good chances that your boss practices critical thinking and coming with blog posts from people he has never heard of will have little effect. For the example we used earlier you could calculate the startup time or the gain in compilation time. You must convert that time into a metric he is sensitive to: money. Multiply the time you save for one or two years by your hourly cost and compare it to your upgrade’s costs. If the gain is real, you won’t have any problem in getting your upgrade.

To increase your chances, be sure that your argument uses simple words to avoid any misunderstanding, especially if you are presenting it to non technical people. Be sure to be concise as well: you would be surprised by the number of people reading only the introduction and conclusion or who ignore any email longer than a certain size.

Formula = Boss Pain(s) * (Real) Facts * Simplicity * Conciseness

More tips

  • You should never ask your boss for permission to use a given development practice. Your boss should not impose a way to work on you but should focus on the result instead. You don’t tell the taxi driver how to drive his car. You don’t tell the hairdresser how to cut your hair. You don’t tell a coder how to work with his code. If you think your code needs refactoring. Refactor it. You are the expert, your team should decide what practices you use. Your boss is supposed to decide WHAT to do and more importantly WHY you are doing it. You should take care of  HOW you build it. If you are in the situation where your boss tells you how to work, you should ask yourself if that environment is really good for you.
  • If you want to attend a conference, try to compare the costs to formal training courses and be sure to put all the advantages such as the opportunity to network.
  • If you need a specific tool, be sure to scan the seller’s website to help you find the facts to make a good case.

 

 

How to successfully enter a new company or domain

As a consultant, I worked in various domains such as utility, telecom, aeronautics, finances, insurance, etc and I’ve faced the problem of not knowing very much about the domain I was entering.  With time, I discovered a very simple method that works: being actively curious.

  • Request a one to one introductory meeting with your supervisor with the purpose of getting them to explain the business domain (the big picture). It should not last more than 4 hours (or you will get bored and your supervisor exhausted).  Prepare your questions in advance.  Take notes.
  • Ask the supervisor for a field visit. When I worked in the telecom industry, I asked to visit the router and transmission rooms as well as the NOC (Network Operations Center). It helped the team building the software to understand the purpose instead of blindly writing code. We knew why our stuff was useful and more importantly, who will be using it, and how.
  • Have frequent lunches with suits.  More frequently, I would say, than with fellow programmers. They love to talk about their stuff and if you listen carefully, you will learn lots of amazing things.  Be prepared to share some amazing stuff with them too or they will soon find you very boring.
  • When you have the chance, visit the departments. Ex: when I had to work with a marketing manager of a big finance institution, I asked how our applications helped them and what was her routine.  By actively listening to her, I was able to find out new stuff to automate and make her work life easier. I suggest you make a physical visit rather than a phone call.  This means you can see her doing the thing and more importantly, using your application!  What is obvious for you may not be so obvious to the rest of the world.
  • Buy books on the domain and watch youtube videos. Read your domain’s information websites as well. Give priority to higher level literature. Books that are too technical could be boring or impossible to understand in the beginning. What you need is general concepts to fuel conversations and learn more.
  • Talk about it to your friends & family often. Talking about your stuff will help you integrate the huge amount of information you must learn. Prepare an elevator pitch and be prepared to give details. Don’t hesitate to write it down so it is easy to remember.
  • Read all the news your company publishes. Including annual reports. In fact, the first thing to do when you are hired by a new company, is consult their website and publications.
  • When you don’t understand something, don’t hesitate to ask the guy in the company (email preferred) that can answer your question. The worse thing that could happen is being told that (s)he has no time for that.

Remember this: the developer that knows the domain very well is no longer just a simple developer.  You are a little more than that.  And so is your market value.