• Post Reply Bookmark Topic Watch Topic
  • New Topic

Anyone else losing hope in the existence of competent software engineers?

 
Scott Shipp
Ranch Hand
Posts: 217
11
Eclipse IDE IntelliJ IDE Java Scala Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Based on my interactions with other software engineers online (in places like Stack Overflow and Reddit) and in person (in places like my local university, software meetups, work environment, giving interviews for open positions where I work) I am slowly losing hope that a majority percentage of software engineers are competent to do their jobs. Does anyone else feel this way?
 
Campbell Ritchie
Marshal
Posts: 53176
124
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
We do see quite a lot of people here who are obviously struggling. We do not know however whether fora attract a specially‑selected population of people who are having more difficulty than their peers, or who have chosen courses badly taught, or something like that.
 
Joe Ess
Bartender
Posts: 9372
11
Linux Mac OS X Windows
  • Likes 4
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The same can be said for any profession.  I have an auto mechanic who I recommend to people as if he can turn rust into steel.  Have you ever seen a really good carpenter put together cabinets?  It's like poetry.  The world is full of people who know just enough to get the job done.  To find someone who has genuine skill and enthusiasm for doing a good job is a rare thing.
 
Tim Cooke
Sheriff
Posts: 3465
165
Clojure IntelliJ IDE Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
What Joe says.
 
Randy Maddocks
Ranch Hand
Posts: 96
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I too echo what Joe says.

In any profession if it is just a job to you, a paycheck that pays the bills (which in itself is not wrong of course), a daily drudgery that you struggle to get through, then whatever it is you're producing or developing is going to reflect that. But if it is a passion, something you really care about, something that you're enthusiastic about and dedicated to, then it generally follows that you will become very skilled at whatever it is you do.

But I am more or less repeating the same thing Joe said, so back to "What Joe says"
 
Campbell Ritchie
Marshal
Posts: 53176
124
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Joe Ess wrote:. . .  The world is full of people who know just enough to get the job done.  . . .
Is that the definition of basic competence?
 
Tim Cooke
Sheriff
Posts: 3465
165
Clojure IntelliJ IDE Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Joe Ess wrote:The world is full of people who know just enough to get the job done

... and do just enough to satisfy their minimum contractual obligation for employment. A.k.a: The coin-operated engineer.
 
Jan de Boer
Ranch Hand
Posts: 628
5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
No sorry Scott, I am one of the stupid people you are referring to.
 
Liutauras Vilda
Marshal
Posts: 3413
131
BSD
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Scott Shipp wrote:I am slowly losing hope that a majority percentage of software engineers are competent to do their jobs.

1. Do you have some example questions you gave, what were your expected answers and what were your actual responses you got?

2. What defines programmer as competent according to you?
 
Jan de Boer
Ranch Hand
Posts: 628
5
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thinking about this subject, I understand that you would expect people to do their outmost at their job, and thrive to produce quality. Sure. But people have a life outside software. A person only has a limited amount of energy, time and focus. Some people, including myself here, have a lot of other interests. I have to divide those interests, and keeping up with the latest software technologies does not always come first. I aim at producing quality during my work hours. Outside of that time, I also want to help my daughter studying, I want to keep myself fit, I am an athletics coach as you might know, and in my free time I like to study some non job related things. I am making real good progress in speaking Korean lately. So am I doing just enough to satisfy my minimum obligation for employment? Well, not the minimum obligation, but I have other focusses in life, could you understand that?
 
Tim Moores
Saloon Keeper
Posts: 3336
61
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
@Jan: I don't see what any of that has to do with the question at hand. Nobody is arguing for people to make becoming better at their job their full time occupation. The question is about what happens on the job, not off the job. "minimum obligation" sounds rather negative, though, although I don't know whether by that you mean just the time you put in, or other factors like enthusiasm as well. I would expect a team full of people doing just the minimum not to be a high-achieving team - which may or may not be OK for the job the team is tasked with.
 
Jan de Boer
Ranch Hand
Posts: 628
5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Tim Moores, the minimum obligation is copied from Tim Cooke. Inside work hours or not, I think it is more about how you see your work, as goal, or as a mean to another goal. I see it as the latter, therefore according to some I lack the passion. So be it, that is my priority, I don't feel like discussing it.
 
Paul Clapham
Sheriff
Posts: 21977
36
Eclipse IDE Firefox Browser MySQL Database
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
If Jan only does enough in his day's work to get that day's work done in a competent manner, I don't think we should look upon that negatively. I don't feel that we should require our programmers (or plumbers or lawyers or bus drivers) to be enthusiastic, or to be focused on career goals. I'd like the resulting programs to work correctly and the drains to not leak and the paperwork to be filed before the deadline and the bus to arrive on schedule as far as possible, that's all.

But Scott seems to be pointing the finger at software engineers who aren't even competent. I don't think that Jan is claiming to be incompetent, just ordinary. Ordinary is just fine with me.
 
Campbell Ritchie
Marshal
Posts: 53176
124
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Paul Clapham wrote:. . . I don't think that Jan is claiming to be incompetent, just ordinary. Ordinary is just fine with me.
Sounds like what I said on Thursday. We do have plumbers round here who can mend a pipe so it doesn't drip, and publicans who can sell beer which tastes good, and bus drivers who can drive a bus in a straight line, and lawyers who do ensure the paperwork is there on time to buy the house.
I know when I was at school, the head expected everybody to be above the form average, but . . .
 
Maneesh Godbole
Bartender
Posts: 11445
18
Android Eclipse IDE Google Web Toolkit Java Mac Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Many years ago, my dad had some remodelling done, which involved knocking a hole in a wall and creating a doorway (without doors).

In India, then, as now, one contracts the job out to an agency, who in turn employ masons on a daily wage basis.
The work commenced and eventually the mason announced he was done. When my dad went to inspect, it was blatantly obvious that the wall for the doorway was not 90 degrees. He pointed this out to the mason who replied "For x Rs. of daily wage you get a 100 degree right angle"

Like they say, for peanut, you get monkeys.

Having said that, I agree to the overall sentiment. Humanity in general is demonstrating lowered IQs per generation.

I once interviewed a guy. I gave him a simple task. Consider this wall. Consider this white board. Tell me what logic would you use if I told you to place this white board at the exact center of the wall. Logic in simple human language. No code, no algorithms. He couldn't tell me.
And he held a Masters degree in computer science.
 
Campbell Ritchie
Marshal
Posts: 53176
124
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Well, just as 100% is better than 90%, 100° is better than 90°
 
Scott Shipp
Ranch Hand
Posts: 217
11
Eclipse IDE IntelliJ IDE Java Scala Ubuntu
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Liutauras Vilda wrote:
Scott Shipp wrote:I am slowly losing hope that a majority percentage of software engineers are competent to do their jobs.

1. Do you have some example questions you gave, what were your expected answers and what were your actual responses you got?


I have one that definitely sticks out in my mind from an interview I gave earlier this year. My question was let's say we represent a range of numbers from a lower bound to an upper bound. If I have two of these ranges, can you write a method that tells me if the ranges overlap? The candidate stared at the whiteboard for awhile and he said, "Isn't there a library that does this? Math.range or something?" To which I replied "There probably is, but how would you implement it?" Then he struggled on for the next twenty minutes getting confused over and over. I kept bringing him back to, "How would you tell if they overlap in plain language? Forget about code for the moment." The answer I expected was anything along the lines of "check if either bound of one range lies within the bounds of the other range."

If the upper and lower bound are represented as integers (which they were in this question) one line of code actually works: "return rangeA.getUpperBound() > rangeB.getLowerBound() && rangeA.getLowerBound() < rangeB.getUpperBound()". But I would have accepted some more complex version. Usually most candidates can work there way to the single line of code as they consider the different possible scenarios.

Unfortunately the candidate never answered and we had to move on after about thirty minutes because we had to cover some other ground. It wouldn't be much of an issue normally if it were just an outlier, but that has been my average experience recently.

Outside of interviews, in general conversations, certain comments have just really stuck out to me. Comments similar to, "yeah I don't know what 'synchronized' means I have to go look it up" (from a web services developer) or "I don't get what the big deal is with using System.out.println" (in production code).

I would definitely not consider Jan's comments above as being included in this. Jan sounds like a competent developer to me.
 
Ryan McGuire
Ranch Hand
Posts: 1108
7
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Campbell Ritchie wrote:
Joe Ess wrote:. . .  The world is full of people who know just enough to get the job done.  . . .
Is that the definition of basic competence?


Yes, that is pretty much the definition of basic competence.  The bigger issues is how long a person with just basic competence is happy to stay at that level.
 
Junilu Lacar
Marshal
Posts: 10410
125
Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Scott, the last time I had to fill 3 open spots on my team, I had to interview close to 60 people. A hit rate of about 1:20 is pretty dismal and discouraging. The entire process took me about 2 months. It was rough for both me and the recruiters I worked with but I don't like to settle because I know that can only lead to disappointment. The best results I've gotten has always been when I don't make too many compromises during hiring. What I look for is not so much the ability to answer all questions satisfactorily because there will always be something people don't get. If you raise the bar that high, it will take forever to fill a spot. Instead, I look for people who can at least take criticism and are open to coaching, even if they argue their points that don't align very well with the way I see things. The upside, of course, is that when you find the right guys, it's usually very rewarding to see them learn and grow under your tutelage and guidance. This is what keeps me motivated and determined to wade through as many technical auditions as it takes to find my guys.  And yes, they are auditions, not interviews.

You've already gotten involved in the other thread where we discuss the gap between what academia is doing and what the industry expects. I think that gap is widening. There are islands of hope though. I hope there are more teachers like author V. Anton Spraul, author of Think Like a Programmer. I looked around his website and it's encouraging to see that the book even has at least one foreign language translation, in Chinese. If I ever make any in-roads with the folks I'm trying to start a conversation with at The Ohio State University where my son is trying to get into the CIS program, I'm going to be bringing up all these topics and see what we can do to collaborate and try to improve the situation.

In the meantime, I do what I can by volunteering here and trying to spread the kind of the knowledge and mindsets that I think will help and I continue to encourage a commitment to Craftsmanship with the people on my team at work.
 
Junilu Lacar
Marshal
Posts: 10410
125
Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Scott Shipp wrote:one line of code actually works: "return rangeA.getUpperBound() > rangeB.getLowerBound() && rangeA.getLowerBound() < rangeB.getUpperBound()".

Except in the special case where rangeA and rangeB fully overlap each other, i.e., they are equal ranges. Looks like you missed at least one test case... There are at least two more besides that one.
 
Junilu Lacar
Marshal
Posts: 10410
125
Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I don't know if you do your interviews in a similar way but my auditions often turn into mini coaching sessions when I feel like I found a good fit. My wife used to question my approach when she heard me do some of these over WebEx. I told her all about looking for openness to criticism and coaching but she was still skeptical until she started seeing how it made me happier when I eventually hired the guys and started working with them.

Making it more of a conversation rather than a one-way question and answer thing has also helped potential candidates decide to go with my team when they have several options to choose from. I have had one contractor who has stayed with me for three years now. He keeps telling me that really likes working with the guys on the team I put together and especially likes it when he gets to work with me to do refactoring and test-driven development. It's quite gratifying and affirms my belief that I've found a relatively solid approach for hiring people to join our team. The down side to it is that these are also guys who are upwardly mobile and you have to keep them challenged and engaged in the work. If they start getting bored or the work becomes monotonous or if you get managers who come in and start poking their noses into the technical aspects of the development process or even start putting undue pressure on the team to deliver to unreasonable goals, then the next thing you'll find are your valued team members' resignation letters on your desk.

I did lose one guy for some of those very reasons a couple of years ago. The disappointing part of it was that he was a senior level developer. It's especially difficult to find those guys. What's more, he had only been with our team for a couple of months before he decided he wanted to try life as a full-time employee instead of a contractor. So, I wished him luck and he left our team to work at the place I had left before coming to this job (It's one of the banks that come to mind when you think of the 5 biggest commercial banking institutions in the US). Less than a year later, he got back in touch with me saying he wanted to come back to our team. I guess it didn't work out for him. Unfortunately, budgets had been adjusted by then and we had already filled the spot he had so I had to decline.

I had two other teammates who were just ready to move on. One joined Apple and the other joined a Bay Area startup. I still keep in touch with them though and they seem to be doing well based on their latest LinkedIn profile updates.
 
Campbell Ritchie
Marshal
Posts: 53176
124
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Scott Shipp wrote:. . . range of numbers from a lower bound to an upper bound. . . . if the ranges overlap? . . .
Now, I can see all sorts of things wrong with that code, but it did only take me five minutes to write I can think of a much simpler version.
 
Campbell Ritchie
Marshal
Posts: 53176
124
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Junilu Lacar wrote:. . . I don't like to settle because I know that can only lead to disappointment. . . .
In a previous “incarnation” I worked with several people who had been appointed out of desperation. And the amount of desperation they caused to everybody else . . .
 
Ryan McGuire
Ranch Hand
Posts: 1108
7
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Junilu Lacar wrote:
Scott Shipp wrote:one line of code actually works: "return rangeA.getUpperBound() > rangeB.getLowerBound() && rangeA.getLowerBound() < rangeB.getUpperBound()".

Except in the special case where rangeA and rangeB fully overlap each other, i.e., they are equal ranges. Looks like you missed at least one test case... There are at least two more besides that one.


Yes, I know that this interview question counts as a tangent to the original subject, but...

The code given works: e.g. rangeA and rangeB are both [3, 5].  return 5 > 3 && 3 < 5.  true && true is true.

There are so many possible cases where two ranges overlap, it turns out to be easier to code the don't-overlap condition and then invert it.  Two ranges DON'T overlap when one is completely greater than the other:
B.Lower > A.Upper || A.Lower > B.Upper

Now invert that to find when they DO overlap:
!(B.Lower > A.Upper || A.Lower > B.Upper)
!B.Lower > A.Upper && !A.Lower > B.Upper
B.Lower <= A.Upper && A.Lower <= B.Upper

That's pretty much Scott's code but with "or equal to" thrown in a couple times.  That will handle all previously discussed cases PLUS the case where either or both of the ranges are one integer big AND when the ranges overlap just at one integer, e.g. [3,5] and [5,9].
 
Jan de Boer
Ranch Hand
Posts: 628
5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Scott Shipp wrote:I would definitely not consider Jan's comments above as being included in this. Jan sounds like a competent developer to me.


Thanks! :-) I mostly would give a totally opposite answer than your candidate on such a question!

I am reasonably inventive, so I would give you a good working answer in code. Then the interviewer would say: You know there is actually also a library that does that? And I would think: "Ah, probably made a goof now. I should study more!". But reading this I understand why they do hire me after making these goofs.

 
Junilu Lacar
Marshal
Posts: 10410
125
Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Ryan McGuire wrote:The code given works: e.g. rangeA and rangeB are both [3, 5].  return 5 > 3 && 3 < 5.  true && true is true.

Of course, you're right. Excuse my brain flatulence. I was thinking of the other cases that you addressed with "or equal to" thrown in but mistakenly lumped this case in with them.

There are so many possible cases where two ranges overlap, it turns out to be easier to code the don't-overlap condition and then invert it.  Two ranges DON'T overlap when one is completely greater than the other:
B.Lower > A.Upper || A.Lower > B.Upper

Now invert that to find when they DO overlap:
...
B.Lower <= A.Upper && A.Lower <= B.Upper

Something I like to call "triangulation" or in this case, just coming at it from the opposite end. This actually happens to me a lot when I do TDD, finding cases you missed just by coming at the problem from a different angle.
 
Ryan McGuire
Ranch Hand
Posts: 1108
7
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Junilu Lacar wrote:
Something I like to call "triangulation" or in this case, just coming at it from the opposite end. This actually happens to me a lot when I do TDD, finding cases you missed just by coming at the problem from a different angle.


I like to call it "sneaking up on a problem from behind and catching it unawares."
 
Gravity is a harsh mistress. But this tiny ad is pretty easy to deal with:
the new thread boost feature: great for the advertiser and smooth for the coderanch user
https://coderanch.com/t/674455/Thread-Boost-feature
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!