Question: I am an assistant professor preparing a 5 lecture series 'introduction to programming'. The target audience are first year engineering undergrads - from a mix of mechanical, electrical, electronic, telecomms and civil engineering majors. Some of these students will never have programmed before. We will use Matlab.

I am expecting that many of these students will never have coded before and almost all will not have seen Matlab before. They will need Matlab in all subsequent years of their degree.

Given the extremely limited time for this course, how can I give best bang for their buck, without it being too dry?

Is there something cool we could work towards creating over the 5 weeks?

More info: There are 5 x 4 hours sessions. Classroom cannot be flipped as there will be 50+ students.

Editing here to thank everyone who has taken the time and effort to give extremely helpful detailed replies. I appreciate it guys.

Answer: 
I teach an introductory programming course, with many students who have never programmed before. My course is 13 weeks, but the first 5 cover what I consider to be the basics. I have 3 hours of lectures and 2 hours of labs per week.
So here's a suggestion for 5 weeks:

Week 1: The basic idea of thinking algorithmically, ordering the steps of a process. You can use the logo turtle to get them to "write some code" on day 1. (see for instance the online editor here: <https://www.tortue-logo.fr/en/logo-turtle>). Then teach variables and expressions, decomposing an arithmetic computation in several steps (e.g. calculating how much you'll spend per month on gasoline, given the distance to your workplace, the mileage of your car, and the price of gas).

Week 2: using if conditions and boolean expressions, with or/and. Incorporating those into algorithms. What you can code with that: things like the absolute value, compute the solutions of a second-degree equation (using built-in square root), calculate income tax in a toy setting (with several tax brackets). If time permits, start talking about loops.

Week 3: Loops. Once you have the semantics of the while / for statements, you show them a classic algorithm such as Euclid's GCD algorithm: describe it by a flowchart and show how to translate it to code. Then move on to trying to figure out the steps of solving a problem, showing them classic techniques like using an accumulator to compute a sum (e.g. the sum of even integers between A and B).

Week 4: Functions. How you can package a computation in a function, with inputs and related outputs. Insists on the goals of modularity, abstraction, etc.

Week 5: Working with lists and / or matrices (since Matlab is heavily focused on matrices). By the end of it they can't do terribly "fun" stuff like games, but there are some scientific applications of interest, like a LFSR to do simple cryptography (that's what I do in my fifth-week lab). For students who aren't afraid of some math, there's plenty of useful math-oriented algorithms like approximating an integral (with rectangles or trapezes and such), using Heron's algorithm to approximate the square root, etc. I think with Matlab you can also plot graphs quite easily, so there are definitely interesting applications there.
I don't know Matlab, so this answer is mostly about generic programming concepts.

The core of programming is problem solving, so I would think the best use of the limited time you have available would be to focus on computational thinking and providing them with the techniques they will need to be able to think their way around a problem sufficiently to be able to express a solution in code.

Matlab is of course designed specifically for solving problems rooted in various Scientific, Mathematical and Engineering domains, so ideally, any example programs you use for demonstration and explaining the concepts should be as close as possible to the types of problems that the students will be solving by themselves. 

One of the pre-requisites for being able to write the code to solve a problem is to have gained a clear understanding of the problem being solved, so it would be useful to stick to problems which the learners would already be able to understand on-paper.

It could be useful to look at the Harvard CS50 syllabus as a starting point, it places a heavy emphasis on developing computational thinking skills by challenging learners to solve typical programming problems: <https://cs50.harvard.edu/ap/syllabus/>

Many of the concepts covered in the first 3-4 lessons of the CS50 syllabus are universally applicable to programming in any language, and David J Malan's delivery of these concepts in his lectures seems to go down very well with his students. 

A number of other specific techniques which I believe would be useful:

* Problem decomposition, illustrated by describing a complex problem, analysing it and dividing into sub-problems.
* Steps to solving a problem by starting with example/test inputs, describing the steps, and reaching a result 'by-hand'.
* Pattern recognition and using generalisation to describe a solution using pseudocode, then translation into a runnable program
* Using the debugger to set breakpoints, inspect variables and step through code to find/fix errors.

Terminology, as well as the 'grammar' of the language is of course important too - there's a lot of jargon to to absorb in a very limited space of time. 

Newcomers frequently find themselves spending a great deal of time attempting to decypher syntax errors, so some of the most important terminology for them to understand will be the words/phrases which frequently appear in the Matlab error frame - for example, misuse of particular symbols/operators, or incorrect use of particular data types. 

Perhaps finally, make sure to include frequent reminders that they can (and should) be making extensive use of Google and StackOverflow to find out what the syntax errors and other jargon means as well.