top | item 5968342

What it really means to be a “junior” developer.

66 points| jonathanmarvens | 12 years ago |medium.com

59 comments

order
[+] verelo|12 years ago|reply
It's very hard to say this without sounding like i'm not respecting the effort you put into writing this or the knowledge and experience you have accumulated as to date (which i honestly believe is significant), so please don't take it the wrong way.

Sometimes you don't know what you don't know. Experience often teaches you a lot more than the best design pattern to use, there is a lot of gut feeling involved, especially when it comes to making a decision today about how you might need to modify a feature in the future - you get better at predicting the future with time.

I have been doing this for around a decade now, and while I've done a lot in that time, realizing you have gaps and that you need to do your time to gain experience is very key if for no other reason than not coming across as a know it all in the workplace.

I still have a lot to learn too.

[+] jamesaguilar|12 years ago|reply
There's a lot of people stuff too. I have found that junior developers, perversely, are more defensive about bad decisions than senior folks. They tend to be quicker to leap to conclusions or become attached to a particular technical approach to a problem. Of course, senior people make these mistakes too, but, I find, at a lower rate.

It's not universal. I have no doubt that there are kids with six months of experience who perform better than me after my six years. But, I'd also be willing to bet that's an exception, not the rule.

[+] rektide|12 years ago|reply
Your focus on the benefit of experience is almost exclusively technical in concern- I think that is the not the primary classifier or motivator.

The technically adventurous are usually right, usually have what most could find ways to agree is technically a better plan, or has elements of it (elements that could stand to improve the technical nature of the product).

But technical superiority rarely has returns. And usually, for most companies, the returns aren't good, not good at all, and those tiny returns are not transferred to the pocketbooks of the workforce that can either hammer out the same old shift as everyone else, or who can go adventuring on genuinely good stuff that genuinely will operate far better. Good stuff, but which will ask much more of the workforce.

The thing with experienced people is, they're done making new experiences. And the thing with businesses is, they don't know how or haven't found grounds to promote exploration of advantageous technical work. This is an industry of get it done, make it work, and finesse and excellence are mired to fuck like every other industry everywhere and not a one of us has any idea how to unobstruct good work, nor do we have a workforce responsive to the call to action even when the possibility is striking them in the face.

There are definitely cases where the green-horns get uppity, absolutely a fact diving in beyond what they can back up in a discussion or technical proving. But classist discontent from those wanting to shake things up, finding a system of work where even those with marginal enthusiasm can participate in a high stakes game without being compelled to shit up the rest of their lives- that's far closer to the root, and it's disgraceful to me that we'd just pick on the enthused widely-read young ones as unexperienced and needing to be curbed, when usually in the work place there's not even a forum for that curbing to happen- the greenhorns are simply denigrated. Often by people who lack exposure to begin to state why. I'd caution that cautioning others that young-guns are dangerous and incompetent further reinforces excuses for this all too apparent denigration.

Thank you my employers all, who have been most kind in cooperating with me in sounding out a middle path between High Tech good ideas and practical and practiced. I think we've done great, and appreciate that we could dialog and discuss the paths without it coming down to the negative experience of the original post or slander of my ranks.

[+] jmduke|12 years ago|reply
Agreed. Put another way: less than 1% of the world runs on anything based on Node.js.
[+] polemic|12 years ago|reply
Did you tl;dr at the first break? :P

That's pretty much the message of the post.

[+] mgkimsal|12 years ago|reply
I'm coming up on 20 years, and still learning a lot, but far less about the tech, and more about how to work with different people/groups/orgs.

On the other side of the 'junior' definition is 'senior'. Have been looking at job listings the past few days (for a project I'm working on) and am surprised at how many posts for 'senior software develop' start with 'must have 3+ years of PHP development', and then add jquery or photoshop.

Don't get me wrong - not bashing on PHP (it's a large part of my bread and butter), but I didn't feel comfortable using the label of "senior developer" on myself till about 6-7 years in professional settings. Even then, I was conscious of many things I didn't know (obviously moreso than I was as a junior).

[+] derefr|12 years ago|reply
You know, I just realized--I don't think I've ever read a screed on "junior developers" written by someone with enough experience to actually have seen the entire progression play out (Donald Knuth would be a good candidate, if he didn't work in academia.)
[+] greenyoda|12 years ago|reply
In this famous Zen koan, substitute "junior developer" for "professor" and "senior developer" for the master:

Nan-in, a Japanese master during the Meiji era (1868-1912), received a university professor who came to inquire about Zen.

Nan-in served tea. He poured his visitor's cup full, and then kept on pouring.

The professor watched the overflow until he no longer could restrain himself. "It is overfull. No more will go in!"

"Like this cup," Nan-in said, "you are full of your own opinions and speculations. How can I show you Zen unless you first empty your cup?"

(Source: http://ashidakim.com/zenkoans/1acupoftea.html)

[+] dubfan|12 years ago|reply
You link off to some blog posts as being 20% of your inspiration for writing the posts, but they're behind bit.ly redirects. Now I can't tell if I've read those before without actually clicking on the link, which is rather annoying. What's the reason for this?
[+] jonathanmarvens|12 years ago|reply
Sorry about this actually. I have an extension that automatically does the bit.ly redirects on CTRL+C. I will update the post with the expanded URLs.
[+] wcdolphin|12 years ago|reply
The links are also very vaguely related to the topic. If there is a point which can be made using links, typically the text of the anchor tag should tell part of the story.
[+] jonathanmarvens|12 years ago|reply
I've updated the URLs. Sorry about that.
[+] thejosh|12 years ago|reply
Lazy way of tracking clicks, I guess?
[+] speeder|12 years ago|reply
One of my jobs, I applied for a junior position (it would be my first "serious" programming job in a big corporation), I went for the technical interview with the CTO, and was invited to get interviewed by the CEO other day.

During my interview with the CEO, I was frank with him, I did not went to a CS school, and if you asked me a random CS question I probably would not know, I did not knew how to use properly version control, my skills in the languages they used were lacking, and my OOP skills were also lacking. But we also ended chatting for about 2 hours actually, his early career resembled mine, and we had lots in common, and were likeminded, the CEO during our chat saw where my strenghts were, and hired me.

To my surprise, when I was to do some bureaucratic stuff, my title was NOT Junior, it was "Solutions Architect", that in that company was above Senior...

I wondered for a good while, why? The Juniors around me all knew more than me about basic CS...

I found out, when I could do lots of stuff they could not, they insisted in using whatever they learned at university, and anything that could not be fixed with their existing skills, they would fail to do...

The juniors once lectured me after seeing a "goto" on my C source code (I left it on the screen and went to lunch), yet when I asked them to make a better solution, noone could, all of them create incredibly complicated code, hard to maintain and confusing, and yet they were convinced their solution was better, because their teachers told them to not use goto.

After a while, it became clear, that my title was not for my knowledge, but my extensive experience (I started programming when I was 6 years old, most of the other company employees started during university), and my creativity, the fact I could always handle myself WITHOUT learning CS, meant that sometimes I would see solutions that everyone else would not see... Yet, the CS part I could learn, other employees (that were correctly always above my own title) would happily teach me.

It was back then that I learned how in a proper company with true meritocracy how titles work... Also, a company that actively avoided the problem I forgot the name (ie: the CEO for example told me he would never turn me into a bureaucratic manager, I was too valuable in the tech, to not be near the tech, likewise, there was junior programmers that he would promote to bureaucratic positions, because they were good for them, but lacking in decent coding skills, making them more valuable there)

[+] contravert|12 years ago|reply
Wow, this is one of the most arrogant comments I've ever read on HN. How does this story highlight how titles work in "a proper company with true meritocracy"? A true meritocracy assigns titles based on if the CEO shares the same background as you? You might be a great developer, but have you considered that you could be even better if you have a good foundation in CS as well?
[+] noonespecial|12 years ago|reply
Junior developers know how to do stuff. Senior developers know how not to.
[+] scotty79|12 years ago|reply
Once I was hired as a senior developer only because I negotiated salary too high to fit in junior developer salary bracket.

Names, badges ... just smoke and mirrors.

[+] ddoolin|12 years ago|reply
Honestly agree with this one whole-heartedly. Nothing really gives these people authority other than their title.

Lots of junior engineers don't know shit, and a lot of senior ones also don't, either. It's pretty meaningless.

[+] wcdolphin|12 years ago|reply
Give him some advice: speak up in a non-threatening way: "hey, can you help explain to me why X is actually worse of an idea than Y? From my experience and reading, it seems like Y has many issues with blah, while X is better at blagh."

I believe the root cause may be a bad culture fit. Either:

A. His ideas really aren't as good as he thinks they are, and he is either not soliciting feedback or receiving it in a productive and understanding way.

or

B. The team does not have a problem solving process which clearly identifies the 'best' solution to a problem for the company.

[+] jmcdonald-ut|12 years ago|reply
As a student almost done with school something that I've noticed or watched is that a lot of CS students tend to get egos at a certain point about their work, myself included. I recall from my experience that I did group work with a good friend and pushed a lot of my ideas without really listening to all of his--because I was so confident in my ideas. After self inflection I realized that my doing this led to two problems: First it is just downright rude, and the second is that I limited my learning experience by not hearing other ideas and learning how to merge ideas to create a superior one. Even funnier is that in retrospect some of my ideas were downright stupid or would have been difficult to maintain.

My main takeaway from the experience was that every time my ego starts to inflate I should take a step back and breathe. I'm not some God coder, I have three years of experience. I realize that this doesn't quite parallel what the author was talking about, but I felt like sharing it because it was a hard lesson for me to learn.

Also, as an aside, my step dad has been developing for 25+ years. He's a really quiet guy, but when he gets talking I realize just how brilliant he is at this stuff. To those already in the field with careers just blossoming, watch out for those who are quietly smart, if he's anything like other developers sometimes they just don't feel the need to prove themselves to you.

[+] zachlatta|12 years ago|reply
When I was hired by my current employer I was initially frustrated with my Junior Programmer title, but once I got to know the other three programmers on the team, I was blown away. I didn't know anything.

I cannot stress how important it is to keep an open mind and to not let your ego get the best of you.

[+] ryanSrich|12 years ago|reply
Having graduated from RIT I can tell you that most grads going into junior or entry level positions experience the same thing. That one year of co-op and a campus that breathes tech makes all the difference.
[+] throwaway1979|12 years ago|reply
I have to ask ... do they really teach Dependency Injection, Prototypes, Factories and other design patterns in school? If so, I am (a) very impressed, or (b) a bit obsolete because my CS education didn't even touch on these topics.
[+] knurdle|12 years ago|reply
Just to throw another comment in the pool. I've been playing around with computers and writing code now for about 25 years.

I've been playing with computers longer than some of the guys I've hired have been alive.

They are really smart guys, they are way smarter than I was at their age.

But it's just hard to beat experience and just being around means you've experienced a lot of different things. There's stuff I know where I didn't even realize I knew it until the context of that problem comes up and then all of a sudden, a little flicker goes off in my brain and it seems familiar to something I did x years ago and I can remember why it works like that.

This actually comes up all the time in debugging when something breaks. I've done it enough that the patterns are all familiar and I can pinpoint what broke a lot faster than someone more junior.

[+] asperous|12 years ago|reply
"Instead what they do is they make themselves experts in a few areas (usually one or two, as far as I have seen), and instead of learning every language, environment, and/or technology out there, they pick maybe one or two languages, environments, and/or technologies, and make themselves true experts in those."

This seems to be in stark contrast with the "always keep learning" philosophy I've read on other blogs.

Is focusing on one technology really the best way to be stay valuable in the industry?

[+] daeken|12 years ago|reply
It depends on what you want to do. If you want to stay on the bleeding edge of things, building awesome products and generally having a good time, then sure, always keep learning and switching toolsets and all that. But there are niches (e.g. driver development, reverse-engineering, compiler dev (just taking some niches I personally work in and know well)) where your toolset may not change substantially for a decade or more. This isn't necessarily the most fun work in the world, but that's why it remains highly paying, and will for a very long time to come. You don't see many people coming out of college and saying "you know what? I want to write kernel drivers for webcams!", versus "I'm going to build the next Facebook!"
[+] ryanSrich|12 years ago|reply
From my observations the highest paid freelancers in the tech industry are super focused. They take a technology, language, or framework and master it. A good comparison would be a highly sought after designer or illustrator. They are targeted not because they can design anything but because they have a specific style, a singular approach that everyone wants.
[+] jmduke|12 years ago|reply
Being the best at a few things is better than being okay at everything. This is not limited to programming languages.
[+] cunac|12 years ago|reply
30 years ago when I started I knew everything , now I know a little :-)

life sucks ...

[+] perkof|12 years ago|reply
The more I learn about software, business, design and leadership, the scarier it is - I know enough to know that there is still a lot to learn.
[+] UK-AL|12 years ago|reply
A lot of junior developer positions, are expecting people who can't code just yet, straight out of college. They are not expecting a developer whos been freelancing and building start ups at college. But they are not going to do something about it, because they are getting someone good for cheap.

Thats all thats going on. No need to justify it.

[+] espeed|12 years ago|reply
"We can't learn to see until we admit we are blind." -- Alan Kay
[+] nahname|12 years ago|reply
Welcome to ageism. Human beings, including technology people, have great difficult accepting good ideas from young people. I suspect it is because we like to hear stories about how something affect something else. For example, one development shop I was at decided to use Hibernate and we spent the next six months fighting performance problems. I'll never make that choice again!

That's not a real story, but I'm sure you've heard it before. Or the converse. Or some mix in between. Not really scientific how we base decisions on someone else's experiences.

[+] rektide|12 years ago|reply
I could be less enthused. There's some ok caution here, in two points:

1. Don't be emotionally attached to your work. Itself obviously horrifically bad advice for everyone: we should be building with passion, in tech the group has fervently picked up and can be excited to roll with. But emotionlessness and removing oneself is a fact of professionalism (to save oneself) and the mired compromise-oriented culture of professional life and business (where historically business plans have always trumped the everloving fuck out of passion and belief).

The linked article? #1 rule of programming, leave emotions at the door? It's not about emotions. It's about pride and hubris, being unable to let go, as the junior developer in the article is, as he is silently unfeelingly antipathically checked without discourse or camraderie from coworkers that simply hit "mute" on him.

2. Design and process is indeed a great caution, something we need to burn cycles on- but the author flat out says junior people don't even think about what they are saying they want to build.

Envisioning and end goal and hacking out some code can be a way of life, can be remotely possible, if your company can parcel up responsibilities in neat little independent units where you don't have to interact with anyone. As soon as you have to work on a project of >1 person, design first immediately becomes mandatory to some very minimal extent. This is a company problem, a danger if you really are leaving everyone running wild and hoping they see the virtues of designing for themselves.

Last, I'd contend the green-horns, with their fancy notions of "what-if," have usually spent more time considering combinations and ways to lay things out than the experienced. If you really do exhibit the well-invested-techie syndrome and you have any self respect, your plan isn't "use redis and node.js and win," there's some kind of data-model, spoken or unspoken and it's up to a company to determine what kind of design proposal process it wants to run for pulling in these ideas and formulating a plan and direction.

The author hits themselves in the forehead by the end: they finally get to process, where they discuss lifecycle. Lifecycle which needs to be the company's lifecycle, which needs to entail design. If a developer is off coding without a plan and there's no process in place where they had to think before hand, yeah, bad news, bad programmer, but how did that happen and why did the inexperienced person not have a standard of work from their workplace they drew from to get in such a bad spot? Did they not see the corporate wiki full of UML diagrams? Did they really forge ahead without filing any tickets for their work?

Honestly some of the best programmers are young ones, because they are humble and they don't purport to know. Experienced ones are the ones coding from the seat of their pants, because they've seen it, they know it, they have assurances and confidence from the past and they're repeating it, day in and day out, and it's not exciting for adventurous for them, it's what they already know. It takes a certain moral rectitude in the junior class to exhibit this, but more than that, it takes a culture that supports discourse and process, it takes a workplace culture that can relish getting into it and understanding what they are doing, and executing first prototypes and then well to plan, and if that idea is hinted at and space is made where a junior programmer can cycle themselves through that and not be looked down upon, they have every chance of being as good today as they will in ten, twenty, thirty, or three hundred years.

[+] pearjuice|12 years ago|reply
You don't have to put all that pretentious stuff in your writing. Other than that; good article.
[+] jonathanmarvens|12 years ago|reply
Please tell me what the "pretentious" stuff that I put in my writing are, because I am a bit confused at the moment.