Don't give up. Be patient. You got this. Keep going.

When I first read this post, I thought it might have come from the guy I am mentoring. I actually linked him the post and he said that it's unnerving how this post totally reflects himself.

I am writing this for both you and him.

Do you remember learning how to drive? Remember how the instructor would point things out to you that you didn't even notice? "Watch out for that car", "you are drifting to close to the right", "you are going over the speed limit", "it's your turn to go" etc etc.

If you have driven for a few years you can now go on auto-pilot. Somedays you might wonder, how did I even get to my house? You remember getting into the car and presto you are now at your house.

You are experiencing the same thing with your work. Three months in an internship is nothing. It's an hour of driving practice. Even after 10 years there are still things that will trip you up. New technologies that you don't understand. Or worse depth in technologies you do understand and use daily that you still don't grasp. Hint: This is a good thing, and it will happen to your for your entire career, otherwise it means you have stopped growing.

I have some good news for you though. You really enjoy what you do, you find it interesting. Do you realize how rare that is? Depending on the statistics you look at 45-85% of people dislike their jobs. Welcome to the 20%.

So now let's discuss the source of your angst. It's hard. There are so many things you don't understand, code that makes no sense, and the silent killer...you are no longer as smart as you thought you were because you are surrounded by really smart people.

You know what used to get me? I would spend five days working on something. Flustered, angry and disappointed I would talk to a Sr Dev trying to explain why the thing I was trying to do wasn't working, and in the middle of explaining the problem he would give me an answer that not only dealt with my problem, but it was simpler, more elegant and had none of the implementation issues I was facing. There is nothing more soul crushing than deleting 150 lines of code that doesn't work, to replace them with 3 lines of code that works perfectly. That keen awareness that if they were working on your story, they would be done in 5 minutes, not 5 days. It's instances like that, that the whole 10x developer ideas comes from.

That pain is learning. Part of what we do is learning how to think effectively. You need experience to do that. You need to get stuck. To see the simpler implementation that is so much better. To see better code and marvel at its beauty. The same way reading about driving doesn't really teach you to drive, college / personal code projects are not the same as writing code for a company, especially a well established one.

Nowadays, I am on the other side. Ironically, it's the same. If nothing else, it's more complicated. My decisions now have a wider range of effect. I have to mitigate more effectively. I think both long and short term strategy. So what you learn now, will apply forever.

So here are my tips:

1. Chunk your work into smaller chunks. Create an outline of what you want to do. There is a certain art into this but essentially you want to stop the overwhelm of vagueness. When in doubt smaller chunks are better.

Ex. We create blue and red widgets. roboticsGuy create purple widgets too

...chunking time

Figure out where the widget code is

Understand what the widget is

Where is the color blue vs red being defined

Create a branch

Add purple definition

Test

Ask for a Code Review

Merge it

Then you go through your list one by one. Make notes, be it handwritten, in a document it doesn't matter.

2. Bug Sr Devs, another intern, people on the street with questions. Worse case scenario you might have to wait for them to respond. In reality I have found that most people like helping. It feels weird to ask for help, especially when it's the 15th time you have a question on the same day. So gather all your questions and ask them at the same time. Don't be afraid to ask questions. If you feel judged don't dwell on it. We have all been there, we understand. If you end up talking to someone condescending find someone else. In the end you are an intern, the whole point is for you to learn. So ask away. Hint: If someone is rude to you, find someone else.

3. Learn how to think. When talking to people you look up to, figure out how they think. There is no right way to think, but there are some good paths to follow. I can write an entire thesis on this, but essentially there are depth first people (one thing, keep digging down), breadth first people (multiple things, layer by layer investigate all of them), inverse people (what don't I want?) and then there are neural network thinkers which I totally don't relate to, but serve an important function. Now hopefully someone's thinking style will match yours. Talk to those people a lot, they will be able to explain things in a way you can parse it.

4. Be honest, but not too honest. It's OK to say "hey I don't understand how a widget ends up being blue or red, where does color get defined?". It's not OK to say "I don't get this". It's too general. Think of it like asking Stackoverlow a question. You need to show that you did the work, some work and you are stuck. Stackoverflow reflects a lot of tech people's perceptions. "I don't get this" shows laziness. No one likes lazy people. But who do we like? We like people that try hard. So try hard. Can you show someone three attempts on widget color making that all failed? That's what you want.

5. Take strategic breaks. Sometimes the best code is written away from the computer. Go for a walk. Do some yoga. Read a book on an unrelated subject. I find that physically moving away from the computer helps me. I still remember one time that I couldn't solve something, and I literary walked around my work building for an hour, then went got food for myself, and sat back on my computer and wrote 5 lines of code that solved all my problems.

6. Start even when you are not motivated. This relates to chunking, in a way. Sometimes the thing you have to do is so vague, you need to break it down. Other times you have a step and you still don't know how to tackle it. Try to work on it for 5 minutes. Hell, just click around see what happens.