Education

A pragmatic approach to training programmers, part three


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.

Prerequisites

Mathematics 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.

Methodologies

Teaching

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

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.

Technology

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 24x7 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.

Grading

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

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.

Miscellaneous

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

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.

Location

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.

J.Ja

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

About

Justin James is the Lead Architect for Conigent.

40 comments
mhump
mhump

Seeking some advice, on a career choice in programming for a 17 yr old graduating HS spring of 2008. Ie. my son. Son is interested in programming as a career choice, I am looking for suggestions on basic or beggining projects that i can find to help him develope a better understanding and interest in the field and some of its options. Nice articles & thanks. Mike H mhump@uidaho.edu

Justin James
Justin James

And I am sure that at least a few of the other folks here would as well. Some advice I would give: * Have him talk to a few experienced programmers to see if this is something he really wants. I would be glad to talk to him if he wants (use the TechRepublic contact system to get a hold of me privately). * Decide what kind of path he wants to go down. Does he really want to learn the in depth theory (Computer Science) or is he looking to be a "real world programmer"? Many schools call their programs "computer science" when they are really more like a hybrid CS course and hands-on. * Pay attention to the school's reputation within the tech community. * If there are specific schools that he is interested, review the coursework and course descriptions carefully. Check it against some top flight schools to see if it is comparable. You do not have to pay top dollar (USC Berkely, MIT, Carnegie Mellon, etc.) to get a great education. * Be cautious about online schools or places like DeVry or Chubb Institute. Regardless of the quality of education they may provide, their graduates are considered second class citizens by many, many people who make hiring decisions in IT. * Get a solid math and/or formal logic background ASAP. I cannot stress this enough! Now, to address the actual question you asked, about getting started. I started very young, typing code into an editor from a book to calcuate the stability of model rockets with my father's help. I started formal training in my freshman year of high school, and took programming classes for 3 years in HS. It gave me a great start and a huge leg up. But most people do not start that early, and they "get it" just fine too. Here are some suggestions: * There are plenty of free tools out there for programming. There is Eclipse for Java (and a number of other languages) and the Visual Studio Express editions for Microsoft in the .Net universe. Out of those options, I think learning VB.Net is probably the easiest. If he does well in the .Net universe, academic editions of the full Visual Studio platform can be purchased at a very reasonable price. * That being said, *my personal opinion* (nothing more than that) is that Pascal is the ideal beginner language. Hundreds of thousands of great programmers got their start in it. Is it a mainstream langugage today? Not at all. But every single concept out there in mainstream langugages is in Pascal. By and large, it follows the C-style syntax, but is a bit more verbose (like using "begin" and "end" instead of "{" and "}") which makes it a little bit easier to understand. It is also a very strict language that enforces good habits. I am sure there are free Pascal compilers out there for Windows, and another alternative would be to install a Linux or a BSD on a spare computer (it does not need much horsepower for this purpose) or within a virtual machine (FreeBSD runs great within Microsoft's free Virtual PC 2007 product) and use the Pascal tools included in there. * Books, books, books! Now, I can't recommend many off of the top of my head. I love "Code Complete", but it is a bit too advanced for a beginner. I love the SCIP book, but it can be hard to follow without the help of a knowledable person helping you. Some of the "Teach Yourself XYZ in 21 Days Books", the "... for Dummies" series, and so on have value. O'Rielly books tend to be of very high quality, but lately many of them have slipped, in my opinion. * Be careful about the examples in the documentation. All too often, the examples show really poor coding practices, they are there to show syntax within context, not a good use of the technique. * Offer to volunteer somewhere. In high school, I did volunteer work for a local charity. Not only was it personally rewarding, but where else would a kid with no experience and little knowledge or training get to work with no deadlines and little pressure? If not a charity, see if a local company would be willing to have an "apprentice" or "helper", or someone to work Production Support or another lower level role that requires little experience. Being able to graduate college and be considered "mid career" puts another $10k - $20k per year into your first post-college paycheck, and the experience gained by volunteering, interning, or apprenticing is priceless. * Avoid the temptation to do ambitious projects when starting out. You'll just get discouraged when it gets too hard. Instead, start with some basic "Hello World" types of programs, and maybe work your way up to something slightly more difficult. A simple text based chess program (no AI, just let two people play, but enforce the rules) or a replica of the game "Mastermind" can be done after a few weeks or a month of basic learning. Maybe a Sudoku puzzle solver (using files with grids of numbers to represent the puzzle, as input) would be an awesome project after a few months of work! Basic games are great learning projects, because the rules to code are basic and easily understood, and give the chance to learn about lots of different ideas at once. Hope this helps! Again, feel free to contact me! J.Ja

mhump
mhump

Thanks Justin, for all this great information. In reading all of these articles and postings there is a lot of info to be considered. My son has an easy time with Math, Algebra and logic etc. and cant seem to get enough. But he in my opinion is at a point in his life where I believe he would not be able to take on a 4-6 yr Computer Science Track. as i believe he is a bit burned out with School. (High School) I'm thinking he needs to hit the ground running with a Vocational type path that would get him directly into the basics with practical hands on study. Also I 'm not sure he has a real understanding of all of the opportunities or options involved in this Career choice. Most of his information has been obtaind from HS councelors and Job search / Earnings reports etc... He has been around computers all his life and has a good handle on running stuff. That is why I am looking for computer programs and projects to get him interested in. (something fun and enticeing of course) I myself took a very simular Career course in that I attended a Local in-state Vocational training in Electronics and Communication's (3 yrs)and I have been in the same fields including Computers over the past 30 years. Knowing my son as I do (typical Father) He would get lost and burned out if not getting hands on training from the start. But I do understand the importance of the CS 4-6 yr Path as well. As I currently work at our States largest University in the IT department as an Electronics Specialist. There are several close by options such as University of Idaho, Washington State University and Lewis-Clark State College. For now with 1 yr of HS left I am just trying to give him a little Father'ly nudge in the right direction. I will research the suggestions given and whats offered locally. If you have any other suggestions as far as basic programs and projects please let me know. I do have access to MS Visual Studio Pro, does that contain the Visual Basic you referred to? Thanks again Michael Humpherys mhump@uidaho.edu

Mark Miller
Mark Miller

Hey, no shame in ditching the boring stuff. Personally I found the theory interesting. Occasionally I had boring teachers, but the subject matter was generally interesting. I never had a moment where it felt so irrelevant that I wondered why I was taking it. But then, maybe I didn't know any better. :) I had done plenty of my own programming before that, but it was all just for me, not for a customer. That's a whole other kettle of fish. I did get some hands-on experience in my 4th year (I went for 5 years), and it was a good thing. The CS program offered a course called "Software Development I & II" (I think). It was a two-semester course where we worked with a real company, working on a real project. The first semester was mostly gathering requirements, and formulating a design spec. We followed the Waterfall model. We got experience organizing our requirements and design documents. A few of the people came to work (for pay) at the customer's site over winter break, where they worked on the doc's some more, developing the control flow and data flow diagrams. I really wished I could've stayed for that, but by the time I found out they were offering it, it was too late for me to make arrangements to stay in town. The second semester was basically implementation and testing. I made quite a few mistakes in the project, and I ultimately learned some things. The main lessons were "pull your own weight, and no matter what's going on make yourself useful." I had such a head for theory, I had drunk the CS department's "Kool Aid" which was that everything should be done a certain way. I lacked flexibility in terms of process. I had some "2x4" experiences there that thankfully straightened me out. I still had some of that academic inflexibility when I got my first job, but I got over it in the first 6 months. So, yes, I'd recommend any chances people can get to do real world projects while in school. It'll help break the academic spell of regimentation.

Justin James
Justin James

I started school as a CS major, got bored with the lack of hands on when we got to discrete stuctures, and switched majors. I ended up with a BA in liberal arts (double majored no less), but throughout school I worked IT jobs and by my junior year I was doing Web development part time. This allowed me to graduate with real world IT skills and still study what I really wanted to study. While I still love what I studied and do not regret learning it, I do wish that I had managed to stay in school for another 2 years and take the CS courses too! I really went full circle, came into school wanting to do hands on, switched majors because I hated the theory, did hands on for a while, now my work is nearly zero hands on and I love reading the theory! J.Ja

Mark Miller
Mark Miller

Re: MS Visual Studio Pro has Visual Basic? It depends on the version you have. VS Pro 6, for example, has Visual Basic 6, which is quite different from the current Visual Basic.Net. If you got VS Pro after 2002 it will have VB.Net on it. It's been evolving with time. Microsoft has released 3 versions of VB.Net so far. They correspond to the year they were released: 2002, 2003, and 2005. The 2002 version of Visual Studio was typically labeled just "Microsoft Visual Studio.Net" They didn't start adding the year designation until 2003. The 2003 version is labeled "Microsoft Visual Studio.Net 2003" in the programs menu. They took the ".Net" part out of the name in 2005, just calling it "Microsoft Visual Studio 2005". .Net is still in there. They just took the moniker off. If you want to be absolutely sure, start up VS Pro, and go to the Help|About dialog. It'll tell you which version it is. The difference between 2002 and 2003 probably won't be significant. The 2005 version was more of a major upgrade. From what I understand the current version of VB.Net in VS Pro 2005 is more like the older VB 6 in terms of ease of programming, and perhaps syntax, though in terms of features it's more powerful. There are books on Amazon.com for doing games and graphics in VB (fun stuff). Just look up "Visual Basic games" or "Visual Basic graphics" under "Books". Especially for a beginner it's important to find a book that matches the version of VB you have, because Microsoft added more features to the language over time. VB.Net was a large departure from VB 6, for example, because they switched to using a different runtime. Re: college program Even though it may not seem like it now, your son might enjoy a CS program. Just something to consider. I remember when I was in high school I wrote a couple games, and one application that was challenging for me. I was not sure about CS. I felt as though I was more interested in writing business applications, like word processors, etc. I investigated the Computer Information Systems program, a business computing degree, of a university I was considering. I looked over the program and it just didn't feel right. Part of it was it wasn't challenging enough, and got into areas I wasn't interested in. I asked my computer teacher at school about the choice. She recommended CS, because she thought it would give me a background in computers. She thought it was valuable to understand how one operated. She had in fact gone through a CS program herself. She was a rare bird. She took it in the 1960s back when women weren't "supposed" to do that sort of thing. But she got through it and liked it, aside from dealing with punch cards and having to schedule computer time in the wee hours of the morning. Even though the CS program didn't feel like what I envisioned a college program in computers would be, I took that route and liked it for the most part. I didn't end up working on word processors, etc. I discovered that the market for that kind of thing had shaken out by then (early 1990s), and the only places doing it were Microsoft, WordPerfect, and I think Borland. I actually tried interviewing with Microsoft while in college, but didn't get past the first interview. For the most part I've worked for small software companies since then, writing tools and custom database applications, and I enjoyed that for a while. From what I understand of today's CS programs, their primary languages are C++ and Java. If your son were to enter a program, that's probably what they would be using. From my early years in the work world I heard about some universities that used Microsoft tools. These days they might be using C#.Net, and perhaps some native C++. I couldn't tell you with any accuracy. One of the other languages I've heard is being used in CS programs at some universities is Python, a dynamic language. For example I know of a CS professor, Dr. Mark Guzdial, at Georgia Tech. who uses it in a course he's teaching called "Media Computation", where they manipulate graphic images, recorded sound, and video. Sounds kind of fun when I think about it. I've read his blog at http://www.amazon.com/gp/blog/A3W4CUXPE1WFNF (he has an Amazon authors blog), and he's referred to Python from time to time. Mostly he talks about issues of how to teach CS, on his blog, but occasionally he talks about courses he's taught. Anyway, good luck to you guys. Let me know if you have any more questions. My contact information is in my profile, or just ask some more here.

Dr Dij
Dr Dij

bypassing errors without fixing the cause in an ERP system. making changes quickly without testing, and proclaiming that your change could not be cause of problem next time program is run opening a csv data file in word and doing search replace to change a date when I'm not around. Because you of course can assume that only that one date is present to be replaced, and that you can easily check 13,000 recs in word. result: I did a quick prog to read ALL recs next day and changed the 829 he missed with search replace. This by a guy who makes $5/hour more than me. thinking that a program with a pretty interface is automatically better because it's 'windoze'.

Justin James
Justin James

Hey, I've used Word just for that purpose myself (if no text editor was handy that could handle huge files), but only I data I created and knew what was in it to begin with, and it was not in a database to just run an UPDATE statement against. ;) Then again, I also use Excel on occassion to write batch INSERT scripts. I know, and I am someone who is always complaining about *business users* abusing Excel... Nowadays, though, I typically just use a good text editor that supports regex, or write a quickie Perl script. J.Ja

oldfield
oldfield

You missed the mathematical concept of logic and set theory. How many times do you see "if" blocks that just don't add up leaving a trailing black hole, or even multiple routes depending on the hardware/compile options. I would also add the knowledge of data storage and hardware. Accessing array structures (or equivalent) in the wrong way, just plain stupid use of memory can bring a computer to its knees. In fact, a complete understanding of what they are doing is important. Just 2p worth

Justin James
Justin James

I do have some solid logic courses, all loaded up in the first few semesters because I agree that it is crucial throughout! I would have liked to have squeezed in more hardware, but it was pretty hard to find the space in the schedule. I do have a low level course in the second half, that has the students working in assembly and writing device drivers, I think that may meet a lot of the things you are suggesting. Thanks for the feedback! J.Ja

Wayne M.
Wayne M.

Great approach J. Ja! Of course, I have to recommend my own tweaks. Grading: Pass/Incomplete. Coursework requires that all requirements are met or isn't ready yet. No 80% programs will be accepted. Team Grading: Team is graded as a whole. First semester teams may have a TA serve as manager, but advanced groups should self-manage. Instructors may serve as HR in extreme cases where a team wishes to fire a member. Attendance: Mandatory. Absenses must be justified to instructor or team. Excessive excused absenses may require a course to be repeated. Excessive unexcused absenses may result in dismissal. Internet Access: Not allowed for introductory programming courses, strongly recommended for advanced programming courses. Learning to find and adapt an existing solution should be considered a fundamental skill. Oral Presentation and Meeting Facilitation Skills: Cannot be a requirements analyst without the ability to speak to people and run a meeting. All in all, though, this represents a solid approach. Good job!

Justin James
Justin James

Wayne - As always, good ideas, and thanks! I am not sure if I agree, of course, but there is a lot to what you say as well. I do really like the idea about teams with the instructor being HR and "firing" teammates. ;) The Internet access issue is a double edged sword. Most folks do not understand copyright... just because someone posted code publically does not grant someone else the right to use it! That's why I never copy/paste code samples, because unless I am explicitly granted permission to use it, I just violated the law. That is actually the heart of my "no Internet" policy, besides wholesale plagarism. :) J.Ja

Mark Miller
Mark Miller

I agree about plagiarism, but in an educational environment you can use copyrighted materials for free, as long as it's used for instruction. That's my understanding. It's called fair use. What the law says is you can only use it temporarily. For example, when I had orchestra in high school we used this. We had music that was copyrighted, but used it for free. Each of us had copies for us to use for a semester. Our teacher collected the music back from us at the end of the semester, because we weren't supposed to keep it.

Justin James
Justin James

Mark - You are absolutely correct about copyright and fair usage... but "fair usage" ends at commercial purposes. To allow fair usage in school teaches the students skills that cannot be used outside of the classroom, sadly. Indeed, this is a topic that I will be writing about next week! J.Ja

Locrian_Lyric
Locrian_Lyric

I went through a course that had many of those ideas incorporated into it, but you have clearly taken it to the next level. What the program I went through also had was a pipeline DIRECTLY into the sponsoring corporation. Anyone with an "A" average (an "A" was defined as 96% or greater) was automatically invited to an interview with the sponsoring corporation. If you added THAT to your program, I am certain that you would be able to get a high level of corporate interest as they would be guaranteed access to the best and the brightest. Your idea of having corporate programmers teach would add to the credibility because the teachers would KNOW just what the students went through. It would relieve some pressure on HR and CERTAINLY reduce the risk of hiring a bad employee.

Justin James
Justin James

Thanks for the suggestion! I like that idea a lot. My major concern is that while "sponsorship" is great for paying the bills, I think it can be a disservice to the students if the sponsorship is allowed to affect the cirruculum at all. I tried to put forth a well-rounded coursework, I think it would be a shame to jeopardize that in favor one one vendor's technology or another vendor's stuff just for some money, especially since the job market and development is so insanely fragmented now. When I first started doing Web dev, it was all Perl/CGI, nearly always running on Apache on some sort of *Nix (usually a BSD, but sometimes Solaris or a Linux). Now, Web dev can be on any number of Web servers, in a huge variety of langugages, on a multitide of OS's. It is not enough to know Java or PHP or .Net, you need to know about its interactions with the base OS, regardless of cross platform claims. To restrict students to J2EE on Solaris or .Net on Windows, or whatever really would not help the students too much when they graduate, and limit their exposure to the world of development. So while I like the idea, I would be cautious about it. J.Ja

Locrian_Lyric
Locrian_Lyric

A bit of a sales and marketing angle. You are *allowing* the corporate sponsors access to the cream of YOUR crop. YOUR program is the best of the best and if the corporate types want access to the best and the brightest, they will need to sponsor the program. You present corporate sponsors with your curriculum, inform them that it is YOUR curriculum and not subject to change. What their sponsorship buys them is access to your 'A' list of programmers who will be BULLET PROOF.

Justin James
Justin James

I think you put that in a great way! J.Ja

dide
dide

I think this is an excellent program. Very thorough. I also do feel that there may be some restraints that many developers out there might feel uncomfortable with. Nonetheless, the bottom line is that the structure presented should keep focused the ultimate goal. And that would be to educate the programmer at a much higher level so that he/she become more marketable and that more advanced software can be ultimately developed for both businesses and consumers. Flexibility is key. And I do think the above pragmatic approach is pointing in that direction.

Justin James
Justin James

Thanks for taking the time to review it and provide feedback! I agree that flecibility is important, that is one reason why I tried to load the stuff that changes more frequently in the second half, so as the world changes, those portions can be updated and give students fresh skills. A key failure for many traditional CS courses in terms of teach real world skills is that the cirruculum designed today is all too often outdated by the time you graduate. Imagine going to college started around 1996, 1997 to a C++ based school, by the time you graduated, PHP and J2EE were on the rise displacing Perl in the Web dev space, .Net was around the corner, and C++ started being phased out in favor of managed code in general for most development. You would have found yourself fairly impaired, job wise. The same goes for the schools that standardize on J2EE or .Net; both are great skills to have in the job market, but better to have them both, IMHO. While it's been years since I wrote a line of Java, the fact that I can understand it and troubleshoot it by sight has done nothing but good things to my career. J.Ja

Mark Miller
Mark Miller

The way my alma mater trained us for flexibility was to major in a couple of languages (Pascal and C, at the time), and introduce us to other dynamic ones along the way: Icon, Lisp, Prolog, SML, and Smalltalk. The intent was to expose us to a bunch of different stuff so we'd be flexible, though I ended up finding this out through private conversations with professors. They didn't openly tell us this in class, which I thought was a little dumb. Why not put the focus where they intend it to be, rather than say, "Okay now we're going to introduce you to this language," without the context. They weren't perfect. At the time, while we got set theory through Discrete Structures, we had no training on relational databases. I remember when I got out in the work world I felt so dumb that I had no clue about this. I eventually found a boss who was patient enough to train me on this stuff on the job. I think they did a fair job with the dynamic languages. Because of the exposure I had to them I'm not at all intimidated or mystified by Lisp, Python, or Ruby, as far as basic principles. I'm pretty sure I could even get Perl, but...I'm not sure I'd want to use it even if I could. You're so right that things will change. Training for flexibility (lifetime learning) is a must.

Justin James
Justin James

Mark - Great points all around. That's a major reason why I slipped in courses about dynamic languages and functional langugages. While they may not be nearly as mainstream, the exposure is crucial to being flexible as a coder. Why beat yourself in the head for 3 months constructing a massive on-the-fly JIT compiler/linker/loader system, when you should have just used a language that had eval.()? Only if you had never seen an eval.() before. Even if you were using C#, without having that experience, the power of the new lamba calculus and anonymous functions would be totally lost of 99% of folks who had never used them before, but those techniques are common in other langugages. ;) J.Ja

Mark Miller
Mark Miller

If they want training with a business computing background, then yes, I think this would be a pragmatic approach. I noted you said that students would be denied internet access. I have mixed feelings about that. There's some great instructional CS material online. For example the whole SICP book is online. Textbooks and lecturers are not always the best in their subjects. So it would be nice for students to have an "escape hatch" to find better instructional material online. However there is the flip-side as well, like you said, with students cheating. Several years ago I looked into Rent-A-Coder as a way to make some income. Most were real world projects with very specific needs. I saw some projects that were elementary in nature, very algorithmic, and didn't seem to have a practical project in mind. They reminded me of exercises I used to get in my CS classes. And that's what I figured they were, students trying to hire programmers to solve their CS assignments for them--cheating. So it's a double-edged sword. Maybe there are sufficient resources in university libraries to supplement knowledge like you can find online, but not all university libraries are that great either. The one they had at where I went to school when I went there was one of the lowest rated in the country. Now it's much better, but back then I didn't use it for much.

Justin James
Justin James

Mark - Good point about SICP (BTW, I've been reading it during the short lulls in my day) and other high quality online books. I think the publishers of a free online book would probably allow the reuse within the firewall, or maybe that resource could be whitelisted to the students. Overall, with a few exceptions, I generally find that the Internet is typically of dubious utility. The resources I generally hit for help are (in the .Net world, which is my current development space): MSDN Library MSDN Magazine MSDN Managed Newsgroups The nice thing about working within the Microsoft ecosystem is the total "funnel" of information, it tends to revolve around a few select resources, which makes finding information quite easy. All too often, my experience has been that it takes longer to search for what I want via general search engines than it takes to just figure it out myself. Sad, but too often true. I am down on search engines for a few other reasons that you know about, but the consistent lousiness of results is high up on my list, regardless of the engine. J.Ja

Dr Dij
Dr Dij

I've found a huge body of sites on google that are 'nonsense' sites. THey are keywords and gibberish, with enuf keywords very specific, to show on search engines. I'm guessing they are malware vectors. Often in .info or .biz domains and on 'public' sites like geocities. I've even found them copying valid sites to increase hits among unsuspecting users. Google was supposed to filter malware sites but it can't get all. These horrors render search engine results suspect. I've even noticed that the '-' function for a keyword on yahoo doesn't always work. (since I got more hits after adding '-' to same results. So you're right, the concentrated sites are real good to avoid the garbage of the net. I also like the topic books on safari.oreilly and books24x7.

Justin James
Justin James

AdWords is the sponsored search results (a major rip off the the advertisers, BTW, due to their costing algorithm), AdSense is the ads that go onto Web sites, email newsletters and such. They are both horrid programs, but without amazing SEO, AdWords is practically a requirement to do business on the Internet now. :( J.Ja

Mark Miller
Mark Miller

Is it AdSense or AdWords? I thought AdSense were the sponsored links that show up in searches.

Justin James
Justin James

Thanks to Google's AdSense program, those sites make money. If they couldn't make money (they used to do stuff like that + cloaking to push adult content), they would go under. :( Safari is awesome, I agree. I had a trial membership a while ago, and miss it greatly. I loved it for seeing if I wanted to buy a book, since I have a hard time reading hundreds of pages on a screen. I have not used books24x7. J.Ja

Mark Miller
Mark Miller

Justin and I have been talking about this on my blog at http://tekkie.wordpress.com, because several of my postings were copied by one of these "honeypots" you're finding. The worst part for me was the copies have my name and date of posting stripped off. So people who come to it won't even know I wrote it, unless they happen to click through on some of the links in the article that happen to refer to my blog. It's a real shame it's come to this.

Mark Miller
Mark Miller

My guess is that courses are mostly going to focus on algorithmic problems, nothing too fancy, but I remember working on a project last year where I needed a way to databind business objects to the front end in ASP.Net 1.1. I did a thorough search and finally found a way to do it that wasn't too hard. I can't remember the name of the site now, but it wasn't one of the Microsoft sites. They had documentation on the databinding mechanism, but no specific examples beyond "bind to a Datatable or Dataset". I had to go elsewhere to find that. Anyway, maybe this is irrelevant to the subject. I had the thought that maybe there would be cases where the pre-canned stuff wouldn't suffice for real learning.

Justin James
Justin James

Mark - I too have thought about other avenues. Some ideas that I think pair nicely with CS: * Economics, and work on models of markets and such * Law, since it is become an important part of the industry * Marketing, there are a ton of interesting possibilities for helping marketers with programming skills to slice and dice numbers * Pundit... whoops, too late for me on that one... ;) * Author, since most programming related books are pretty bleh * Teacher, but the pay compared to programming is not so hot... it would be nice to be involved in the next generation's education though J.Ja

Mark Miller
Mark Miller

Things may have changed enough that your hope will be realized, but I had a professor in college who taught a sophomore level course, who expected us to do research. One of the problems he had us solve was taking an imaginary number to the power of another imaginary number, something I was never taught. I was taught imaginary numbers, but never this operation, and it wasn't obvious how to go about it. I ended up going to another university's library to find the answer to that one. Like I said, the one we had was sub-par. My own university's library may have had a book that had the answer, but I didn't even bother with it. I found the answer in this little math book at the other university. If I had full access to the web I could've tried finding the math for solving this online. I think some of the genius students in the class did research for some of the other problems he posed, like learning Lisp, solving the n-queens problem, and implementing symbolic differentiation (Calculus). I've ranted about this before, but he hardly explained Lisp to us. He gave us all pamphlets on it, which were not that good. Again, if I could've consulted Wikipedia, or something like the online version of Practical Lisp, it probably would've really helped me out. Teachers vary. Some are terrible. You can't expect them all to be good. The one I had had a PhD in CS, but he was terrible at communicating knowledge. A part of it was probably that he was bored with the subject. He probably posed hard problems because he wanted to challenge us, not give us what he thought were puff problems. I think his problems were good. They were very challenging, but when it came to teaching new languages, which is what the course was about, he didn't have the patience for it. The materials he gave us were probably over our heads in some ways, too. The CS dept. I was in didn't want to be considered a vocational school. They begrudgingly did some things in deference to vocational training, but they tried to minimize it, focusing more on the academic discipline. It did leave me unprepared in many ways for the workplace, but some of the theory served me well. In some ways I'm glad they didn't put too much deference towards vocational training, and wanted to expose me to some "impractical" technologies, because I can draw on that knowledge now, and it's not weird to me. Most people who graduate with a bachelor's in CS do go into the web/database application jobs, because they're the most numerous, but there are other avenues that a CS graduate can go into. I've been thinking about that lately.

Justin James
Justin James

... is that a teacher would never present a problem where the solution cannot be directly deduced, derived, or implied form the classes, books, and teachings. Restrict the problem domain to the provided solution domain, and people do not need to leave the presented solution domain to find solutions. :) J.Ja

Justin James
Justin James

Is this type of school and learning program a good idea, or is it a bad one? Take the poll, or leave comments here. Thanks! J.Ja

Locrian_Lyric
Locrian_Lyric

would be that, with the basics so firmly entrenched, you could also offer special "fast track" courses for graduates wishing to return for additional training in the 'latest and greatest'. The 'fast track' courses could be short, intense programs focussed on transitioning existing knowledge as it applies to the new technologies. Since returning students would have the foundations, much of the 'fluff' could be eliminated, making the courses focussed on the specifics of the new technology.

Justin James
Justin James

...with another commenter's suggestion for night classes. I think that could work out very well. J.Ja

Tell It Like I See It
Tell It Like I See It

If someone asked me for a recommendation on programming courses, I would first try to make certain that this person REALLY wants to be a programmer. If I'm not convinced that the person REALLY want to program, I'd recommend a different line of work. This would be true no matter what was taught. However, if the person does REALLY want to program, this would be an excellent course of study and I think this would produce some good programmers. Just a though on this -- how about making some of the classes available in the evening so that programmers already in the work force can brush up their own skills? Maybe not for the degree, but just to brush up a bit. Also, I'd consider putting some extra "downtime" into the curriculum every year or two so that the course can be re-evaluated for updates and changes to both the overall course curriculum and the individual class material. Another thought that came to me -- what about Saturday (or evening) special events. These could be a LAN party, a code-off contest with an actual prize (like a special book or even some hours of in-class internet use), or something similar. These would be held at the school and open to all students. Who knows, you might even get a local business to sponsor a code-off. The school hosts the event, the business provides the prize and gets to keep all the solutions presented. Students who take part might (depending on their quality) get their names in front of a business which may lead to a job later.

Justin James
Justin James

Maybe I am a touch cynical, but like the gym, the people who think they want to do this but do not bother to show are where the dollars are. In other words, if someone thinks they want something like this, meets the requirements to enter, writes a check... if they do not follow through, that is their loss. Evening classes would not be a bad idea at all, and I agree that it could not go for the degree, but if there is a strong program, it would be great to make that available to others as refreshers or as continuing education. Great idea! I also like the after class activities that you suggest! J.Ja

jean-simon.s.larochelle
jean-simon.s.larochelle

This course looks very good to me. However, I would add a good continuous education program to the mix. Because once you graduate, keeping up to date is really important. This could take the many form but I think online courses would be essential. For example right now I'm going through the free : MIT OpenCourseWare on Algorithm This is really great because I can review some concepts that are slowly fading from my memory and learn about a few that I did not know about. I listen to the recording on my MP3 player on the bus (reading the notes at the some time). As a busy professional I would really like to have access to more of this. JS

Justin James
Justin James

You are right about continuing education, and thanks for the link! J.Ja

Editor's Picks