Thread: What concepts does CS student learn that will be very crucial in programming world?

  1. #1
    Registered User
    Join Date
    Apr 2015
    Posts
    180

    What concepts does CS student learn that will be very crucial in programming world?

    I need to have the bigger picture in my head. I took a look at books of programming interviews and they focus a lot on algorithms and data structures. These concepts are one of the most important for a CS student? Is that knowledge used in the real world? Or they just ask that in programming interviews because they feel its good way to evaluate someone?

  2. #2
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    27,183
    *moved to General Discussions*

    Quote Originally Posted by telmo_d
    What concepts does CS student learn that will be very crucial in programming world?
    The concept of abstraction and the ability to traverse different levels of abstraction is among the most crucial concepts and skills.

    Quote Originally Posted by telmo_d
    I took a look at books of programming interviews and they focus a lot on algorithms and data structures. These concepts are one of the most important for a CS student? Is that knowledge used in the real world?
    It depends on what exactly you end up doing. You may find that you do not need to go into the nitty gritty of these simply because you will be using libraries or built-in constructs from higher level languages that abstract away these for you. However, abstractions leak.

    Quote Originally Posted by telmo_d
    Or they just ask that in programming interviews because they feel its good way to evaluate someone?
    One school of thought is that it is good to test simple algorithm and data structure knowledge and skills to separate those who might be able to program from those who cannot program to save their life, after which other approaches can more clearly determine if the candidate is skilled (e.g., able to solve problems beyond his/her current expertise by looking things up, etc) and a good fit for the team.
    Quote Originally Posted by Bjarne Stroustrup (2000-10-14)
    I get maybe two dozen requests for help with some sort of programming or design problem every day. Most have more sense than to send me hundreds of lines of code. If they do, I ask them to find the smallest example that exhibits the problem and send me that. Mostly, they then find the error themselves. "Finding the smallest program that demonstrates the error" is a powerful debugging tool.
    Look up a C++ Reference and learn How To Ask Questions The Smart Way

  3. #3
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Angola
    Posts
    8,445
    Quote Originally Posted by telmo_d View Post
    I took a look at books of programming interviews and they focus a lot on algorithms and data structures. These concepts are one of the most important for a CS student?
    Indeed they are. They'll make a great deal of your education.

    Data structures represent different arrangements of data storage and manipulation. And data is the chemical element of programming. A good grasp of different data structures will allow you to choose the ones that will better fit your data for any given problem.

    Where data structures represent the constituents of programming, algorithms represent its methodology. They are your window into the different patterns of reasoning through problems. Your program by studying a problem and arranging a solution by delineating adequate data structures and working on them through algorithms.

    But the algorithms you learn, are actually just known patterns to common problems that are worth studying. They are like well know mathematical formulas that you must study, but alone they can't solve mathematical problems. Anything you do in a computer program is part of an algorithm. So your programs are in fact composed almost entirely of algorithms designed by you, and only a tiny fraction is actually taken from the well-known algorithms. However, their general applicability and the fact they are ubiquitous in all of computer programming, make them valuable in the sense you don't have to reinvent the wheel.

    By understanding the value of data structures and the mechanics of algorithms, you are better equipped to reason through problems and implement all sorts of solutions. And that's where the concept of abstraction laserlight mentioned comes in. By dominating these two important tools, the powerful notion of abstraction will come to you normally (almost without needing anyone to teach you about it). Computing problems are usually complex problems. You will have a need to break them down into more manageable smaller problems and build a solution out of its parts. Abstraction, as a generic definition, will allow you to define a cohesive tree of smaller problems that you can work through effortlessly in order to reach the solution.

    Quote Originally Posted by telmo_d View Post
    Or they just ask that in programming interviews because they feel its good way to evaluate someone?
    Once you get a degree in CS with honors, you'll find much of the interview material pathetic and often even without a reason. Something only someone with barely a grasp of computer programming would think of writing down. Industry interviews are not a good indicator of the actual needs and requirements of the industry. But there are some companies that do it right. Not just that many though.

    And yet, algorithms and data structures must indeed be a part of any good interview. They shouldn't be used exclusively and they shouldn't be used as a means to immediately discard a candidate. But they should be used as part of a larger whole of questions that will help realize the level of exposure a candidate has had to programming. A good interview will very probably not ask you to write a bubble sort algorithm (no one should care about it), but they will want you to talk a little about the differences between a bubble sort and a quick sort.

    More important than your ability to shred over these things without effort, however, will be your ability to reason and talk them through. What you will experience in almost any company that takes software development seriously is that they are more interested in testing your communication skills and how well you reason through difficult problems. Your practical test score may have scored low. But the company may still want to hire you and go through filling the gaps in your knowledge if you demonstrate capacities in the two most difficult arts of computer programming: your ability to communicate in with your colleagues is essential if functioning as a team. And your ability to reason through problems will be your second most valuable asset. These things you will not be taught in college. However, they will be made easier to acquire if you have a good grasp of CS.
    Last edited by Mario F.; 09-11-2015 at 12:22 PM.
    Originally Posted by brewbuck:
    Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

  4. #4
    train spotter
    Join Date
    Aug 2001
    Location
    near a computer
    Posts
    3,868
    Quote Originally Posted by Mario F. View Post
    A good interview will very probably not ask you to write a bubble sort algorithm
    When I interviewed graduate programmers I used to ask them to write a Fizz Buzz app, in any language or pseudo-code they liked.
    [Fizz Buzz : print the numbers 1 to 100. If the number is divisible by 3 print 'Fizz' instead, divisible by 5 print 'Buzz' instead and divisible by both print 'FizzBuzz' instead]

    No graduate got it 100% right. One who claimed he had a Masters could not even start...

    I hired the one who got very close, was very disappointed he got it wrong and was genuinely interested to know how to fix it.
    "Man alone suffers so excruciatingly in the world that he was compelled to invent laughter."
    Friedrich Nietzsche

    "I spent a lot of my money on booze, birds and fast cars......the rest I squandered."
    George Best

    "If you are going through hell....keep going."
    Winston Churchill

  5. #5
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Angola
    Posts
    8,445
    Quote Originally Posted by novacain View Post
    When I interviewed graduate programmers I used to ask them to write a Fizz Buzz app
    We don't include FizzBuzz-like questions in our interviews. We usually screen a small amount of candidates when we hire, since we run job ads for a very limited time, so that's one reason why I never felt the need. We just go straight to problem solving code. Usually one simple, one very hard and one without an actual solution.
    Originally Posted by brewbuck:
    Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

  6. #6
    Registered User
    Join Date
    May 2003
    Posts
    1,619
    The most important thing is to be able to take a list of requirements and know how to implement them. Knowing algorithms and data structures is good - you should at least be familiar with what they are - but there's a fairly shocking number of people who get CS degrees and can't actually write a real program, not even a trivial one like FizzBuzz, which is a handful of lines of code.

    A lot of people come out of programming courses knowing a programming language, but not how to program. Don't make the mistake that many do of thinking they are the same thing. Knowing at least one programming language is necessary to be a good programmer, but it's not sufficient, any more than knowing English is sufficient to make one a good novelist.
    You ever try a pink golf ball, Wally? Why, the wind shear on a pink ball alone can take the head clean off a 90 pound midget at 300 yards.

  7. #7
    Registered User MutantJohn's Avatar
    Join Date
    Feb 2013
    Posts
    2,665
    Quote Originally Posted by novacain View Post
    When I interviewed graduate programmers I used to ask them to write a Fizz Buzz app, in any language or pseudo-code they liked.
    [Fizz Buzz : print the numbers 1 to 100. If the number is divisible by 3 print 'Fizz' instead, divisible by 5 print 'Buzz' instead and divisible by both print 'FizzBuzz' instead]

    No graduate got it 100% right. One who claimed he had a Masters could not even start...

    I hired the one who got very close, was very disappointed he got it wrong and was genuinely interested to know how to fix it.
    This is so weird, I just got done interviewing with a company who honest to God asked me to do that too O_o

    Only it was in JavaScript so it was awesome and very easy to modularize and do things like, "we can improve this by instead passing a generic predicate function and blah blah blah."

    I don't know if I did it wrong or not but my check was basically,
    Code:
    for ( var i = 0; i < n; ++i )
    {
        if ( i % 3 === 0 && i % 5 === 0 )
            ....
        else if ( i % 5 === 0 )
            ....
        else if ( i % 3 === 0 )
            ...
         else
             ...
    }
    Granted, I don't think they asked me to do the whole divisible by both thing but they did ask me to make it more generic which was cool because a lot of my C++ experience really helped. They were also excited that I was excited about meshing. We'll see if I get the job lol. 3 interviews, man; that's a lot!

  8. #8
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,608
    Most important aspect IMO: how to work on a team. No one cares what you know if you are a jerk to work with. Nothing kills a team more than one bad member with a poor attitude. After that it comes down to what has been mentioned in this thread.

    But it is very hard to hire someone with personality issues even if they are a genius. 9 times out of 10 that comes back to bite you. They don't have to be super cuddly teddy bears because no engineer is. But if they exhibit signs of being hard to work with, cannot handle criticisms of their code within the interview, etc. that person would receive an immediate no from me.

    Very few jobs allow you to work alone all the time so a team mindset is crucial to getting most projects done.

  9. #9
    Ticked and off
    Join Date
    Oct 2011
    Location
    La-la land
    Posts
    1,728
    Quote Originally Posted by Mario F. View Post
    one without an actual solution.
    I love these. I'm bored. Have any examples?

    Unless, of course, you mean problems that cannot be solved within the constraints given. Those are uninteresting, like asking to measure the circumference of the world using a nail file, a shovel with a broken handle, a used napkin, and a dried out red sharpie. Uninspiring, demotivational, just tricky. There's no point, nothing to gain by solving those.

  10. #10
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,608
    Quote Originally Posted by Nominal Animal View Post
    I love these. I'm bored. Have any examples?

    Unless, of course, you mean problems that cannot be solved within the constraints given. Those are uninteresting, like asking to measure the circumference of the world using a nail file, a shovel with a broken handle, a used napkin, and a dried out red sharpie. Uninspiring, demotivational, just tricky. There's no point, nothing to gain by solving those.
    I also detest 'Google' questions. Ones that could be answered with a simple Google search. Is that really who you want to hire? Does it really matter if the person knows X right off the top of their head? Is it truly possible to remember every key concept in programming when there are so many areas and variations and languages? I would say no. Stop asking Google questions and ask questions that mean something.

    After the technical stuff is done I usually resort to some of these:

    How do you go about learning a new code line?
    How long does it take for you to ask a question if you don't understand something or are stuck?
    Are you an 'ask for forgiveness' person or an 'ask for permission' person?
    Name one trait about yourself that you do not like or would like to work on?
    What are your strong points?
    What are your weaknesses?
    What does your ideal team look like? How does it function?
    In your opinion what is the single most important aspect to getting a project done on time while maintaining quality.
    How do you deal with difficult team members?
    What do you do if you cannot get along with a specific team member?
    In your opinion, are you a difficult person to work with?
    Do you require a lot of structure in your work or do you function better in a more fluid environment?

    Even if the tech is there if I don't like the answers to the above or they don't fit with our environment I usually pass. Some people are great but they might not be great for your team.
    Last edited by VirtualAce; 09-12-2015 at 11:18 AM.

  11. #11
    [](){}(); manasij7479's Avatar
    Join Date
    Feb 2011
    Location
    *nullptr
    Posts
    2,656
    Quote Originally Posted by MutantJohn View Post
    I don't know if I did it wrong or not but my check was basically,
    Yeah, you did it wrong.
    Not technically wrong, but even the guy printing out "1\n2\n\Fizz\n..." manually would be technically correct.

  12. #12
    and the hat of copycat stevesmithx's Avatar
    Join Date
    Sep 2007
    Posts
    587
    Quote Originally Posted by VirtualAce View Post
    How do you go about learning a new code line?
    How long does it take for you to ask a question if you don't understand something or are stuck?
    Are you an 'ask for forgiveness' person or an 'ask for permission' person?
    Name one trait about yourself that you do not like or would like to work on?
    What are your strong points?
    What are your weaknesses?
    What does your ideal team look like? How does it function?
    In your opinion what is the single most important aspect to getting a project done on time while maintaining quality.
    How do you deal with difficult team members?
    What do you do if you cannot get along with a specific team member?
    In your opinion, are you a difficult person to work with?
    Do you require a lot of structure in your work or do you function better in a more fluid environment?
    No offense, but I hate these sort of questions. What purpose could these questions possibly serve the interviewer? (apart from the fact the candidate has come prepared for the interview with some ready-made answers for these questions). I would argue these are no better than the 'google' questions.

  13. #13
    Registered User MutantJohn's Avatar
    Join Date
    Feb 2013
    Posts
    2,665
    Quote Originally Posted by manasij7479 View Post
    Yeah, you did it wrong.
    Not technically wrong, but even the guy printing out "1\n2\n\Fizz\n..." manually would be technically correct.
    Really? What did I do wrong?

  14. #14
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,608
    Quote Originally Posted by stevesmithx View Post
    No offense, but I hate these sort of questions. What purpose could these questions possibly serve the interviewer? (apart from the fact the candidate has come prepared for the interview with some ready-made answers for these questions). I would argue these are no better than the 'google' questions.
    Because it allows me to size-up who the candidate is as opposed to what they know. The technical handles what they know but it is not enough to simply know this or that.

    This is why many places have 2 or 3 interviews. The first few are technical and problem solving. They ask whiteboard questions, etc. I'm not opposed to whiteboard questions where you give a candidate a problem and watch them work through it. I care less about the answer and more about watching them work through it.

    The last set(s) of interviews are usually the soft skills. These are very important to any job. After all we all work with other human beings and if you are not a pleasant one or are possibly not a fit with the other team members on the team we are interviewing for then its a no.

    Interviewing is very complicated and complex. There isn't one right way to go about it. I've been fooled in the past by good tech interviews and found out later they were not a good fit for for the team. Sometimes I interview and I'm not a good fit for their team, etc. Everyone is different and treating everyone like they are some kind of robot and if they answer X, Y and Z correctly they are in...is ludicrous.

    Spotting pre-canned answers is easier than you think and the more interviews you do the better you are at spotting it. You can just as easily fake a tech interview as you can a personal one. Good interviewers will pick up on clues though and its usually not possible to fake your way through the whole thing. I've had interviews where I was sadly under prepared or prepared for the wrong thing and those did not go as well as I would have hoped. No matter what you know and what experience you have every interview is different and there are some jobs out there you are just simply not a good fit for.
    Last edited by VirtualAce; 09-12-2015 at 12:16 PM.

  15. #15
    and the hat of copycat stevesmithx's Avatar
    Join Date
    Sep 2007
    Posts
    587
    Thanks for clarifying, VirtualAce. My point was most of these questions are repeated in many interviews (especially the one about strengths/weaknesses). They are so common that it would NOT be in the best interest of the candidate to be unprepared for such questions. So it would be folly on the part of interviewer to expect any candidate to answer honestly to these questions. So these questions, in a way, indirectly measures the ability of the candidate to lie rather than whatever the interviewer is really interested in.

    Here is a funny post on Slashdot that I found on the topic:
    I actually did this once (did not get the job, despite being recommended by a friend who worked there):

    -Name three of your strengths.
    -Well... I'm honest and... let's see... I'm reasonably quick to spot and diagnose flaws in any given system... and I'd say I'm creative.
    -Good. And do you have any weaknesses?
    -I'm a liar.
    More such gems at Blowing Up a Pointless Job Interview - Slashdot

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. C++: What package should I learn to create real world programs?
    By DecoratorFawn82 in forum C++ Programming
    Replies: 0
    Last Post: 11-19-2013, 01:52 PM
  2. Replies: 2
    Last Post: 11-02-2011, 07:48 PM
  3. Replies: 1
    Last Post: 10-31-2011, 10:59 AM
  4. Programming concepts
    By lyx in forum C++ Programming
    Replies: 2
    Last Post: 12-03-2003, 12:37 AM