Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

At my company we are starting a course for free that will cover 4 modules (HTML / CSS and W3C Standards, Javascript and jQuery, PHP, MySQL) during 7 months. The main goal is to be able to train new possible employees and at the same time share knowledge with programming enthusiasts, although it is very personalized (8 - 10 people).

The dynamic is: one 4 hours class (with a break) every week, and a big homework that includes investigation and practice. Also once a week students come to the office to work on real life examples and get help with their homework.

This would be the third time we do this. We were no teachers when we started but feel satisfied in general with the results. However there is always room for improvement, we have noticed for instance some difficulty when trying to introduce programming for the first time (javascript) also when switching from event based to procedural (php) programming.

My question is , are there any advices or guidelines based on experience that you can give us in order to improve the learning experience? What are resources that we should take into account for teaching web development from scratch?

UPDATE: To make it a wider question, what are good dynamics (or advices) that can improve the learning process in a web programming course?

share|improve this question

closed as off-topic by durron597, Snowman, Ixrec, gnat, MichaelT May 12 '15 at 0:33

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – Snowman, Ixrec, gnat, MichaelT
If this question can be reworded to fit the rules in the help center, please edit the question.

up vote 20 down vote accepted

Get the company to pony up for a pizza and, at least 1 night a week, get the students to work together on whatever their project is. That collaborative learning, without the pure structure of the 'classroom' pays off way more than it seems.

Hold it in the office in a room that has an open atmosphere (ie. no offices or cube walls) so that everyone can help and share with one another.

Good for team building too.

share|improve this answer
1+ I like the collaboration thing, we will try to integrate that. – amosrivera Apr 7 '11 at 4:21
I tutor C++ programming at a university, and students have shown me for years that collaborative learning is very successful. The students that work in the lab together, share knowledge, code, and learning do consistently very well, even when working on individual assignments. – ProdigySim Apr 13 '11 at 1:27
+1 for pizza. Can't beat the smell of pizza and code. – Garet Claborn Apr 18 '11 at 0:55

I have been teaching programming for 12 years (to undergraduates); I'm not sure if what worked for my students will work with your coworkers, but here goes...

... try and pick a "theme" for the class. In other words, make it about something rather than just "here's how you program stuff because maybe you might need to do something." All too often programming books/courses/tutorials have no point to them and they turn into a litany of syntax rules and meaningless examples.

Now for undergraduates there are a few things that resonate really well. Games are always a big hit, especially with males. If you don't think this would work for you, perhaps try something in line with your company's mission. Or maybe music... something where you can start small and build something that will get people engaged and excited.

It's a lot more work than reading a manual to them, but the payoffs are much greater for both you and the students.

share|improve this answer
I like this idea, but with one stipulation: Make sure it is actually useful. Games are good because they are always fun to play. Other programs can be good, so long as they are extendable (so if you're making mspaint, use a toolbar and menu for options, not random buttons on the screen). There is nothing worse than a meaningless theme. The only difference between a meaningless theme and a meaningless example is that the theme lingers beyond its lifespan. – Stargazer712 Apr 9 '11 at 17:31

Try and have the students teach each other.

There nothing like having to explain something to someone who asks "but what if" to make you realise how much you don't know, or how much you do.

To answer a question properly you have to think about the answer and phrase it in a manner that others can understand. If you don't fully understand the subject you can't do that and it makes clear to you which bits of the subject you don't know as well as you thought you did.

Giving presentation can be a way of doing this but it can be a little daunting if your not a confident speaker.

They used this in my degree and I found it rather useful as it showed the depth of your understanding.

share|improve this answer

I've always liked the presented ideas of collaboration and theme. Especially when put together in a long project along side much-shortened exercises if needed. I've found new coders to often gain more insight from each other's development and working together on a year long project, for instance.

This should simulate the long-haul of your company's team dynamics.

Aside from those ideas, I think it can be a good idea to try and integrate technologies as much as possible once they get going. i,e.. (chronologically)

  • Have them design a very basic template site using PHP/HTML/CSS
  • Extend the template with MySQL and JavaScript, probably in two steps
  • Make them use their own templates or team templates on a few assignments
  • Have them combine features from each other into a simple framework

At this point they should be more comfortable and also begin to see things they would like to be different in the development process. This is a good time to teach them frameworks, more advanced coding techniques and various timesavers/production enhancers.

IMHO, standards and best practices are best spread out through everything. For me it was easier to absorb that way.

I will also say another side of collaboration is team competition =) At times it can be very productive to say, "Half of you over here, half of you over there. Now have at it." Especially when there is an attractive, but not too stress-inducing, reward involved.

share|improve this answer

maybe the homework/project will be a real project that is going on your company or a R&D project. This will benefit the company as you already providing a free course. On success of the project, the student will get prize or get paid for (and maybe get hired instantly). and the student are credited for his/her contribution in the company. So, win win solution hopefully.

create different level of classes and a test in the beginning of the class to decide which class he/she should be. The advance class will need to teach the beginner class once in a while or as an assignment, so they can improve their skill to share their knowledge.

If there are students that are really keen of joining your company and meets the minimum requirement, you can hire him/her with lower salary first so he/she can work full-time while taking the class at the same time. Sort of like Graduate trainee.

share|improve this answer

Use this program to feed the top students into an apprenticeship program at your company. Apprentices work closely with professional developers for a year or more until the developers feel that the apprentice has become one of them. See the book "Apprenticeship Patterns" by Dave Hoover:

share|improve this answer

IMHO you can blend the modules while teaching. In my opinion, the sequence of learning can be-

Basic HTML > Basic CSS > PHP > MySQL > Javascript >
Using PHP and Javascript thogether or Ajax > Web frameworks like MVC >
Advanced HTML and CSS >
Using Javascript to manipulate HTML elements and CSS > JQuery >
Web standards and best practices

share|improve this answer

I just taught a Java class to a team of COBOL programmers. They understood the basic programming concepts (they were in fact working programmers). Actually writing code was the problem. Conceptually, they understood the language, libraries, etc. Not one of them could write a program in java. There is a difference between book learning and knowing how to do something.

If you are going to teach a class to co-workers, friend, etc. -- please, PLEASE! assign simple problems/programs that they can work on. Regularly...and check that they are done. They will never learn unless they do it themselves.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.