Programming assignments in Spring semesters are typically inspired by a real-life task that students might encounter, or a real-life computational application outside computer science. This does mean that the assignment descriptions can be involved, because that's how realistic tasks often present themselves.
(See also the The CS 1110 Declassified Survival Guide, by Will Xiao.)
Programming is like a martial art. You can't just read about it or listen to lectures about it; you have to practice it frequently to achieve the right "muscle memory". And, you have to get hit in the face enough times to learn the right ways to "duck" and avoid that problem happening again.
Skim the assignment description as soon as it is released just to understand how the document is organized.
As soon as you can, read the assignment a few times. Don't expect to absorb it all at once. While reading the assignment, look for clues on what you need to do. When you've figured out the larger tasks, break those large problems into smaller and smaller tasks. Eventually, you can program those smaller tasks.
Start early, and try to do a little programming every day. It's remarkable how often you can spend a day working on something, and then the next day realize how to solve the problem! But you need to leave yourself that next day for this to happen.
Want to work with a partner on a given assignment?
Folder notation for objects, call frames.
Lists, for-loops.
Recursion.
Classes, while-loops.
Subclasses.