The Non-Programming Programmer

Precisely. I wouldn’t interview a surgeon to remove my gall bladder by bringing a diseased small animal to the surgeon’s office and asking that the surgeon prove his skill at operating on it. Why would people treat professional computer scientists in effectively the same way?

Whatever happened to the value of a credential? Reputable schools do not create “non-programming programmers” if they give an individual a programming credential. In the short term, there are occasionally learning issues. For instance, I probably couldn’t do the “Fizzbuzz” test in Java, because I haven’t programmed in Java in years. But give me a week to come up to speed, and I doubt there would be an issue.

I’m a programmer and I honestly would have had trouble answering a lot of the questions people are talking about just going off my programming experience. And that’s probably because I’m self taught–I know how to program. But I haven’t used most algebra since high school. As a programmer my job is to solve problems. As for the math? Buddy, I’m working on a giant calculator.

Yep, same here. Just because someone doesn’t test well doesn’t mean they can’t program. I have created many many applications in the past 20 years and many of my applications are used by thousands of people in multiple countries.

If you don’t use something often you won’t remember it. I was looking at the Fizzbuzz solution and it is easy, but I couldn’t remember how to do it so just because of that I won’t get a job.

Let me give the guys a test on Java 8 and using FX 2 and 3D development and SOAP services and JSF 2 and PrimeFaces and and and. The things I work with every day for the past couple of years and lets see how they do. No I don’t remember how to do bubble sort. I do know how to type in google.com. I don’t remember how to calculate remainders. I know how to type in google.com. I think tests that do not test the real world are stupid.

Writing a test in a text box in a web page is stupid. I used a dos prompt and notepad before Java 1. Why do I need to keep on going back to that when I am using an IDE 8 to 12 hours a day 7 days a week? Give me a job and let me do the job. If I can’t do the job let me go without pay after a week. That is the way you should test someone

1 Like

I think in a lot of complex environments it takes more than a week to acclimate to a large project so that’s not necessarily a good way to do it, and most people wouldn’t work a week for free. It’s probably actually illegal in a lot of places. It would also be extremely tedious and time consuming to find programmers that way, and when you want a programmer you usually want one up and running ASAP because your business really needs one. But I get where you’re coming from.

<RANT>

“Woefully inadequate” - well, of course they are! Perhaps where you work your interviews are conducted by actual developers. Out here in “the business community” (I work for a large nationwide retailer, and have seen the same pattern everywhere I’ve worked (30+ years)) initial interviews are conducted by HR, who are nice people but don’t know jack about technology and just check the candidates resume against the job requirements (“Yep, 10 years of LanguageX experience. Yep, 5 years of DatabaseY experience. Wow! They know everything our job ad mentioned - AND THEY’RE UNEMPLOYED! Wooot!!!”). Second interviews are conducted by managers who, at best, haven’t programmed in 15 years, don’t know the languages or technologies we use today, and choose candidates based on non-technical factors such as “She’s young - she’ll bring a fresh attitude”, or “He worked for BigWebsite6 until last year when he got laid off - lucky for us!”. Sometimes a project lead will be dragged in, if he/she/it isn’t too busy, which is always. Developers first meet the “candidate” when the manager shows up with a new body in tow and says, “This is Fred. He’ll be working on your project. Teach him about our stuff…”. Hi, Fred… We had one VP who insisted on using a programming aptitude test (I thought it was fun) but when he got moved to a different area the test vanished (it cost real money and couldn’t have been valid because some people couldn’t pass it!). My point is, about 1/2 the time we end up with the New Guy who not only doesn’t know the languages and systems we use but can’t program their way out of a wet paper bag, and more to the point can’t or won’t learn how to actually produce clean working code. “But he/she/it is really good with paperwork!”, we’ll hear - and yeah, that’s great, but unfortunately ol’ Fred is filling a developer slot even though he can’t write 10 GOTO 10 correctly, and so we load up ol’ Fred, hook him to the long line of office chairs snaking metaphorically through the building, and push and pull this train towards the project finish line. Toot-toot! All 'board…!!!

</RANT>
2 Likes

In VBA

Sub prim()
Range("c4").Select
a = ActiveCell
Range("d4").Select
c = ActiveCell
For i = 2 To 100
For j = 1 To 100
b = a / i
d = c / i
If b = j Then
    For x = 2 To 100
    If d = x Then
    Range("c6") = i
    End If
    Next x
End If
Next j
Next i
End Sub

What if you are a self taught programmer? In my case I have been teaching myself AS3, JavaScript, PHP and python. I have made some complex CMS using AJAX & AS3 two way communication with PHP. I recently made my first python program compiled to run completely cross platform on 64 bit OS’s. I hold no CS degree. I have never worked as a programmer. Im not sure but I think I would have a hard time passing a test although I have never taken one. I understand types like Strings, Boolians, Integers, Floats. I can use typecasting in AS3. I understand for loops and iteration and incrementation. I understand while loops. I may not be superbly proficient in any one language but I know how to research and make programs that work.

Simple example of something super basic

def lightYearAway(num, usORmetric='us', sm=False, hint=True ):
  #Planet smaller than earth discovered 200 light years away
  if usORmetric == 'us':
    c = 186282
    small = 5280
    unit = 'miles'
  if usORmetric == 'metric':
    c = 299792458
    small = 1000
    c = c / small
    unit = 'kilometers'

  second = 60
  minute = 60
  day = 24
  year = 365.25

  d = c * second
  d = d * minute
  d = d * day
  d = d * year
  d = d * num
  if sm:
    d = d * small
    if unit == 'kilometers':
      unit = 'meters'
    else:
      unit = 'feet'
  s = '{:%d,f}' %len(str(d))
  s = s.format(d)
  if hint:
    s = s.split(',')
    s = labelNum(s)
    s = ','.join(s)
  return '%s light years is %s %s away.'%(num, s, unit)

def labelNum(arr):
  numName = ['hundred',
   'thousand',
   'million',
   'billion',
   'trillion',
   'quadrillion',
   'quintillion',
   'sextillion',
   'septillion',
   'octillion',
   'nonillion',
   'dicillion',
   'undicillion',
   'duodicillion',
   'tredecillion',
   'quattuordecillion',
   'quindecillion',
   'sexdecillion ',
   'septendecillion',
   'octodecillion',
   'novemdecillion ',
   'vigintillion']
  i = 0
  st = []
  for s in reversed(arr):
    if not s == '000' and s.count('.') < 1:
      st.append('%s(%s)'%(s, numName[i]))
    else:
      st.append('%s'%s)
    i = i + 1
  return list(reversed(st))

num = lightYearAway(200, 'us', False, True)
print num

Would I be hireable as a programmer? Im asking because I love doing it. I do it all the time like other people do crosswords. I want to peruse it as a career! Would I be considered a programming non-programmer :no_mouth: ?

Thanks, I am in the position right now of having to work with a programmer who does not know how to program. And let me tell you, it is absolute hell!

First there is the chock and disillusionment of having to work with someone who is doing an M.Sc in computer science and does not know what parameter passage is. Stuff that you learn in your first Computer Science class. What are they teaching in Computer Science schools?

Then there’s the time wasted, Covering-up for this person’s incompetence/mistakes. Doing the work that he/she is supposed to do. Teaching basic things on the company’s time. And then having this person take the credit for work he/she was supposed to do.

And then there’s just, the missed opportunity of learning from peers. While I am teaching “Hello World”, I could be solving problems collaboratively and learning from programmers with real skills. I am learning nothing new, only patience.

This all makes for a really demotivating workplace which I am now leaving because I am simply fed-up. It’s not my job to point-out to management when an unskilled programmer has been hired.
They need to learn this on their own. Hopefully, management will figure this out when I leave.

Thank-you for letting me rant.

1 Like

You probably could get a job, but I would not recommend hiring you based on that sample.

There’s a certain elegance and robustness that good programmers strive for. Some of it is because computer science started as a branch of theoretical mathematics, and some of it is because decades of painful experience have shown us that ignoring elegance and robustness will bite you in the butt eventually.

Anyway, some initial-reading problems that I noticed:

  1. Purpose of function and meanings of arguments are not clear in declaration of lightYearAway.
  2. Comment is not a Python docstring and doesn’t describe what this function does.
  3. There is a dearth of comments, in general.
  4. If usOrmetric is something other than 'us' or 'metric' then the function crashes.
  5. Repeatedly modifying d and s like that is confusing and bug-prone.
  6. lightYearAway violates separation of concerns. It calculates, with different hard-coded numbers depending on unit, and also creates formatted output, with hard-coded strings.
  7. labelNum looks buggy. We have zip and list comprehensions for a reason.
  8. Variable is called num but is actually a string.
  9. This code sample runs on Python 2 but is not Python 3-compatible. We should strive for Python 3-compatibility even if we’re using Python 2.

Hi There, I was curious to see the program to see a code written on paper, so I tried the link but it seems to be down… Is there any way for me to get in touch with the original creator so that I can see what code he wrote to get a paper pen feel available to code yet not share the system.

Sorry if this post seemed irrelevent to anyone, I am just curious.

I think one of the issues I have with “programming interviews” is the understanding that some programmers program differently than others. Some may also take a bit more time depending on the situation.

For example, if you give someone a programming task during the interview. One of the key things they would be measured in is time to complete, as such you’d be looking for people to just spit code out ASAP and hope they work correctly.

Adding a new feature or analysing requires time to design and sometimes the thought process may require to “sleep on it” to get a proper result. Unfortunately that is not something that can be afforded during an interview.

So how would I do it? I had two technical interviews which I would model stuff on. Of course I am biased due to the integration aspects of my work in the examples but here it is…

Given technology A, B, C make something that ties them together that does Y. Y can just be something as simple as having a button on A that talks to C that does something on B.

I don’t expect too much detail either like 100% coverage on unit tests or comments. Since this is a relatively rushed job, I’m not the only employer I am expecting the candidate to look for.

What I would likely expect would be an opinion on what they went through or how they could make it better, the hurdles they had faced, how difficult was it to find the information needed to get the task done.

One of the requirements I would have for a programmer is to have a github presence. Because I would actually want them to show me an example of a project regardless if it is trivial or not so I can see the coding style. Of course I would ask them to choose one that they can say they are proud of the quality of the code base…

Can they fake it, it’d be difficult.

(@PaulJ Wow, I should hate you for that ! But I can’t, it made me work harder on my code, and i liked it !)

Maybe you should consider adding errors during your interviews, just to see how the programmer is reacting.

I agree with WolfGang2. These math questions mean nothing except the person is good at math. I have programmed for 15 years in real world situations and have a good job right now. I can tell you on two fingers how many programs we have used that did anything with math. That’s how irrelevant math is to real world situations. Much like a calculus class. The average graduate won’t touch calculus after graduation so why do we take it?

A great programming interview would just have the interviewee explain OOP with a few other questions dealing with things they did on their resume. If they said they did Java for 5 years ask them a Java question pertaining to their experience. If the answer is correct then see if they are a fit personality wise at that point. If they are you have your person to hire.

Simple as that. Most programmers these days use google as a tool to code anyways. Which means if they have issue they go to stackoverflow or codeguru. It is what it is. As long as the job is done and on time. That is what matters.

Hi Jeff,
According to me,
Those who knows programming doesn’t go for lots of interviews.
I showing some facts
There are 10 jobs in the market and 10 candidates searching for job.
3 knows good programming and 7 don’t.
for 10 jobs 3 will be interviewed and selected, but 7 will be interviewed for 10 jobs 70 times.
This is not a new thing in the market this is just a representation of numbers.
Everything is same as earlier.
Earlier there were limited jobs and limited number of programmers (experts) but now we have lots of programming jobs and lots of number of programmers saying or pretending that they are programmers.

1 Like

I would use math questions but specifically Boolean logic math. It gets applied in SQL quite often. e.g.

(a == null -> b == c) && (a != null -> (b == a && b == c))
(a != null || b == c) && (a == null || (b == a && b == c))
(b == c && a == null) || (b == c && a == c)
a == b && a == c

The last line was based on Wolfram Alpha simplifying things for me so I don’t have to do it myself.

But in terms of dealing with calculus or complex problem solving chances are not much in most enterprises.

I think if the interview looked for a Java programmer you should have come up to speed a week before to prepare for the interview. Then again sometimes you just get the side swipe interview where you’re really not prepared for it especially if you’re getting the interview while you’re still working.

I am glad I found this blog. I am a nonprogramming programmer who somehow managed to pass through 4 years of college. I was already in my late 20’s going into college and opted for software engineering as a second choice. Long story short after 10 years with the same company; I have learnt a lot but realized going into interviews, I don’t.

I was asked on my very first interview which I was completely unprepared for, to explain hashmaps, abstract vs interface, memory leaks etc. I did not know how to answer these questions.
I learnt how to code by taking the examples out of books, redoing the code and changing the code to try new outputs. My job entailed learning how to code web crawlers, form based web applications and language learning scripts to name a few and on each assignment I searched for tutorials and admittedly copied code; but my projects worked and still till today run robustly.

I will get flack for this and told but it’s not your code and bla bla. Yes, that’s right but my argument is that not everyone is a Bill Gates or Nemo who can just see the code and write something new. Do I not deserve the credit for getting something to work and being able to go on and do it with multiple languages? Is my career a fake career? Once I was told to set up an Apache tomcat server and build rest API’s and managed to find the solution to do it. Yes, I agree, I would not be where I am if not for google, stackoverflow and others.

I agree I am in the wrong career, but where do I go from here. At 40 years old, i realized that I would have to apply for a junior developer position to learn everything there is about one programming language to be recognized as a true software engineer or developer.

Thanks to all you true programmers.

Just study common interview questions. Then you can learn about the required concepts as you go.

Here is the flaw in this line of reasoning:
As a career Software Engineer with a BS in Comp Sci and 3 decades of getting paid to develop software, I can tell you why coding tests are not a measure of one’s ability. It only measures up-to-the-moment memory of a specific algorithm (in the case of silly coding challenge tests) or a specific language.

When I got my degree in Computer Science, we were taught that there was a meaningful difference between the future career professionals who spent the required 4 years or more getting a degree like ours and the “ITT Tech” grads or the “script kiddies” with 3 or 6 months of total programming experience to their name (or nowadays the churn-and-burn major contracting houses of some overpopulated countries that recruit non-programmers off the street, give them a few video courses, then send them overseas slave-labor with an H1-B to generate income for them). We were told that taking all those numerous Comp. Sci programming labs, computer courses, Analysis of Algorithms, courses in databases and file structures, compilers theory and building, and a seeming endless parade of advanced math courses (4 quarters of Calculus, Discrete Math, Linear Algebra, Group Theory, Turing analysis, etc, etc) – that all of this would set us apart. It would make us career computer science software engineers.

So you graduate and go on to spend the next few years, then a decade, then several decades doing just that - using all manner programming languages, algorithms, frameworks, APIs, platforms, across multiple various computer architectures and systems, etc. A true journeyman that you can give a task to and end up with a complete solution. Then comes the problem with these tests:

  • Did I write elaborate graphical C-based X-Windows applications on Unix back in the day? Yes. Spent many months doing that, read and coded my ass off for 70-90 hours weeks and was very good at it. Can I write a 10 or 20 line X-Windows app today? No. Don’t remember.
  • Did I work extensively in Visual Basic and Visual C++ with MFC using Visual Studio for years? Yes. Did I do some really great work, using best practices after lots of extensive research, generating some pretty great software? Yes. Can I code a 10 line VB program right now? No. Don’t remember.
  • Did I work VAX 11/780 macro assembler and generate some of the cleanest most elegant assembly programs around? Sure. Remember it? Nope.
  • COBOL? Yes. Remember? Nope.
  • JYACC/JAM? Yes & Nope.
  • JavaScript? Yes, about 5 years. Remember most of it? Nope.
    And on and on ad infinitum.

However, if I take a week or two to deep dive back into any one of these areas and start to flex that muscle memory, I will be back doing great work in no time at all. The point is that I CAN do the work, and do it very well. But having instant recall of everything I’ve ever done throughout my entire career is not something I or anyone else is capable of.

So this means that companies that focus on “can you write 10 lines of code in Objective-C” and using that as their “filter” are woefully ignorant of what makes a great and successful software engineer/developer. Another example is that I spent over 3 long years (70-90 hr work weeks) writing sophisticated iOS apps for a company and would frequently optimize other developer’s code, etc. Before I worked on iOS, I had no direct experience in it. Then I became very experienced and was very successful at it. However, I haven’t used it in a couple of years, and I can already feel the effects of the “Immediacy of recall” fading. Sure, ask me some general questions about various categories of APIs, or how the Xcode IDE works, or what is the process for getting apps uploaded and approved and I can speak to that. But ask me what the parameters of a given API function are and I will fail your test. Do you see the pattern? Its NOT about what you are retaining in you head at this very moment, its about how SUCCESSFUL you’ve been when given any and all tasks in the past. Heck, I’ve done IVR scriping, programmed CSU/DSU units, wrote firewall code, uploaded config tables into network switches, written sophisticated fuzzy logic algorithms for commercial software packages, etc - but I can’t replicate any of that right here as I sit without rolling up my sleeves and “climbing back down into it”.

And THAT is the problem with these silly logic puzzles and 10-line coding tests in a specific language. You may get roughly correct answers from a person who has never programmed in their life, but just spend the past weekend watching Lynda/Coursera/YouTube videos in a particular language and being able to write a loop construct. You may also get a complete failure when asking a senior career developer that same question because they haven’t worked in the environment for a period of time (but were crazy mad scientists in it at some point previously).

Experienced software devs just smile and chuckle at all the constant rehashing and re-labeling of the same old concepts they understood 10, 20 , and 30 years ago, that are merely re-packaged with a shiny new name (or cloned git repo). Today’s JQuery, Node.JS, Ruby on Rails, etc, is yesterday’s PHP, which is the day before’s Perl, which is the day before’s shell scripts, etc. Today’s GO is yesterday’s Lisp, and on and on.

So which do you really want? An army of one-trick script kiddies with hardly any varied experience chasing that chase the very latest webdev or language “flavor of the day” and act like its the “greatest thing since sliced bread”? Or someone more seasoned who has seen and done so much more that treats all these things as just tools in their toolbox. Its like asking a well-seasoned journeyman carpenter if they’ve used the very latest “X25-Titanium Acmetron” hammer and failing them if they didn’t. They would just look at you and think: “It’s just a f*king hammer buddy, and I’ve used that think for 30 years.” But the naive hiring person would say, "but no… the “X25-Titanium Acmetron” is the “greatest thing since sliced bread” and if you haven’t used this particular model, then you can’t work here. Similarly, asking a seasoned career software engineer if they’ve used a specific new version of Oracle or if they have know the very latest API enhancements in Swift of Obj-C that Apple churns out every year is silly. If you task them with writing an iOS app, the good ones will deep dive and learn everything they need to learn to do excellent work. They will scan all the available API calls to do a certain task, look at 3rd party APIs if they needs something more, and generally knock it out of the park. Give that same task to a “3-monther” and they will robotically spew information they learned yesterday about design patterns and APIs. A seasoned developer will smile about the fact that they were doing MVC before it has a name, or working on object-oriented code in C even before C++ came into use.

TL;DR - You can’t really judge a candidate’s true ability, skill, or breadth of experience based on whether they can write you a 10 line program in your favorite language of the day. Present-moment knowledge has nothing to do with pass success in a given field. You wan’t the best Perl developer? All you’ll ever get is Perl code. A JQuery master? Same. Like a carpet installer, all you’ll get from them is carpet installation. But get yourself a true software developer with a long and successful track record and it vastly opens up how successful this person will be at your organization. They can do it all - just like a master craftsman is able to design and build any manner of furniture they may be asked, as opposed to someone who can only “assemble” boxed parts from IKEA.

^^ Spoken by the voice of true experience. This is exactly right. General principles and “what can you tell me about” and “have you ever heard of” questions are far more useful than “what is the API call for this method”. You will filter out a majority of really good an seasoned candidates by trying to be too specific, which always shows a level of immature naiveté on the part of the person doing interview.

I once had an (Google-like) interviewer ask me a specific question about the exact size in C/C++ of a struct that contained various different member types. I gave a reasonable answer, but in their eyes I got it wrong. What they really wanted to know (but didn’t actually ask) is if I understood the concept of compiler alignment and padding related details in memory structures. So it was basically a trick question. One they probably read in a book or a web site of “good questions to ask in a coding interview”. And if they went only on that, they might assume I wasn’t qualified to write C & C++ code) which would be woefully inaccurate. And yet, they themselves probably didn’t even understand that alignment and padding are system specific anyway, and may be completely different depending on the architecture of the platform the code is running on. Which is why the sizeof() / .size API calls were invented. But maybe they didn’t know that…

Point is, its far better to drop the “trick” questions and simply ask: “Do you know about alignment and padding of structures that compilers do in generated code? If so, what can you tell me about that.” That is a far better measure of one’s actual knowledge (present or past) than looking for “gotcha” type questions.