I’m sitting in a first-year programming course’s lab watching the prof explain how selection sort is implemented. In order to actually explain how to implement the algorithm - what he’s actually trying to teach - he has to diverge and teach how Java uses pass-by-reference on parameters and why you need a temporary value to switch two values within the array. This is on top of the material they have to know to even be considering this, including Java’s enforced OOP paradigm, class instantiation, static methods, and arrays. We’ll forgive the fact that the faculty is teaching students to use arrays in Java instead of ArrayList generics and focus on the fact that programming is hard! There is a lot you need to know like the back of your hand in order to effectively program. In fact, you need to know these concepts so well that you’ve internalized them into your problem-solving process. I think that this internalization is the difficult part of programming and I think that, unless you’re passionate and/or enjoy coding, you’re going to have a hard time doing this.