A lesson I learned a long time ago, when studying civil engineering in University, was to break an engineering programming task down into 3 phases:
understanding and stating the actual problem and solution in as simple English / mathematical terms as possible;
developing high-level pseudo-code algorithms to model the solution;
finally, writing code in whatever specific language was available / mandated / chosen.
This may seem bleeding obvious to many, but at the time it was a major insight, as I had been confusing the how with the what, why and with which up to that point.
Getting halfway decent and presentable output in FORTRAN IV was still a bugger, ISTR. BASIC was a bit easier if access to a PC was available (I am talking 80's here!)
SD