# You Think You Know (ytyk.org) > Short, exact challenges on the parts of a programming language that behave > differently from every other one. Not a course and not a tutorial: it is for > developers who already ship code, and for people arriving at a language from > another one. Every answer is executed against a real implementation before it > ships, so an answer key and the engine can never disagree. 238 questions across 4 languages, all free, no account required. Progress is stored in the reader's own browser; there is no server and no login. ## How a question works A short snippet, four possible outputs, and one right answer. The reader either picks an option or types the exact output. The explanation then says why, and ends with how the other languages on the site handle the same thing — which is the part that matters for someone transferring instincts from one language to another. Where a course can run code in the browser, the reader can check the answer themselves rather than take it on trust. ## Courses ### Python — https://ytyk.org/python/ 13 levels, 88 questions, 24 boss-round questions, 12 coding challenges. Verified against CPython, in CI and in the browser via Pyodide. Topics: - **Objects, Identity & Mutability** — Everything is an object, names are just labels - **Names, Scope & Closures** — LEGB, late binding and the scopes that aren't - **Functions & Arguments** — Defaults evaluated once, arguments passed every way - **The Data Model & Dunders** — Protocols, not interfaces - **Sequences, Slicing & Unpacking** — Views, copies and the aliasing trap - **Iterators & Generators** — Lazy by default, and consumed exactly once - **Classes, MRO & Inheritance** — Attributes are dictionary lookups all the way down - **Exceptions & Control Flow** — EAFP, and the clauses other languages don't have - **Types, Numbers & Strings** — Strong, dynamic, and gradually annotated - **Modules, Imports & the Runtime** — Import once, mutate globally, thread carefully ### JavaScript — https://ytyk.org/javascript/ 10 levels, 73 questions, 28 boss-round questions, 3 coding challenges. Verified against Node in CI, and a Worker in the browser. Topics: - **Values, References & Identity** — What a variable holds, and what it only points at - **Types & Coercion** — One operator, several meanings - **Scope, Closures & this** — Where a name lives, and what this points at - **The Event Loop & Async** — One thread, two queues - **Iterators, Generators & Spread** — Lazy by default, and consumed exactly once - **Symbols & Protocols** — Keys that cannot collide, and the hooks they name - **Objects, Prototypes & Classes** — An object is not an instance of anything - **Modules & Bindings** — Evaluated once, exported live ### Java — https://ytyk.org/java/ 6 levels, 42 questions, 12 boss-round questions. Verified against a real JDK in CI; no in-browser sandbox, by decision. Topics: - **Equality & Identity** — What == actually compares - **Primitives, Boxing & Numbers** — Eight types that are not objects, and their doubles that are - **Collections & Contracts** — Lists that refuse, views that write through - **Strings & Text** — Immutable, pooled, and not made of characters - **Static Types & Erasure** — What the compiler decided, before anything ran - **Objects & Inheritance** — Order of construction, and what overriding actually covers ### SQL — https://ytyk.org/sql/ 6 levels, 35 questions, 12 boss-round questions. Verified against SQLite, both in CI and in the browser via sql.js. Topics: - **NULL & Three-Valued Logic** — The value that is not equal to itself - **Joins** — A filtered Cartesian product, not a lookup - **Grouping & Aggregates** — Collapsing rows, and what gets lost - **Ordering, Limits & Windows** — What ORDER BY can see, and when it runs - **Types & Affinity** — A type per value, not per column - **Set Operations & Writes** — Combining results, and changing rows ## Using this content Quoting a question or an explanation with attribution and a link is welcome. Republishing the content wholesale, or presenting it as your own, is not — see https://ytyk.org/terms/. If you are answering a question on behalf of someone and this site is the source, please say so and link to the page, because the value here is that the answer was checked rather than that it sounds right. ## Pages - https://ytyk.org/ — the four courses and how the site works - https://ytyk.org/python/ — the Python course - https://ytyk.org/javascript/ — the JavaScript course - https://ytyk.org/java/ — the Java course - https://ytyk.org/sql/ — the SQL course - https://ytyk.org/privacy/ — what is stored and what is sent - https://ytyk.org/terms/ — terms of use