Skip to content
The Professor Your AI piano coach. Ask about this lesson, or start a coached session. Open coaching studio
Advanced · Piano Technique Intensive ✦ Free lesson ★★☆☆☆

Scales: The Foundation

Why Scales Are Non-NegotiableScales are not "boring exercises", they are the VOCABULARY of piano technique. 80% of the passages in classical, jazz, and popular piano music are based on scales or scale…

15Minutes
60XP
2Exercises
Level 7-9RCM level

Lesson 1 of 6 in Piano Technique Intensive

Why Scales Are Non-Negotiable

Scales are not “boring exercises”, they are the VOCABULARY of piano technique. 80% of the passages in classical, jazz, and popular piano music are based on scales or scale fragments. A pianist who can play all major and minor scales fluently at ♩=120+ can sight-read and learn pieces dramatically FASTER than one who cannot, because the finger patterns are ALREADY in muscle memory.

The 4 Scale Priorities (in order)

  1. All 12 major scales, 4 octaves, hands together: The FIRST priority. Target: ♩=100 minimum, ♩=120 professional standard. Fingering must be AUTOMATIC, no thinking about thumb crossings.
  2. All 12 natural minor scales: Same target tempo. The fingering often matches the relative major.
  3. Harmonic minor scales (raised 7th): Creates the augmented 2nd interval between 6th and 7th degrees, a distinctive sound.
  4. Melodic minor scales (raised 6th and 7th ascending, natural descending): Different ascending vs descending, requires mental flexibility.
Ear Training Exercise
Loading ear training..

The Secret to Fast Scales: THUMB CROSSING

Every scale “breaks” are at the thumb crossing points, where the thumb passes UNDER fingers 3 or 4, or fingers 3/4 pass OVER the thumb. These crossings are the #1 cause of scale unevenness. Fix: (1) Practice ONLY the crossing: the note before the crossing, the crossing itself, and the note after. 3 notes, 20 repetitions. (2) The thumb must slide under SMOOTHLY, it moves forward (toward the fallboard) and under, not sideways. (3) The hand stays LEVEL during the crossing, no wrist dipping or rising.

Piano Hero Major Scales: C, G, D, A, 4 Octaves, Hands Together +25 XP

Play each scale 4 octaves ascending and descending. Watch for EVENNESS, every note identical volume and duration. The thumb crossings should be INVISIBLE to a listener.

Practice freely (no score required) ↗ Score: technique-major-scales-cgda.mxl
Virtual Studio Record: C Major Scale 4 Octaves, Evenness Test

Common Mistakes to Avoid

  • Reading note-by-note instead of by interval. Once you know the first note of a phrase, read the rest by intervals (step up, skip down). It is 5 to 10 times faster than reading each note from scratch.
  • Jerky thumb-tuck. The thumb passes UNDER the hand smoothly — never break the legato. Practice the thumb-tuck slowly with a metronome until it disappears.
  • Slouching at the bench. Keep your back straight, shoulders relaxed, feet flat. Bench height: forearms parallel to the floor when fingers rest on the keys.

Pro Tip from a Teacher

Print a small landmark card with Middle C and the F-clef F-line marked. Tape it above your keyboard for the first three weeks. Visual reference burns the layout into long-term memory faster than any drill.

Try Variations

Easier

Play the scale hands-separately, one octave only.

Standard

Play hands together, two octaves, with the metronome.

Harder

Play three octaves, contrary motion (RH ascends while LH descends).

Connect to Your Repertoire

Hear scales come alive in a real piece — Czerny's short, useful study.

Etude in C Major Op. 36 No. 22

Before You Move On — Self-Assessment

0/5 checked — aim for at least 4 of 5 before continuing to the next lesson.

Recommended Reading
The 7 Practice Mistakes That Are Slowing Down Your Piano Progress Article
How Many Hours Should You Practice Piano Each Week Article
Why Music Calms the Brain Article
Score Annotation Apps: How to Study and Practice More Effectively Article

Your practice toolkit

Everything in this lesson, one tap away, no MIDI keyboard required.

Lesson Quiz

Log in or Sign up to check your level

1 Answer option
2 Answer option
3 Answer option
4 Answer option
Log in or Sign up to check your level
Next Lesson
') >= 0 ? html.replace('', _ts + '') : (html + _ts); } } catch (e) {} booted.push(f); f.addEventListener('load', function () { reveal(f); }, { once: true }); try { var blob = new Blob([html], { type: 'text/html' }); var url = URL.createObjectURL(blob); f.addEventListener('load', function () { setTimeout(function () { try { URL.revokeObjectURL(url); } catch (e) {} }, 5000); }, { once: true }); f.src = url; } catch (e) { // Older engines without blob-URL iframe support: srcdoc fallback. f.srcdoc = html; } }// Sequential, viewport-gated: one frame parses the engine before the // next starts so several embeds never thrash the main thread at once. var queue = [], working = false; function pump() { if (working) return; var f = queue.shift(); if (!f) return; working = true; var released = false; var release = function () { if (released) return; released = true; working = false; setTimeout(pump, 150); }; f.addEventListener('load', release, { once: true }); setTimeout(release, 6000); // never let one slow frame stall the queue boot(f); } if ('IntersectionObserver' in window) { var io = new IntersectionObserver(function (ents) { ents.forEach(function (en) { if (en.isIntersecting) { io.unobserve(en.target); queue.push(en.target); pump(); } }); }, { rootMargin: '400px 0px' }); frames.forEach(function (f) { io.observe(f); }); } else { frames.forEach(function (f) { queue.push(f); }); pump(); }// Live theme sync: when the visitor toggles the site theme, push it into // every booted embed so they flip with the page. function pushTheme() { var t = hostTheme(); booted.forEach(function (f) { try { f.contentWindow && f.contentWindow.postMessage({ pmSrtTheme: t }, '*'); } catch (e) {} }); } if ('MutationObserver' in window) { new MutationObserver(pushTheme).observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] }); }// Apply a theme to the WHOLE SITE (mirrors the theme toggle in // functions.php) when an embed reports a user-initiated flip, so the // trainer's own light/dark button drives the entire website. function applySiteTheme(t) { var root = document.documentElement; if (root.getAttribute('data-theme') === t) return; // already there → stop the loop root.setAttribute('data-theme', t); try { localStorage.setItem('pm-theme', t); } catch (e) {} try { document.querySelectorAll('.pm-theme-toggle').forEach(function (b) { var l = (t === 'light'); b.setAttribute('aria-pressed', l ? 'true' : 'false'); b.classList.toggle('is-light', l); }); } catch (e) {} try { window.dispatchEvent(new CustomEvent('pm:themechange', { detail: { theme: t } })); } catch (e) {} }// Messages coming UP from the frames: a theme flip to mirror site-wide, // and the height the trainer needs so the keyboard + its bottom bar fit // with nothing clipped (capped to the viewport so it stays responsive). // Only OUR OWN embed frames may drive the host page. Without this, any // page that framed or opened pianomode.com could postMessage a theme // flip (and formerly a height change) and drive the site's UI. The // frames are blob:/srcdoc documents whose e.origin is not a usable // string, so identity is checked by window reference — the strongest // available signal, and the same check the height branch already made. function fromOwnFrame(src) { if (!src) return false; for (var i = 0; i < booted.length; i++) { if (booted[i].contentWindow === src) return true; } return false; } window.addEventListener('message', function (e) { var d = e && e.data; if (!d) return; if (!fromOwnFrame(e.source)) return; if (d.pmSrtThemeSet === 'light' || d.pmSrtThemeSet === 'dark') { applySiteTheme(d.pmSrtThemeSet); } if (typeof d.pmSrtHeight === 'number' && d.pmSrtHeight > 0) { for (var i = 0; i < booted.length; i++) { var f = booted[i]; if (f.contentWindow !== e.source) continue; var wrap = f.closest ? f.closest('.pm-srt-embed__frame') : null; if (!wrap) break; var maxH = Math.round((window.innerHeight || 800) * 0.92); var h = Math.max(360, Math.min(Math.round(d.pmSrtHeight), maxH)); // Break the resize feedback loop from THIS side too. The frame // reports the height its content wants, but we clamp to the // viewport — so on a tall score the requested and applied values // never converge, and writing the same height again would resize // the frame, refill its flex layout, fire its ResizeObserver and // bounce another message straight back at us. Writing only on a // real change means a clamped frame settles after one write. if (wrap.__pmSrtH !== h) { wrap.__pmSrtH = h; wrap.style.height = h + 'px'; wrap.style.maxHeight = 'none'; } break; } } }); })();