
What it really means to be a “junior” developer. - jonathanmarvens
http://medium.com/p/266acb772b4b
======
verelo
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
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.

~~~
prostoalex
I think for senior people the notion of "you are not your code" tends to sink
in after a few rewrites/refactorings or total technology replacements.

~~~
IanCal
Also, you've been through the process of writing things that later turned out
to be hard to maintain/scale poorly/bad_attribute_x later on even when you
thought it was good to start with. The more I work, the less surprised I am
that my solution isn't the best one or that there was a situation/edge case I
hadn't thought of.

------
greenyoda
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](http://ashidakim.com/zenkoans/1acupoftea.html))

------
dubfan
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
I've updated the URLs. Sorry about that.

~~~
bennyg
Don't know if anyone else will tell you, but thanks for doing that.

~~~
jonathanmarvens
You're welcome. [:)].

------
speeder
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
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?

~~~
dsymonds
I don't see the arrogance, nor the implication that his/her title was based on
having the same background (I think it's obvious that a 2h interview is going
to find out more than just that). You seem to be cherry-picking from the
story.

Indeed "Yet, the CS part I could learn, ..." seems to imply an answer to your
final question.

------
noonespecial
Junior developers know how to do stuff. Senior developers know how not to.

------
scotty79
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
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
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
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
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.

~~~
jonathanmarvens
Exactly.

------
ryanSrich
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
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
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
_" 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
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!"

~~~
hatu
Facebook was built with PHP. I think it's almost a cargo-cult to think that
you HAVE to be switching technologies constantly to build the awesomest stuff
out there. You do your best work with a language/environment maybe 2+ years in
when you know it very well.

------
cunac
30 years ago when I started I knew everything , now I know a little :-)

life sucks ...

~~~
xentronium
I can absolutely attest to this revelation. The more I learn, the less I seem
to know.

------
perkof
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
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
"We can't learn to see until we admit we are blind." \-- Alan Kay

------
nahname
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
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
You don't have to put all that pretentious stuff in your writing. Other than
that; good article.

~~~
jonathanmarvens
Please tell me what the "pretentious" stuff that I put in my writing are,
because I am a bit confused at the moment.

~~~
pearjuice
"If you have not read it, go get yourself a cup of Mott’s® Original 100% Apple
Juice (cause it is good for you and of course since that is what I am drinking
right now…[;p]), turn off the TV, Punch Your Brother in the Face™ (okay…I
never said that), navigate to the article using the link above, and read it
attentively."

~~~
jonathanmarvens
How is that "pretentious"? Seriously. Do you even know what that word means?

------
freework
Is it just me, or is the site making you sign in through twitter to read the
article?

------
jpd750
GREAT post. I can definitely relate.

------
rfnslyr
I had a similar experience recently. I read a lot of HN and other programming
tech sites. It's easy to think you know a lot. I sat down for an informal
interview with a founder, much older me and much more experienced than me and
we bounced ideas back and forth. I got torn a new one. Destroyed my ideas and
really offered a new outlook on things. That's the moment I knew I didn't know
shit.

I am a Junior Developer.

~~~
jonathanmarvens
Come to think about this, I have had to deal with that almost every week with
our V.P. of Engineering for the past couple of months. It has been really
interesting for me to see how little I know versus how much the little
arrogant guy inside of me tries to make me think I know. In my opinion, it can
be tough at first learning to deal with and learn from the experienced folks,
and if you let the ego get the most of you, you may end up a quitter. However,
if you just stick to it, understand your capabilities, strengths, and
weaknesses, and make it all a learning experience, you will later find
yourself in a better shape than before. I find the number one problem to be
the part about understand your weaknesses. I have had to deal with that
myself. Honestly, until someone more experienced than me, unintentionally, got
me to realize this, I thought that I was good at everything. This is also why
I recommend young folks who are freelancers to attempt at getting a job where
they can work in a team with smarter folks than themselves. That experience in
itself is just a life changer. Freelancing will always be there, but working
in a team of software developers building an actual product from start to
finish is quite rewarding.

