In introductory education, pedagogic tools and languages can help focus students on the fundamental programming concepts. Subsets of a professional language support the presentation of the language's syntax in step with the presentation of the underlying concepts, relieving students and instructors from superfluous details. This dissertation presents the design and implementation of pedagogic tools integrated with an introductory computer science course. The tools described in this dissertation include languages, compilers, and libraries tailored to improve introductory education for students and instructors. Specifically, * three pedagogic subsets of the Java programming language. My method of designing these subsets, through a combination of assessing the supported curriculum and observation, may serve as a guide for creating other subsets. Discussion includes experiences using these subsets in classrooms, and how observations guided the design and modifications of the subsets. * an extension to Java supporting fine-grained interoperability between languages, which facilitates the reuse of existing libraries accessible within pedagogically appropriate subsets of a language. More generally, I demonstrate how to support general interoperability between two languages. Discussion includes the interoperability mechanism and a library implementation using the language extension. * an examination of the compiler implementation supporting the subsets and interoperability extension. The compiler maps Java constructs into similar Scheme constructs for ease of use of Java programs within Scheme and vice versa. Discussion includes parsing multiple languages with coherent error messages, representing Java compilation units, and supporting dynamic checking of Scheme values in Java.