Thoughtful, detailed coverage of the Mac, iPhone, and iPad, plus the TidBITS Content Network for Apple consultants.

Thoughts on — and of — a Computer Science Major

You don’t know me — well, I don’t think you do, anyway — but TidBITS publisher Adam Engst asked me tell you a little about myself. It’s not that my life is so particularly interesting, but that as a fourth-year computer science major at the University of Virginia, I have a particular perspective on the technology world that Adam thought might be of interest to those whose college days are long past.

Like many others, I entered college from a high school where students were rewarded with good grades for memorizing and regurgitating the correct answers. I was great at that and always received above-average grades. I learned what was required from textbooks and was tested on it. There was no guessing as to what resources or subject matter to study. Alas, while my grades may have helped me get into college, high school otherwise didn’t do much to prepare me for the University of Virginia.

That’s particularly true of computer science at the college level, which is very much the opposite of regurgitating memorized facts. Professors never bother to make sure the class knows a particular technology before handing out an assignment. This came as a shock to me initially, but after years of working through these assignments, I’ve come to understand that teaching myself is perhaps the most important thing college has taught me. It was, and still is, an entirely different experience from high school. I haven’t always liked needing to do a substantial amount of independent learning before even beginning some homework, but I now understand that it is a valuable skill. Being able to learn on one’s own is necessary to succeed in the real world because I’ll never know everything I need to and will constantly have to learn on the job.

I actually started as a business major but quickly switched to computer science because I wanted to make the tools people use and not just be a consumer. At the time, I believed that there are only two types of people in the world: those who make the tools and those who use them. I would later learn that using any modern programming language requires relying on code, foundations, and tools that many others have created.

Programming from scratch just isn’t necessary anymore, and in most situations, it’s not even possible. From libraries to frameworks to development tools, programmers regularly share their work so others can use it and improve upon it for the betterment of everyone. In my naïveté, I also failed to realize just how many layers there are in a modern computer system. When I learned about how compilers and lower level languages worked, I realized that any code I write in a high-level language is translated into various other forms before it can be finally understood by the computer. Although I question the practicality of learning assembly languages, doing so provided some valuable perspective on just how amazing and complex the inner operation of our computers really is.

Needing to build on the work of others and the necessity of independent learning has raised numerous tricky issues for me and my fellow CS students. The most significant one revolves around the fact that the University of Virginia has one of the oldest and strictest honor codes in the nation. There is a single-sanction policy, meaning that anyone caught lying, cheating, or stealing is automatically and unequivocally expelled from the university with no second chance or opportunity to return.

So what do you do when your instructor tells you to consult “Professor Google” for how to program in a particular language? And what’s the policy on using code from Web sites? How about example code from textbooks? Asking for help on StackOverflow?

With so much on the line, we CS students live in constant fear of breaking the honor code when trying to build upon externally available examples. But at the same time, using what others have done, whether it is a tutorial, framework, library, or other piece of open source software, is both standard practice in the industry and fundamental to the advancement of the field. I wish there was a single, solid answer for how freely available code can be used in CS coursework, but in my experience it varies greatly from professor to professor.

One of my biggest reasons for majoring in computer science is that I wanted to understand how computers work. I love TV shows like “How It’s Made,” “Unwrapped,” and other programs that show how everyday items, no matter how mundane, are manufactured. I’m also fascinated by cooking shows because of how the TV chefs can so quickly and effortlessly combine different ingredients to make something tasty (and yes, I realize that much of it is the magic of television). When I was young I would always take things apart, and ever since I can remember I’ve wanted to know how computers work. Even now, after years of computer science classes, sending an email or viewing a Web page still amazes me, when you think about all the technology that has to come together for these common tasks to happen in the fraction of a second.

Ironically, one of the key things I’ve realized over my years in college has been that I like the Internet more than I like computers themselves. I used to group the two together, since computers were the only way to access the Internet. But with the rise of smartphones, tablets, and innumerable other Internet-enabled devices, I’ve come to realize that what I always loved about computers was the connectedness of the Internet. When I’m offline, the computer feels radically less useful, since I can’t communicate with others and access the wealth of information freely available on the Internet. If the University of Virginia had offered courses or even a degree program in “Internet Science,” I would have studied that.

I also chose to major in CS because I wanted tangible skills. When you have Google and Wikipedia in your pocket, simply knowing something doesn’t mean what it used to. While creating my résumé, it was rewarding to be able to list the variety of programming languages and technologies with which I was familiar. Students in majors that emphasize soft skills don’t have the same luxury and probably rely more heavily on making a good personal impression, if they can even get in the door.

Like thousands of other college students last fall, I attended one of my university’s career fairs, filled with employers answering questions from prospective hires and collecting résumés. I focused on the engineering side of the career fair, but I was surprised — though not unpleasantly — to discover that “engineering” seemed to mean “software development.”

While talking to representatives from different companies, I quickly noticed that the same locations kept coming up time after time. Job prospects for engineering students who are willing to relocate to places such as Silicon Valley, New York City, Seattle, and Washington, D.C. are quite good. Northern Virginia, where I grew up, is the Silicon Valley for government contractors and is also a hotbed for IT jobs. I got my first “real” job as an intern at one of the largest government contractors in the nation, and I’m grateful for having grown up in an area that seems so far to be largely unaffected by the national economic downturn.

Between my major and my internships, I was able to schedule interviews at most of the companies I wanted. I learned the hard way that getting interviews and doing well at them are two completely different things. During my interviews, I have been asked programming questions, software development questions, logic puzzles, riddles, geometric reasoning questions, and database questions. Once I was even required to take an IQ test! I found myself wishing that I could just pass some software development test so I wouldn’t have to jump through the interview hoops repeatedly. I don’t know if any interview question can be a good indicator for how someone will perform at a particular job — does solving a brainteaser really show that I could work through a knotty programming problem? But I do believe that excellence is a habit and that hard work can more than make up for not being a genius. In my opinion, something like a GPA that is a cumulative score for years of hard work, plus references from professors who are familiar with what I’ve done, would be a better indicator of what I can do than the answer to any one question.

Luckily, I was able to get through the interview process, and I’ve accepted a job offer to work as a data analyst at a digital market research firm after I graduate in May 2013. Why not as a developer? I did apply for many software development positions, but ultimately none of those for which I interviewed appealed. Part of that stems from the fact that two of my internships were at software development firms, and I decided at the end of my last one that I didn’t want to be a full-time developer if I could avoid it. I’ve realized that although I do love computers, I don’t love programming. The college courses I enjoyed the most were the ones in which I have learned how things work, not those where I had to build things. I enjoyed analyzing examples of AJAX (Asynchronous JavaScript and XML, a set of Web development techniques) and was fascinated by all of its capabilities, but when it came time to actually write AJAX code, I found it frustrating and not particularly enjoyable.

However, being a data analyst is genuinely interesting to me, and I’m not just saying so because that’s the job offer I accepted. I see being an analyst like being a critic, but with data supporting your opinions. Essentially, an analyst is hired to look at data, think about it, and draw conclusions. I’ve been doing this for years on my own for my stock-picking hobby, using publicly available information to research potential investments. Also, recent events have led me to believe that data analysts are only going to become more important in the future. The poster child for the field is Nate Silver, the political blogger at the New York Times, who used data analysis to predict the results of the 2012 elections with a high degree of accuracy.

I don’t anticipate doing much programming, other than writing some bash scripts or SQL queries, but even still, majoring in computer science enabled me to land my ideal job. The company size, location, and other mundane aspects weighed into my decision, too, and I’m both confident that it’s the right position for me and looking forward to this next challenge.


Backblaze is unlimited, unthrottled backup for Macs at $5/month.
Web access to files means your data is always available. Restore
by Mail allows you to recover files via a hard drive or USB.
Start your 15-day trial today! <>

Comments about Thoughts on — and of — a Computer Science Major
(Comments are closed.)

David Weintraub  2013-03-05 14:57
My three kids are in or gone through college. They tell me one thing: College is nothing like high school. First, in college, no one cares if you show up to class or not. No one cares if you know the material. If you don't, it's your problem. If you don't care, you're not going to make it because no one else will care for you.

Second, you're no longer the smartest kid in the school. All of the smartest kids in their high school are now in your class. Get use to being merely "average". Get use to not automatically understanding everything instantly. Get use to frustration. Get use to doubt. It's what all of the other kids in your high school suffered through. Now, it's your turn.

My youngest is an engineering major and struggles with multiple Physics course, a Chemistry course, engineering courses, and DiffEQ. He's only a freshman. I tell him wait till next year when ha has to start taking the hard courses.
David Weintraub  2013-03-05 15:04
One field you might consider is Configuration Management (build management, release management). One of the things I like about CM is that I get to play with all the new tools, have to figure out solutions to various problems, and get to see the big picture of what is going on with the software. I do a lot of programming in BASH, Python and Perl, but as mainly for analysis and implementation reasons. I don't have to slog code all day.

It's not a well known part of the computing world and is greatly in demand. A top CM earns way more than most senior developers, and they usually have shorter hours. No one insists that CMs must burn the midnight oil. If you do your job right, you don't.

The only problem is that the worst shape the company is in, the more valuable you are. Topflight software shops probably don't need a CM. It's the problem children that need your shepherding. And, because of the company you keep (pun intended), you usually end up being the top technical person.
David Rabinowitz  2013-03-05 16:43
Wow, thanks for this advice David. I will definitely look into it. I have some experience with CM and know that software developers often have to do their own CM, but I had no idea that you could be hired to do that full time.
John C Beatty  2013-03-05 19:25
Re: "So what do you do when your instructor tells you to consult “Professor Google” for how to program in a particular language? And what’s the policy on using code from Web sites..."

Speaking as a (now retired) CS prof, I made it my practise in the first lecture of every course to raise this question, and then say "if in doubt, ask me — if that's not feasible (eg it's 3am the morning it's due :-), explain what you borrowed, used, or whatever, and from whom. The worst that can happen is that you lose a bit of credit - you can't and won't be accused of plagiarism."

Obviously you won't get any credit for just turning in some else's assignment along with the explanation of whose assignment it is. But you wouldn't expect to, and as a practical matter what's at issue is the odd library, or someone's mention of how to deal with some piece of the problem, etc.

Just giving credit where credit is due avoids any impropriety. Indeed, it's what profs do when they submit a paper for publication.

Finally ... as Newton so famously remarked, we all "stand on shoulders of giants."
David Rabinowitz  2013-03-06 09:25
I'm glad you always specified your expectations. The biggest thing I dislike is when professor give ambiguous rules. One of the worst is "You can talk about the thought process together, but the your answers have to be your own. But I encourage you to talk to you classmates." This has led to some awkward interactions while doing homework with others where we want to help each other but are unsure as to what we can and can't say.
J Emil Hunziker  2013-03-11 19:45
You can extend this thought beyond the college environment. Document your work. Maintain traceability from requirement to solution, including sources for your build and reasons for design decisions. Indispensable to answer the 5 Ws after the fact.
Interesting perspective. However, if your going into data analytics seriously, then I think your expectation of just a bit of SQL and some bash scripts is likely to be far from reality. The people heavily into data analysis are neck deep in R ( or Python. Again, if you're going deep into it expect to learn a lot of mathematics, probability and statistics too: that was what was behind the poster boy Nate Silver's predictions ... it's much deeper than simply opinion formed from looking at the data.

Best of luck ... it's a superb and fascinating area in which to work! I think you made the right choice ;)
David Rabinowitz  2013-03-07 16:46
Thanks for your words of wisdom. I will definitely keep that mind.
Dan Hardt  2013-03-10 19:28
David, something that impressed me immediately is that you know how to write in English (as opposed to R, LOL, etc.). I taught management courses in graduate business school and found that most--most!--students had not learned to write. Congratulations! It will help you forever. Try creating some poetry, too. It's a fun challenge.
David Rabinowitz  2013-03-11 06:56
Thank you Dan. I've always enjoyed writing and it also really helps when you have a great editor like Adam.
Warren Yoder  2013-03-11 21:09
Adam: an occasional tangent like this would be a great addition to Tidbits.
Adam Engst  An apple icon for a TidBITS Staffer 2013-03-12 06:49
Yep, we like bringing in additional voices and viewpoints, and that's something that the revenue from the TidBITS membership program is starting to make possible.
Genevieve Crabe  2013-03-12 07:15
I really enjoyed this article. I majored in Computer Science in 1976; second year in University is when I had my first exposure to a computer (mainframe, punch cards, etc.). I loved it, but it sounds like it's a lot more fun now.

I then ended up working for the same high-tech company for 30 years, and am now retired. I'm sure this doesn't happen much anymore.

Catherine  2013-03-13 01:15
Congratulations on a well written and insightful article.
David Rabinowitz  2013-03-13 06:29
Thank you!