Questions to Ask University CS Departments?
egarrido16 asks: "I will be visiting numerous undergraduate colleges over the next several months and meeting with the chairpeople of the computer science departments. I need to come up with some questions to ask them so that I can evaluate their methods of teaching CS (i.e. 'Does this college believe programming is a fundamental or is it more of a tool?'). Reflecting upon your experience, what questions do you think would be necessary to ask to decide what the educators feel is important in a CS curriculum?"
Can I see a copy of your curriculum please?
Yours Sincerely, Michael.
The most important question you can ask is:
"Does your school have different curriculum tracks for software engineering and computer science"
Learning the basics of how to program will be the same for both tracks, but the 3rd and 4th year classes should be very different. Computer science, is a SCIENCE, while software system development is something else entirely. Schools that don't recognize the difference are so out of touch that the knowledge they teach you will not be applicable in the real world.
Software is no longer just a tool for mathmaticians to solve complex equations. Unfortunatly, I think many CS professors are still locked into the scientific mindset when it comes to computers.
Make sure you ask some questions about your future, is it possible to get a sysadmin job on one of the comp. sci. computers to get real world experience? How good is their placement after graduation? How quickly do their graduates advance in their positions after finding employment? What projects is the department involved in that will bring prestiege to the university? What projects can I as a student get involved in that I could put on my resume? What is your stance on extra-curricular projects?
I put that last one in because I started a MUD at my university, which was a great learning project programming wise. I never got very many people visiting my mud, but I did enlist a lot of developers to help put the project together. My school shut me down when the university administrator did a port scan of every IP under his control and found it. He considered it a security breach and dangerous, no matter how beneficial the experience was to me in learning C, C++, Linux, registering my own domain (this was before they had the nice web interface), and administering a Red Hat box.
How can you get real world computer experience while spending 4 fine years at their institution? And how will they provide you a better chance at getting a well paying position after school?
I haven't lost my mind!
It is backed up on disk...somewhere...
These kinds of skills would help tremendously in the work force and in graduate school. You always here complaining about coders not knowing how to comment code. Not being able to stick to schedules. Not being able to write good documentation. Not being able to attain correct specifications from the customer. Etc, etc, etc.
Some of the things that make a computer unuseful:
Most important of all computer counts really mean very little in terms of your education. Theory doesn't always need you to be sat a keyboard to understand it.
So, start asking about related things. Are you going to want some work experience? If so, does the department have industry links, and with who? How about on campus work - do they have openings for students to do some tech support? My college has a couple of student computer reps, who do some websites, maintain a few machines, help out the paid staff with admining etc. The experience I've got with doing this was looked upon very favourably by the company that are employing me this summer. No matter which area of IT you want to go into, experience is a big help, so does this place help you get it?
Finally, ask about the facilities. How many computer rooms do they have, and what stuff do they have on them? What centralised 'Nix facilities do they offer? Ethernet to you room is very nice, so do they offer that, and if so what restrictions are placed on it (no webservers? low bandwidth limits?). What about their central web hosting, can you do much with that? If not, are there any other boxes you can use for any dynamic content you want to play with?
Oh, and while you're on campus, go look round the other facilities too. Places to hang out are important, as are sports facilities, on campus shops etc. Also, speak to the students as well as the tutors, find out all you can
This post will enter the public domain 70 years after my death, unless Disney buys another extension.
Ask whether the course is theory or application oriented. In my experience, there are two approaches to teaching computer science out there.
The first is what I call the "academic" method. You're going to learn lots of theory under this method, but are left up to your own means to figure out specific tools such as the Windows API.
The second I like to call the Trade School approach - it's probably what's being taught at your local community college, and it's pretty much the opposite. You'll be an expert at VB by the time you get out, but (from what I can see) will probably also be left without any concept of things like functional programming or automata theory or what have you.
A catalog can tell you without a doubt whether or not you're going to get the Trade School approach - there will be a separate class for every programming language the department ever uses, and most every class will look like it's trained towards giving you job skills. However, there are a lot of CS departments that look like they are academically oriented when they really aren't. You'll sign up for a course called Computer Graphics that claims in the catalog to go through the basics of how to really do graphics programming, but when you finish the course, you'll realize that everything you just learned over the past four months you could have just as easily picked up with a few days of free time and a copy of "Teach Yourself OpenGL Game Programming In [lessons | ]" and don't have a clue what the math behind perspective projection looks like. (My experience.)
Decide whether you're looking to be a grunt coder, a software engineer, an academic or researcher, or a Web Developer/NTadmin/networking guy/etc. If you're looking for the latter, don't even waste your time with college unless you really honestly want a bachelor's degree or a liberal arts education or what have you, because with most of those a trade school and some certifications will give you every bit as good of a preparation for your carreer as a BS, and you'll probably still have to get the certificates after you have your BS anyway. For a software engineer or academic, go for the academic approach. If you want to be a grunt coder, you can probably get away with any of the above, so pick which one looks more fun.
I could not agree with this more. As a recent entrant in the SW Engineering field, I would also say that one of the most important things the curriculum should stress is all of the parts PRIOR to actual coding
I know this horse has been beat to death, but so many courses do not even focus on requirements analysis. For a Software Engineer, this is the foundation of all work you will do. You want to be sure they give you hands on experience in breaking requirements down to the atomic level. Don't forget, these requirements are a contract between you and your employer, so make sure they are sane.
Next, you want them to teach current methods of design -- the part where you integrate your many, hopefully simple by now, requirements and turn them into a working concept.
Be sure you get experience in creating all types of design artifacts: sequence diagrams, detailed design documents, and requirements to design mapping. This is the stuff you will be expected to do in your career. It's best to know as much as possible about it before you enter the workplace.
The other phases (implementation, testing) are important too, but I've found that a little understanding in the early phases will count for a lot later on.
Try telling Linus Torvalds ANSI C is lame.
I second vsync's notion that those who use higher level languages can never use them properly because they do not know what these higher level languages *DO* for them
I have run into it time and time again. Decades have gone by and still the most rigorous CS departments do some of the very same things. Like, write a language and a compiler for that language. People who know how to write their own language and then a compiler for that made up language often find it very easy to pick up new things.
I can't believe for a moment that one learns "lame ANIS C," for real, then goes on to find Java difficult to master. I mean, by no means is it simple, and the strategy for using that is different, but Jesus - grab a few books and crank out some code if you want a Java job.
If I had to assign aspiring students to do something it would be this: Write a patch for a Linux kernel (or any Open kernel), write a user land utility to interface with whatever you patched into the kernel, the write a daemon to interface with the kernel hack you just wrote and then manage that daemon remotely from the said user land utility. Man, if every "programmer" did that as an exercise, we would reduce sucktitude 90%.
Then try to control the said daemon from a Java project - just for fun, to learn it.
One thing about "LAME C" versus C++ or Java, at least C doesn't change forms every 5 minutes. Much less with C++ now, but Java has had a myriad of APIs since its birth and it really get annoying after a while.
Good luck man, because if your C didn't teach you C well enough (as exemplified by referring to it as 'Lame,' you need to take it upon yourself to make sure you know systems, bottom to top, because when and if you do learn Java, chances are you wont be very good at using it. For all the rigors or my own education, most of your usefulness in corporate America will come from things you taught yourself or pickup from a mentor. School apparently doesn't do much for your starting salary, as freshly gradated students usually get paid less than everyone else. It's experience and aptitude that changes that - not "I TEWK A KEWL KLASS A THE UNIVEHRCITY AND TEHY TEECHED ME JAVA AND MI SI BETTAR!"
Legalize the constitution. Think for yourself question authority.
For whatever else I learned in college, I learned the most from the capstone courses I took my senior year. I was an ECE at CMU, but took a capstone in ECE and the equivalent in CS. Both were big project courses (Real Time Computer Controlled System Design in ECE and Operating Systems in CS) and both nearly killed me. But I can honestly say that I learned so much by being forced to work on a semester length project.
If you go somewhere and ask about a capstone course, and they look at you funny, ask if there's a course that you take that your whole academic career has been preparing you for, or some sort of big final project where you have to creatively use your skills as a scientist and as an engineer. That's what people do out in industry, anyway, so it should be part of the curriculum.
I'd also ask about what faculty research that the department head is particularly proud of. If its something that interests you, this place would probably be a good fit. If not, you might want to look elsewhere.
Outside of a dog, a book is a man's best friend. Inside a dog, its too dark to read.
What I have noticed here is that there is much emphasis on theory,
What is old is new again... We had this debate in '83 and '84 at UC Santa Cruz. The administration was theory oriented, the students wanted some more practical classes. I was one of the leaders of the student movement at the time.
Of course, the department was correct.
General Relativity: Space-time tells matter where to go; Matter tells space-time what shape to be.
Most ppl graduating don't know how to use emacs.
well there's a refief.
acme & wily == the future
There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
There's a lot more to life than semester-hours of credit, dude. I hope you valued the time that you spent at your internships and that you got some personal satisfaction out of the work you did, because in the end that's what really matters.
OK, you probably want your future employers to value your internships too. But IMHO that's secondary to you enjoying them. Because if you don't enjoy that kind of work, you gotta wonder why you took the internship or why you're even taking CS classes. The money?
(if you already have a decent amount of experience)
FOR CHRISSAKES CAN I SKIP THE INTRO COURSES?
be ready to provide documentation of prior experience. If you make the appeal to the dean and it is not some asshole college just after your money, this might work.
It's 10 PM. Do you know if you're un-American?
If they answer with a list, run away.
Don't go to a school that teaches languages, go to a school that teaches concepts. You can learn the languages from a book.
I am very happy with the education I received at Rose-Hulman, and recommend that you check it out.
Joe
Joe Batt Solid Design
What is the purpose of talking to these educators? Are you a prospective student or are you interested in finding the current state of CS education so you can draw up some best practices docs?
As a potential student, I'd look and see what kinda output the students are producing, particularly in 300 tests are generally the closest to 'reality'
my sig's at the bottom of the page.
Given those arguments, I think some important questions to ask are a) Do you allow UGs to take grad classes? b)What are the opportunities to do research as an undergrad? c)(Especially if you might consider grad school)What percentage of your UGs go on to grad school, and where do they get accepted?
Good luck.
Reinforcing the notion Java isn't everything:
http://www.theregister.co.uk/content/4/25380.html
C++, SQL, Unix and C are key skills - still
By John Leyden
Posted: 21/05/2002 at 18:35 GMT
Fewer IT jobs were advertised last quarter than a year ago but programmers with key software skills are still very much in demand.
That's the conclusion of a study of the UK IT recruitment market by CWJobs, The Register's recruitment partner.
CWJobs compiled a very big list of all the software skills asked for in job ads, published online and in print IT rags, and the broadsheet nationals, in Q1.
Experience in C++ (mentioned in almost 24,844 ads in Q1 2002), SQL (23,134), Unix (21,079) and C (20,532) were highly prized.
Requirement for C skills is holding up but mentions of other once sought-after skills was down 50 per cent from Q1 2001. This reflects an overall slowdown in the IT sector, CWJobs reckons.
Oracle, Win NT, Visual Basic and Java were each mentioned in more than 10,000 ads. However, demand for Java skills has slipped markedly from 40,681 mentions in Q1 2001 to 14,566, a decline of 64 per cent.
The number of jobs advertised last quarter is lower than that advertised in Q4 2001, but this may be affected by seasonal factors in the job market.
Online ads account for the vast majority of ads in Q1, reflecting a long-term trend in the UK IT jobs market. Which is nice. For CWJobs. For Computer Weekly, from whence it spawned, it's crap.
Legalize the constitution. Think for yourself question authority.
and I was left not knowing Java, only lame ANSI C. I got turned down for several internships for simply not knowing Java.
If you have taken CS classes and learned C (enough to know it), you must be able to easily learn any procedural or object-oriented language. If you can't, you are stupid and this is your problem.
Contrary to the popular belief, there indeed is no God.
I completely agree with people that ridiculed you.
Contrary to the popular belief, there indeed is no God.
Funny, 'cuz my University's computer science department is also commercially funded (CSU Chico; funded in particular by HP and Sun, among others), and we don't have the problems you discuss -- in very few cases do any classes require anything not included in the Linux systems CSLUG puts together.
I don't think it's a problem with corporate funding, but rather with how your department is run.
(For that matter, though, I disagree with your first point -- I don't go to class to be yammered at about ethics; rather, I go to class to learn about OO design, or whatever the course happens to be about. I think that having an "emphasis on ethics" is bullshit -- you can't train ethics into 30 people at a time; people are ethical or they aren't, and classes or tests will have no effect on it whatsoever other than wasting students' valuable time).
(* however it should be noted, while we have one of the best known nursing schools in the US, our CS PROGRAM SUCKS. 2 or 3 good professors, the rest are hacks(not in a good way). *)
Oh so what. Go for the babes alone. It will improve your social skills, and maybe other skills in the process. "Soft" skills are just as important, if not more, as skills in Reverse Integral Recursive Multi-Linked B-trees blah blah.
Table-ized A.I.
Let me get my word in before this disappears from the front page into the archives.
:)]). It's also nice to get some good liberal arts courses too.
If your looking to learn CS, then ask all the questions posed here. If you already know anything about CS (above programming with data structures), then no university is likely going to stimulate you academically.
What you then want to look for are the connections that schools have with various Internship programs and/or research assistantships. There are some amazing undergrad internships (IBM's Extreme Blue, Microsoft's Internship, FBI Honors Intern, NSA Intern, etc.). This is what will take you to the next level.
BTW: Lots of people will say partying is important, and well, that's only partially true. I would recommend staying away from overly technical places (unless it's something like MIT) so that you can meet a wider variety of people (especially women since CS women are, well, let's not go there [with the exception of any CS woman who may possibly reading this of course
int func(int a);
func((b += 3, b));