Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I am currently majoring in Computer Science and minoring in mathematics (the minor is embedded in the major). The program has a strong C++ curriculum. We have done some UNIX and assembly language (not fun) and there is C and Java on the way in future classes that I must take. The program I am in did not use the STL, but rather a STL-ish design that was created from the ground up for the program. From what I have read on, the STL and what I have taken are very similar but what I used seemed more user friendly.

Some of the programs that I had to write in C++ for assignments include:

  • a password server that utilized hashing of the passwords for security purposes,

  • a router simulator that used a hash table and maps,

  • a maze solver that used depth first search,

  • a tree traveler program that traversed a tree using levelorder, postorder, inorder, selection sort, insertion sort, bit sort, radix sort, merge sort, heap sort, quick sort, topological sort, stacks, queues, priority queues,

  • and my least favorite, red-black trees.

All of this was done in three semesters which was just enough time to code them up and turn them in. That being said, if I was told to use a stack to convert an equation to infix notation or something, I would be lost for a few hours.

My main concern in writing this is when I graduate and land an interview, what are some of the questions posed to assess my skills? What are some of the most important areas of computer science that are prevalent in the field? I am currently trying to get some ideas of programs I can write in C++ that interest and challenge me to keep learning the language. A sodoku solver came to mind but am lost as to where to start. I apologize for the rant, but I'm just a wee bit nervous about the future. Any tips are appreciated.

share|improve this question

migrated from stackoverflow.com Mar 5 '11 at 2:18

This question came from our site for professional and enthusiast programmers.

    
"We have done some UNIX and assembly language (not fun) " - If you don't enjoy learning how computers work at a basic level then perhaps CS is not for you. That, or maybe the teacher was just bad. –  Ed S. Mar 5 '11 at 2:46
3  
@Ed -- I completely disagree. I hated assembly in college (and even Unix at the time, because my college courses never properly familiarize me with its advantages). But I have done higher-level development for years and love it. By your logic, the same thing could be said of a developer who hates dealing with UI, because so much software needs to be put in front of the end user. –  keithjgrant Mar 5 '11 at 3:11
    
@keithjgrant: Ok, fair enough. I suppose I personally just don't understand a programmer who doesn't enjoy learning how the machine he is programming actually works. –  Ed S. Mar 5 '11 at 3:15
2  
@Ed: yeah, I personally don't understand why anyone would want to program kernels ;) I'm just glad there are a lot of shoes to fill in the CS world. –  keithjgrant Mar 5 '11 at 3:19
2  
Your course does Unix, Assembler, Java, C and now C++ with STL - sounds like a great foundation for many software jobs. –  JBRWilkinson Mar 7 '11 at 0:51

3 Answers 3

First of all, when you apply for jobs you'll be applying for entry level jobs, which means the hiring companies will expect someone to not have previous experience. That's how we all start. Try to get an internship (or more than one) if you can.

Many interviews focus on the kind of data structures / algorithms / coding questions you can see in most books. Not everyone likes them. I don't particularly like them either. You may interview in multiple places, and do worse in some places, better in others, then you'll get a couple offers, and go on from there. In some ways, being fresh out of school is good. Over time you'll remember less, and believe me, I've interviewed my share of folks 10-15 years out of school who didn't remember any of it. In a way, being fresh out is useful in the interview process.

Don't worry too much about specific technologies or libraries and all that - most companies have their own coding practices, libraries, etc. and the larger companies have training resources to bring new folks onboard. The main distinction would be the C++ world vs. the Java/C# world.

I also think you're emphasizing STL too much. Most employers would care whether you understand the difference between a linked list and a vector, a tree map or a hash map. Knowing some more obscure stuff like Tries can help as well. But you usually don't need to know the details. You can just say in the interview "let's say that I have a library class for X".

Oh, and don't get scared by all the stuff you read on "interview websites" even for the companies you're interviewing for. Many of these questions are harder, out of context, or completely outdated.

share|improve this answer
    
+1: You might be asked hard questions on an interview, but it doesn't mean you are required to get the answer right to the letter. Sure you'll be better off when you do, but interviews are not exams with a simple pass/fail threshold. –  scrwtp Dec 22 '12 at 10:58

I think the first thing you should consider is what do you really see yourself wanting to do in the industry, and there is really no assuming what you will see in your interviews with any respective company. Sure, you might hear about Microsoft's or Google's or Facebook's interview questions, as they are famous companies with famous interview processes, but they keep coming up with new questions anyway.

Interviewers look for different things about you as a person - problem solving skills, an ability to learn, self motivation, passion, general programming aptitude, that you're not an a-hole and can work as part of their team. As a college hire, interviewers will not have much expectation of you aside from what you express in your resume (and maybe cover letter), so if you have any side projects or internships/co-ops, that would be good too.

On a technical level, you can probably expect to be given problems to solve and code, be asked about algorithms and data structures, and maybe even some puzzles. Some especially bad interview questions will be mostly reciting definitions (i.e. "What's serialization?"). When I ask technical questions I try to come up with or design a problem that isn't just a 'you know this or you don't' type of question, as those are not very fair questions of gauging knowledge and skill. I use questions that can be answered on a very high level, but can be coded on an even deeper level (i.e. less hand-holding necessary and lets me determine your depth of familiarity, knowledge, and problem-solving ability). When you interview, don't be too nervous if you are given something unfamiliar, just collect your thoughts and talk it through.


When I interview fresh graduates, or soon-to-be grads, I certainly don't have the same level of expectation from them as I would of someone who had more experience. Experience will bring with it a depth of knowledge that should make you more comfortable in an interviewing setting, but it's understandable if you are fretting your current situation.


When I first interviewed for a job in my senior year, the company I accepted a position with gave me what you'd consider a softball interview - it was more of 4-5 people talking to me, not really focusing on my coding, but wanting to know how I was in terms of personality, friendliness, and communication skills.

I interviewed with a company a day before that company, and they asked me questions about the software development process, how I would handle situation X, and a balance of getting work done while keeping customers happy. It was certainly an interview where I didn't know what they were expecting from me.

Later on, when I had more experience, I was asked far more technical things in interviews, like implementing smart pointers in C++, implementing the observer pattern, doing some web stuff...etc.

And again I can not stress enough - don't be a jerk.

share|improve this answer

@Ed -- I did not say that I did not enjoy learning the fundamental building blocks of computers at all; I simply stated that I did not enjoy writing programs in assembly. Learning how the computer functions from the lowest of abstractions was amazing and eye-opening. In that class we learned how the machine adds, subtracts, multiplies, and divides which made me realize just how awesome computers are. Taking a simple division problem like 18/3 and doing it by hand took me nearly 45 minutes yet the machine does it in nanoseconds.

@keithjgrant -- thanks for understanding

@Uri -- thanks for your reply. It's assuring to know that people forget the school stuff but can still make it. Like the old saying goes: "If you don't use it, you lose it"

@birryree -- I definitely have the "don't be a jerk" part down (I'm not an a-hole either) That's one plus in my arsenal. I really like the interview process for your first job that you took. As far as internships go, I live in SW Florida (what seems to be the retirement capital of the USA) so there is not much in the field of CS. A computer scientist around here is similar to the Geek Squad. Having a wife, 15 month old, and a full time job it is hard to pursue anything extracurricular although I really wish I could. Microsoft has an office in Tampa which is about an hour away. Sometime in the not so distant future we plan to move either to NJ (very close to NYC) or the Research Triangle in NC. My sister-in-law works in the city for a television company and has acquaintances at Google and Microsoft. The contact at Microsoft told her the other day he would gladly setup a meeting and perhaps an internship with me.

share|improve this answer
1  
Please post responses to comments or answers as comments. Don't post responses as an answer because the responses don't answer the original question. –  whatsisname Mar 6 '11 at 15:59

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.