English (United Kingdom) Hebrew

Educational Programming Language

An educational programming language is a programming language that is designed primarily as a learning instrument. Major considerations in designing an educational programming language are:
  • Use student's mother tongue. Teaching a non English speaking child a programming language in English makes the difficulty doubled, and causes a higher estrangement feelings towards that programming language. A programming language designed to teach children programming must remove any lingual barrier.
  • Language size/cover. Programming language size is an important factor for its users: How many keywords are in the language? How many programming paradigms are supported? What is the library size? While industrial programming languages demands are for better cover of programming idioms and for better library cover (e.g. C++ and Java huge standard libraries), educational programming language factors are simplicity and easiness.
  • Strongly typed vs. Dynamic. Engineers want compilers to notify them on as many errors and warnings as possible, to handle the errors at compile time rather than have them as bugs at runtime. Thus, strongly typed programming languages - which require the programmer to declare and adhere to type matching rules - are better engineering languages. Children, on the other hand, prefer to have their work be ready and run soon as possible, and they can treat runtime errors as "interesting" features, so why bother them with type declarations?
  • Conservative vs. Liberated. Traditional programming language basic components and libraries are designed with security in mind, thus providing mechanisms for limiting programmer access and manipulation capabilities based on user privileges (e.g. Java ClassLoader security checks). Since children programming languages normally do not have such constrains, no limits should be set.

Download Mama - English version

  Download   Download Mama - English version !

Mama as an educational programming language

Mama was designed to address the above requirements from educational programming languages:
  1. Mama is a fully Unicode programming language, currently available in several languages, and is in the process of translation to many languages.
  2. Mama is designed solely to teach programming concepts, providing simple and quick development of programs. The number of concepts in the language is small, and there is no standard library - everything is supported by the language directly!
  3. Types in Mama are handled separately in the drag & drop mode than in the scripting mode: the DnD mode requires the programmer to declare on standard types and objects, but user objects all fall in the same category, thus letting the programmer manipulate them freely. The scripting mode has no type declaration at all - types are implicitly set and checked at runtime.
  4. Mama language lets you freely manipulate objects - store, load, run, change object fields and behavior - no security limits are set.

Learning Path

Educational programming languages are normally positioned inside a learning path - a sequence of languages each designed to build on the others, moving a student from simple to more complex programming environments. Following are well known educational languages and their suggested positioning in the learning path[1]:
Age Internationalized languages English only languages
2nd grade - 5th grade Scratch, Logo Etoys
5th grade - 7th grade Scratch, Mama Etoys, AgentSheets, Alice
mid school (7th grade - 9th grade) Mama Basic, Lego Mindstorms, Squeak, Greenfoot, BlueJ, Alice
high school (9th grade - 12th grade) Mama Python, Squeak, Greenfoot, BlueJ, Alice
college / University - non majors course, no experience assumed Mama Python, Squeak, Greenfoot, BlueJ, Alice
college / University - computer science curriculum Java, C#, Lisp/Shceme/Haskell, Python, Netbeans BlueJ


  1. Gerald Jay Sussman and Guy Lewis Steele, Jr.. "Scheme: An Interpreter for Extended Lambda Calculus". MIT AI Lab. AI Lab Memo AIM-349. December 1975.
  2. IFIP – Unesco (1998). Technical committee3 (TC3) – ICT and Education. Retrieved March 16, 2007. [1]
  3. "Lowering the barriers to programming: A taxonomy of programming environments and languages for novice programmers", Kelleher, C. and Pausch, R., ACM Comput. Surv. 37, 2 (2005)
  4. "Making Computer Games and Design Thinking: A Review of Current Software and Strategies", Hayes, E. and Games, A., Games and Culture (2008). 3: 309
  5. M. Hanus. The Integration of Functions into Logic Programming: From Theory to Practice. Journal of Logic Programming, Vol. 19&20, pp. 583–628, 1994.
  6. Tucker, A., Deek, F., Jones, J., McCowan. D., Stephenson, C., & Verno, A. ACM K–12 Task Force (2003). A Model Curriculum for K-12 Computer Science. Final Report of the ACM K-12 Task Force Curriculum Committee. Retrieved February 20, 2007.[2]
  7. Hazzan, O., Adams, E., Loftsson, H., & Young, A. (2003). International perspective of women and computer science, Proceedings of SIGCSE 2003 - The 34th Technical Symposium on Computer Science Education, Reno, Nevada, USA, 45-46.
  8. Henderson, P. H., De Palma, O., Almstrum, V. L., Hazzan, O., & Potter Kihlstrom, K. (2002). Women, mathematics and computer science, Proceedings of the 33rd Technical Symposium on Computer Science Education SIGCSE 2002, Covington, Northern Kentucky - The Southern Side of Cincinnati, USA, 131-134.
  9. Kim, J., & Lerch, F. J. (1992). Towards a model of cognitive process in logical design: Comparing object-oriented and traditional functional decomposition software methodologies. Proceedings of the SIGCHI Conference on Human Factors in Computer Systems, 489-498, Monterey, California.


  1. Wikipedia Educational programming language