Thanks for posting! Other people probably have some more obvious questions, so I’ll give you one that’s a little more esoteric. One of the things that is very appealing to me about Western Governors’ University (WGU) is that they do not have defined course lengths like most schools and students can proceed at their own pace through different kinds of material. E.g. one student might be able to get through two semesters of Calculus in four weeks but need a whole year to master the material in Chemistry 1.
I’ve taken a few “online” courses and the thing that I hated most of all was the weekly “grind” schedule. Papers due every few days, week after week, in lockstep, with very little room to account for differences in how quickly different students could master the material. I did more poorly that I could have because of that rigid schedule.
I visited the University of the People website, and there was a lot about online classes, but I didn’t see anything about this. Is UotP something that I can proceed through flexibly, submitting projects and taking exams to fit around my schedule and pace of learning, or is UotP something where I’m locking myself into a one essay a week or two exams per month type grind?
Yes, there would be a problem with credit transfers or graduate admission to other US universities. DETC accreditation is legit but is associated, in the US, with Trade/Tech schools. Useful for employment if that’s what the employer is looking for, not so much for further academic advancement.
I’ve been programming for 45 years, and have also taught Pascal, PL1 and Assembler. You can learn the basics of a language in class, but learning how to program involves doing it. Learning how to program well involves someone looking at your code and telling you “don’t do it this way, do it that way and here is why.” That is something you don’t get out of self-study. Your code may work (at least for your test cases) but it might be a tangled mess doing something in ten times the number of lines you can do it in if you knew what you were doing.
What you should come out of school with is not just a set of languages you know, but the ability to learn new languages quickly. Compiler classes are good not because many people will write a compiler, but because they help you understand the structure of a language better. OS classes let you know what is really going on inside the box. Ditto architecture classes. I’ve also taught data structures, and really understanding them to the level I could teach it has helped me tremendously ever since.
Hell, I’ve even used a bunch of graph theory.
Most companies don’t invent their own languages, but they do invent their own processes consisting of bought or internally developed packages tied together.
Many companies would like for universities to teach the packages they are using today, in order for students to hit the ground running. Which works until they switch and hire a bunch of people who know the new package.
Learn how to learn, and you can handle the massive changes that will come the next 40 years, which will probably make the changes I’ve seen look like nothing.
Here’s the problem. The job market is competitive. If one of the applicants has a degree from a recognized university, and the other from some “questionable” source, guess who gets the job? The good jobs will always go to the better qualified/educated person.
For my company you won’t get in the door unless you go to the right university. (And have the right GPA.) After that the university doesn’t matter as much. But someone from the University of the People would not only not get the job, he or she wouldn’t get the interview.
Like Joel, our language is based on an existing language, and written in an existing langue. Unlike Joel, we haven’t made the step from an interpreted sort-of-language to a compiled language.
I don’t know if I’d say that Computer Science is mostly a theoretical discipline. A lot depends on your particular university’s slant on it- my CS department (Texas A&M, 1996) grew out of the industrial engineering department, so it had a fairly strong engineering mentality, and not so much of a theoretical bent (although we did take a LOT of theory). Other schools had the CS departments grow out of the math departments, and have a really heavy theoretical, mathematical slant. Still others had it grow out of the EE department, and have an engineering type slant like our IE-derived department did.
Of course, they’re all accredited, so they teach more or less the same basic stuff, but it does affect the professors who are hired, what they consider important, and the sort of layout of the degree. Our program had a lot of emphasis on practical programming- lots of applying of algorithms to real-world problems and the like, but not so much in the way of formal languages, proofs, etc…
Beyond that, in my experience, the computing world shakes out a lot like this:
Academic purposes: Primarily CS degrees.
Serious commercial tech and coding (microcode, compiler design, OS coding, etc…) is all done by CS/CE grads and EE types.
Once you get into less technical coding, it’s still a lot of CS types, but with some IT/IS grads thrown into the mix. A lot of higher-end system administration is the same thing- you’re unlikely to find a serious UNIX admin at a big company who has a MIS degree.
The only place where the IS grads start to get dominant is more in the product support / maintenance coding realms, and in the various analysis roles.
But having a more technical degree isn’t likely to HURT you if you’re going for those positions; the assumption is that if you can hack the CS stuff, you can fairly easily hack the business side of things, which in my experience is the case. (my MBA was drastically easier than my undergrad CS program, and my MBA was from a top 50 program)
I have a BS in Computer Science and a graduate certificate in Information Systems (IS). CS and IS go great together - my CS degree was largely theory, and IS was very business oriented. It had a little programming, yes, but most of it was about how do you develop requirements documents, how do you talk to customers about requirements, how do you decide what to do if you have an unreasonable deadline, how to evaluate training requirements, what the social implications of producing an insecure product are, and a lot of those little things about surviving in a software development environment that CS just doesn’t teach you. Sometimes you just have to compromise to get something out the door. Also, when you prioritize, you need to consider what the most important things are. And that requires social and business sensitivity. Are you making a demo for bigwigs that needs to look flashy but the numbers don’t all have to come out right yet? Are you rolling out a financial product that will be used immediately and the numbers have to be right, even though a few screens look awful?
Oh, I know, believe me. I have a BS in Computer Science, a MS in Information Technology and Management, and a MBA. I have a really good handle on how all 3 fit together.
The point I was trying to make is that in my experience, to bridge the business/technical gap, you have to have something of both. You can’t just be a non-technical BA, and you can’t just be a technology wonk either. But if you have to pick a place to start, the technical stuff is far harder and more demanding than the business side of things.
As someone who both works on an engineering team and has been responsible for interviewing and hiring decisions, the answer to your question is: the one with the most interesting Github account who does the best in the technical interview.
I mean, I wouldn’t underestimate the value of having a degree. I have a B.S. in Computer Engineering, and I learned a hell of a lot getting it – including how to work very hard under a lot of pressure, which is something purely self-taught individuals often lack. But when I’m reviewing resumes, prior work experience and open source contributions are the first things I look for. Anyone with either a lot of serious professional work under their belt or a lot of serious open source work gets called in for an interview, period.
The only case where I look at their education is if they’re missing both items above, i.e., they’re a fresh graduate looking for a rookie job. In that case, having a degree from a good university might get them an interview. (Although really, in this day and age, I’m still going to be thinking to myself: “No Github page? No personal projects?”)
I’m not exaggerating the importance of open source presence. I got my current job by being headhunted through Github – their recruiter found my projects there, thought I’d be a great fit, and asked me if I’d be interested in jumping ship. I was halfway through the interview process before they even asked to see my resume, as an afterthought.
And FWIW, a degree by itself is no guarantee of competence. I recently turned down a candidate who had a Master’s degree in Computer Science from an excellent school, because (among other things), he had been unable to characterize the asymptotic performance of two algorithms he was devising in a whiteboard interview. They were almost canonical cases: one approach compared every element in the space to every other element, and the other merely performed a comparison sort followed by a single pass over the space. I would expect an undergrad to be able to say O(n^2) and O(n log n), respectively.
(To make matters worse, his degree was from my alma mater! Embarrassing.)