I’m in a somewhat unique position of being a current undergraduate student, but also a TA, so I can somewhat comment from both the student and the teacher side of things.

* Making the lectures available in an accessible format (I have a slight preference for PDF, but HTML is just fine too) is a huge benefit. Before exams I like to aggregate all of the lecture materials to date into a single monolithic document so I can ctrl+f the whole thing while studying. If you have a proper hierarchy / table of contents this is even easier.

* Learning from a book / lecture along is really hard. It’s important to not just show examples, but show me how I can run the examples on my computer myself. Something I can interact with live, tweak, play with, add code to is hugely useful for building understanding.

* Don’t assume that I understand the boilerplate, tools, and so on. I’ve had a lot of professors who explain the core material well, but not how to actually open up a text editor / IDE, write code, compile it, and run it. I had already been using UNIX for years before starting college so this didn’t affect me that much, but tooling is one of the #1 issues I see my peers (and the students in courses I TA) struggle with.

* Use lecture to explain concepts, not code as much as possible. If you show me code in lecture I’m probably not going to remember it well enough or write it down in my notes well enough to replicate your example if it’s at all non trivial. Instead, make video/HTML/PDF tutorials that walk the student through the code example. If you want to show a code example in lecture, walk through one of those tutorials in lecture! Make sure these tutorials explain how to go from sitting at my desktop with nothing open to writing code and having it run, especially early in the course. See [1] and [2] as concrete examples. If you spontaneously come up with a cool demo or something, go for it, but try to record your screen / terminal, and if it you can’t get it working, move on quickly. When I TAed my institution’s intro to UNIX systems class, I kept a terminal open on the projector at all times with a `script` session running. I would upload the transcript after each lab sessions so the students could reference it.

* If it is possible, set aside scheduled time for the students to be in a computer lab working on assignments that you or a TA will be there to help them if they have questions. It can be hard to articulate code problems during lecture or in office hours without being in front of a computer with an IDE/editor open. If you have large class sections this may not be a viable option though.

* For assignments and homework, include a clear list of deliverables which the student should turn in. For example “I want a zip file where /myprog.c implements the API described on page X of the homework 3 assignment sheet” and so on.

* If you want students to do something, attach a grade to it. In my experience, ungraded exercises usually result in the exercises remaining undone by the majority of the class.

* Provide a reference library on your course site of functioning code examples, each with a README explaining how to run it, what it does, and so on. Ideally try to demonstrate one concept per sample. This will both provide students with working examples to learn from, as well as be a valuable resource when you get asked questions in lecture and need to demonstrate a particular function call or technique off the cuff.

* Something that one of my past professors did which I found very valuable was to have an "A" and a "B" version of each assignment. Essentially the "A" version would be "get it to compile and implement some trivial facet of the assignment", and the "B" version would be "implement everything in the assignment sheet". The A version would always be due a few days after the assignment was posted, and the B version a week or two later. The A version would be worth like 10% of the assignment score and the B version the other 90%. The value here is that it forces people to start the assignment early on (no more students waiting until the last minute to start working on a homework), and gives student's an idea if they are on the right track; it also gives you a way to ding the student for making legitimate mistakes in a way that won't tank their overall course grade.

* The biggest thing in my opinion is that you are asking these sorts of questions. In my experience, the best learning outcomes always happen with teachers who care and want to teach and share their expertise and students who want to learn and put forth a genuine effort to do so. When the teacher does not care, even the most motivated students will struggle and have to go learn on their own. When the student's don't care they aren't going to get much out of the class no matter how good the professor is. In that vein however, try to engage with the students and get them interested - don't just focus on the students who are already motivated and interested in the subject; make sure to emphasize how the course material is practically useful and understanding it will benefit the students in their careers.

* As some other people have pointed out, take student evaluation forms with a grain of salt. People who get bad grades are likely going to give you a bad rating, and people who get good grades are likely to give you a good rating. At most institutions, the eval forms will have a comments section - that's what you want to look at the most.

If you want to discuss more, feel free to reach out to me. My contact information can be found on my website[3] (I try to avoid posting it on forums and message boards to avoid bots).

1 - https://cse.sc.edu/~jbakos/613/tutorials/setup_tools.shtml

2 - https://cse.sc.edu/~jbakos/613/tutorials/scells_schematic.sh...

3 - http://cdaniels.net/about.html