Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Bob Morales
Aug 18, 2006


Just wear the fucking mask, Bob

I don't care how many people I probably infected with COVID-19 while refusing to wear a mask, my comfort is far more important than the health and safety of everyone around me!

low-key-taco posted:

This is pretty targeted at CS students, but does anyone have advice for someone trying to pass from IT to programming? I'm good with T-SQL and I've been gamely working my way through books and tutorials on C and Python, but should I even be bothering with the more theoretical stuff?

Program as much as you can. Write code, write code, and write code. Also have someone tell you how much your code sucks, because it will for a while and the sooner you learn what you're doing wrong, the better.

Adbot
ADBOT LOVES YOU

Blotto Skorzany
Nov 7, 2008

He's a PSoC, loose and runnin'
came the whisper from each lip
And he's here to do some business with
the bad ADC on his chip
bad ADC on his chiiiiip
            :kiddo:

kes posted:

or maybe they haven't spent enough time programming in a terminal to care one way or another? you can write code for unix with visual studio (and even compile it within the ide!), so i don't see any reason why you'd demand familiarity with a unix editor.

:commissar:

tef
May 30, 2004

-> some l-system crap ->

kes posted:

or maybe they haven't spent enough time programming in a terminal to care one way or another? you can write code for unix with visual studio (and even compile it within the ide!), so i don't see any reason why you'd demand familiarity with a unix editor.

heee :3: :allears:

Bruegels Fuckbooks
Sep 14, 2004

Now, listen - I know the two of you are very different from each other in a lot of ways, but you have to understand that as far as Grandpa's concerned, you're both pieces of shit! Yeah. I can prove it mathematically.

TasteMyHouse posted:

If you don't know Big O, and at least have an inkling of how different common algorithms and data structures work, you're going to end up in the coding horrors thread.

This is not usually the problem in my experience.

I'm working on a project right now where people are writing a module that implements a context menu. It's taken two years to implement, consists of over 300,000 lines of code, and uses components written in three different languages: C++, C#, and javascript.

I understand given the history of the project why it was done that way, but it's my firm belief that over-engineering is a huge problem - be lazy. Write understandable code. Use simple designs. It's always the clever, over-thought solutions to problems that lead to problems.

tef
May 30, 2004

-> some l-system crap ->

hieronymus posted:

Write understandable code. Use simple designs. It's always the clever, over-thought solutions to problems that lead to problems.

Readability suffers both from over and under abstraction. You tend to get the extremes a lot where people over engineer due to lack of knowledge or expert knowledge. I tend to find code written by beginners has excessive duplication of code, a complete lack of structure and piles and piles of if statements.

On the other end, code written by PHDs seems to have been tempered by working for four years on a project to demonstrate novelty within research. Everything is a class. Every feature is decomposed into an elegant and towering hierarchy. Use all the features!

It isn't as so simple as knowing enough to be dangerous. It's hard to get things just right, and programmers still seem to err on the side of 'too much abstraction'.

I think there was something said along the lines of 'some people have ten years experience of coding and some people have one year ten times'. Most of education is focused on churning out code and very little attention is paid to operational or maintenance requirements. We still have this pyramid building mentality of software - grand towering achievements to last forever. We focus on writing and constructing new code over learning how to maintain and make code more maintainable.

:smith:

we seem to only change how we make mistakes rather than learning from them

blorpy
Jan 5, 2005

kes posted:

or maybe they haven't spent enough time programming in a terminal to care one way or another? you can write code for unix with visual studio (and even compile it within the ide!), so i don't see any reason why you'd demand familiarity with a unix editor.

Have you actually ever used vi? It's like having hot shards of glass stuck in your, erm, rather delicate areas.

Ithaqua posted:

That "5 essential phone screen questions" is a bit on the harsh side, honestly. Knowing computer science fundamentals doesn't hurt, but it hasn't come up in any job interview I've been on in the past 5 years.

Curious, what sort of CS job interview hasn't at least touched on CS fundamentals?

necrobobsledder
Mar 21, 2005
Lay down your soul to the gods rock 'n roll
Nap Ghost
I have a suspicion that's the guy that gave me my interview with Amazon so long ago. They have a weird hiring process I've heard though, so whatever.

tef posted:

business logic is not really amenable to algorithmic analysis, it shouldn't be that surprising
Business logic problems can oftentimes be handled most efficiently (even measured on a financial basis - the Law of business) via algorithmic analysis. What's gotten in the way of proving this for me for years has been rather simple - politics. It's not whether I can deduce that something's actually NP hard or exponential in funny cases that makes the biggest impact upon my code but whether Randy makes his quarterly commission for getting the customer to fork over $4 million (and make him $250k for the quarter). It's not whether you can optimize the starting settings of a JVM heap but whether you can get a favor from a manager on another team that absolutely hates your guts for no reason besides him being a hard-rear end.

This is all part of why I had to laugh at Y Combinator's Big Ideas suggestion on improving enterprise software - the solution to improving the technical quality of enterprise software is no more of a technical issue than world hunger is about producing enough food for the planet. We should remember, after all, that most software did come from the enterprise so long ago.

On the other hand, I've certainly met some drat smart guys still in enterprise software. The other hypothesis I have is that the resulting software from these cultures is due to the chilling implications of the Milgram experiment.

tef posted:

We focus on writing and constructing new code over learning how to maintain and make code more maintainable.
Only through maintaining other people's code can you learn from the mistakes of others and learn to never repeat their mistakes. Coworkers have told me how easy my code is to understand and maintain, and that's enough for me to call myself a professional software engineer - you don't learn these practices through any means but pure hell experience. But through having to dumb down your code for years, you face the cruel reality that you are probably dumbing yourself down in the process.

dazjw posted:

Interviewing for programmers, not CJs.
There are an increasing number of coding jobs that amount to dev-ops, which is equivalent to an amalgamation of a programmer that can deploy his stuff to production and keep them maintained sufficiently well enough that he can spend some time actually coding. There's also a lot of former IT guys becoming developers (read the forums - there are maybe 20 guys going from IT to dev vs. myself being the only one I've heard of here that's transitioned to IT from pro developer) as their jobs become more and more automated away through a combination of better processes, outsourcing / consolidation, and just plain necessity to scale productivity in today's large environments.

Innocent Bystander
May 8, 2007
Born in the LOLbarn.

Markov Chain Chomp posted:

Have you actually ever used vi? It's like having hot shards of glass stuck in your, erm, rather delicate areas.

This is such a subjective statement I really don't see how it adds to the conversation. Who cares which text editor you use? Yeah lets all have a good laugh at the noobs using nano, but seriously if they can kick out good code in nano, more power to them.

tef
May 30, 2004

-> some l-system crap ->

necrobobsledder posted:

Only through maintaining other people's code can you learn from the mistakes of others and learn to never repeat their mistakes.

:swoon: yes I am in total agreement here

edit: although when I wake up tomorrow I have a few points

tef fucked around with this message at 01:14 on Sep 12, 2011

Blotto Skorzany
Nov 7, 2008

He's a PSoC, loose and runnin'
came the whisper from each lip
And he's here to do some business with
the bad ADC on his chip
bad ADC on his chiiiiip

Innocent Bystander posted:

This is such a subjective statement I really don't see how it adds to the conversation. Who cares which text editor you use? Yeah lets all have a good laugh at the noobs using nano, but seriously if they can kick out good code in nano, more power to them.

I think he's referring to original Bill Joy vi, which is a pain in the rear end to use in 2011 for someone used to vim (or even elvis or whatever)

blorpy
Jan 5, 2005

Otto Skorzeny posted:

I think he's referring to original Bill Joy vi, which is a pain in the rear end to use in 2011 for someone used to vim (or even elvis or whatever)

Exactly. The original context was vi vs. vim. That's not subjective, one is decidedly better than the other.

Edit: added quote for clarity

Cavern of COBOL's very own superstar Steve "flowEnol" Yegge posted:

Bad Sign #4:

Me: So! What text-editor do you use?
Them: Visual Studio.
Me: OK. What about on Unix?
Them: On Unix I use vi.
Me: Er, yeah, vi is cool... ever used VIM?
Them: No, just vi. Always worked just fine for me.

Translation: "Sometimes I type with my elbows when my hands are tired. It's just as fast."

Probable failure modes for this candidate: Will likely fail the HTML-phone-number question. Might pass the interviews, but will need to be scheduled in geologic eras.

blorpy fucked around with this message at 03:54 on Sep 12, 2011

blorpy
Jan 5, 2005

Also, on most systems, vi is aliased to vim anyway, so chances are the interviewee was using vim and wasn't aware. Whether or not that raises a flag is questionable, although it does help to know something about the environment you're developing in.

kitten smoothie
Dec 29, 2001

necrobobsledder posted:

This is all part of why I had to laugh at Y Combinator's Big Ideas suggestion on improving enterprise software - the solution to improving the technical quality of enterprise software is no more of a technical issue than world hunger is about producing enough food for the planet. We should remember, after all, that most software did come from the enterprise so long ago.

On the other hand, I've certainly met some drat smart guys still in enterprise software. The other hypothesis I have is that the resulting software from these cultures is due to the chilling implications of the Milgram experiment.
You're onto something here. For a year and a half I worked at an ERP vendor as part of a few client project teams, and it drove me nuts.

Enterprise software is not made to have a beautiful user experience that saves time, or "just do one thing and do it right" design or any of that stuff that makes YC portfolio companies shine. It's designed such that a company with deep pockets can send out an RFP that describes all the ridiculous corner cases that they might encounter in their business once in a blue moon and a vendor can respond with "Oh yeah it'll hit that out of the park" no matter what the question might be.

Then the client buys a license to a product that does none of that stuff out of the box, and signs off on a contract to have the vendor's consultants develop some custom bolt-on to address all the stuff the salesman promised. The vendor loves this because this means not only is it extra hours for their professional services organization to develop the custom stuff, everybody knows it's going to be an ugly mess that could well break spectacularly the next time the vendor puts out a maintenance release. That leaves a perpetual need for additional development/testing hours, which helps that sales guy's bonus later on.

And maybe some line item in the functional spec that takes 40 consulting hours at god knows what bill rate to code a solution for is something that may only crop up once a year and can be addressed in 30 minutes by a $20/hour clerical employee. Time to payoff is centuries away, but that's all muddied up in the fact it's a "requirement" and they were promised it could be done.

Finally after what probably has been (at minimum) months of schedule slippage, the system goes live. Then the users, who are not the people buying the software, actually get their hands on it. The custom bolt-on stuff doesn't "quite" follow the same UX flow as the rest of the system, making it harder for them to do their work.

tef
May 30, 2004

-> some l-system crap ->

necrobobsledder posted:

Business logic problems can oftentimes be handled most efficiently (even measured on a financial basis - the Law of business) via algorithmic analysis.

Very rarely for me. Most business logic I have encountered is simply dictating the model, rather than anything amenable to things like analysis or operations research.



quote:

That's gotten in the way of proving this for me for years has been rather simple - politics.

It's a social problem, quick! Let's write a technical solution.


quote:

On the other hand, I've certainly met some drat smart guys still in enterprise software. The other hypothesis I have is that the resulting software from these cultures is due to the chilling implications of the Milgram experiment.

When you build a project towards sales criteria instead of designing it, it is easier to sell. Once software had been adopted by the enterprise it is almost a guarantee that it will stagnate. People would rather use broken software they've learned how to use over trying software that works

quote:

Only through maintaining other people's code can you learn from the mistakes of others and learn to never repeat their mistakes. Coworkers have told me how easy my code is to understand and maintain, and that's enough for me to call myself a professional software engineer - you don't learn these practices through any means but pure hell experience. But through having to dumb down your code for years, you face the cruel reality that you are probably dumbing yourself down in the process.

There is often a misguided notion that we have to make newer programmers suffer as we did when we learned. It normally arises in the form of nostalgia - if only they learned on woefully inadequate machines then they'd understand todays computers more.

There is something to be said for exposing younger programmers to larger code bases, as well as more analysis and review of code -- but we shouldn't be inflicting our mistakes upon them in the hope that they learn from them. It isn't going to be as easy to teach them by putting them through hell.

I learned a lot from going through hell, but I don't think it is effective or the right way, but at the moment it seems like the only option available for getting programmers to understand maintainability.

necrobobsledder
Mar 21, 2005
Lay down your soul to the gods rock 'n roll
Nap Ghost
I think repeating the experiences of your forefathers in the form of programmer is a form of hazing and even as great of a problem as reinventing the wheel, but I think there's many reasons why new programmers continue to repeat a lot of fundamental mistakes regardless of platform and we should try to separate what should be learned through trial by fire because there's just no better way to learn it and what should be imparted through indirect knowledge. I'm not about to expect today's software geniuses to be like Mel but I'd hope they understand the spirit of what being good in this field means... and also how Mel is probably not the right guy to hire in most of today's software projects.

tef posted:

When you build a project towards sales criteria instead of designing it, it is easier to sell. Once software had been adopted by the enterprise it is almost a guarantee that it will stagnate. People would rather use broken software they've learned how to use over trying software that works
The thing is that a great deal of business software is acquired rather than built in-house - Oracle is about the only exception in the Fortune 500 I believe. The people that build this software are actually pretty decent normally - I wouldn't have gone to work for a business software start-up if I didn't think my coworkers were every bit as smart and awesome as I felt they should be to succeed.

The consistent process in the past 15 years or so of enterprise software is this:

1. Start-up hires a bunch of smart people to address a business problem
2. Start-up gets 3/4 of the way there
3. Big company notices start-up and buys them out
4. Big company's policies suck and a mass exodus occurs
5. New developers hired to maintain the code

I've seen this happen with almost every acquisition done by a Fortune 500 company that's not a software-oriented company (there's maybe a handful that are).

kitten smoothie posted:

Then the client buys a license to a product that does none of that stuff out of the box, and signs off on a contract to have the vendor's consultants develop some custom bolt-on to address all the stuff the salesman promised.
I've been on the side of the team developing the product as well as the consultant billing out hours to mash poo poo together to fulfill the customer's requirements, and I'm of the feeling it's siloization / stovepiping of different functions that cause this problem combined with the fact that Fortune 500 customers act like babies where MY BUSINESS PROBLEMS are so unique to them they want it done exactly the way they do it... when the process is loving inefficient and won't scale out. This is a big part of why most enterprise software doesn't do what customers want out of the box - their requirements are very specific to them, and the developers would have to go to each and every Fortune 500 company and code a slight variation for each customer (which can change depending upon which CTO is in charge and the company's stock price or something). It's thus the burden of the developers to enable faster time for implementation and to make sales easier. This to me involves designing software to be as versatile as possible - this is orthogonal to the usual developer problem of solving a series of individual problems. These problems are not solvable through technical means because the problems are constantly shifting, too - you're trying to code against a moving target. So the best you can do is determine where the target could land and make sure it can at least function then.

That consultant does not want to have to maintain that code he had little wiggle room for design, he wants it to work well enough, document it, and make sure it becomes someone else's problem.

I'll just summarize the state of enterprise software with a single image. If you think there's a technical means to change this state of idiocy, you're loving delusional.

Sab669
Sep 24, 2009

Woo! I saw an internship posting on Indeed.com the other day, it's nearby and I was familiar with everything on it except AJAX. Shot 'em my resume and they responded today already by email. He just wanted to set up time for a phone call, so I presume a phone interview.

I've never done a phone interview before, though. Obviously every interview is different, but I was just hoping some goons might be able to offer some insight! I feel pretty confident right now, but I'm sure when my phone rings and it's a number I don't recognize my stomach will turn into a ball of knots.

lazarenth
Mar 28, 2010
Hey goons, I realize this post is kind of the inverse of this thread.

I just got my first actual job in software after graduation about 3 or 4 weeks ago. In the next couple of weeks I will be helping my manager interview for our first intern. I am cool with this, the only problem I have is I have no idea what to ask.

The first applicant is just starting his sophomore year, I think (he went to my alma mater and judging from his skills listed and my old curricula). He's done basic Java and data structures, basically.

Would this be a good question?

Let's say you needed to make a custom stack. Given the choice between an array list and a (doubly) linked list, which would you choose, and why?

Or should I ask a more open ended question, like "How would you go about making a stack data structure in Java"?

A friend gave me a good second one, asking about how to go about trying to avoid collisions in a hash map.

lazarenth fucked around with this message at 03:59 on Sep 13, 2011

lazarenth
Mar 28, 2010

Sab669 posted:

Woo! I saw an internship posting on Indeed.com the other day, it's nearby and I was familiar with everything on it except AJAX. Shot 'em my resume and they responded today already by email. He just wanted to set up time for a phone call, so I presume a phone interview.

I've never done a phone interview before, though. Obviously every interview is different, but I was just hoping some goons might be able to offer some insight! I feel pretty confident right now, but I'm sure when my phone rings and it's a number I don't recognize my stomach will turn into a ball of knots.

My advice would be to make sure your phone is charged, make sure you are somewhere you won't be disturbed, and try to concentrate on what you're hearing. I had a little bit of trouble with the voice with no face for a bit, but after a couple it was almost like holding a conversation in person. As for the ball of knots thing, yeah, it happens. Just remember they are looking for you as much as you are looking for them. Be confident in your abilities (but don't fib :) ).

shrughes
Oct 11, 2008

(call/cc call/cc)

lazarenth posted:

I just got my first actual job in software after graduation about 3 or 4 weeks ago. In the next couple of weeks I will be helping my manager interview for our first intern. I am cool with this, the only problem I have is I have no idea what to ask.

Ask him to write a function that takes a binary tree and return true if and only if it is a binary search tree.

Have him login to some etherpad clone like http://typewith.me/ and actually type out the code. It's best to give him the link over email.

This is so much more useful than just talking.

Chasiubao
Apr 2, 2010


lazarenth posted:

Hey goons, I realize this post is kind of the inverse of this thread.

I just got my first actual job in software after graduation about 3 or 4 weeks ago. In the next couple of weeks I will be helping my manager interview for our first intern. I am cool with this, the only problem I have is I have no idea what to ask.

The first applicant is just starting his sophomore year, I think (he went to my alma mater and judging from his skills listed and my old curricula). He's done basic Java and data structures, basically.

Would this be a good question?

Let's say you needed to make a custom stack. Given the choice between an array list and a (doubly) linked list, which would you choose, and why?

Or should I ask a more open ended question, like "How would you go about making a stack data structure in Java"?

A friend gave me a good second one, asking about how to go about trying to avoid collisions in a hash map.

Ask it open ended.
Ask how the candidate would handle collisions, not how to avoid them. Discuss pros and cons of his/her approach, performance costs, etc.

shrughes
Oct 11, 2008

(call/cc call/cc)
Those are horrible questions, you're basically asking if they've seen a hash table before or not and dealt with that sort of thing.

Orzo
Sep 3, 2004

IT! IT is confusing! Say your goddamn pronouns!
To be fair your 'check if binary tree is binary search tree' is a really really common interview question that you can find on a bunch of those sites that list technical interview questions. Might as well ask them to find the loop in a linked list using O(1) memory.

One interview question I like to ask is any modification of this problem from Project Euler. They should be able to code the naive, slow version by writing a recursive algorithm, and then if they can't figure out a faster way you can sort of prod them a bit until they get the dynamic programming solution.

Orzo fucked around with this message at 05:40 on Sep 13, 2011

shrughes
Oct 11, 2008

(call/cc call/cc)
Hmm, I didn't know that. We only use it as a warm-up question.

Orzo
Sep 3, 2004

IT! IT is confusing! Say your goddamn pronouns!

shrughes posted:

Hmm, I didn't know that. We only use it as a warm-up question.
What are some of your other questions, if you're allowed to disclose? I'm always looking for some good ones to add to our repertoire.

shrughes
Oct 11, 2008

(call/cc call/cc)

Orzo posted:

What are some of your other questions, if you're allowed to disclose? I'm always looking for some good ones to add to our repertoire.

Write a function that creates the mirror image of a binary tree.

Write a program that computes the number of tic-tac-toe games.

An array of N elements has the property that if you sort it, each element is within K units of its final position in the sorted array. That is, the position of the J'th smallest element of the array (for 0 <= J < N) is in the interval [J-K, J+K]. Figure out a sorting algorithm that is more efficient because it exploits this property.

Given a 2D array of zeros and ones, find the largest square of ones.

Two people are on a boat. Fred Lowenol falls off. Who is left?

You want to implement the locking of intervals of an array. Think of how to do it.

Invent an algorithm for finding the area of a union of rectangles that have vertical and horizontal edges. (This is excessively difficult.)

You have a B-tree and want to randomly select a key. You want to support randomly and uniformly selecting a key from the btree. You can modify the btree data structure if you want. How do you do it?

What if you can't modify the btree data structure?

Orzo
Sep 3, 2004

IT! IT is confusing! Say your goddamn pronouns!
where do you work?

Chasiubao
Apr 2, 2010


shrughes posted:

Those are horrible questions, you're basically asking if they've seen a hash table before or not and dealt with that sort of thing.

I'd expect anyone going through a university CS program or with any experience to know what a hash table is and how it works at a rudimentary level. And if they don't, it's not like it's the only possible question to ask.

shrughes
Oct 11, 2008

(call/cc call/cc)

Chasiubao posted:

I'd expect anyone going through a university CS program or with any experience to know what a hash table is and how it works at a rudimentary level. And if they don't, it's not like it's the only possible question to ask.

The problem is that it's just quizzing them on knowledge they already may have, not knowledge on something new. It's perfectly reasonable for a student to have breezed by hash tables and forgotten them or had them skipped entirely in his data structures class. It's also easy for somebody who's not good at programming to recite the knowledge he was told in class. This doesn't select very well for good programmers, not as well as questions that talk about something they haven't seen before.

baquerd
Jul 2, 2007

by FactsAreUseless

shrughes posted:

Two people are on a boat. Fred Lowenol falls off. Who is left?

What does this mean?

Your questions remind me of programming contest questions. I guess if the job requires a lot of algorithm optimization work or something they might be valuable, but for example, I write front office financial software where large scale resource management skills, ability to quickly learn new frameworks, and domain knowledge are far more important than being able to generate solutions to academic problems in an interview.

I like these since you're looking at concurrency and dynamic programming:

quote:

You want to implement the locking of intervals of an array. Think of how to do it.

Given a 2D array of zeros and ones, find the largest square of ones.

But these seem excessively academic and not very useful unless you're just testing to see how the programmer approaches the problem and you're not actually looking for an immediate correct answer:

quote:

Write a program that computes the number of tic-tac-toe games.

An array of N elements has the property that if you sort it, each element is within K units of its final position in the sorted array. That is, the position of the J'th smallest element of the array (for 0 <= J < N) is in the interval [J-K, J+K]. Figure out a sorting algorithm that is more efficient because it exploits this property.

You have a B-tree and want to randomly select a key. You want to support randomly and uniformly selecting a key from the btree. You can modify the btree data structure if you want. How do you do it?

What if you can't modify the btree data structure?

Invent an algorithm for finding the area of a union of rectangles that have vertical and horizontal edges. (This is excessively difficult.)

Here are the type of questions we'd ask:

quote:

A database supports only 10 concurrent connections. A distributed client must be able to be run by 20 users simultaneously. How do you protect against resource lock?

A third party service is only licensed for 1000 distinct queries a day, after which requests will fail silently. How do you support user initiated real time queries through this service?

A new proprietary API with 100 classes is to be used to interface with an existing reporting server. This project must be delivered to UAT by the end of the week. API documentation and sample code has been made available. What is your approach to learning how to use the API?

Chasiubao
Apr 2, 2010


shrughes posted:

The problem is that it's just quizzing them on knowledge they already may have, not knowledge on something new. It's perfectly reasonable for a student to have breezed by hash tables and forgotten them or had them skipped entirely in his data structures class. It's also easy for somebody who's not good at programming to recite the knowledge he was told in class. This doesn't select very well for good programmers, not as well as questions that talk about something they haven't seen before.

That's entirely possible. I think it's unreasonable to say that questions on data structures are off the table because someone might already know about them.

Buuut you know what I feel like this about to turn into a religious discussion so I guess I'll just say that I think everyone's looking for different things in an interview and I don't think that anyone has the perfect answer :shobon:

Chasiubao fucked around with this message at 07:49 on Sep 13, 2011

shrughes
Oct 11, 2008

(call/cc call/cc)

baquerd posted:

Your questions remind me of programming contest questions. I guess if the job requires a lot of algorithm optimization work or something they might be valuable, but for example, I write front office financial software where large scale resource management skills, ability to quickly learn new frameworks, and domain knowledge are far more important than being able to generate solutions to academic problems in an interview.

We need that too, except we don't have any particular domain knowledge, unless you consider CS to be our domain. It sounds to me like it's pretty hard to test for large scale resource management skills and ability to quickly learn new frameworks in an interview. Also, you can only really differentiate between college students on their basic coding ability and body odors.

baquerd posted:

I like these since you're looking at concurrency and dynamic programming:

It turns out that the concurrency problem wasn't a very good question. There are plenty of worthy people who don't know enough about concurrency or who don't know about data structures for storing intervals (once we get to the read/write lock part of the question), and it's too easy for the interviewer to let the interviewee get by with a B.S. answer. We work on a highly concurrent system, but it's not like we expect everybody to really know about concurrency up front.

baquerd posted:

But these seem excessively academic and not very useful unless you're just testing to see how the programmer approaches the problem and you're not actually looking for an immediate correct answer:

On the tic-tac-toe question we expected the person to write code on the whiteboard, and we were really only interested if they could get an implementation without being retarded about it. That question's pretty good at identifying which people can't actually write code. That was for a former employer that worked on enterprisey software that dealt with what you might call large scale resource management.

The others are just general see-how-good-you-are-at-thinking-about-algorithms-and-data-structures questions, and yes, we're not looking for an immediate correct answer, but we do expect an answer eventually, on most problems. I don't see how a good interview question could ever expect an immediate answer, unless it's a warmup question.

Algorithms-and-data-structures is generally the skill we're selecting for. Randomly selecting a key from a btree (ideally without encoding new information in the btree structure) is a specific problem we've dealt with. The sorting question is one that anybody with a general CS background should be able to figure out. (Of course, I criticized the hash table related question, and this question is biased towards people more familiar with sorting algorithms, so it looks like I'm wrong about something.)

The rectangle union area problem is completely insane, only good for seeing how awesome an extremely awesome candidate can get, and the first half of the randomly-selecting-key-from-btree question attacks the same data structures abilities, without being completely insane, so I don't use it the union area problem anymore.

baquerd posted:

Here are the type of questions we'd ask:

I'm assuming you also have questions that involve them showing that they can write code instead of just talking about it.

Also, "What is your approach to learning how to use the API?" seems like a bad question to me, not that I've tried it. What is a "good answer" to this question and how does it mean the candidate is a better learner or better candidate than a "bad answer"?

baquerd
Jul 2, 2007

by FactsAreUseless

shrughes posted:

Also, "What is your approach to learning how to use the API?" seems like a bad question to me, not that I've tried it. What is a "good answer" to this question and how does it mean the candidate is a better learner or better candidate than a "bad answer"?

The question as I put it should be further specified: "What is your approach to learning how to use the API for this particular problem?" We're looking for "practical" programmers who are used to looking at others code and are able to extend that code in a short time frame.

A good answer reveals a developer who is going to be deadline focused. Generally this means heading for the code samples and extending those examples towards practical usage as soon as possible. The API is then for reference, taking the time to browse the class list when looking for expected functionality or just to get a general idea of the full structure is alright, but no more than a day should be spent attempting to learn from the documentation before starting to put code together. I'd also expect 2 days to be budgeted to testing and deployment.

There are a surprising number of people who answer they'll start by reading all of the API documentation, which in practice tends to mean they're not used to producing things in a short time frame or want to spend more time getting it 100% right instead of meeting deadlines. They tend to want to get the full picture of how everything works together instead of jumping right in to produce a working product. This can certainly be a good thing, but not in the constraints of the problem.

It's not about learning so much as quickly producing a functional and well-tested product (assuming a week is tight but reasonable). It's far better to have a inefficiently designed but workable product (that can be later revised) than to miss certain deadlines.

qntm
Jun 17, 2009

shrughes posted:

Two people are on a boat. Fred Lowenol falls off. Who is left?

I would also like to know what this is supposed to mean.

tef
May 30, 2004

-> some l-system crap ->

Sab669 posted:

I've never done a phone interview before, though. Obviously every interview is different, but I was just hoping some goons might be able to offer some insight! I feel pretty confident right now, but I'm sure when my phone rings and it's a number I don't recognize my stomach will turn into a ball of knots.

Stay calm, ask questions when you get stumped. For an internship especially, they are looking for someone who can fit within the company and pick up the skills they need. Attitude counts for a lot more than experience in an internship.

tef
May 30, 2004

-> some l-system crap ->

necrobobsledder posted:

These problems are not solvable through technical means because the problems are constantly shifting, too - you're trying to code against a moving target. So the best you can do is determine where the target could land and make sure it can at least function then.

That consultant does not want to have to maintain that code he had little wiggle room for design, he wants it to work well enough, document it, and make sure it becomes someone else's problem.

I'll just summarize the state of enterprise software with a single image. If you think there's a technical means to change this state of idiocy, you're loving delusional.

As someone in a small company writing the product, I can happily testify to the brutal truths within your post. I have to focus on being able to change targets more than delivering on them.

tef
May 30, 2004

-> some l-system crap ->

lazarenth posted:

I just got my first actual job in software after graduation about 3 or 4 weeks ago. In the next couple of weeks I will be helping my manager interview for our first intern. I am cool with this, the only problem I have is I have no idea what to ask.

here is how an application with me normally proceeds:

code sample:

After we get an application, we ask the candidate to either provide a code sample or write one for us. We're looking for something that is fairly short to write and reasonably complete in less than an afternoon. Once we get the sample back, we look at it and decide if we want to move it forward to an interview.

note: you want to pick a code sample question relevant to your work if possible, and when in doubt asking them to implement simplified versions of command line tools can work too (wget, grep, curl, etc)

we tend to ask people to write a single threaded example and then expand on it within the interview to hear about the approach they'd take to making it multi-threaded.


interview:
if we do decide to interview, we usually have a long phone interview with one or two engineers. we introduce ourselves and give them a brief outline of the interview process, and then leap straight into the code sample.

interview - code sample:
we ask them to explain how it works and the design choices they made
we talk about features they omitted and how they might implement them, in particular we like to touch upon concurrency here. we ask about threading, locks, stm, actors and any other styles the candidate has familiarity with.

interview - experience:
we then move back to the resume, and work through the candidates experiences with tools and projects, asking harder and harder questions until the candidate is stumped or the interviewer is stumped. we're trying to measure the depth of expertise as well as the breadth.

for example:
c/c++ - start with stack vs heap, move onto things like volatile, virtual, raii, exceptions/destructors
also looking for experience with large frameworks (e.g. qt)

web development -- questions about cross site scripting and sql injections

java - asking about enums, generics, and ask them to explain any item in java.util.concurrent

python - asking about the gil, unicode

really you want to ask about known pain points, gotchas and other language warts to see how much they've used it in practice.

interview - domain knowledge:
for us, we use http and unix /heavily/ so we tend to focus on these areas in particular

for unix we get them to talk about command line tools they find useful, and ask them about how they would do some basic sundry commands

my favourite question to ask is: 'can you explain from start to finish how a web browser fetches a page on the internet' and ask them to go into as much depth as they are comfortable with. bonus points for knowledge of http bits like caching/redirects, as well as tcp and dns mechanics.

interview - frameworks/toolkits
we like to talk about the experience they have with larger and more established toolkits. this is where we focus on how much code the candidate has read, rather than written.

interview - company specific bits:
you'll excuse me for not sharing these bits as they aren't relevant, beyond this is where we explain the company in a little more detail, evaluate how well they've grasped our industry and talk about some of the bigger challenges that lie ahead.


i've tried to avoid giving you a question/answer sheet -- a lot of the questions I ask in the interview are based upon my own experience and knowledge and that isn't so easily transferred. most of the canned questions in interviews tend to fall into the style of the 'terrible lateral thinking puzzle' - ones in which there is a trick to answering and so I abhor them.

if I want to know if a candidate knows about hash tables I will just ask them directly

tef fucked around with this message at 12:23 on Sep 13, 2011

Plorkyeran
Mar 22, 2007

To Escape The Shackles Of The Old Forums, We Must Reject The Tribal Negativity He Endorsed

shrughes posted:

The rectangle union area problem is completely insane, only good for seeing how awesome an extremely awesome candidate can get, and the first half of the randomly-selecting-key-from-btree question attacks the same data structures abilities, without being completely insane, so I don't use it the union area problem anymore.
Am I missing something about the rectangle question? It seems fairly trivial if you're willing to accept an O(n^2) solution - just sum the areas and subtract the areas of the intersections.

shrughes
Oct 11, 2008

(call/cc call/cc)

Plorkyeran posted:

Am I missing something about the rectangle question? It seems fairly trivial if you're willing to accept an O(n^2) solution - just sum the areas and subtract the areas of the intersections.

And add the areas of the three-way intersections and subtract the areas of the four-way intersections and ...

Orzo
Sep 3, 2004

IT! IT is confusing! Say your goddamn pronouns!

qntm posted:

I would also like to know what this is supposed to mean.
Honestly it sounds like some kind of flowenol (forums user) joke, no clue.

Adbot
ADBOT LOVES YOU

ironypolice
Oct 22, 2002

shrughes posted:

And add the areas of the three-way intersections and subtract the areas of the four-way intersections and ...

The best I can come up with is to compare every pair of rectangles, and if they overlap reduce them into components like so:



Then dump the components back into the pile, and repeat until there are no overlaps, then sum up the areas of the rectangles.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply