Today’s Wall Street Journal features a column by Christopher Mims that argues “Programming Is a Trade; Let’s Act Like It“. He argues that not only is it possible to learn programming without going to college, but that university computer science programs may be teaching something entirely different from what’s used in practice:
Take Facebook: The first thing that happens to a new engineer there is six weeks of intensive classes, many of which are — you guessed it — programming classes. This is in part becuase university courses in computer science favor theory over programming, which is a mishmash of skills ranging from practical knowledge of in-vogue programming languages to how to work on projects that involve dozens of other programmers and thousand or even millions of lines of code.
Mims is primarily interested in writing about online training programs like Codecademy and Treehouse, as well as a few “intensive” trade schools like Seattle’s Code Fellows. I’d like to raise the possibility that this article highlights an excellent way for MIS programs (like ours at ASU) to make our programs relevant for students.
In CIS440, which started out as a textbook-driven project management (PMBOK-based) course, my students are now experimenting with a wide variety of practices in that “mishmash” — version control, test-driven development, DevOps, and so on. Last spring, we started using Scrum as an organizing framework for the course schedule, with its strict requirement that the team deliver working software early in the semester and demonstrate new features every iteration (every two weeks, starting this fall).
Aside: my initial motivation in adopting Scrum was to protect my own pride! I hated telling capstone project sponsors at the end of the semester, “The students didn’t finish your project, but…” [choose one of: "...they had a great learning experience", "...they did a non-working prototype", "...you can consider this an experiment with the new technology", etc]. Scrum mandates that you’ll have something deliverable, even if it’s a bare-bones web page with lots of “coming soon” stub pages.
It turns out that there’s more to the “mishmash” than just learning a programming language or a few tools. There is indeed theory about software development — it just doesn’t happen to be the kind of theory (data structures, algorithms, etc) that they teach in the computer science department. “Agile” and “Lean” are two keywords that both stand in place of a rich history of theoretical study and empirical experience. We can look at collaborative software development itself as a scientific process in which requirements are seen as hypotheses to be tested (cf. The Lean Startup). And in fact there is a great deal of operations management, especially the Theory of Constraints, underlying much of the DevOps movement.
The gap between what CS departments teach and what the market needs is real. CS graduates may study programming theory for four years and graduate without ever having written a test, or checked code in with
git. But there’s more to being a great developer than just learning the currently most popular language. Teaching the art and science of software development in organizations can and should be (part of?) the mandate of an MIS department. By claiming this role, we can offer more than just “computer science lite”. We can even begin to justify why computer science majors should take courses or a double major in our departments. We’ll offer something that complements, rather than substitutes for, their training in computing theory.
This is going to be one of the guiding ideas of my courses in 2014-2015. To accomplish it, we’re going to need some new practices (such as using Github for assignments) and new resources (like a great textbook!) as well as lots of communication with the professional community (and maybe with the CS department) to better understand what’s really needed.
Once again I’m looking for capstone projects for senior students in the CIS undergraduate program at ASU. Students will be working in teams of 4-6 over a 15 week period and will be expected to use all of the knowledge they’ve gained throughout their undergraduate studies as well as learn new tools to fit the job. Past projects have included from-scratch web applications, mobile web sites and basic mobile apps, new features for existing web apps, data analysis, requirements analyses, and digital marketing projects involving SEO, social media, etc.
Past clients have included brand-new startups (even a lone founder with nothing more than paper sketches of his intended web app), small, medium, and large companies. Clients are expected to maintain communication with the students, who will present several working “demos” of the project as it emerges, and will need your feedback. Beyond that, there is no cost to participate, although I will expect you to fill out a questionnaire at the end of the semester to help me grade the students. This is a great opportunity for you to get a real project completed, to get to know some students who may be potential hires, and to give back to the ASU community.
In my opinion the most successful projects have been “from scratch” web development projects, because the students have training in web development already, and with new projects they won’t face a big up-front hurdle of trying to understand someone’s existing code. However, with the big group coming into the class this fall, it’s usually possible to find enough students to take on other types of challenges such as mobile app programming or big data analytics.
If you are interested in sponsoring a project for the semester that spans August 21 to December 5, please e-mail me or call 480-965-0024 during the business day, and I’ll tell you all about it.
It’s now just about 13 years since I’ve been able to call myself a “professional” web developer, and I found out that my trusty old IDE, Allaire Homesite, is no longer on the market. I’m thinking about trying emacs… it’s older than me, and still popular, so there’s got to be something to it. But what about the back-end? I’ve always just used an FTP tool to dump script files (PHP and the like) into a traditional web host — this site runs on GoDaddy hosting — but nowadays I’m playing around with web frameworks like Flask and will need to have a lot more control over my environment. The name of the game these days is the cloud (aka platform-as-a-service), where you architect applications in loosely-coupled modules running in configurable virtual machines. I’ve decided to try Heroku, because it has multiple Python tutorials including one based on Flask, my framework of choice, and gives you an apparently free PostgreSQL database. If I can get it running, my first challenge is going to be building myself a fresh new blog. This site is built in WordPress, which is a powerful and easy-to-use tool, but it has way more features than I need, and I need a learning project anyway. Whether I can get it running is indeed the question. I can run
git with no problems on my Windows machine, but can’t get the command-line Heroku tools (
foreman) to work at all. I’m going to try setting up a new Arch Linux virtual machine with VMware Player and use that for development.
St. Isidore of Seville, pray for me! (He’s the patron saint of the Internet.)
The summer cohort of CIS440 is rolling along with five teams building web apps from scratch for businesses in the area, including a couple of brand new startups. It’s exciting to do this all in the short span of six weeks, and it’s been a very high-energy group. I suspect the fact that the teams are meeting daily instead of twice per week is helping with keep the momentum up.
This week the focus of my lectures has been on DevOps and on Testing, two concepts that I think are essential to software development but have never been included before in this course (which was originally more of a Project Management course). In talking to professionals throughout the Valley, it has frequently come up that new graduates may have a lot of knowledge in programming, but never have any training in software testing or even basic tools for collaboration such as version control.
So, how should it be included in a course like this one? This semester, I gave a basic lecture on a number of common DevOps approaches, without getting into specific tools, basing the lecture mainly on Paul Swartout’s Continuous Delivery and DevOps: A Quickstart Guide. Testing is an area I know even less about, so I ended up showing a video by Carl Meyer and recommending another one by James Bach. In addition, one assignment each student must do is participate in a “tech talk” for the class. One group is presenting on a Git/Github workflow tomorrow, and another will present on some type of automated test runner next week. (The “tech talk” idea has been a stroke of genius, by the way. It allows the students to specialize and go beyond the core content of the course, while guaranteeing that I learn something new from each class.)
But I think that in the future I might be able to impart a lot more by doing something like creating a “DevOps” workflow for the whole class: have students turn in assignments via Git, grade team members somehow based on the repo’s statistics (# of commits, or whatever), require testing from the beginning, maybe even define tests of my own which students will have to make their projects pass in order to get credit. Hey… maybe I can get a student team next semester to work on this for me!
Teaching a short six-week session of CIS 365 with a small group (9 students) was a great opportunity to try out some new things in the curriculum including (as mentioned) the use of an open-source DBMS, PostgreSQL, for teaching. Here’s some of what I discovered from the experience:
- BYOD with an open source DBMS works. Postgres works just about the same on Macs and PCs, so there were no complications in letting the students use their own machines, but one: I couldn’t figure out how to set a PATH in the Mac OS, so it was challenging for Mac users to use the command-line features of
- Adding a final “tech talk” assignment was a great way to focus the schedule on the DBMS. Previously I’d held a day on using Access and Excel as database front-ends, a day on Tableau, a day on database-driven websites with PHP, and maybe some other special topics. This cluttered the schedule and distracted the students. For the summer semester, instead, I spent more time on advanced features like stored procedures, triggers, and fuzzy-text queries, and I assigned each team to prepare a tech talk for the class on one of those other technologies which might be used for the front-end of a database application.
- Group projects are still hard to grade fairly. From the professor’s point of view, it’s hard to tell who’s doing the work and why. Next time, I’ll keep the projects but probably make them a smaller part of the overall grading.
In the coming year instead of CIS 365 I’ll be teaching CIS 355, a course on data warehousing in our new Business Data Analytics major. It should be a good course for me to leverage what I’ve learned about teaching SQL and RDBMSs, and explore a new application of those technologies.
The spring semester has just concluded and I’m proud to have finished my first year as an ASU faculty member. After a short breather, the summer session will be starting, and I’m going to be teaching CIS365 again from May 19 to June 27.
This semester, instead of using Microsoft SQL Server, we’re going to shake things up a bit and use PostgreSQL for the assignments. PostgreSQL (or just “Postgres”) is an open source database management system that should be able to run on everyone’s computer, even those of you with Macs, so we won’t have to fool around with virtual machines or cloud servers. (FYI, I installed the latest release, version 9.3, on my machine.) On the other hand, this means that the students and I will have to do some learning by trial and error as every database has its little idiosyncrasies.
I recommend that students look for some free help or documentation on the Internet, because the course text isn’t for Postrges specifically. I found one free book here, and I’m sure there are more, not to mention the official documenation at postgresql.org.
From a client who had our students do a website redesign:
“Thank you for allowing me to be part of it. The students did a fantastic job. I’m not only getting lots of new online orders, but many many more website visitors. The website is so much more impressive and I’m getting lots of offers for new … contracts from it. So, while most of what I do online is not quantifiable, it has noticeably made a difference in my presence.”
On Tuesday, we celebrated the success of 22 Capstone project teams with a first-ever capstone project showcase. Many of our sponsor organizaitons, as well as other faculty and students, were present to see the websites, mobile apps, digital marketing strategies, and consulting projects that our students had completed. Well done, everyone!
Thanks to all of the project sponsors who visited my CIS440 class on January 23rd, we successfully formed 23 student teams to carry out IT projects of all sorts during the semester ahead. I’m looking forward to seeing what kind of an impact we can make for the various sponsor companies over the course of what should be an exceptional learning experience!
Welcome to my freshly-updated website. In the spring semester, I’m teaching one section of CIS 365, Business Database Systems, and three sections of CIS 440, the capstone course for our CIS undergrads. My CIS 440 students will be working in teams to complete IT/IS projects for real-world businesses, such as websites, mobile apps, databases, requirements analyses, prototypes, and analytics dashboards. We had seven teams in the fall semester who produced excellent results for companies such as APS, Tanga, AuthorityLabs, and ASU, but I expect to have have more than twenty teams this spring. Do you know of a company, small or large, that would like to work with our students and get some projects from their backlog completed? Put them in touch with me. And students, I’ll see you in class next week!