Skip to content

Latest commit

 

History

History
87 lines (58 loc) · 5.26 KB

1-deliberate-practice.md

File metadata and controls

87 lines (58 loc) · 5.26 KB

Learning to Study Programming

Preparation is central to good programming. Most stereotypes of great developers are wrong, one of the most wrong stereotypes is the brilliant programmer who sits down and types out a whole new app off the top of her head. In real life this is usually how you'd spot a bad programmer, not a great one!

Finished applications are the final product of a long and detailed planning process. This includes a lot of work before typing a single line of code: Determining market fit, planning application architecture, selecting development & deployment environments, and establishing a solid development schedule.

Even once this is finished and each developer has their tasks assigned to them, it's still not time to code yet! Great developers will take the time to make sure that they fully understand the problem they have been assigned, have a solution strategy, and have tests in place before they write a single line of code.

You may not be ready to launch your first app, but it's never too late to start good habits. As you work your way through JavaScript, write your first web sites, and study other people's work, don't just dive right into writing code. Take a minute to understand what you want your code to do, to set your personal learning objectives, and to connect what you're about to do with things you've already learned.

Remember, you're here to learn not to perform!

Index


Learning Objectives

  • Deliberate & reflective practice
  • Understanding-based measures of success
  • Patient programming
  • Intentional modifications
    • Avoid blindly modifying code
  • Prediction-driven studying
    • Make one small change to the code
    • Write down what you think will happen
    • Run it and see if you were right!

TOP


Specifications

  1. Set aside a chapter in your notes for JavaScript language features:
    • You'll want to build your own 'vocabulary list' to keep track of the built-in JS language features as you come across them. One of the most common difficulties in the early stages of programming is just remembering all of the language features available!
    • Having a complete list of everything you know, written in your own words, will be invaluable as you try to start to solve programming challenges on your own.
    • Start building a collection of clear code samples & sketches that have helped you understand key concepts, we recommend trying to store them in a directory of Markdown files.
  2. Familiarize yourself with the JS Tool Kit, especially these two tools:
  3. Work your way through the JavaScript diagramming guides linked in the main README for this repo:
    • With these guides you will learn to build a strong model of how the JavaScript engine executes your code.
    • These repos will complement whatever tutorial you choose to follow by providing you with several powerful study techniques to internalize what you are practicing.
  4. Practice whatever keeps you motivated. If you find one tutorial too easy, hard, or boring, move on! What's important is that you can predict how JS will execute simple programs, not the tutorials you complete.
  5. Stay involved! Studying a little bit (even 15 minutes) every day and staying active on Slack will make you life a lot easier.

TOP


Resources

Guide to Effective Learning

Useful questions to ask yourself:

Whenever you start a new exercise or challenge, take a minute before you write any code to ask yourself a few more general questions:

  • What is the primary learning objective for this exercise?
  • What exactly are you being asked to do? Re-write the prompt in your own words.
  • Have you practiced this objective before? Where? When? How well do you remember it?
  • How does this objective fit in with other things you've already learned?

Then take a look through the code, step through it as best as you can by hand. Write down what you think the code does before you run it:

  • What language features do you recognize?
  • What language features are totally new to you?
  • Can you identify what is new that you should be focusing on?
  • Can you learn anything from the variable names used?
  • Are there helpful comments?
  • Do the comments match what the code is doing?
  • Are there control-flow patterns you recognize?

TOP