Website Review
What is A++?
A++ is an educational programming language built on the lambda calculus, designed to teach the essentials of programming rather than the conveniences of a production language. Its stated goal is to help learners quickly grasp core ideas and recognize patterns that transfer to most other languages.
Its distinguishing idea is ARS Based Programming — Abstraction, Reference and Synthesis. The site presents these three operations as the foundation of all programming work, and A++ is deliberately stripped down so that they stay visible instead of being buried under syntax and library features. The lambda calculus basis means the language is small and hard-core: its elements cannot be split further, in contrast to mainstream languages with many "soft" features for practical tasks.
A++ has been implemented in Scheme, Java, C++, C, Perl and Python. Supporting material includes A++ – The Smallest Programming Language in the World and, among the newer titles, A++ and the Lambda-Calculus.
Who it suits: a student or self-learner who wants to understand what programming is before or alongside learning a language they will use for real work. It is less suitable as a first step toward shipping applications, since it intentionally omits the practical features you would need for that.
Practical next step: pick one small exercise — say, building a list or a recursive function — and write it in A++ alongside a language you already know. The comparison is where the value lies: you see which parts are essential and which are conveniences. If the lambda-calculus framing feels too abstract at first, read an introductory explanation of the lambda calculus before working through the language itself; Wikipedia has a reasonable starting point.
How does A++ differ from mainstream programming languages like Python or Java?
A++ is deliberately not a general-purpose language. It is a teaching language built on the lambda calculus, with the stated goal of helping learners grasp the essentials of programming quickly rather than covering the features needed to ship production software. Python and Java are general-purpose languages designed for practical work; A++ is designed for conceptual clarity. That single difference drives most of the rest.
H3 Where the difference shows up
- Feature set. The site describes A++ as "hard-core," made of elements that cannot be further split, while mainstream languages carry many "bells and whistles" and soft features for practical problems. Python and Java give you libraries, frameworks, tooling and standard idioms; A++ gives you a small core.
- Learning goal. A++ is meant to build pattern recognition that transfers to other languages. Python and Java are usually learned to build something specific — a script, a service, an app.
- Style of work. A++ is organized around what the site calls ARS Based Programming: Abstraction, Reference and Synthesis applied from start to finish. Mainstream languages rarely make that cycle explicit; you absorb it implicitly through practice.
- Ecosystem. Python and Java have large package ecosystems, IDEs and job markets. A++ has books and reference implementations, and the site lists implementations in Scheme, Java, C++, C, Perl and Python.
H3 Practical comparison
| Aspect | A++ | Python / Java |
|---|---|---|
| Primary purpose | Teach programming essentials | Build real software |
| Core size | Minimal, lambda-calculus based | Large, with many built-in features |
| Typical learner | Student wanting deep understanding fast | Developer or student targeting a project or job |
| Transfer value | High for concepts, low for tooling | High for both concepts and employability |
| Where you'd use it | Exercises, language study, teaching | Scripts, web services, data work, Android, enterprise systems |
H3 A concrete scenario
Suppose you want to understand recursion and function abstraction at a level where nothing is hidden behind syntax sugar. Working through A++ exercises forces you to build those ideas from a minimal base. Then, when you move to Python or Java, you recognize the same patterns inside a much larger language. If your goal is instead to automate a task this week or pass a coding interview, start with Python or Java directly — A++ will not give you the libraries or the ecosystem.
H3 How to decide
- Choose A++ if you want conceptual depth and are willing to work with a small, academic language and its books.
- Choose Python if you want a gentle on-ramp and broad practical use.
- Choose Java if you need static typing, large-scale structure and a strong enterprise ecosystem.
- A reasonable path is A++ first for fundamentals, then Python or Java for building things.
Next step: read the A++ overview at A++ An Educational Programming Language and compare its sample programs with an equivalent Python or Java snippet. If the A++ version makes the underlying abstraction clearer to you, it is doing its job.
What are Abstraction, Reference, and Synthesis in ARS-based programming with A++?
In A++, Abstraction, Reference, and Synthesis are not three separate topics to study one after another; they are the three recurring moves that make up every program. ARS-based programming is the name the language's material gives to that cycle, and A++ is designed to make the cycle visible rather than hidden behind convenient features.
H3 What each term means in practice
- Abstraction: name a pattern instead of repeating it. You take a piece of computation, give it a name, and from then on use the name. In lambda-calculus terms this is function creation; in everyday terms it is the moment you stop writing the same steps twice.
- Reference: use the name you created. This is the act of pointing at an abstraction and relying on it, which is what makes the abstraction worth having. Without reference, an abstraction is just a definition nobody calls.
- Synthesis: combine existing abstractions into a larger one. You build a new abstraction out of references to older ones, and that new piece becomes available for further reference.
The cycle is therefore: abstract something, reference it, synthesise it with other abstractions into something bigger, then abstract that result. According to the site, A++ is built directly on the lambda calculus, so these three operations are the primitive material of the language rather than conventions layered on top of it. The site also states that A++ has been implemented in Scheme, Java, C++, C, Perl and Python using ARS-based techniques, which suggests the same three moves are meant to transfer to whatever language a student meets later.
H3 Why a learner would choose this framing
| Approach | What the beginner spends time on | What transfers to other languages |
|---|---|---|
| Learning a feature-rich language first | Syntax, libraries, tooling, idioms | Partly; much is language-specific |
| Learning through ARS in A++ | Recognising and building patterns | The pattern-recognition habit itself |
The trade-off is real. A++ deliberately strips away the "bells and whistles" the site describes in other languages, so you will not be building practical applications with it. What you get instead is a small vocabulary in which abstraction, reference and synthesis are impossible to avoid. If your goal is to ship a web service next month, this is the wrong starting point. If your goal is to stop copying code you do not understand, the constraint is the point.
H3 A concrete way to try it
Take a task you already know how to write in another language — summing a list, say — and rewrite it three times: first with the operation written out inline, then with the operation abstracted into a named function, then with that function referenced inside a second abstraction that handles a different kind of list. Notice which step felt like duplication and which felt like composition. That distinction is what ARS-based programming is training.
For the language itself and its reference material, start at A++ — An Educational Programming Language. If you want the broader context of teaching programming through these three operations, the same author's work is discussed under the ARS banner; the site's book list is the most direct route into it.
How can I learn A++ and which book should I start with?
Start with A++ and the Lambda-Calculus (ISBN 978-3-7469-3811-0) if your goal is to understand why A++ works the way it does, and A++ – The Smallest Programming Language in the World (ISBN 978-3-7469-3021-3) if you want the language itself plus its implementation. The site presents A++ as a deliberately minimal, Lambda-Calculus-based teaching language whose purpose is to make Abstraction, Reference and Synthesis (ARS) visible from the very first exercise.
A practical reading order
- Language and implementation first: A++ – The Smallest Programming Language in the World. The site says it covers both the language and its implementation, and that the Perl and C implementations are presented in detail there. This is the natural starting point if you intend to actually write A++ programs.
- Theory second: A++ and the Lambda-Calculus. Read this once you have written a few programs and want the formal foundation behind the language's minimalism.
- German readers: Die kleinste Programmiersprache der Welt (978-3-7469-3199-9) and Programmieren lernen mit A++ (978-3-7469-3098-5) cover the same ground in German; the latter is aimed at learning to program rather than at the language's theory.
- Going further: A++ und systemnahe Programmiersprachen (978-3-7469-3600-0) and Von A++ nach ARS++ (978-3-7469-3644-4) extend the material toward systems-level languages and toward ARS++.
Which book fits whom
| Reader | Best starting book |
|---|---|
| Complete beginner who wants to learn programming through a minimal language | Programmieren lernen mit A++ (German) or The Smallest Programming Language in the World |
| Programmer who wants the theory behind the design | A++ and the Lambda-Calculus |
| Reader interested in how A++ is implemented in Scheme, Java, C++, C, Perl or Python | The Smallest Programming Language in the World, supplemented by the older Programmierung pur (3-87820-108-7, 2003) for the non-Perl/C implementations |
| Reader moving on to ARS-based programming in larger languages | Von A++ nach ARS++ |
A concrete way to study it
Take one small problem — say, computing a sum over a list — and solve it three times: once with direct recursion, once by abstracting the recursion into a reusable higher-order function, and once by referring back to that abstraction from a second program. That exercise is exactly the ARS cycle the site describes, and it is the skill that transfers to other languages. Because A++ is based on the Lambda Calculus and deliberately lacks the "bells and whistles" of mainstream languages, you cannot paper over a gap in understanding with library calls; the feedback is immediate. The trade-off is that A++ is not a language you would use to ship production software, and its book-based, German-published documentation is narrower than what you would find for a mainstream language.
For background on the Lambda Calculus itself, the standard general reference is Wikipedia.
Is A++ implemented in other languages, and can I use those implementations?
A++ is described as having implementations in several host languages: Scheme, Java, C++, C, Perl, and Python. These implementations were built using the language's own ARS-based programming techniques (Abstraction, Reference, Synthesis), so they are not just ports but demonstrations of the same design principles.
Whether you can use them depends on what you need:
- Learning the language: The Perl and C implementations are documented in detail in the book A++ – The Smallest Programming Language in the World, making them the most practical starting points if you want to study or run A++.
- Broader coverage: The Scheme, Java, C++, and Python implementations are covered in the out-of-print 2003 book Programmierung pur (Undiluted Programming, ISBN 3-87820-108-7), which is harder to obtain.
- Practical use: A++ is explicitly an educational language, not a production tool. The implementations exist to teach programming essentials, so expect to use them for study and experimentation rather than for building real applications.
A useful next step: if you want to try an implementation, start with the Perl or C version alongside the main A++ book, since those are the ones with detailed published guidance. If you prefer Python or Scheme, you will likely need the older Programmierung pur reference or the original source distributions.
For context on the language itself, see A++ – An Educational Programming Language.
Who is A++ designed for and what programming background do I need?
A++ is designed for people who want to understand the core of programming rather than accumulate familiarity with a large language's conveniences. The site frames it as an educational language whose sole purpose is to convey the essentials of the "art of programming" quickly and thoroughly, using Abstraction, Reference and Synthesis (ARS) as the recurring method.
Who it suits
- Beginners willing to work from first principles: A++ is deliberately minimal, built on the lambda calculus, so there is little syntax and few built-in conveniences to hide what is happening.
- Students in a course or self-study programme who want transferable skills: the stated aim is that patterns learned in A++ carry over to most other languages.
- Teachers and curriculum designers looking for a small, formally grounded language to demonstrate abstraction and function application.
- Experienced programmers curious about lambda-calculus foundations, or about how the same language can be implemented in Scheme, Java, C++, C, Perl and Python.
Background you need
No prior programming experience is strictly implied by the material — the language is positioned as an entry point. What matters more is tolerance for abstraction: because A++ is described as "hard-core" and made of elements that cannot be split further, you should expect to reason about functions and references directly rather than lean on libraries, frameworks or syntactic sugar. If you have programmed before, you will likely move faster, but habits from verbose languages may need unlearning.
A practical caveat: the site is also the home of several books, including A++ — The Smallest Programming Language in the World and A++ and the Lambda-Calculus, and the language's implementations are documented in those books. That suggests the intended path is guided reading alongside hands-on use, not dropping into a large ecosystem of tutorials.
A useful next step
Before committing, try one small exercise: define a function, apply it to an argument, and then build a second function that takes the first as input. If that feels like a natural way to think about a problem, A++'s approach will fit you. If you find yourself wanting a standard library or a debugger on day one, treat A++ as a supplement to a more conventional language rather than a replacement.
For context on the lambda calculus tradition it draws from, see Wikipedia; for a widely used functional language often taught from similar foundations, see Haskell.
User reviews (0)