We may earn an affiliate commission when you visit our partners.
Course image
Sukyoung Ryu

The goal of this course is to help students:

1. learn new languages quickly,

2. evaluate various languages and pick the most suitable one for a given task,

3. know when and how to design a little language, and

4. understand the effects of languages on thought and communication.

We will study programming language concepts, not as paradigms but as a set of basic building blocks, by 1) implementing interpreters for the concepts using the Scala programming language and 2) rigorously discussing the concepts using the operational semantics.

Enroll now

What's inside

Syllabus

Programming Languages: Syntax and Semantics
Programming Languages with Identifiers
First-Order Functions and First-Class Functions
Read more
Lambda Calculus and Recursive Functions
Mutable Data Structures and Variables
Garbage Collection and Lazy Evaluation
Final Exam

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Taught by Sukyoung Ryu, who are recognized for their work in programming languages
Develops programming language concepts and operational semantics, which are core skills for computer science
Examines programming language concepts in a rigorous and fundamental way, which is highly relevant to computer science theory and practice
Offers hands-on labs and interactive materials, which can help learners apply the concepts they learn
Provides a strong foundation for beginners and strengthens an existing foundation for intermediate learners, which makes it suitable for a wide range of students
Teaches skills, knowledge, and tools that are highly relevant to industry, which can help learners advance their careers

Save this course

Save Programming Languages Ⅰ to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Programming Languages Ⅰ with these activities:
Review “Structure and Interpretation of Computer Programs”
Review the book “Structure and Interpretation of Computer Programs” to provide background on high level programming language concepts.
Show steps
  • Read the first two chapters from the book to get an overview of the language.
  • Complete the programming exercises at the end of each chapter.
Follow guided tutorials on lambda calculus and recursion
Gain a deeper understanding of lambda calculus and recursion.
Show steps
  • Find online tutorials on lambda calculus and recursion.
  • Follow the tutorials and complete the exercises.
  • Discuss the concepts with fellow students or a mentor.
Practice writing and analyzing expressions in lambda calculus
Improve your ability to manipulate and understand expressions in lambda calculus.
Show steps
  • Write at least 10 lambda calculus expressions.
  • Analyze the expressions and determine their values.
  • Compare your results with other students or a mentor.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Organize peer-led study sessions on challenging topics
Reinforce concepts through peer-to-peer learning and discussion.
Show steps
  • Identify challenging topics in the course.
  • Form study groups with other students.
  • Meet regularly to discuss the assigned topics.
Attend a workshop on compiler design or programming language implementation
Gain practical experience in designing and implementing programming languages.
Browse courses on Compiler Design
Show steps
  • Find a workshop on compiler design or programming language implementation.
  • Register for the workshop.
  • Attend the workshop and actively participate.
Create a visual representation of the operational semantics of a simple programming language
Develop a deeper understanding of the operational semantics of programming languages.
Browse courses on Operational Semantics
Show steps
  • Choose a simple programming language.
  • Study the operational semantics of the language.
  • Create a visual representation of the operational semantics.
Contribute to an open-source compiler or programming language project
Gain practical experience in compiler design and programming language implementation.
Browse courses on Open Source
Show steps
  • Find an open-source compiler or programming language project.
  • Identify a bug or feature to work on.
  • Submit a pull request with your changes.

Career center

Learners who complete Programming Languages Ⅰ will develop knowledge and skills that may be useful to these careers:
Software Engineer
"Programming Languages I" could be a valuable course if you wish to pursue a career as a Software Engineer. Learning programming language concepts and implementing interpreters for the concepts using the Scala programming language could greatly benefit you in this role.
Systems Programmer
As a Systems Programmer, you must have a solid understanding of programming languages and concepts. With a focus on helping students learn new languages quickly and evaluate various ones to pick the most suitable one for a given task, the "Programming Languages I" course could help you in this.
Software Developer
The "Programming Languages I" course could be of significant use to you as a Software Developer. The course content concentrates on assisting students in learning new languages. As a Software Developer, knowing different programming languages is helpful and can make you more valuable to your team.
Computer Programmer
As a Computer Programmer, you may be finding yourself drawn to and working with different languages at a time. This course in "Programming Languages I" could help you as you continue to develop your career. Learning to implement interpreters, rigorously discuss concepts, and study programming language concepts can all help you excel in your role as a 'Computer Programmer.'
Computer and Information Research Scientist
As a Computer and Information Research Scientist, you may need to have a deep understanding of programming languages and concepts. The "Programming Languages I" course could be useful as it helps students learn new languages quickly and evaluate various ones to pick the most suitable for a given task.
Computer Systems Analyst
In your role as a Computer Systems Analyst, you are responsible for analyzing, designing, and implementing computer systems. Taking "Programming Languages I" could be a great way for you to build a foundation. It'll help you become better at designing, developing, and implementing computer systems.
Mobile Application Developer
If your goal is to become a Mobile Application Developer, you could find the "Programming Languages I" course quite helpful. It covers topics such as syntax and semantics, programming languages with identifiers, and lambda calculus. These concepts can help you advance your career as a Mobile Application Developer.
Data Scientist
Learning about programming languages, syntax, semantics, and other related topics in the "Programming Languages I" course could be useful for you in your career as a Data Scientist. You'll be able to evaluate various languages and pick the most suitable one for a given task.
Web Developer
As a future Web Developer, taking the "Programming Languages I" course could be useful by enhancing your skillset. It'll assist you in learning new languages quickly and evaluating various languages to pick the most suitable one for a given task.
Computer Support Specialist
If you intend on becoming a Computer Support Specialist, studying "Programming Languages I" could provide some assistance. It'll help you learn about programming language concepts and implement interpreters for the concepts using the Scala programming language. These can be helpful for a career as a Computer Support Specialist.
Information Security Analyst
There may be many duties you take on as an Information Security Analyst, including but not limited to planning, implementing, and managing information security measures. Taking "Programming Languages I" could help you become a more well-rounded professional in the field.
Information Technology Project Manager
In your role as an Information Technology Project Manager, you could find the course "Programming Languages I" helpful. It covers topics such as syntax and semantics, and lambda calculus. These concepts can help you excel in your role as an Information Technology Project Manager.
Computer Hardware Engineer
The "Programming Languages I" course could help you in your career as a Computer Hardware Engineer. Learning programming language concepts such as syntax and semantics, and programming languages with identifiers could greatly benefit you in this role.
Database Administrator
"Programming Languages I" may be a beneficial course for you if you wish to pursue a career as a Database Administrator. It covers topics such as syntax and semantics, programming languages with identifiers, and garbage collection and lazy evaluation. These concepts could help you build a solid foundation as a Database Administrator.

Reading list

We've selected 12 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Programming Languages Ⅰ.
Classic text on programming language concepts. It good reference for the basic concepts that are covered in the course.
Provides a comprehensive treatment of type systems in programming languages. It good resource for students who want to learn more about the theory of programming languages.
Provides a comprehensive guide to Java concurrency. It good resource for students who want to learn more about how to write concurrent Java programs.
Provides 90 effective Java coding practices that help programmers write bug-free, efficient, and maintainable Java code. It valuable resource for students who want to learn more about best practices in Java programming.
Provides a comprehensive guide to Java performance tuning. It good resource for students who want to learn more about how to improve the performance of their Java programs.
Provides a comprehensive guide to Java security. It good resource for students who want to learn more about how to secure their Java programs.
Provides a comprehensive guide to Java web services. It good resource for students who want to learn more about how to develop web services using Java.
Provides a practical introduction to programming language design and implementation. It good resource for students who want to learn more about the implementation of programming languages.
Provides a comprehensive introduction to Java programming. It good resource for students who want to learn more about the basics of Java.
Provides a comprehensive introduction to Java programming. It good resource for students who want to learn more about the basics of Java.
Provides a beginner-friendly introduction to Java programming. It good resource for students who are new to Java.
Provides a beginner-friendly introduction to Java programming. It good resource for students who are new to Java.

Share

Help others find this course page by sharing it with your friends and followers:
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser