For the last two weeks, I have been describing a pragmatic approach to training programmers (A pragmatic approach to training programmers, part one and A pragmatic approach to training programmers, part two). In those two posts, I laid out a fundamental course guide. After a lot of reader feedback, I realized that a third installment was needed to cover more “meta” principles to this approach, like prerequisites and teaching methodologies. This week, I will cover these items.


I have always believed that a solid background in mathematics is helpful, if not crucial, to the education of the best programmers. Keeping this approach in line with the idea of being vocational training as well as pragmatic, I have deliberately left out mathematics. The closest I came is including formal symbolic logic. Ideally, a student would enter this course having had enough mathematics at the high school or college level to get to calculus and preferably to integrals. However, in the general course that I have laid out, a lack of this level of math education will not be deadly to the student. As a result, the mathematics prerequisite would be geometry (assists with the logic needed), trigonometry, and Algebra I and Algebra II, all at either a high school or a college level.
Reading and Writing

This course tries to prepare students for real-world work and not simply theory, or “shake-n-bake” coders who are barely competent to work in only one language. Programmers are increasingly expected to deal with the rest of the business and not just hide in the dark corners of the office churning out code at 3:00 AM. Capable developers, therefore, need to be able to communicate effectively through writing. A prerequisite of the course is that the student can compose and comprehend: a business letter, a clear and concise memo, an e-mail, and a requirements specification. Failure to meet these requirements will disqualify a student from entering.

Previous Experience

This course is designed to stand on its own, apart from other knowledge or learning. It also has a particular way of teaching concepts and ideas. As a result, lack of previous computer experience (outside of basic computer skills such as turning on a computer, operating a word processor or text editor, etc.) will not disqualify a student, nor will previous experience in programming or other IT related fields advance a student or allow them to skip courses.



Teaching will typically be done through lectures, preferably in classes of 30 or fewer students. Each teacher will have at least one TA. Each course will consist of three 60-minute lectures each week and a 60 – 90 minute workshop held once a week. In the workshops, the students will have the opportunity to practice their coursework, with the teacher and TAs on hand to provide guidance. Each teacher and TA will be required to hold regular office hours and to actively monitor and participate in student forums related to their class in case students have questions.


Teamwork is an essential part of many development shops and projects. Sometimes teamwork is simply asking a more experienced developer a question, and sometimes it takes the form of dividing the coursework up into smaller, more manageable portions. Students will be encouraged (and sometimes required) to work as teams on many projects (typically longer projects), and will be required to work as individuals at times as well. The grading system used for team projects is discussed below.

Admissions and Scholarships

Admissions policies will follow all applicable federal and state rules and guidelines. The ideal candidate will be fresh out of college, but there will naturally be a number of “second chancers” (i.e., people who started one career and then decided to switch careers), as well as students with IT experience who decide they would like a change. Scholarships will be granted based on financial need and academic achievement. Base guidelines for admissions and an admissions exam will be established, and students will be chosen on their academic credentials and exam scores. To maintain academic integrity, the incoming classes will be limited in size to ensure the desired teacher/student ratio. “Weed out” and attrition will make sure that later classes have fewer students than earlier classes.

Best Practices

Students will be required to meet guidelines on code readability, documentation, and testing. Students will be given introductions to these topics in their first semester, and these subjects will be expanded upon throughout the coursework. Students will be penalized for not following these practices in their projects.


Software programming tools can be expensive. Even when low cost versions (such as academic versions) or free alternatives (FOSS, the Microsoft Express editions of Visual Studio, etc.) exist, students may not have access to the hardware needed to run these packages well. Also, many programming students cannot afford a better grade of hardware. As such, there will be a computer lab available to all students 24×7 that is staffed with knowledgeable mentors and assistants who are also able to provide students some help with their work. Students who do not use the computer lab will be required to access it remotely to perform all of their work through terminal-type software. This will give students full access to their own resources, as well as the school’s resources.

The student terminals will have no Internet access, as the students are supposed to be learning to write code and not copying and pasting code found through search engines. Students will be required to check in/out all work through a version control system. This will allow teachers to: provide “early interventions” for students whose projects are heading in the wrong direction; help facilitate teamwork on team projects; and give proper grading of team projects. This arrangement also provides a secure and reliable storage system for students’ work and helps teach and promote industry best practices.


Projects will be graded on the following items:

  • Correct syntax (Does it compile/interpret without error?)
  • Meeting the project requirements (Does it do what it is supposed to do?)
  • Readability
  • Documentation (Is the documentation provided adequate and appropriate for the type of project it is?)
  • Code quality (Is the code sloppy and wasteful of system resources? Does the code rely upon default values? Does the code properly adhere to the principles of the language used, properly handle edge cases, etc.?)
  • Demonstrates skills currently being taught, as opposed to falling back on lessons learned previously that may be less efficient (think: using a series when an integral would have worked)

There will be no grading on a curve. Grades will reflect results achieved, not effort expended.

For team projects, the grade will be a based on the above guidelines (as it applies to the individual student’s code) and whether the project is completed and correct. While it is unfair to fail a student if the overall project is poor but the student’s individual effort is of high quality, it is important for students to understand that teamwork is more than just doing one’s part in ignorance or disdain for the overall “big picture.” The version control system will allow teachers to understand what part each student played in a team project.

Exams and Homework

Exams and homework will be rare outside of the nonprogramming courses (symbolic logic, requirements gathering, etc.). In real life, every day, every line of code, every project is a test. The grading emphasis will be on projects. Teachers may, from time to time, conduct short quizzes or give brief homework assignments.


Attendance will be optional for classes but not for exams. The rationale is that it is up to the students to properly know their limits and manage their own time. If a student feels comfortable missing one class to free up time to complete a project, it is perfectly fine. If a student feels that he/she can do without classes, they are welcome to miss them. The grading will be tough enough to ensure that students who are not learning one way or the other (books, classes, or study) will receive the grades appropriate to the level of learning.

Class Schedule

Classes will be scheduled from 8:00 AM, and the last class will finish at 5:00 PM, with a lunch break midday. Classes will be scheduled so that students will have classes on Mondays, Wednesdays, and Fridays and workshops on Tuesdays (there will be a one hour gap between workshops). On Thursdays, students may work on projects, discuss issues with teachers, study, and so on. Students will be assigned a schedule; the lack of options in the coursework (except one elective in the final semester) ensures that scheduling will not present difficulties. Semesters will last six months each, with a two-week break between each semester, and a one-week break in the middle of each semester.

Teacher Selection

The majority of teachers will be experienced developers. Some teachers will be full-time teachers; in other cases, teachers will be “on loan” from partner corporations. TAs will be less experienced developers and preferably alumni of the school.

Industry Partnership

Partnerships with corporations will be fostered, as long as the academic integrity of the school is not jeopardized. These partnerships will hopefully be able to bring experienced teachers into the institution and expose students to the most current methods and technologies. Recruitment of students by corporations will be encouraged in the student’s final year.


Housing and Student Life

Student housing, similar to college dormitories, will be available. The environment will be designed to meet the needs of developers. No more than two students per room, proper tasks desks with high-quality lighting (no overhead fluorescent lights), LAN and Wi-Fi connectivity throughout each building, and so on. Students will be encouraged to form clubs, particularly technology-related clubs. All clubs will require sponsorship from a faculty member. A gym and sports facilities will be provided, although the school will not be involved in the NCAA system. Student health (including mental health) facilities will be on campus or provided through local facilities at a low cost to students. A library will also be on campus; many of the books and periodicals will be available in electronic form whenever possible and will be accessible via the campus network. A cafeteria will be on campus as well.


Textbooks will be standard textbooks when appropriate. Electronic copies of books will be made available whenever possible. Textbooks will be sold at a reasonable price, and editions will change as infrequently as possible in order to allow students to purchase used copies of the textbooks.


If possible, the school will be located in or near a major city that has a large concentration of IT activity, such as New York City, northern New Jersey (it’s all one city anyway), Philadelphia, Dallas, Charlotte, Seattle, Redmond, San Francisco, Los Angeles, and so on.

Wrapping up

I hope that you have enjoyed reading this series as much as I have enjoyed writing it! I am sure to revisit this topic in the future, as education is one of my favorite things to write about and judging from reader feedback (“thumbs up” and comments) TechRepublic members are interested in it as well.

Next week, I will resurrect the idea of a Perl vs. C# shootout… with an interesting twist to the story.

Stay tuned.


[Edited 8/6/2007 {Justin James} to add the poll]