Skip to main content

How To Get More Out Of Tutorials

We all follow tutorials.  Coming up with an idea for a new app, including the scaffolding and the specific functionality, is hard.  Struggling through something on your own can be valuable and helps you internalize it, but you also risk "reinventing the wheel" if you fail to take advantage of the resources and experience available from those who have "done it before."  Tutorials help you work through an ambitious project step by step and "learn while doing."  

But blindly copying someone else's code without knowing why you are doing what you are doing can severely limit your learning.  Use the following steps to get the best of both worlds -- a dedicated teacher who will guide you every step of the way through the app you want to make AND a system that will hold you responsible for what you learn and help you to internalize it so that you can generalize specific steps for future pet projects (or work assignments).

1. Pause The Tutorial

Pause the tutorial and figure out how you might do something before you watch the video explain it.  (This breaks the tutorial into a series of assignments but helps you avoid the paralysis of having to figure out all of the scaffolding for an app.  BUT -- you can make your own high level plan for the app before you watch the tutorial.  I made the mistake of not doing this when I worked through a console Blackjack App for Ruby, with the consequence that I didn't really understand, as I was watching the tutorial, how the creator was implementing the rules of the game -- and thus implemented them incorrectly.  The idea is to turn the tutorial, as much as possible, into peer programming.)

2. Integrate TDD

Testing is an important part of development.  Some tutorials will go half an hour without testing their code -- only to suffer the embarrassment of compiler and interpretation errors or general bugs.  Figure out how to write tests for the tutorial if it does not include them and test as you go.  This will also help you as you interview and complete coding challenges, because even though you might not learn test driven development in a boot camp, being able to write tests for your code can make the difference between a second interview and a rejection letter (I know from personal experience).

3. Show Your Work

Explain the tutorial to other people.  Write a blog post summarizing what you did and why you did it.  This will keep you from simply "copying" the tutorial and help you to internalize it.  Rewrite the app from scratch after you finish the tutorial.  Think about ways to improve the code and structure of the app.  Practice writing the app as if you were a musician adding it to your "repertoire."  Create your own tutorial explaining how to make the app.  (The best way to learn something, as they say, is to explain it to someone else.  And "if you can't explain something simply, you don't understand it yourself" -- John Searle.)

Conclusion

In sum, I'm not sure I agree with people who say that you should stop following tutorials.  Until you reach a certain level, the value in being guided outweighs the downside of producing unoriginal work. And honestly, you will be face the temptation of copying whenever you run into difficulties, whether you're copying from an answer on Stack Overflow to solve a problem with your pet project or following instructions in a tutorial.  The key is not whether to copy, but how.  By the following the steps above, I believe you will spend less time imitating and more time learning.  

But at the end of the day, Aristotle was right: "What learners must learn to do they learn by doing."  Happy coding!

Comments

Popular posts from this blog

Getting Geodata From Google's API

The apps I'm going to be analyzing are part of Dr. Charles Severance's MOOC on Python and Databases and work together according to the following structure (which applies both in this specific case and more generally to any application that creates and interprets a database using online data). The data source, in this case, is Google's Google Maps Geocoding API.  The "package" has two components: geoload.py  and geodump.py .  geoload.py  reads a list of locations from a file -- addresses for which we would like geographical information -- requests information about them from Google, and stores the information on a database ( geodata.db ).  geodump.py  reads and parses data from the database in JSON, then loads that into a javascript file.  The javascript is then used to create a web page on which the data is visualized as a series of points on the world-map.  Dr. Severance's course focuses on Python, so I'm only going to work my way through ...

Compiling and Executing Java Files With -cp

I decided I was going to "man up" and figure out how to compile a java program with an external dependency from the command line instead of relying on an IDE-- the DOS command line, to be more specific. I ran into a few problems: 1.  The external dependency was given to me as a java file.  I experimented compiling it as a .jar, but I wasn't sure how to import a class from a .jar, so I ended up compiling it into a class. 2.  When I tried to run the file, I got an error saying that the class had been compiled with a different version of Java than my JRE.  The Internet told me to check my path variable for Java.  It sure looked like it was pointing to the latest JRE (and the same version of Java as my compiler).  I asked the Internet again and found the following command: for %I in (java.exe) do @echo %~$PATH:I I'm not exactly sure what the syntax of that magic command is (intuitively it's returning the path that executes when I run the "java" com...

Throughput, Latency, and Pipelines: Diagnosis Of A Fallacy

Source here . Latency is the time it takes for a job to complete from start to finish -- for example, if we're downloading a file from a server, we might define the latency of the download as the amount of time it takes from the initial request for the file to the time the last byte is received. Throughput is a measure of how much can be completed in a given time.  Following the same example, how many files could we download in an hour? What is the relationship between latency and throughput?   It make take, again, 1 hour to download a file.  Notice already that we have a relationship between some amount of work that can be completed and time -- if the file is, say, 2 GB, it takes 1 hour to download 2 GB in our example.  What we really want to do here is generalize: how long does it take to download 10 GB?  How many GB can we download in ten hours or one minute?  Generalizing over time, we derive latency; generalizing over work completed, we derive the...