Are you interested in learning to program from me, but are not a Duke student (or even if you are, but are not taking 551)? I am an instructor on several Coursera courses (arranged into specializations). These can be great ways to either start learning programming or polish your fundementals.
I recommend starting with Introduction to Programming in C (with Genevieve Lipp and Anne Bracy) :
- Programming Fundementals
- Writing, Running, and Fixing Code in C
- Pointers, Arrays, and Recursion
- Interacting with the System and Managing Memory
This specialization has the strongest emphasis on developing strong fundementals from the ground up. This course also covers roughly the first month of ECE 551. Therefore, it can be quite useful for those who either want to get a head start on the material in that course, or who want to take the honors section (to be offered starting Fall 2018).
After taking Intoduction to Programming in C, if you want to learn Java and OOP, I recommend Object Oriented Programming in Java (with Owen Astrachan, Susan Rodger, and Robert Duvall from Duke, as well as Christine Alvarado, Leo Porter, and Mia Minnes at UCSD).
- Java Programming: Solving Problems with Software
- Java Programming: Arrays, Lists, and Structured Data
- Object Oriented Programming in Java (UCSD)
- Data Structure and Performance (UCSD)
An alternative starting point is Java Programming and Software Engineering Fundamentals (with Owen Astrachan, Susan Rodger, and Robert Duvall).
- Programming Foundations with JavaScript, HTML and CSS
- Java Programming: Solving Problems with Software
- Java Programming: Arrays, Lists, and Structured Data
- Java Programming: Principles of Software Design
- Java Programming: Build a Recommendation System
This specialization has an emphasis on applying programming concepts to interesting problems. Like Introduction to Programming in C (and 551), it uses the Seven Steps, but does not spend as much time focusing on the algorithmic design progress as Programming Fundementals.
Note that this specialization overlaps with Object Oriented Programming in Java (the first two courses of that specialization are courses 2 and 3 of this specialization).