One of the highlights of the computer science program at California State University, Sacramento, is its senior project. This two-semester capstone course gives soon-to-be graduates a taste of industry-standard software engineering practices; students tackle a real-life software development project from inception to delivery.
It sounds great on paper. What I didn’t realize until recently was that it turns out great in practice, too.
I approached the class methodically, warily; it has, shall we say, a reputation among the undergrads. I got together with some of the most capable classmates I knew and we formed a team; soon after, we had secured a project sponsorship to design a web-based scheduling system for one of the campus departments.
We spent the first semester planning (as the course encouraged us to do; it was later changed to a more Agile methodology). We were going to make the scheduling system as a Java web app with a MySQL database backend. The entire team was familiar with Java, since most of the computer science curriculum revolves around it; most of us knew MySQL as well. It’d be a cakewalk. Slam-dunk. We had this. We could do this.
The second semester rolled around. Right as we were about to start implementation, our team was informed that, oops, no, sorry, you’ll need to do this in ASP.NET WebForms and SQL Server instead.
None of us had ever dealt with these technologies before.
We had an all-hands-on-deck meeting after that little detail was revealed. It was full of words like “we can’t” and “we don’t know that”. We argued. We pleaded. But the requirement was firm; the people responsible for maintaining the app after we finished it required it to be in ASP.NET. It took several weeks to accept that our dream of a Java/MySQL app had been shot down before it even cleared the runway, and by then, the clock was ticking uncomfortably fast. We learned ASP.NET and SQL Server as quickly as possible, but it was too little, too late. The project went down faster than any of us could have imagined. In the end, we delivered a half-baked product that was only partially functional.
Why? What happened?
Looking back, I think a lot of it had to do with attitude. Closed-mindedness. Many of the students at CSUS (myself included at the time) were Linux geeks; Microsoft was evil and Apple was for hipsters. Being forced to use a Microsoft product was simply unacceptable! We couldn’t do it! We didn’t have the background! (Never mind that C# is absurdly close to Java and SQL Server is a close cousin of MySQL.) We didn’t even have Windows machines! (Except for my laptop, but that was for school stuff, obviously, and my desktop, well, that was for gaming, I couldn’t spare the disk space for Visual Studio…)
I said it was “impossible.” What I really meant to say was “I don’t want to do it because I really dislike the technologies.” Never mind that I hadn’t one iota of experience with any of the technologies!
Dolly back, fade to black. (Just like Steely Dan.) Fast-forward a year to my first day working at Intel as an intern. After I’d gotten my docking station set up and gotten the obligatory adjustable-height desk tuning out of the way, one of my new coworkers approached, a sly grin on her face and a hopeful gleam in her eye.
“I have a project for you,” she said. I couldn’t believe my luck–the very first day! I followed her to a conference room, we sat down, and talked about what I’d be working on for the next month or so.
Can you guess what it was?
If you’re thinking, “Obviously a Java app, after all, that’s what you spent most of your time learning at CSUS,” then congratulations; you’re fully resistant to reverse psychology! You’re also wrong, sorry about that. The answer, of course, is an ASP.NET web app. The whole kit and caboodle: C#. WebForms. And SQL Server.
This time, I approached the project with a different mindset. Instead of “I can’t do this,” I thought, “This is a great opportunity to extend the bits of ASP.NET and SQL Server I picked up in senior project.” What a difference it made! Now, a month later, I’ve deployed my own ASP.NET MVC web app that adds functionality to the original project using JQuery and a simple RESTful API. I’ve tuned the SQL Server database, designed my own queries to pull useful information out of an unfamiliar schema, and drafted a migration plan to a more powerful server. A far cry from “can’t.”
This is what I missed when I took senior project. My mind was closed. I should have taken it as an opportunity to grow and expand my knowledge in a safe environment—the true, practical purpose of the class. Yet still, the experience wasn’t a waste, not in the least. It taught me what a difference one’s mindset can make. Open your mind, and opportunities will follow.
Oh, and for those of you reading for the ASP.NET tag, some cool news: Microsoft released their open source .NET Core 1.0 today. Hardly the “evil” company I thought it was in my youth!