We may earn an affiliate commission when you visit our partners.
Course image
Robert van de Geijn, Maggie Myers, and Devangi Parikh

Is my program correct? Will it give the right output for all possible permitted inputs? Computers are now essential in everyday life. Incorrect programs lead to frustration in the best case and disaster in the worst. Thus, knowing how to construct correct programs is a skill that all who program computers must strive to master.

Read more

Is my program correct? Will it give the right output for all possible permitted inputs? Computers are now essential in everyday life. Incorrect programs lead to frustration in the best case and disaster in the worst. Thus, knowing how to construct correct programs is a skill that all who program computers must strive to master.

In this computer science course, we will present "goal oriented programming" the way Edsger Dijkstra, one of the most influential computer scientists, intended. You will learn how to derive programs hand-in-hand with their proofs of correctness. The course presents a methodology that illustrates goal-oriented programming, starting with the formalization of what is to be computed, and then growing the program hand-in-hand with its proof of correctness. The methodology demonstrates that, for a broad class of matrix operations, the development, implementation, and establishment of correctness of a program can be made systematic.

Since this technique focuses on program specifications, it often leads to clearer, correct programs in less time. The approach rapidly yields a family of algorithms from which you can then pick the algorithm that has desirable properties, such as attaining better performance on a given architecture.

The audience of this MOOC extends beyond students and scholars interested in the domains of linear algebra algorithms and scientific computing. This course shows how to make the formal derivation of algorithms practical and will leave you pondering how our results might extend to other domains.

As a result of support from MathWorks, learners will be granted access to MATLAB for the duration of the course.

What's inside

Learning objectives

  • Develop assertions describing states in a program.
  • Prove programs correct using logic.
  • Build algorithms using goal-oriented programming techniques.
  • “slice and dice” to discover families of loop-based algorithms for matrix computations.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Designed for those interested in matrix operations, linear algebra algorithms, and scientific computing
Covers how to make the derivation of algorithms practical
Led by instructors Maggie Myers, Robert van de Geijn, and Devangi Parikh

Save this course

Save LAFF – On Programming for Correctness 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 LAFF – On Programming for Correctness with these activities:
Gather Resources on Matrix Decompositions
Compile a collection of resources, such as articles, videos, and online tutorials, that provide a comprehensive overview of matrix decompositions.
Browse courses on Matrix Decompositions
Show steps
  • Conduct research to identify relevant resources on matrix decompositions.
  • Organize and categorize the resources based on topic or level of difficulty.
Review Eigenvalues and Eigenvectors
Refresh your knowledge of eigenvalues and eigenvectors to ensure a smooth transition into the course.
Browse courses on Eigenvalues
Show steps
  • Review the concepts of eigenvalues and eigenvectors.
  • Solve problems involving finding eigenvalues and eigenvectors of matrices.
Explore MATLAB Tutorials
Utilize the provided MATLAB access to enhance your understanding of matrix operations and algorithm implementation.
Browse courses on MATLAB
Show steps
  • Find tutorials on MATLAB basics and matrix operations.
  • Follow along with the tutorials, practicing the concepts.
Five other activities
Expand to see all activities and additional details
Show all eight activities
Create a Summary of Algorithms
Create a summary of the algorithms covered in the matrix operations section of the course, including the methodology for deriving and proving their correctness.
Show steps
  • Identify the key algorithms and their derivations.
  • Summarize the steps and properties of each algorithm.
  • Include examples and illustrations to clarify the concepts.
Participate in a Study Group
Join a study group to discuss course concepts, solve problems together, and clarify misunderstandings.
Show steps
  • Find or form a study group with other students in the course.
  • Meet regularly to discuss the course material and work on assignments together.
Solve Matrix Operation Problems
Engage in targeted practice by solving a variety of matrix operation problems to enhance your problem-solving skills in this domain.
Browse courses on Matrix Operations
Show steps
  • Find problem sets or online resources with matrix operation problems.
  • Attempt to solve the problems independently.
  • Review your solutions and identify areas for improvement.
Develop a Matrix Calculator
Build a comprehensive matrix calculator that can perform various operations, such as matrix addition, subtraction, multiplication, and finding eigenvalues.
Show steps
  • Design the calculator's interface and functionality.
  • Implement the matrix operations using appropriate algorithms.
  • Test and debug the calculator to ensure accuracy.
Attend a Workshop on Goal-Oriented Programming
Enroll in a workshop that delves into the principles of goal-oriented programming, providing practical guidance and hands-on experience.
Show steps
  • Research and find a workshop on goal-oriented programming.
  • Attend the workshop and actively participate in the exercises and discussions.

Career center

Learners who complete LAFF – On Programming for Correctness will develop knowledge and skills that may be useful to these careers:
Algorithm Researcher
An Algorithm Researcher develops and analyzes algorithms to solve computational problems. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Algorithm Researchers as it enables them to create algorithms that are efficient and reliable.
Computer Architecture Researcher
A Computer Architecture Researcher designs and analyzes computer hardware and software systems. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Computer Architecture Researchers as it enables them to create computer systems that are reliable and efficient.
Software Architect
A Software Architect designs and oversees the development of software systems. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Software Architects as it enables them to create software systems that are reliable and efficient.
Database Administrator
A Database Administrator designs and maintains databases to ensure that data is accurate and accessible. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Database Administrators as it enables them to create databases that are reliable and efficient.
Computer Scientist
A Computer Scientist conducts research and develops new computing technologies. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Computer Scientists as it enables them to create new technologies that are reliable and efficient.
Software Quality Assurance Engineer
A Software Quality Assurance Engineer tests and evaluates software to ensure that it meets quality standards. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Software Quality Assurance Engineers as it enables them to identify and fix bugs in software.
Scientific Programmer
A Scientific Programmer develops and maintains software for scientific research. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Scientific Programmers as it enables them to create software that is reliable and accurate.
Information Security Analyst
An Information Security Analyst protects an organization's computer systems and data from unauthorized access. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Information Security Analysts as it enables them to create security systems that are reliable and effective.
Systems Analyst
A Systems Analyst analyzes and designs computer systems to meet business needs. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Systems Analysts as it enables them to create computer systems that are reliable and efficient.
Computational Scientist
A Computational Scientist uses computers to solve scientific problems. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Computational Scientists as it enables them to create scientific simulations and models that are reliable and accurate.
Computer Programmer
A Computer Programmer writes and maintains code for software applications. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Computer Programmers as it enables them to create software that is reliable and efficient.
Software Test Engineer
A Software Test Engineer develops and executes test plans to ensure that software meets requirements. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Software Test Engineers as it enables them to create test cases that are effective and efficient.
Software Developer
A Software Developer designs, builds, and deploys software systems that power many facets of modern life. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Software Developers as it enables them to create software that is reliable and meets specific requirements.
Software Engineer
A Software Engineer applies engineering principles to the design, development, deployment, and maintenance of software systems. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Software Engineers as it enables them to create software that is reliable and meets specific requirements.
Data Scientist
A Data Scientist uses data to extract insights and knowledge that can be used to make informed decisions. The LAFF - On Programming for Correctness course may be useful in this field by helping you build a foundation in developing correct programs using logic and proof techniques. This is a valuable skill for Data Scientists as it enables them to create data-driven insights that are reliable and accurate.

Reading list

We've selected 16 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 LAFF – On Programming for Correctness.
This classic work on computer programming provides a comprehensive overview of the subject, covering everything from algorithms to data structures to software engineering. It valuable resource for anyone who wants to learn more about the foundations of computer science.
This textbook provides a comprehensive introduction to algorithms, covering a wide range of topics from sorting and searching to graph algorithms and dynamic programming. It valuable resource for anyone who wants to learn more about the design and analysis of algorithms.
This textbook provides a comprehensive introduction to discrete mathematics, including topics such as logic, sets, relations, graphs, and algorithms. It valuable resource for anyone who wants to learn more about the mathematical foundations of computer science.
This textbook provides a comprehensive introduction to linear algebra, covering topics such as vectors, matrices, determinants, and eigenvalues. It valuable resource for anyone who wants to learn more about the mathematical foundations of computer graphics, machine learning, and other areas of computer science.
This textbook provides a comprehensive introduction to numerical linear algebra, covering topics such as matrix computations, eigenvalue problems, and singular value decomposition. It valuable resource for anyone who wants to learn more about the numerical methods used to solve linear algebra problems.
Provides a concise and accessible introduction to computer science, covering topics such as algorithms, data structures, and software engineering. It valuable resource for anyone who wants to learn more about the foundations of computer science without getting bogged down in technical details.
Provides a gentle introduction to Python, one of the most popular programming languages for data science. It valuable resource for anyone who wants to learn how to use Python to solve real-world problems.
Provides a comprehensive overview of the Python programming language, covering topics such as data structures, object-oriented programming, andconcurrency. It valuable resource for anyone who wants to learn how to write idiomatic and efficient Python code.
Provides a comprehensive introduction to MATLAB, a powerful programming language used for technical computing. It valuable resource for anyone who wants to learn how to use MATLAB to solve engineering problems.
Provides a comprehensive introduction to numerical methods, which are used to solve mathematical problems on computers. It valuable resource for anyone who wants to learn how to use numerical methods to solve real-world problems.
Provides a comprehensive introduction to scientific computing using MATLAB and Octave, two popular programming languages for technical computing. It valuable resource for anyone who wants to learn how to use scientific computing to solve real-world problems.
Provides a comprehensive introduction to linear algebra, a branch of mathematics that is used to solve systems of linear equations and to study vectors and matrices. It valuable resource for anyone who wants to learn more about the mathematical foundations of computer science.
Provides a comprehensive introduction to calculus, a branch of mathematics that is used to study change. It valuable resource for anyone who wants to learn more about the mathematical foundations of computer science.

Share

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

Similar courses

Here are nine courses similar to LAFF – On Programming for Correctness.
Introduction to Java Programming: Writing Good Code
Most relevant
Statistical Mechanics: Algorithms and Computations
Basic Game Development with Levels using Scratch
Introduction to Basic Game Development using Scratch
Java Object-Oriented Programming: AP Computer Science B
Machine Learning with Python: from Linear Models to Deep...
Quantum Computer Systems Design I: Intro to Quantum...
Quantum Computer Systems Design II: Principles of Quantum...
Quantum Computer Systems Design III: Working with Noisy...
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