Saturday, January 10, 2026
Cart / 0,00 EGP

No products in the cart.

  • Login
  • Register
BAWABAA.COM
No Result
View All Result
  • Home
  • Archives
    • Pages
    • Posts
    • Glossary
    • Products
    • Websites
    • Portfolios
    • Services
    • Solutions
    • Peoples
    • Movies
  • Taxonomies
  • Contact
  • Home
  • Archives
    • Pages
    • Posts
    • Glossary
    • Products
    • Websites
    • Portfolios
    • Services
    • Solutions
    • Peoples
    • Movies
  • Taxonomies
  • Contact
No Result
View All Result
BAWABAA.COM

Home » Posts » Teach Yourself Programming in Ten Years

Teach Yourself Programming in Ten Years

by MOUSTAFA
December 15, 2025
in Uncategorized

Sure, let’s do a deep dive into Peter Norvig’s classic article:
“Teach Yourself Programming in Ten Years”
(Original: https://norvig.com/21-days.html).


🧠 Context and Motivation

1. The Trigger: Misleading Titles

Peter Norvig was reacting to the popularity of books with titles like:

  • “Teach Yourself Java in 24 Hours”
  • “Learn C++ in 21 Days”

These books sell the illusion of fast mastery, suggesting that programming can be learned quickly like assembling furniture or memorizing a few phrases in a new language. Norvig sees this as harmful because it trivializes what is actually a complex, deep skill that requires time and persistence.


📚 The Real Path to Mastery: 10 Years

2. Research and Patterns Across Domains

Norvig references work by researchers like:

  • K. Anders Ericsson (expertise development)
  • Herbert Simon (cognitive science)
  • Malcolm Gladwell (popularized the 10,000-Hour Rule)

Key observations:

  • Expertise across many disciplines (e.g., music, chess, math) follows a consistent pattern: ~10 years or 10,000 hours of deliberate practice.
  • “Natural talent” plays a role, but focused effort and feedback loops are far more critical.

🔁 Deliberate Practice: The Core Ingredient

3. What Is Deliberate Practice?

It’s not about writing code casually or building simple apps endlessly. Instead, it’s:

  • Tackling increasingly hard problems.
  • Failing, reviewing, and adjusting.
  • Getting regular, honest feedback.
  • Learning from mentors and peers.

“Practice doesn’t make perfect. Perfect practice makes perfect.”


🧩 Norvig’s Practical Guide to Becoming a Good Programmer

Norvig lists concrete, long-term steps you should take if you want to become truly skilled:


A. Love Programming, Not the Idea of Being a Programmer

If you’re not driven by intrinsic interest in building things and solving problems, you’ll likely burn out before year 10.


B. Program Consistently

“The best way to learn programming is to write programs…”

Write a lot of code. Solve real-world problems. Explore bugs. Refactor. Rewrite.


C. Work on Projects with Other People

You’ll gain:

  • Exposure to better practices.
  • Code reviews that challenge you.
  • Insights into how large systems evolve.

Being a lone wolf limits your growth.


D. Read Code – A Lot

Studying other people’s code—especially open-source projects—helps you learn:

  • Style
  • Architecture
  • Idioms
  • Design trade-offs

This mirrors how aspiring writers read great literature.


E. Understand the Underlying Computer Science

Knowing how memory works, what makes an algorithm fast, or how compilers parse code gives you deeper leverage. Norvig suggests learning:

  • Algorithms and data structures
  • Operating systems and networking
  • Hardware basics (e.g., CPU instruction timing)

F. Work at Varying Levels

Be the:

  • Beginner among experts (to be challenged)
  • Expert among beginners (to reinforce your knowledge by teaching)

Shifting contexts accelerates your depth of understanding.


G. Learn Multiple Programming Languages

“You should learn a programming language every year.”

Each language shapes how you think. For example:

  • Lisp/Haskell: recursion, functional purity.
  • Python/Ruby: rapid prototyping.
  • C: memory, pointers, low-level control.
  • Prolog: logic programming and declarative thinking.
  • Java/C++: object-oriented design and abstraction.

These shifts in paradigm expand your problem-solving “vocabulary.”


H. Understand Language Design

Try writing a toy language or contribute to language tools. This teaches:

RelatedPosts

WordPress Development Services

WordPress Full Courses on YouTube

The “Green Padlock” on Localhost Cheat Sheet

Comprehensive List of eCommerce Tools by Type and Business Size

  • Syntax vs semantics.
  • Parsing, compiling, interpreting.
  • Trade-offs in language expressiveness vs performance.

🧠 What Norvig Isn’t Saying

Norvig isn’t saying:

  • You can’t build apps in a few weeks.
  • You’re not allowed to enjoy tutorials or short-term progress.

He is saying: don’t expect mastery (or a rewarding programming career) from shallow study or shortcut mindsets. Real skill comes from depth, not quick wins.


⚠️ Critique of Fast-Track Materials

Norvig suggests that books like “Teach Yourself C++ in 21 Days” may:

  • Teach you syntax, not software design.
  • Give you false confidence.
  • Set you up for frustration when dealing with real-world systems.

He compares it to learning to play piano by memorizing keystrokes without understanding rhythm or scales.


🏁 Summary Takeaways

InsightExplanation
Mastery takes ~10 yearsTrue expertise in any domain requires sustained, focused effort.
Programming is craft + theoryLearn both the CS and hands-on practice.
Deliberate practice is the keySolve hard problems, not just any problems.
Exposure mattersRead code, write code, collaborate, and teach others.
Languages are tools for thoughtEach one shifts your mindset and unlocks new insights.
You can’t shortcut masteryBut you can enjoy the journey and improve steadily.

💬 Final Norvig Quote

“So go ahead and buy that Java book—just don’t be in such a hurry.”

Share6Tweet4Share1
Previous Post

The Big Picture: Software Engineering

Next Post

The Big Picture: Software Architecture

MOUSTAFA

MOUSTAFA

Technology, Engineering and Business Analyst

Related Posts

Free bold abstract painting background
Uncategorized

WordPress Development Services

Abstract colorful mesh hanging Oxford
Uncategorized

WordPress Full Courses on YouTube

Abstract wavy texture black background
Uncategorized

The “Green Padlock” on Localhost Cheat Sheet

worms eye view of spiral stained glass decors through the roof
Uncategorized

Comprehensive List of eCommerce Tools by Type and Business Size

black and yellow round lantern
Uncategorized

Complete Guide to Software Development Methodologies

Dummy Object Test Doubles in Unit testing with Java and Mockito
Uncategorized

Dummy Object Test Doubles in Unit testing with Java and Mockito

Next Post

Understand the differences between entity, class, and object in the context of programming and real-world modeling.

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • WordPress Development Services
  • WordPress Full Courses on YouTube
  • The “Green Padlock” on Localhost Cheat Sheet
  • Comprehensive List of eCommerce Tools by Type and Business Size
  • Complete Guide to Software Development Methodologies

Recent Comments

No comments to show.

Archives

  • January 2026
  • December 2025

Categories

  • Uncategorized
  • Home
  • Archives
  • Taxonomies
  • Contact

MOUSTAFA ALSAYEH

Welcome Back!

Sign In with Google
OR

Login to your account below

Forgotten Password? Sign Up

Create New Account!

Sign Up with Google
OR

Fill the forms below to register

All fields are required. Log In

Retrieve your password

Please enter your username or email address to reset your password.

Log In
  • Login
  • Sign Up
  • Cart
No Result
View All Result
  • Home
  • Archives
    • Pages
    • Posts
    • Glossary
    • Products
    • Websites
    • Portfolios
    • Services
    • Solutions
    • Peoples
    • Movies
  • Taxonomies
  • Contact

MOUSTAFA ALSAYEH