If someone has a recommendation for how to build/architect large GUI applications like Photoshop. For e.g., how to think about Undo operation right from the get-go . I think that would be amazing to learn if there is a course like that.

Hey. Check out Juan Pedro Bolivar Puente's talks om value oriented design. He worked on Ableton which is a large application. He specifically speaks to Undo. He describes a much better pattern than the Command Pattern.

He also released his source for Value Oriented Data structures

Juan Pedro is a next level programmer who I think has pushed the craft forward through his work on bringing Value Oriented Design into the C++ world.

Talk I https://youtu.be/sPhpelUfu8Q

Talk II https://youtu.be/SAMR5GJ_GqA

Data Structures: https://github.com/arximboldi/immer

Application Structure: https://github.com/arximboldi/lager

Text Editor: https://github.com/arximboldi/ewig

Good luck.