The Non-Programming Programmer

I think you are approaching your question “why do people who can’t write a simple program even entertain the idea they can get jobs as working programmers?” the wrong way. As a fellow passionate developer it is easy to look at what these people do as not in line with our ideals, that they are frauds and should be ashamed of themselves.

The truth is much simpler. Most universities are structured in a way such that you can attain a degree without knowing the subject all that well (whether that be by cheating or just barely passing). This is true not of just CS, but many degrees. So you end up with a student who owes a lot of money with a piece of paper that says he knows how to program, what do you expect him to do?

As a Software Engineering(Technology) Student in my first year, I can absolutely see why this is the case. I am 29 years old, returning to school for a career in something that I love to do.
The sad thing that I noticed was not that we completed one semester of programming and hadn’t yet learned about classes/objects, but rather the fact that many people in the course were struggling so badly or not caring about the act of programming at all. Many people in the second semester got by simply by coping source code from others I am sure. If the colleges weren’t businesses (thirsting over money like mad) they would have a ‘pre-enrollment screening’ which would move things along quicker during school, and produce better, more qualified graduates (capable of doing the jobs).
This assessment should be done at the college/university level - prior to enrolling. Weed out the ones who don’t want to learn it.
Additionally, it might ge worth looking into adding a requirement for all applicants to have a minimum mark for Math and Programming. Or perhaps a form for them to fill out with a simple program prior to an interview… Not saying that it’s right for employers to have to go through this circus… but on the other hand, not all of us are incompetent morons either… :smiley:

My favorite interview had me desperate to ask a programming question that one particular “expert” candidate could answer. After asking successively simpler questions, I ended up asking him to implement a while-loop using [drumroll] if and goto.

“Sure, that’s easy!”, he replied.

I offered the whiteboard marker. “Can you show me?”

“Of course!”, he nodded, not moving to take the offered marker.

“Will you show me, now?”

“Sure, I could do that!” … [pause]

“Please show me now.” … [pause]

“Well, no, I can’t.”

Here’s the flip-side of all this, though. I love good programming interviews. Sure, there’s only so much you can glean with these distilled and contrived programming problems. And yup, I’ve bombed some interviews that I smacked myself over later, and that I believe underestimated my true abilities. That said, answering puzzles like these for four to eight hours during a grueling day is my idea of a Good Time. Call me crazy, but isn’t that why we’ve picked this career anyway?

OK, from the comments I think we’ve established that we shouldn’t give take home problems because people will cheat, and we shouldn’t ask people to write code at the interview because they might be nervous. We shouldn’t ask for code samples because code from their current job is proprietary, and not everyone has time to write code at home, because some people have real lives and shouldn’t be penalized for it. We shouldn’t ask mathy or algorithmic questions because those are irrelevant to ‘real world’ programming jobs. We shouldn’t ask API or syntax questions because, hey that’s just trivia and if I got the job I’d just look those up on google. We shouldn’t ask puzzle questions because that’s just the interviewer showing off. And of course we already knew that most resumes are tissues of lies, and nobody can give honest references anymore for fear of lawsuits. This should make for very short interviews since all we apparently all we can do is ask their name and what their favorite color is.

Is it so hard to grasp that there is no silver bullet in interviewing any more then there is in programing? Everything you try is going to make some good programmers look bad (false negatives) and some bad programmers look good (false positives). Job seekers would prefer tests that have few false negatives, but that doesn’t matter. They aren’t the ones giving the interviews. The employers are, and they, quite naturally, are going to favor tests that they hope have fewer false positives.

Anyone ever thought that the solution to all this might be to actually establish ourselves as a true programming industry? Meaning: just because you “know” C or PHP or Ruby or Perl or Java doesn’t mean you can program. There should be certifications and licensure, just like there are for plumbers or architects or electricians, et al. Though, we’d all have to agree on some common standards for that to ever happen. But that’ll never happen since we’re all such cowboy coders at heart. :wink:

I think this is another case of snobby programmers thinking they know so much. The problems mentioned are more suited to people who are ‘programmable programmers’ (code monkeys).

I’m a self taught programmer and keep seeing articles like this from experienced programmers who are just stepping on people who are trying to climb the ladder.

Oh dear. This is a “the king is nude” situation, and most commenters are still looking for a patch. Could it be that most of these so-called programming positions do not actually involve, you know, writing program code? Maybe the industry can really go without real programming (algorithms and stuff), most of the time. Maybe all we need to do now is describe things (with a vocabulary we don’t understand at all), not create them. But that is a good thing for an industry, isn’t it?

I learn to program because I believed (and still do) that it is a craft that can’t be domesticated. It is like writing: there is a publishing industry, but there isn’t a “writing industry” (and that is quite refreshing in these web 3.0 days, isn’t it?) Programming is writing, it implies having something to say.

Also, Check it out.

Joseph Connolly wrote:

At any rate, I was asked in a phone interview the difference between a linked list and an array. The company does not do low level programming or code for mobile devices which would make the performance between the objects perceptible.

There’s no need to do “Low-level programming” or “code for mobile devices”, it’s just needed that you have a lot of data to process. Use the obvious, wrong, strategy to extend your arrays as you accumulate more data and you’ll end up with O(N^2) (n-squared) time complexity, where you’d same would be O(N) time complexity using linked lists. On the other hand, you’d then have trade-offs further down the processing chain, so it MAY be better to use one representation in one stage, then convert to another representation down the line.

As for “how many” the lots would be, I can’t give you a hard answer, but if we’re looking at 1500-2000 elements and the O(N) version takes 2 seconds, the O(N^2) version would be over an hour and that may be significant (it mnight also not matter, it depends on how frequently and under what conditions the code is run; if it’s part of the annual balancing of the books, it might not matter, if it’s code that runs every 3 hours, it probably matters a lot).

The worst\best answer I’ve ever got to the question: “What languages do you program in?”

“English”

It turned out he couldn’t even name a language. Not one.

I’ve given up on hiring. It just is not worth the aggravation and anyway, the amount of time spent hiring, I could do the entire job twice myself.

Now, if somebody becomes available, it’s like an auction. Basically. I no longer hire people I’ve not heard of or who does not have a direct reference from someone I know who is a programmer themselves.

As a SharePoint consultant with 40 years in IT (yeah I have coded in COBOL, so get over it already), my interview technique is pretty simple.

I ask the interviewee to give me a detailed description of their SharePoint experience.

Then I might intersperse more detailed questions during their dialog. I figure if you can’t tell me exactly what you have done, then you actually haven’t done it.

One problem with ALL technical interviews is that you can always find obscure questions with equally obscure answers to either eliminate a candidate or throw them off of their interview game.

So allow the candidate to tell their own story and make your judgement from that.

Props to Mike Lin for his positive and sharing attitude.
Way to go, Mike :slight_smile:

I am an Oracle DBA.
I do not have a CS degree.

I can answer most of these programming questions. Well I can answer all the coding ones. May not always be the best code or in C ( I have not used C in 10 years)

That being said, I have no idea what the answer to the hexadecimal one is ,but I can google it in 5 minutes. When would I use hexadecimal given what I do?

About the one where you change what you print out based on base 3 or base 5. I know you use modulus for this. However, this is the kind of thing that would slip out of my head some times, since I rarely use modulus when I script or code. So it is easy for me to forget.

Licensing is definitely not the answer. Unless the question is how do you kill the interesting and energetic world of software development.

If it’s so hard to find someone who can write ten lines of code, why does every job interview I see declare that they’re not interested in me unless I have years of exerience in each of a half-dozen specialized tools and APIs?

As for the least common multiple problem, would you expect an efficient solution that computes prime factors, or would it suffice to write the following?

int leastCommonMultiple(int n1, int n2) {
return lcmHelper(1, n1, n2)
}

int lcmHelper(n, n1, n2) {
return (n%n1 == 0 && n%n2 == 0) ? n : lcmHelper(n+1, n1, n2);
}

It is interesting to me that most of the interview questions are write a quick program to do solve some silly math problem.

It shows math skills, not software engineering skills. It does not show you how well someone will do OO analysis and design or OO programming. You need to present a problem that forces the applicant to use the features of the language that you use in your daily programming (e.g., inheritance, polymorphism, etc.).

It is much harder to piece together solid interview questions than it is to simply say write some code that generates primes or reverses a string, but is necessary if you really want to find out if the applicant can do the job.

You may end up hiring someone who is good at math, but writes procedural spaghetti code.

I found that an effective way to interview programmers (back before we had screen sharing) was to ask them to bring a program they wrote, and explain to me what it did. Then, I ask them what problem they were trying to solve, and ask about some other ways to solve it.

It’s amazing how many people I interviewed, who brought in sample code that someone ELSE must have written, because they couldn’t tell me what it did. :slight_smile:

– Anca

I am an awesome programmer, when using actual programming tools. You know, vi on a terminal. I find that programming over a phone or a white board is pretty useless to me. For instance, I just copy and paste skeleton projects and fill in the blanks to do programming tasks. In dozens of scripting and programming languages. So I don’t remember syntax usually for a language without the hints provided by the skeleton modules.

I actually had one guy ask me to write out the program to do the Fibonacci sequence… without telling me what that was. Sure, I had done it before, back in 1989 in college. He seemed very disappointed that I didn’t know what that was off the top of my head and quickly terminated the phone call, despite the job being for messaging, which I was prepared to discuss/program in excruciating detail.

It’s been said that “Googling” answers is frowned upon because the programmer never attempts to understand it. I’m quite the opposite.

Just for the hell of it I googled a Sudoku Solver written in C to better understand how backtracking worked.

Also as a side project, I was writing a small imageboard, I needed a thumbnailer so I found an open source implementation and I only needed to set about 4 lines to configure it, but instead I found myself tinkering with the code for a few hours.

The thing is, being self-taught and going through community college right now doesn’t leave me in a good position to answer these “tough as nails” interview questions.

Not everyone who uses Google is completely unwilling to learn and understand the answers. They just don’t have a large library of coding books or a wealth of knowledge gained from a 4-year university to fall back on.

I don’t think Googling the answer is a bad thing. As long as you’re learning and applying what you learn, and not simply dropping in the code.

@Paul Jungwirth

def generate_expr(s):
	if len(s):
		yield s
		for i in range(1, len(s)):
			left = s[:i]
			right = s[i:]
			for r in generate_expr(right):
				yield left + '+' + r
				yield left + '*' + r

if __name__ == '__main__':
	print set(expr for expr in generate_expr("123456789") if eval(expr) == 2002)

mind-numbing jobs attract mind-numbing candidates. nothing new here.