Keeping up with tradition, we brought on two interns from Epicodus five weeks ago. This time, the experience was unique in that there was a new challenge of coordinating an internship while the entire team was working remotely. Here's a reflection from Dan Merys on his time with us as a developer intern.
"Perfect is the enemy of good."
A programming boot camp is a lot like a carpentry school. You're gonna learn all the basics about how to swing a hammer, drill screws, saw boards, etc. You'll even get a lesson or two on fine woodworking and it's possible that your instructors may mention the existence of electricity and/or plumbing. You'll know some things and only know about others, but really you can only frame up a square building. With wood. Only wood.
Day One on the Job Site
Your internship is your first day on an actual job site. Everyone you see is walking around like they know exactly where they're going, using tools you've never seen and materials you've never heard of. If you're like me, your first instinct is to get out of everyone's way. They're humming along and you don't want to be the person that screws up the flow.
Or accidentally drops a hammer right in the middle of someone's code.
While you're standing there, unobtrusive, you look around and realize this app looks pretty good. Really good, in fact. It looks done. The other developers aren't constantly building new apps from scratch like you did in bootcamp, they're taking them apart and making them look/work better before putting things back without leaving a trace.
Driving the first nail
Someone calls you over and asks you to help them with something. It's a simple task, kinda like what you did at bootcamp, but not exactly the same. "I got this," you think to yourself and you get to work.
Then you realize that you don't know how to do it the same way as the other devs, so you start looking at all the different ways it can and has been done before. You're still not sure which way is the best, so you keep looking. You want to do it right the first time and show what a good developer you can be, but this is just a little beyond what you know how to do, so you keep looking. And looking. And looking.
This is the trap I fell into. I was so focused on writing perfect code that I didn't write much code at all in the beginning. Your code isn't gonna be perfect the first time, or the second time, or the eighth time, and that's fine but your code will never meet yours, or anyone's standard, if you don't actually write it.
The most important part of any endeavor isn't how well you start, but that you actually start at all. Don't be afraid to make mistakes and definitely do not be afraid to ask for help. Your mentor gets just as much from helping you as you get from their help.
What is really important, and what I didn't realize until well into my internship experience, is that you're not at an internship to be a professional developer and deliver production-ready code. You're there to learn how to be a professional developer.
More than coding, you'll learn:
- How you are assigned tasks and how to submit your work for review.
- Client communication. What you think the client wants and what they actually want aren't always the same.
- Developer communication. Leave detailed notes/comments/READMEs for any developer that might touch the code after you.
- Time management. Not all developers work on the same app/project all day every day so you'll need to learn how to bounce from one project to another.
It's a very important distinction and realizing it sooner rather than later will help maximize the benefits of the experience. An internship is usually only a few weeks, and then you're a developer out in the world.
Laying a strong foundation
You're going to make "rookie mistakes" but you can't learn from them until you make them, so why not make them in an environment designed to help you learn? You've spent a lot of time and energy to become a programmer. You started that. See how far it got you? Good, so why stop starting now? Keep starting.
When you're finding it difficult to start, or you're not confident in what you're supposed to be doing, find something that you are confident at and start that.
- Do you like styling but are getting hung up trying to get the front-end logic to work? Spend a few minutes styling what you have.
- Great idea for a possible feature for the app? Mock it up and send it to the project lead.
- Doesn't even have to be related to coding. If you're a cellist, run through some scales. A baker? Bake a cake. Just do something that makes you feel like a badass.
The important thing is to get yourself feeling good and capable, then bounce back over to the original project and keep up that momentum. You don't need to do a whole new start on it because you already started; you're just working on this now.
There are tons of resources out there to help you get started, but knowing why you're having trouble is paramount (here's a nice flowchart I use). Once you've identified why you haven't started, you can address that and eliminating obstacles feels great.
Your internship is a tremendous opportunity to learn how what you were taught in bootcamp applies to the day-to-day of being a professional developer, what kinds of skills you'll need to develop as your career progresses, and what kinds of simple mistakes or oversights you'll want to avoid when you're finally working on the building solo.