LEARNING: A developers perspective
Tags: learning, growth, softwaredevelopment, skillacqusition
Published: 2020-03-13 15:18:46

---
title: LEARNING: A developers perspective
published: true
description: This article is an attempt to share ideas on how to learn as a software developer
tags: #learning #growth #softwaredevelopment #skillacqusition
---
![Article hero image](https://res.cloudinary.com/github-com-opara-prosper/image/upload/w_1000,ar_16:9,c_fill,g_auto,e_sharpen/v1584111509/dreyfus-img_dkeqgb.png)

Growing is the ultimate aim of every developer. Growing to understand how tools or systems work under the hood, going beyond the basics into deeper things or having a holistic understanding of the technologies you associate yourself which is truly the ultimate goal. The aim (to grow) is pretty much known by a lot of persons but the "HOW" of going about growing is what a lot of persons either don't fully understand, unknowingly ignores or totally are ignorant about. What is the best way to approach learning as a developer? How can we optimize learning to get the best possible results to help us grow, move to the next level of expertise and solve complex problems?

Over the years, computer scientist and engineers have solved software related problems repeatedly and have come up with series of solutions for solving these problems. Some have gone further to organize their approach to solving this reoccurring problems and these solutions have come to be termed *design patterns* - an approach to solving particular problems. In similar light, learning is a common "problem" that everyone must "solve" and luckily for us (everyone trying to gain expertise) the road from novice to expert is one that has being journeyed by many who are today experts in the field and even studied by some. Learning over the years has being deconstructed and we now have a road map that has proven to be reliable for learning new skills and growing to become an expert. This article is an attempt to share some of the insights discovered on how best to learn and I trust you're equally excited as I was writing this piece to discover how to go about learning as a developer


### Dreyfus Model
![Dreyfus model](https://res.cloudinary.com/github-com-opara-prosper/image/upload/w_1000,ar_16:9,c_fill,g_auto,e_sharpen/v1584111501/dreyfus_skns9e.png)
We primarily learn to be more knowledgeable in specific skill sets or fields; language specific skills (JavaScript, ruby, react, rails, MySQL), fields (full-stack development, front-end development, developer advocacy, cloud engineering etc). It's a great thing to be able to measure learning in order to know how much we are really growing and advancing to the level of expertise.

The Dreyfus model for skill acquisition is a model developed by the Dreyfus brothers (Staurt and Hubert Dreyfus) and it breaks down the journey from novice to expertise for any skill set into 5 levels;

- Novice
- Advanced Beginners
- Competent
- Proficients
- Experts

#### Novice
  The Novice is the first step for the model. A novice is a skill practitioner that is just starting out and has *very little* or *No* experience actively practicing a particular skill, the most import trait of a novice is that they are *experience deficient* (obviously because they are just starting out). To be successful at practicing the skill at which they are novices, the novice requires specific rules to follow showing them what to do to get things done.

#### Advanced Beginners
  An advanced beginner is a skill practitioner that has *some* experience practicing a particular skill. They have gone from *NO* experience by building the foundation(requisite knowledge) required for the skill and also have some practice time working actively with the skill and when discussion regarding the skill arises they wont feel totally lost because they know a lot the basics. But this practitioners do not know how to troubleshoot errors or problems that arise from practicing the skill mostly because they've being dependent on rules (they just got off the novice phase, woof) and still depend a bit on those rules to get work done.

#### Competent
  Competent practitioners of a skill are able to troubleshoot unlike the advanced beginners because they have *more practice time*, they have learnt how to solve specific problems and are able to recognize the patterns around these problems. When they encounter the same or similar problems they know what to do (they draw from their past experience to troubleshoot). They have *more* experience than the preceding phase (Advanced Beginner) on the Dreyfus model.

#### Proficients
  Proficient practitioners can self correct, they are closer to the expert mark, they have outgrown the hard rules for getting work done and work with patterns or principles - also called maxims. Because they have *a lot of practice time* they make problem solving decisions very quickly which in turn means they get things done pretty much quickly.

#### Experts
  This is the last stage of the Dreyfus model and I personally love to call experts practitioners "the boss". This folks are persons able to work from **intuition** (the ability to understand something instinctively, without the need for conscious reasoning). They have **sufficient** funds in their experience bank and they can withdraw unconsciously from this bank when making design decisions or problem solving. They are not limited by rules and really do not work well with rules. Their most important trait is working from intuition (which happens to be the test for expertise).

The most prominent difference between the Dreyfus skill practitioners is **Experience**. Experience  makes the difference in productivity, reasoning, approach to problem solving and delivery. Experience can not be bought or installed (like we install software), rather experience is something gained as a reward for active practice of a particular skill.


We gain experience by many hours of deliberately committing to a particular skill and overcoming boisterous problems that arise from your limited knowledge of the skill.

### Learn By Doing (Deliberate Practice)

Practicing is a superior form of learning because it get's you to DO. It is only by doing that the required muscle memory is built, confidence to approach bugs established and the speed needed to deliver projects within the skill domain guaranteed. What are the best ways to approach learning by doing?

- **Be Purposeful** -
  Being purposely means, you have an end goal for doing something.

- **Be consistent** -
  Consistency is key to building expertise. Repeatedly visiting the gym at close intervals (daily, weekly) guarantees muscle building. Also consistently practicing at close intervals ensures that you solidify existing knowledge and build new knowledge base that advance your holistic understanding of any skill you're trying to build expertise around. Be intentionally consistent, and overtime you'd discover consistency becomes a part of you.

- **Be Focused** -
    The biggest threat to practicing and learning generally is **distraction**. We already live in a world filled with a lot of things begging for our attention but we have limited attention and can only focus on a few things at a time. To succeed with your learning plans, you have to create a system that encourages unbroken concentration and that affords you the opportunity to learn deeply. Some ideas;
  - Set out time daily for which you dedicate to learning
  - Create a spot, zone where you can lock yourself and be free from disturbance
  - Block out notifications from social apps (Emails, twitter, Facebook etc)

- **Get feedback** - 
    Feedback are important for measuring progress and discovering error in judgement. Some ideas for getting feedback is to have someone review the output of the practice time (for instance your project code), or work on a project with someone more knowledgeable than you are. These way you get insights into your mistakes and learn very quickly things you don't know.

The idea is to plunge yourself into deliberately practicing the skill consistently and overtime your practice time will begin to transcend into expertise, you'd begin to think differently and approach problems differently as you advance through the different Dreyfus stages. Gaining experience will only remain a heart cry if we do not to go forth and intentionally learn what we need to gain the desired experience.

Lastly, take some step back to access your current abilities with any particular skill you want to gain experience in. Using the Dreyfus model determine where you on the ladder, identify the required time commitment each day you'd be willing to commit, also identify the learning resource from where you can gather information on the skill and make the ultimate decision to be committed and consistent with the life changing activity of practicing.

If you love this article, I'd love to get your feedback in the comment section and any feedback(thought) you have regarding the topic.

P.S: Here is a [link to slides](https://speakerdeck.com/opara_prosper79/learning-a-developers-perspective-c6f2f021-3939-46f1-86fe-1108734bd66c) I created on this topic.