The Non-Programming Programmer

Jeez, i felt the sudden urge to write that simple 1 to 100 counter in c, vb, c#, and ruby just to prove myself.

Now, that explains why I often have coworkers who can’t figure out how to programatically write to a text file…

Just have one anecdotal data point to add: A few months ago I went on an interview for a Mac Developer position. I have a lot of iPhone and some OS X experience so I felt I had pretty good odds. I spent a lot of time studying Cocoa Design Patterns (great book BTW), Core Data, Core Animation, basically all of the things a good Mac dev would use day to day. I got to the interview and was asked stuff about atoi and itoa and arrays. Granted I was able to answer the stuff but I was pretty caught off guard and had to solve the stuff cold, from scratch.

After that experience I realized you don’t study for the job, you study for the interview. That was my first technical interview and now I look back and realize how naive I was to think the interviewers would care about my knowledge of Cocoa design patterns and what I had written in Cocoa.

Fast forward to last week when I had an interview at a very prestigious company and spent weeks ahead of time solving as many interview questions as I could get my hands on (and consuming the excellent book Programming Interviews Exposed). The position was for basically a C# developer, I have very little experience with C# but got an offer because of (I suppose) my good fundamentals, ability to reason through problems, analytical skills, etc., but definitely not my C# skills.

So another possible solution to Jeff’s question is that a lot of these interviewers who are coming back saying programmers can’t program are interviewing for entry level positions which inherently means the candidates have little to no interviewing experience and probably don’t know they are vastly different than traditional interviews.

tldr: Don’t study for the position, study for the interview.

If you are having trouble finding people who can program then you are doing it wrong. A while back I was looking for an entry-level programming job. I thought that it would be a good fit, given that I have a BS in CS and I am actually good at programming. It turns out that there are very few jobs available and they all require that you know a bunch of APIs that could, for the most part, be learned in a week or two. As a result I applied to very few jobs and although I did eventually get one it sucked and wasn’t really a programming job.

I eventually wised up and realized that the software industry doesn’t want people who actually know how to program and so I continue to program - for fun. Meanwhile I am back in school getting my BS in Math (4.0 this time!) and I am going to be a teacher. I will probably end up steering my students away from programming as a career because it just isn’t a good way to find employment.

Oh you’re not talking about the paucity of entry-level programmers? Yeah, I see a lot of ads for people with 4+ years of experience. Of course I could have been one of those people in a couple of years, if entry level positions existed.

can’t close my tag, maybe I can do it from this post

@Brandon - I would say if you have to study for the interview questions, then you shouldn’t be applying for the job. Prepare by learning about the company, and maybe brush up on some arcane stuff nobody ever uses so you can nail the trick questions, but you should not have to study your coding. I get what you’re saying though - a good interview is important, but if your object is to convince them that you know something you don’t know, then it’s dishonest.

@Steve - yes I am proficient in all those things you listed except “Oracle” in general. I know PL/SQL and a little Oracle admin, and have used it recently - but sometimes when people say “Oracle” they want you to be an administrator or a client app programmer, and I’m not well-versed in the whole Oracle stack of crap. On my resume, I would not list Oracle at all, or I would list it last, and make sure to say “minimal” experience.

The last time I looked for work, I actually tailored my resume to each position - that is what you have to do at my level. For entry-level stuff, it’s ok to just make the laundry list, but for higher-level stuff, it pays to spend at least an hour tweaking your resume to match with the job description without being dishonest. Listing skills which don’t apply to the job is a waste of space, and contributes to the reader’s suspicion about you, and could actually prevent you from getting a call. Experienced HR people automatically suspect you are lying on your resume, and I’ve actually been told in an interview, “we gave you the SQL test because we thought you were lying about that,” and they also told me I was the only one who got their trick question right. I told them their question was not a good judge of a SQL programmer, and suggested a better question. I didn’t get the job :slight_smile:

In general, I think a big problem in the industry is too many “programmers” who don’t LOVE it enough to really know their stuff. It’s not about book smarts really - it’s about people who don’t have the personality type to be programmers. These people don’t love coding, and they will never be good at it.

I love coding so much that I’ve taken the time to learn lots of languages and different technologies, but I’m firmly grounded in the basics too. Questions to ask yourself are:

  1. If a new language were launched tomorrow, would you want to learn it? Would program Hello World, or would you try something more meaningful? Do you think you have the chops to learn a completely new language, not based on any language you already know?

  2. Do you like to open up your IDE and actually solve coding problems or do you just tell yourself you can do it and don’t bother to actually try it?

  3. Have you ever written a game that already exists? Or re-written a known software because you know you can do it better?

  4. Ever work on a personal project all night? I mean literally until sunrise the next day.

  5. Do you even have personal projects or do you just do this as a job?

If you can’t answer affirmatively to all those questions, I don’t think you should be a programmer. You need to love this job, or it’s going to drive you nuts. This is regardless of skills - I’ve known people who had skills but hated coding.

BTW, @Caspar - we don’t post solutions to FizzBuzz to prove anything really - any idiot can program FizzBuzz. People who love programming also generally love teaching programming, and solutions are generally posted in an instructive manner. And while 100 print statements might be a solution to the stated problem, it is not scalable, not efficient, and shows very little programming skill beyond a demonstration of KISS.

So… here it is in one line of C#… and yeah, I actually built and tested it. Would I answer this way in an interview? Maybe, maybe not, depending on the situation.

for (int i = 0; i < 100; Console.WriteLine((++i % 3) == 0 ? ((i % 5 == 0) ? "FizzBuzz" : "Fizz") : (i % 5 == 0) ? "Buzz" : i.ToString())) { }

@Jasmine What I mean is the questions asked at interviews are very different from day-to-day programming and designing. They typically ask questions with bad/good/excellent answers and if you haven’t experienced these types of questions you can be out of luck at interview time. Of course you still have to know what the job description outlines but the interview doesn’t usually cover that.

I think my saying studying is your ‘brush up on arcane stuff’.

Jasmine: Your 5 questions serves as a litmus test for qualifying good versus bad developer. Would you ask 5 similar questions of your dentist? I highly doubt your dentist spends the weekend drilling cavities for free. They might attend a conference now and then but nothing like what developers expect from one another.

Do we ever get a break? Just because one prefers learning on the job during business hours instead of sacrificing weekends coding up video games no one will ever see doesn’t mean they’re bad developers. In fact, they may just be smarter because they found a way to get paid to learn.

Regarding the 123456789 problem, if you add “-” to your list of operators you get 2 solutions that add up to 2001.

No those wouldn’t be interview questions - those are simply representative of the kind of thing you might ask yourself if you weren’t sure you liked coding or not. Dentists are a different breed - but I would bet that the good ones actually do love their work, and I know of a few who do spend the occasional weekend doing charity dental work. We know that there’s a large number of people in the industry churning out mediocre code, and they have no desire to make it any better.

Those people aren’t a detriment to the industry - in fact they are the life blood of the industry, and very little would ever get done without “grunt” programmers. Rather, they are a detriment to themselves, and while some of them will accomplish great things, the large majority will go on to other things, like management. There are also coders who do it because they have a passion for it - those people either go on to become Tim Berners-Lee, or they never accomplish much but spend a lifetime doing something they love.

You can not underestimate the importance of doing something you love. Those are the people I want on my team - if programming is a job, and you hate it like you would hate scrubbing toilets, then really it’s not for you, and it doesn’t matter how capable you are. Sure, you can be an asset for a while, but are you really doing what you love? Are your skills being wasted as a coder? Are you wasting your life here, when you could be the next world-famous astronaut, athlete, or toilet-scrubber?

When I see people with CS degrees who can’t code at all, I know they have picked CS for some other reason than passion, and they are never going to be motivated to be good programmers, even if they can learn the skills - and that is an injustice to them… although it does get a lot of work done out there.

I work with a ton of paycheck programmers who could all write functions to find prime numbers or reverse strings. The secret is enthusiasm, passion and focus on quality.

Yes, some people are “frauds”, but we’re all frauds. Software is a huge confidence game, where we get paid to do something we’re not even sure is possible until we’re finished. Most of the time it works. When it doesn’t, it’s almost never because someone sorted an array wrong.

@DLitz: Or you could just, you know, use a >code< tag. It seemed to work for my answer.

Oops… I mean <code> of course :stuck_out_tongue:

I found this post through twitter and I had to laugh. It is so true! I was interviewing Computer Science graduates at a college job fair. I asked the first technical question – using any programming language you like write me a function that will return the mean of 10 numbers. Only 30% of the interviewees could do it. Sad.

First, I’ve been on both sides of the interview table. Clever math questions, “thought” provoking questions like how many eggs fit in an 747, clever questions about string reversals, linked lists v. arrays are all pointless. I’ve used 'em and had them used on me and in the end they had little bearing on the interviewee’s impression of me or my impression of the candidate when I was the interviewer. I’ve run into plenty of “smart math guy” or “good puzzle solver guy” that couldn’t build solutions to save their life. In my 30+ years coding, the number of times I’ve actually leveraged my math background or some CS trick like bubble sorts is tiny. I work with some people now that couldn’t solve a simple math puzzle to save their life but regularly churn out clean, usable, maintainable solutions. I would much rather have “maintainable solution guy” than “clever math guy”.

When I interview people, I look for a couple of things:

  1. “Are they a tinker” questions. These include whether they have their own systems at home, what they are using, why did they pick what they did etc. If a candidate does not have their own setup at home that disqualifies them on the spot. If they aren’t problem solving at home, they won’t at work.

  2. “Are they a resume leech” questions. A resume leech is someone that puts on their resume a project, on which they actually worked, but were a minor player. So they describe in great detail this complicated system that was mostly built by someone else and claim it for their own. To weed these folks out, I ask them in detail about the project and how they got specs, what were some of the pitfalls, who were the stakeholders, and so on.

  3. “Are they honest” questions. The resume leech questions are part of this, but the single worst thing to me is to find someone that is dishonest. The simplest means to determine this is to ask them a question to which they are very unlikely to know the answer. I want them to tell me they don’t know. This isn’t a clever question. This is something tangible. For DBAs I used to ask them to tell me the difference between a unique constraint and a unique index. Most candidates will try to BS me. BS me once during the interview and that’s the end of the interview which is why I usually ask this type of question early.

  4. Lastly, the only way to truly know if a developer knows what they are doing is to actually have them do something. I typically have some minor projects handy to dole out to interviewees to see if they can do it. I remember one company to whom I contracted, had a simple app they had the candidate build on the premises. Once piece of the spec was intentionally missing. They used that to see if the candidate would spin their wheels or actually ask someone.

I can’t say my system is perfect because it definitely is not. But I has helped me trim the interview times down and get good people or identify bad people quickly.

[COLOR=blue]">http://www.etoiledevenus.com][COLOR=blue] voyance[/COLOR]: That article makes me feel good.
thnx

voyance : The worst thing about all this - apart from having to work with them - is realizing they keep average salaries down, because business have to worry about being profitable with some of these no-hopers on their team.

Scary but probably true. Thanks for the tips, I will for sure utilize some of the tasks to clear out some applicants.

http://ironicprogrammer.blogspot.com/2010/03/scary-but-maybe-true.html

So what is the solution? As somebody who is looking forward to getting into the industry where does one learn to be a programing programmer(P.P?)? From the previous deluge of post it seems that a computer science degree is the least desirable option to learn real world problem solving.

From the previous deluge of post it seems that a computer science degree is the least desirable option to learn real world problem solving

No, a computer science degree is fine; you just have to do it right. That means you can’t just sleepwalk through the courses, pass the exams, and get the diploma. You have to seek out practicums, research projects, and internships, or start your own programming projects trying to apply the theory you’ve learned in the classes.

With the current economic conditions, we don’t hear so much about the shortage of programmers, but the problem still exists. Particularly when you start talking about the shortage of competent programmers. There simply aren’t enough of us.

I while back I read an article in Business Week titled “Software gap - a growing crisis for computers”. A few quotes:

"The overriding issue is people - specifically, skilled computer personnel... Already, the supply is far short of the demand, and the gap is widening inexorably. For the foreseable future, there is literally no possibility that we shall have enough trained people to go around."

The implication of this gap for business and science … is that
“use of computer systems five years hence will be seriously
hobbled”. There are only about 120,000 programmers in the U.S. -
and right now there’s a shortage of 55,000 or more of these
new professionals, according to some estimates.

[…]

John A. Devries, chairman of Computer Applications Inc., emphasizes,
“Unquestionably there is a software problem that will extend for
two years or more.”

[…]

Want ads in any newspaper show brisk demand for programmers.
Recruiters are active and job-hopping is common; one company
is offering a $100 reward for leads to programmers. Salaries
for college-graduate beginners start at $6,000; a couple of
years experience brings $10,000 to $12,000; special knowledge
in key areas such as time-sharing or systems programming brings
$15,000 or more.

[…]

“The market for EDP personnel is tighter than hell.” According
to Dick H. Brandon, head of Brandon Applied Systems, there’s a
need for 175,000 now - and by 1970 this need will swell to
220,000, plus 275,000 related jobs, in the U.S. alone. And
rapid growth in Western Europe makes it an international
shortage, as well.

from “Software gap - a growing crisis for computers”, BUSINESS WEEK,
November 5, 1966, pp. 126-133.

(At least it’s reassuring to know that things can only get better…)