The problem, succinctly stated, is: How do you best organize 14 weeks of study to teach PHP to a group of motivated College students?
I know they must be pretty motivated, because they’re signing up for this optional elective despite the fact that it starts at 8 am.
This Fall, I will be teaching a course in Web Application Development at FSU. The topic will be server-side scripting, and the focus will be PHP. Since I’ve taught this course before, developing the curriculum won’t take months, but I am nevertheless spending a fair amount of time updating and tweaking for the next go-around.
A quick Google Search for "Teaching PHP brings up only a few relevant links, mostly message board discussions. “Server Side Scripting Curriculum” doesn't return much either. Likewise, the WaSP Server-Side Scripting Curriculum only gets us halfway to where we need to be by the end of the term.
So, I’ve had to come up with a lot of the course unilaterally. The learning objectives are as follows:
By the end of the course, students will understand:
- Basic programming skills
- Web application development principles, including MVC
- How to find and use PHP resources on the Internet
- How to manage tasks, bugs, and revision control mechanisms for web projects
In addition, students should be able to:
- Program and deploy simple scripts in PHP
- Process web-based input and output in PHP
- Build multi-file PHP applications
- Connect PHP applications to a database
- Design a simple dynamic website using PHP, MySQL, HTML, and CSS
After a few years of teaching the course, I've managed to find a way to squeeze these topics into the course of the semester:
- The current “State of the Internet”
- Overview of HTTP
- Basic GIT Revision Control
- Web resources - PHP.net, Stackoverflow.com, etc
- Netbeans setup and good practices for personal development workflow
- PHP basics – Syntax, variables, arrays, functions, iterators, etc.
- Form processing and security
- Classes and objects
- MYSQL Database connectivity and integration
- Sessions and authentication
- Front Controller design pattern
- MVC frameworks (we use CodeIgniter, because of its great documentation)
- Basic management tools: Ticket and bug tracking
- XML and JSON processing
- Web Services - Building a REST client
- Unit Testing - Just a one-day intro; nothing comprehensive
- AJAX - Again, just a basic introduction
That's a lot of information. In fact, the students have officially given me the reputation as a "hard instructor". Meh, I'll take it.
I really would love to teach a second-level course if I ever have time to do so. Despite the fact that we cover a lot in the first course, there are many topics that just don't fit into a single semester (dependency injection, loose coupling, comprehensive testing, design principles, development workflow, etc).
For those that are interested, I keep my course calendar and current assignments online at http://lis4368.cci.fsu.edu.