Thank you Issa Annamoradnejad for your question. I think you need as a general rule discuss in an introductory lecture 1) the outcomes of the course, 2) the key components and teaching and learning used 3) What students need to do, and what tasks they will have to complete, 4) Assessment to be taken, time and type of assessment with examples for each, 5) Resources for the course and recommended reading 6) How students can receive feedback or ask questions and student learning system or group discussion online. 7) If the course is going to be delivered online, how students and teachers will run such systems. I think these are the basics and broad outlines.
Also, you need to discuss these issues in a meeting with other teachers involved in teaching this course, so there are common grounds for what you present.
Also, I recommend leaving the last 15 minutes for questions and answers. From my experience, students usually complain we do not know the objectives of the course; we do not know the assessment that will be used; we do not know the resources recommended. This is usually happening despite the introductory lecture. And stating this information in the students' book and on the course webpage. This is the typical behaviour of students (some of them). I usually say this in the introductory lecture, so everyone sees things clearly with no excuses.
For introducing programming, it's critical to focus on the goal and outcomes of the class, which is to show the students that:
It's just a machine that will do what it is told
They can tell it what to do
You don't need to know a lot of stuff to make it do some pretty powerful things
Breaking it is fun!
At the end of an introductory course, the students should understand:
The basic elements of a computer and how they work together to execute a program (CPU, memory, disk, and network) with some very simple descriptions. This provides context for everything else and it's surprising how many entry-level developers don't really know this
Getting and setting variables, printing stuff out, and console I/O. This lets the students see that they can make the machine do stuff, even if it's just printing out what they typed in. This gives a feeling of control and opens up the possibilities.
Arithmetic and string operators, so you can show them how to mess with the variables
Basic flow and flow control (if/then; case/switch). Now the program can make decisions!
Loops (for, while). Now it can do boring stuff over and over again!
Functions and parameters. This shows them how to isolate repeated code and is a good place to introduce the DRY (Don't Repeat Yourself) principle. Also is a setup for learning how to make network-based calls, but that should come later.
Data structures (basic). Ways to represent data as a bundle. Very dependent on the language used, but very important.
Recursion. This breaks a lot of people, but is the only way to efficiently solve some problems. Don't be too harsh on people that don't "get it"
Pointers. Understanding the difference between reference and value is critical in so many languages, even those that don't have "pointers" per se like Java, but still have places where values and references are different.
Avoid object-oriented programming for an introductory course. You can use an OO language, just avoid the concepts, because you'll waste days talking about encapsulation, data hiding, public vs. private, and all that junk, which gets in the way of actually making the machine do stuff.
Use the Creative Learning approach, based on the 4P.
Let the students choose a Project to develop, on a topic they have a high Passion for. Encourage them to collaborate (Peers!) on the development. The fourth P (Play) will be a consequence.
They will easily overcome obstacles and quickly learn new skills.
I did not see mention of what age or group or if this was to be a formal school based or community outreach project as these factors would guide the formality of the approach. In general don't try and reinvent the wheel when there are lots and lots of great STEM (and computing) resources and groups out there for all ages and types. Just a sample ....
https://www.barefootcomputing.org "Barefoot is here to help you to deliver the computing curriculum brilliantly with free face-to-face workshops, helpful online guides and engaging lessons."
https://www.computingatschool.org.uk "We are passionate about ensuring that every child has a world-class computing education. We encourage, support and equip teachers of computing through our Community of Professional Practice"
https://www.microsoft.com/en-us/corporate-responsibility/skills-employability/girls-stem-computer-science "Inspire girls in STEM
To help close the gender gap in Science, Technology, Engineering, and Math (STEM) we must all take action and inspire girls to #MakeWhatsNext."
https://codeclub.org/en/ "At Code Club, we think all children should have the opportunity to learn to code, no matter who they are or where they come from. We work with a global community of volunteers, educators, and partners to run free coding clubs where 9 to 13-year-olds build and share their ideas."
Or for students with high motivation that just need to be guided to self discovery rather than formally taught there are challenge sites such as https://www.codingame.com.
The teaching materials (that you may have lined up already) should cover the scope and materials but for the teaching you have to tread that fine balance between iterating over the language grammar (yawn) and enabling the foundations for activities. Main hint - Always hold in mind that programming is the translation of an understood problem (or solution to a problem) into a computer understandable language. If the students don't understand the problem they are trying to solve they won't engage with the programming structures. EG: Don't start with solving quadratic equations find problems that the students relate to that you can automate in code. EG: solve a simple sudoku or compile game results into league table.
As with many specialist topics there are kids that with "just get it" some that can "learn it" and some that will be "resistant and baffled". Your mission is to move as many of the third group into the second group. Good luck.
It's common practise to structure your lecture according to what is called something like the "4 steps method" in english I guess. It means that you do something first then explain what you have done. Afterwards let your students do it once and then it's time to practise it.
Concerning programming there are other issues that you have to deal with. Depending on the programming language you use to teach programming, the setup for the programming language can be a thing to hinder progress like C++ on Windows i.e.
Using an IDE as a beginner can be frustrating since all that buttons and checkboxes are going to confuse your students easily. Help them to build their first and infamous Hello World programm and focus on the concepts of the respective programming language from there on.
Once you have done that it's about time to get the basic concepts of programming like if-statements, loops and primitive data types and structures like arrays. Building easy console games will help your students practise these concepts and how to use them.
From there on getting the OOP-way of programming will be the next thing combined with testing methods of classes they build on their own. Teaching them to debug and test their programms early will help them their entire life. Here you can get a more detailed look on frameworks, libraries the programming language is provided with and furthermore what an IDE can do for your students to help them implement their ideas.
After all that, the advanced steps could be taken proberly like building an executable program, getting a GUI work, programming threads and networks, get access to a database, Generics and what not...
Depending on your students, there will be some more experienced folks in that crowd. Challenge them with bonus tasks that require more deep knowledge of a programming language and how the compiler or interpreter works behind the langauge. For example you can have a lot of fun with Strings in Java if your students don't know yet that it is not a primitive data type in Java.
In a nutshell you should ask yourself what your student should build on their own once they passed your class and work around that from the bottom to the top.
In my opinion, you need first to start with basic concepts and then practice with various exercises. At the same time, let them develop their own project from scratch. As it becomes difficult that they will learn a lot of things.
It will depend a bit on your audience, but along with all of the things mentioned above it is important to try help them understand that there is a lot of trial, error and frustration in programming. A lot of people come to programming thinking it is an inate skill and it should be easy, if it is hard then you just aren’t meant to be a programmer. As teachers we need to create an environment where it is it ok to try, fail and try again. I also tend to bring out the pen and paper/whiteboard and go through the process of how you pull apart a problem so you can code it before getting into the code. When teaching someone how to code you are teaching them a way of thinking so sometimes it is easier to teach them the way of thinking first in a medium they are comfortable with.