What Should I Focus On?
Table of Contents
- What are authoritative sources?
- How to find authoritative sources?
- How to identify important sub-topics?
- How to set specific programming goals?
- Converting your goals into skill examples
- Next Steps
Back when I was at Uni studying for my undergraduate degree in Criminology, we often had to write long essays about topics we were researching for the first time.
Our time was limited, so we had to quickly identify who the main authorities were, what they thought and who held different opinions to them, so that we would have enough time to weigh up all of that evidence and come to our own conclusions.
I didn't realise how much of a skill this was, until I started mentoring developers who regularly asked me what resources were best to focus on for learning a specific programming language, framework or set of principles that they were interested in.
However, this skill means nothing if you don't know how to use the resources you've identified effectively. You could spend months reading programming books (or other resources) from cover to cover and still be at square one in terms of your practical skills.
Throughout this article, you'll learn how to identify some of the key programming resources for your topic, how to set specific programming goals, and how to convert those goal statements into examples that demonstrate your new skills.
What Are Authoritative Sources
There are two main indicators of authority when it comes to programming sources.
- Recognized Industry Experts: The people who invented the thing you are interested in learning, or someone who is highly skilled in that area (verified by their work or community contributions).
- Peer-reviewed Sources: are publications that are reviewed by several other experts in the field (usually before they have been published, like books), though articles and other forms of media that have been endorsed by known experts can also count here.
It's important to keep in mind that just because someone invented a topic, or is considered to be an industry expert, doesn't mean that they're the best source on the topic.Never take anything you read for granted as being the right, or only right way. Question everything and come to your own conclusions, and always be open to having your mind changed.
How To Find Authoritative Resources
The first place to start when looking for authoritative sources from is the Recognized Industry Experts, starting with the original inventor/s. A quick internet search will tell you who invented something. When I typed in 'Who invented Ruby' in Google, Yukihiro Matsumoto was returned as a result along with the books he has published:
- Yukihiro Matsumoto (inventor): Book - The Ruby Programming Language
- Yukihiro Matsumoto (inventor): Book - Ruby in a Nutshell
The next step is to find peer reviewed sources. If the inventor has published a book, I'll go to their publishers site and use the search bar to search for the same topic (in this case, Ruby). Publishers usually attract writers who specialize in the same kind of content they publish.
The O'reilly site search for Ruby resulted in 105 books, 18 conferences, 13 videos, 8 webcasts and 1 report, along with a long list of authors and speakers on the subject.
If every single one of these resources are directly relevant to your experience level and goals, add them to your list. Chances are, many of them won't be what you are looking for, of the 107 books listed, only 14 were relevant to me:
- The Ruby Programming Language
- Ruby In A Nutshell
- Ruby Pocket Reference
- Ruby Best Practices
- Learning Ruby
- Ruby Cookbook
- Head First Ruby
- Programming Ruby
- Every Day Scripting With Ruby
- Ruby By Example
- Wicked Cool Ruby Scripts
- The Book Of Ruby
- Ruby Wizardry
- Computer Science Programming Basics In Ruby
Now that we have our list of resources, it's time to identify the most important sub-topics, yayy!
How To Identify Important Sub-Topics
There's a really easy technique for identifying the most important sub-topics for a list of resources: Tallying the topics that appear in the table of contents for each source (if there is one). The table of contents is usually freely available on the publishers page for books, or on course outlines etc.
Start by getting a blank note page and list the topics that appear in the first table of contents. Then move onto the second table of contents and either add a tally mark next to topics that have already appeared in your list, or extend your current list with any unique topics that appear.
Core topics are likely to have a much higher number of appearances than more niche or advanced sub-topics in your chosen area. By the time you are done with the last table of contents, you'll be able to see at a glance what the most common and least common topics are.
How To Set Specific Programming Goals
Now that we know that the most and least common topics are in our chosen area, it's time to create a priority plan for what to learn first.
Why are you trying to learn this specific language, tool, framework, set of principles etc? What exactly are you trying to acheive, and how will you know when you've acheived it?
Filling in the blanks in this sentence can help you answer this. The more specific you are, the more effective your resulting plan'll be:
I'm trying to ______ so that I can ______. I'll know I have acheived this when ______. Some examples:
- I'm trying to learn the fundementals of Ruby so that I can build simple programs. I'll know I have acheived this when I have built a demo program for each of the core Ruby fundementals identified in my tally.
- I'm trying to improve the way I write programs so that I can make my programs more flexible. I'll know I'll have acheived this once I have implemented feedback for 20 Ruby katas.
- I'm trying to learn how to use RSpec, so that I can test my ruby programs. I'll know I have acheived this when I have test-driven a fizzbuzz program in Ruby.
Once you have a very specific goal, you can then choose which resources are most appropriate for helping you acheive that goal. Or, you might find that a quick Google search might be enough to help you reach your goal.
Converting Your Goals Into Skill Examples
There are two huge advantages to writing your goals using the approach outlined in the previous section. Firstly, they'll be specific enough that it won't take you long to acheive.
Secondly, they can easily be converted into specific examples of skills you have obtained (including why and how) - perfect for CVs and interviews etc. Here's how you can convert your goals into skill demonstrations:
You can convert
I'm trying to ______ so that I can ______. I'll know I have acheived this when ______ to:
I have _____, which means I can ______. I did this by ______. Some examples:
- I have learned the fundementals of Ruby, which means I can build simple programs in Ruby. I did this by building a demo program each for several core Ruby concepts (arrays, hashes, strings, numbers, loops, conditionals) etc.
- I have improved the way I write programs, which means I can make my programs more flexible. I did this by getting feedback for 20 Ruby katas and refactoring the programs to account for that advice.
- I have learned how to use RSpec, which means I can write tests for my Ruby programs. I did this by test-driving a fizzbuzz program in Ruby.
Over time, you'll end up with a long and impressive list of the skills you have obtained in each of your chosen languages, tools, frameworks and principles etc. Whenever you apply for a new job, you can quickly copy these examples in, so you'll always be able to create tailored CVs with minimum effort.
Your challenge for this article is to write a specific goal for whatever it is you're trying to learn, by filling in the blanks in the following sentence:
I'm trying to ______ so that I can ______. I'll know I have acheived this when ______.
Once you have acheived this goal, convert it into an example of a skill you have aquired by rephrasing it by filling in the blanks in the following sentence:
I have _____, which means I can ______. I did this by ______. Some examples:
If you completed the challenge, high five for taking action! Bonus points if you leave a comment with an example of your newly aquired skill!