15

What are your common gripes about junior developers that join your team or whom you have to work with? Obviously they are inexperienced so you can't expect them to know everything, but what skills are often inexplicably missing -- and how, specifically, can we help them build up these missing skills?

I don't mean inter-personal skills like 'listening to advice,' I mean technical matters like (if applicable):

  • 'you've never done SQL?'

  • 'you've never written a unit test?'

  • 'you don't know how to use a Unix command line?'

Things which you do expect - I'd like to hear your observations and techniques for teaching new programmers to get past these specific shortcomings.

gnat
  • 21,442
  • 29
  • 112
  • 288
Andrew M
  • 1,121
  • 9
  • 19
  • 13
    Single most irritating thing: constantly asking about what's irritating. :-) – Jerry Coffin Apr 08 '11 at 00:06
  • 12
    I don't think you should be irritated when people don't know things you'd expect them to know. What's important is that they're willing to learn =) – koenmetsu Apr 08 '11 at 07:20
  • Yeah agree with @KoMet if you have the willingness to learn to Listen I think its important :) – MalsR Apr 08 '11 at 07:34
  • 8
    I don't like this question, it has the wrong mentality for a developer. **WE WAS ALL ONCE** that newbie, and everyday we are a newbie at something. I would NEVER get irritated over someone who does not know something. This feels that there is too much arrogance involved.... – Darknight Apr 08 '11 at 08:06
  • 3
    Oh, closed, BRAVO. I read the six guidelines consstructive subjective questions and this fulfills all of them. Frankly the nonconstructive part is busybodies closing a thread that 13 people have already answered, just because they misunderstood the question. It is simply a reality that senior developers will sometimes be disappointed in the abilities of junior developers, this question only seeks to find any patterns in this disappointment so we can better avoid difficulties. Ignoring legitimate complaints and criticism doesn't benefit anyone and it's got nothing to do with arrogance. – Andrew M Apr 08 '11 at 09:38
  • @Andrew M: This topic is a gold mine. Thanks for asking this question :) – James P. Jul 09 '11 at 12:13

11 Answers11

25

Not knowing what version control is, or how to use it properly.

One of the junior developers who has been at my company for several months recently had to get taught the very very basics of Subversion. It really made me cringe... she's been checking in code to live projects the whole time... and had no idea what she was doing...?

sevenseacat
  • 3,084
  • 1
  • 23
  • 23
  • 4
    Cringe? She's lucky she still has a job. – Rein Henrichs Apr 07 '11 at 23:15
  • 2
    This seems like it's more a matter of "not knowing what you don't know" or "not admitting what you don't know." Had she asked for help from the start, would it have been a big deal at all? – Michael McGowan Apr 08 '11 at 00:24
  • 1
    ouch, it sounded like me haha, we didn't implement version control until lately, and I joined the company as fresh grad, I did learn a bit of version control and subversion kind of thing in University, but never implementing it before. – Sufendy Apr 08 '11 at 01:17
  • How do you check code into a "live" project -- is it deploying automatically? – Kaleb Brasee Apr 08 '11 at 01:23
  • This kind of thing is really only a problem (IMO) if the junior isn't willing to admit when they don't know something and ask for help - especially when it comes to tools. Can't code worth a damn? Get out. Don't know the tool(s)? Come here and I'll teach you. – Steven Evers Apr 08 '11 at 01:32
  • Closely related to actively refusing to use version control on the grounds that "I write code without bugs" and "its too hard to use". – quickly_now Apr 08 '11 at 01:42
  • 1
    "That's the tool for backup isn't it ? You use it to save your code every evening ?" – David Apr 08 '11 at 06:50
  • 2
    It is one big thing that they nearly never teach you in school – Ilya Saunkin Apr 08 '11 at 07:40
  • Che checked in code to live objects for months and you didn't notice it? What kind of follow up is that? – Carra Apr 08 '11 at 08:25
  • 1
    How did she check in code if she didn't know the "very very basics of Subversion"? – David Conrad Apr 08 '11 at 08:38
  • I can definitely forgive this of junior developers as not even the top universities teach students about version/source control. Hell, a bunch of people I've recently graduated with still don't use it at their companies. I'd go as far as to say that the lack of version control teaching is the biggest problem in teaching software engineering today. – Mike B Apr 08 '11 at 09:00
  • 1
    @Kaleb Brasee: No, but she managed to make a right royal mess of a few repositories, then only pushed *some* of her checked-in changes live. Hilarity did not ensue. – sevenseacat Apr 08 '11 at 09:51
  • 1
    @Elijah Saounkine: We were taught the basics of revision control at university, using CVS. Granted, I came out not knowing 99% of what I needed to know, but the concepts were there. – sevenseacat Apr 08 '11 at 09:54
  • @David Conrad: Honestly, I don't know. I don't know what she was doing. I just try to stay away. – sevenseacat Apr 08 '11 at 09:55
  • @Karpie Well, you were lucky. Generally speaking, this is very unusual though. I can't think of any school that would focus so much on making *developers*. – Ilya Saunkin Apr 08 '11 at 12:19
23

Not asking enough questions

I know they're juniors, I expect that they will make mistakes and just not know things. So many royal f**k ups could have been avoided by just asking a question instead of assuming something. Honestly, I can't be pestered enough.

I had TONNES of questions when I started out - asking them saved my arse on a number of occasions. Hell, I still do have lots of questions... I just like to think they're better questions now.

Steven Evers
  • 28,200
  • 10
  • 75
  • 159
  • Gee... almost the same answer I posted, you go in about 5 seconds before. – quickly_now Apr 08 '11 at 01:41
  • 2
    "you are annoying !! I'm busy here, can't you think by yourself?" if you are unlucky!! haha – Sufendy Apr 08 '11 at 01:56
  • Yeah true defi but at times you get juniors who will be a bit backward as well to ask too many questions such as depends on a rather moody or irritable senior member in the team. I guess good balance on both sides is the way... – MalsR Apr 08 '11 at 07:37
  • 4
    +1 - A subcase of this is not asking back after an explanation. It did really piss me off when I explained some task to a junior, he nodded, I thought he got it and would get to the job, then two weeks later he comes back, *asks the same questions again*, nods again, then another two weeks later... Fair enough, it was not a trivial task, but for God's sake don't pretend you understand it if you don't. And if you think you understood something, make notes so that you remember it two weeks later. – Péter Török Apr 08 '11 at 07:41
  • 1
    Some people, on the other hand, ask too many questions (on Stack Overflow). – BoltClock Apr 08 '11 at 12:01
  • @BoltClock: I think that the only time that a person can be asking too many questions is if they _really_ aren't qualified for the job. Part of being a qualified developer is knowing how to research and "figure sh!t out". As long as they're trying to do those two things, I think it's relatively impossible to ask too many questions. – Steven Evers Jun 08 '11 at 01:38
  • 1
    @SnOrfus: Those unqualified ones are who I'm referring to :P – BoltClock Jun 08 '11 at 04:43
  • @BoltClock: Ah. I see now. +1 – Steven Evers Jun 08 '11 at 14:10
14

Believing you're the first to encounter a situation.

Every programming problem you face has been faced by others, in some general form. There is so much to learn from experienced programmers. I'm old enough to remember programming before Google, and it sucked. It was even worse when we had search engines, but there just wasn't that much good information on the web yet. Programming now is so much more productive because you have access to global knowledge in seconds. People who don't use it are ignoring it at their peril.

Edit:

Just to be clear, I'm not advocating copy/paste programming. I'm certain, however, that you need to review the existing knowledge before you can make good decisions yourself.

Scott Whitlock
  • 21,874
  • 5
  • 60
  • 88
  • 1
    Well, also you don't want the developer to copy-paste all of the code from some doubtful resources from the Web. Searching is good to get some ideas, maybe solve some fundamental understanding issues, but never to get ready solutions. It also makes the developer dumber; maybe it makes him a good collector, but not an inventor. – Ilya Saunkin Apr 08 '11 at 07:39
  • I agree at some point with Elijah, copy-pasting code without making time to learn what it does, doesn't accelerate your programming skills. Worst, it will take over and become a bad habit. – setzamora Apr 08 '11 at 09:34
  • 1
    Sure, but @Scott didn't say anything about copying and pasting code, he just said don't assume you're the first to encounter a situation i.e., realize that there may be some information and experience out there you can benefit from. Example: I want to know if two strings are similar. Is there already a known algorithm to solve this problem? Imagine if a developer just decided to start rolling their own without even being **aware** that answers already exist. – David Conrad Apr 08 '11 at 11:44
  • @David Conrad that's right, point taken, we are on the same page here. – Ilya Saunkin Apr 08 '11 at 12:24
14

Copy paste and trial and error instead of seeking to understand the underlying fundamentals

Many junior developers will copy code that looks close, then almost randomly try different permutations of modifications by brute force until they hit on one that works. If you don't know why it works, chances are you are introducing bugs in the boundary cases that someone who does understand it will have to clean up later.

Keeping their "first draft" of code

When an experienced developer writes a new function of a certain complexity, they start out with a stub that does nothing but compile, then rewrite to add high-level pseudo-code comments for the overall algorithm, then rewrite those comments one at a time with actual code, adding and removing dummy code as needed for testing, then rewrite to remove redundancy that emerged during the implementation, and so on in a series of successive and incremental improvements.

Junior developers have a tendency to write it in one big chunk, then do massive brute force debugging. They don't like to delete a line of code once it is typed into the editor, and are so happy they finally got it to work that they are loathe to rewrite for non-functional improvements, but they are the ones who need to do so the most.

Karl Bielefeldt
  • 146,727
  • 38
  • 279
  • 479
  • 1
    +1 for "copy and paste instead of seeking to understand", although of course this is not a problem unique to new programmers, just to bad ones. New programmers at least have a chance of growing out of it - the guys i work with who have been programmers for decades and still do this don't. – Tom Anderson Jul 10 '11 at 09:46
  • Part of this may also be a consequence of management style. Task is already talking longer than expected and the manager wants your feature tomorrow. You rush to get get it working and quickly move onto the next task. Everything is broken down into microsized task cards, so there no time to refactor or take a step back and look at the larger problem as a whole – Jamie McGuigan Sep 21 '18 at 22:05
10

Thinking that they know everything.

I had a jr. intern who tried to solve everything with javascript. Tried to explain several concepts, but he always thought he could do it better. Now he quit and im reworking a major program he built for print output using HTML instead of a print ready technology like PDF. Not to mention a pile of other major problems.

Lesson is to ask seniors for major overarching guidance early in a project, dont go off architecting without help. You can write the code and details alone, but make sure you at least use the right technology.

P.Brian.Mackey
  • 11,123
  • 8
  • 48
  • 87
5

I rarely get annoyed when juniors don't know the basics, they are not taught industry skills such as SCC in University. It's the senior devs job to teach them. I only get annoyed by personality clashes. But I get most annoyed by senior devs who don't know the basics.

Craig
  • 4,302
  • 3
  • 21
  • 21
  • 1
    @Graig is right many things which annoy us seasoned developers regarding juniors are things we had to learn not at a university but in a commerical environment. – Nickz Apr 08 '11 at 03:31
5

Not wanting to advance their knowledge -- taking the path of least resistance instead.

The other day an intern along with the graphics designer (who is surprisingly skilled in programming) asked for help because they ran into trouble implementing something in jQuery -- closure can be painful if you can't see it coming.

I sat down with the intern and explained exactly what was going wrong and why. We fixed the bug, then I pointed out several additional improvements that could be made ("since I 'm here") and we ended up rewriting the guilty function in 10 lines instead of 20 and without bugs. After answering any questions, satisfied that everything was OK in the world once more, I left.

The next day, the intern came with a question that revealed he "um, wanted to make some changes and rewrote the function my way because I found it hard to understand" (for the most part undoing my improvements).

He could either have tried harder instead (asking additional questions, reading up on the concepts I mentioned) -- code so short cannot ever be that hard to understand -- or take the easy way out. It saddens me every time I see someone do the latter.

Jon
  • 527
  • 3
  • 15
  • Interesting, I do wonder though if possibly you did make it allot harder to read. I remember my first project manager doing this a couple of times (and me being guilty of changing it back also) While I'm sure in retrospect his approach was better I was simply not advanced enough at the time to understand why and how it worked. – Maxim Gershkovich Sep 27 '12 at 07:22
3

Not understanding OOP. Sadly this is way more common than most of us probably realize.

Knowing how to create a class, abstract class, interface, or even knowing polymorphism is one thing; understanding how to properly use them to the benefit of your program is another.


If you want to avoid this one, I found these questions and the answers to them enlightening:

Nicole
  • 28,111
  • 12
  • 95
  • 143
  • Like on a basic level, they don't know what you mean by creating objects, classes and inheretence? Or more advanced stuff like using the design patterns (you've got to admit, the GoF book is quite abstruse, although there are of course other books/guides) – Andrew M Apr 07 '11 at 23:05
  • @Andrew I've expanded the answer a bit. – Nicole Apr 07 '11 at 23:08
  • 1
    And I see the converse: not knowing how to write plain old procedural code in C because of only being taught OOP. Then again, don't get me going about people who are not taught to write parsers any more because they are told all those problems can be solved using lex and yacc. – quickly_now Apr 08 '11 at 01:38
  • 1
    @quickly_now That's a good point, though `writing code other ways than OOP` and `writing bad OOP` are two totally different things. The first, I don't have a problem with. – Nicole Apr 08 '11 at 03:53
  • Most universities do not teach object oriented design. Also many work places work like silos even with junior developers...or have "senior" developers who do not know object oriented programming is. There are "senior" developers who got the title from working x years and senior developers who know their stuff.... – Cervo Jul 10 '11 at 14:33
  • I know OOP in terms of basic objects, but as a new developer have to agree that it is taught very poorly in college. I didn't realize get anything in the way of design patterns, and rarely had to actually go through the process of actually creating an interface (though we had to implement many, but that only taught really one side of the process). – Panky Jun 04 '12 at 19:50
  • Object Oriented programming requires problems with a certain threshold of complexity. It didn't really make sense at first because the coding problems I was trying to solve at the time where more simple than the extra complexity added by OO. Even as a senior, its mostly used when I need to write reuseable framework code. Object Oriented programming is different to just programming in Java where everything has to be a class and using this as boilerplate around a set of procedural scripts. OO is about how to abstract your code using composition, inheritance, encapsulation and polymorphism. – Jamie McGuigan Sep 21 '18 at 21:46
3

Not knowing what you don't know, and in ignorance thinking you know everything.

(And its close cousin, not wanting to ask.)

Partly this is an organisational thing - an appropriate incoming induction would go a long way to preventing some of these things becoming issues. But very few companies have time or people available for an incoming induction - something that should take anywhere from a few days to a few weeks and takes developers off their work. So we have to put out the fires instead.

quickly_now
  • 14,822
  • 1
  • 35
  • 48
2

I'm amazed at how many junior programmers relatively fresh out of a CS program are weak with algorithms. Poor algorithm choice may not really stand out in line of business applications, but when processing billions of web service requests a day, it really does matter.

Here's an interview question I use that almost all Junior programmers miss that highlights the issue:

Write code that calculates the Nth Fibonacci number.

They almost always go for the most write the obvious-but-inefficient

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

When asked to comment on the algorithmic complexity, I usually get "it's worse than O(N)... uhm... O(N logN)". It's actually (much) worse than that...

Eric J.
  • 631
  • 1
  • 5
  • 9
  • 1
    to answer your question about compleixty, one shouldknow that formula to calculate fibonacci numbers without recursion, which he would use instead of recursion in the first place. – P Shved Apr 08 '11 at 07:02
  • 1
    @Pavel: There's an O(n) and an O(1) solution... in fact `Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution.` http://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression – Eric J. Apr 08 '11 at 20:48
  • 1
    I'm not saying that the solution you posted is perfect. I'm just questioning the relevance of your follow-up question to such a solution, the question about complexity. What do you want to achieve by asking it, and—most importantly—why do you *expect* that what you wanted will be achieved given the answer to the previous question? (Did I make my point?) – P Shved Apr 08 '11 at 21:05
  • to make my point more clear, I'd suggest you asking about how the code could be improved instead of asking to estimate the complexity. I'm sure that some CS graduates would propose memoization, or say that they know the formula but didn't want to show it at once because you'd think they're smartasses. – P Shved Apr 08 '11 at 21:11
  • In practical terms, such a function could be discovered using a profiler and optimized by adding in a memoization cache. The inefficiency is only really a problem for large values of N. Best way to teach a junior about such code is to force them to step through the whole code execution using a debugger. For really large values of N, it turns out there is a mathematical formula http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibFormula.html – Jamie McGuigan Sep 21 '18 at 22:14
  • @JamieMcGuigan At the time, I managed a team that analyzed hundreds of millions to a few billion data points with the goal of reaching a decision about a new data point in around 100-200 milliseconds. I used the question to probe whether the applicant thought about the performance tradeoffs of any given algorithm. When I was a junior programmer, such discussions were necessary for standard business programming. The explosion of CPU and storage allows such considerations to be ignored for many domains, but was highly relevant to the software we were creating. – Eric J. Oct 01 '18 at 15:24
1

Doing backwards code indentation!

Of course it's not very "typical". I could never believe it was even possible, but what a normal developer would write like

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

she would write like (God, it still seems impossible to me!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

Frustrating isn't it?

Ilya Saunkin
  • 111
  • 3
  • What in the name of... – MSpeed Apr 08 '11 at 09:12
  • 1
    It's very amazing!!! – javanna Apr 10 '11 at 22:26
  • Its almost as if they where Arabic, Hebrew or Chinese where you read right to left, rather than the western convention of left to right. Is a perfectly valid way of indenting your code, but does mean you need to re-indent your entire file based on you deepest level of nesting, and it makes your code incompatible with everybody sharing the opposite convention. – Jamie McGuigan Sep 21 '18 at 21:56