Hacker News new | comments | show | ask | jobs | submit login
What it really means to be a “junior” developer. (medium.com)
66 points by jonathanmarvens 1487 days ago | hide | past | web | 59 comments | favorite

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.

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.

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.

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.

Very true, I think the defensive part comes from feeling comfortable with a limited toolkit. It's only natural to try push what you feel comfortable with, my experience is a lot of the more junior staff I work with are more pushy and emotional with their tech interests, however often relax and become more approachable if you provide guidance and help them learn something new in a comfortable environment.

Agreed. Put another way: less than 1% of the world runs on anything based on Node.js.

Or most of the other technologies that tend to be hyped around HN.

With experience one learns languages, OS and frameworks don't really matter that much.

What really counts is delivering solutions that the customers what to pay for and the consequent business value of investing in a specific piece of technology.

Did you tl;dr at the first break? :P

That's pretty much the message of the post.

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.

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

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

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)

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?

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.

I'm glad the author is changing the URLs. In the meantime, there is a Chrome extension to automatically expand shortener URLs to the real link: https://chrome.google.com/webstore/detail/knowurl-expand-tin...

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.

I've updated the URLs. Sorry about that.

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

You're welcome. [:)].

Lazy way of tracking clicks, I guess?

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)

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?

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.

100% agree and it's vile showmanship, but there's enough of a kernel of truth in that academic training is such incredibly poor preparation for making this stuff go.

Steady on. The OP is clearly not a native English speaker. Give them the benefit of the doubt?

No, see, he's so good that any education would ruin his natural flow.

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

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.

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.

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.


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

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.

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.


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.

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.

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.

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

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

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.

Of course, you can both master a niche _and_ build awesome products and have a good time -- the two are not mutually exclusive as your comment implies.

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.

Being the best at a few things is better than being okay at everything. This is not limited to programming languages.

I totally agree with this statement. 100%.

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

life sucks ...

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

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.

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.

"We can't learn to see until we admit we are blind." -- Alan Kay

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.

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.

You don't have to put all that pretentious stuff in your writing. Other than that; good article.

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

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

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

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

GREAT post. I can definitely relate.

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.

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.

Thanks for sharing this. [:)].

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact