In a java web applications nowadays, at least in my experience, a large part of the code is generated, and to implement the business logic you have to strictly follow sequence diagrams: there's no space left for creativity there.
I worked and work as an external resource for a bunch of software houses; i get the analysis and produce the specifications, the data schema and the environment, sometimes i will implement the core of the app, sometimes not; and i'm pretty happy about that, yep i dont get specialized in any field, but my work is varied and my skills grow at a slow constant rate.
If you intend web developing as writing applications with a gui which runs in a browser, well there's no difference at all in the development cycle you can adopt to have the software written.
But i dont think you ever participated in a large software project, as you think programming is a significant part of that.
If html/css is the bottom of the food chain (and actually it is as it's not developing at all), programming is bottom in large projects, where breaking a deadline is a function of how much bad you did in designing the architecture and in scheduling the team workforce.
Given they are learning what a turing machine and a language *are* on other courses, if you want them to teach programming, forget languages at first and teach paradigms and patterns. Dont need to go deep inside language flavours to learn divide et impera, bottom-up, facade and wrapper; then assign programming problems focusing on input-output, data structures and design: dont forget when most posters here, including me, graduated, we hadnt the net but just plain books. Thus, let them form a personal idea about what to use to solve the problems.
After that introductory part, divide them in six groups, each one respectively writing a client and a server in C++ on windows, in C on linux and in java (for instance a simple client-server versioning text editor/repository). Let the server groups and the client groups meet each other in order to specify a common protocol and a common data format. During the course make them write the software so that the linux client can interoperate with the win server and so on.
At the end of the course, probably there will be no working software, but you would have taught to this little army of uber-developers the way to face programming problems, not your way to solve them.
In a java web applications nowadays, at least in my experience, a large part of the code is generated, and to implement the business logic you have to strictly follow sequence diagrams: there's no space left for creativity there.
I worked and work as an external resource for a bunch of software houses; i get the analysis and produce the specifications, the data schema and the environment, sometimes i will implement the core of the app, sometimes not; and i'm pretty happy about that, yep i dont get specialized in any field, but my work is varied and my skills grow at a slow constant rate.
If you intend web developing as writing applications with a gui which runs in a browser, well there's no difference at all in the development cycle you can adopt to have the software written. But i dont think you ever participated in a large software project, as you think programming is a significant part of that. If html/css is the bottom of the food chain (and actually it is as it's not developing at all), programming is bottom in large projects, where breaking a deadline is a function of how much bad you did in designing the architecture and in scheduling the team workforce.
Given they are learning what a turing machine and a language *are* on other courses, if you want them to teach programming, forget languages at first and teach paradigms and patterns. Dont need to go deep inside language flavours to learn divide et impera, bottom-up, facade and wrapper; then assign programming problems focusing on input-output, data structures and design: dont forget when most posters here, including me, graduated, we hadnt the net but just plain books. Thus, let them form a personal idea about what to use to solve the problems.
After that introductory part, divide them in six groups, each one respectively writing a client and a server in C++ on windows, in C on linux and in java (for instance a simple client-server versioning text editor/repository). Let the server groups and the client groups meet each other in order to specify a common protocol and a common data format. During the course make them write the software so that the linux client can interoperate with the win server and so on.
At the end of the course, probably there will be no working software, but you would have taught to this little army of uber-developers the way to face programming problems, not your way to solve them.