| I graduated college a few months ago and recently started working as an entry-level software developer at a big company in the silicon valley. I once worked as an intern back-end web application developer, and it wasn't too challenging because most of the frameworks I worked with had an immense amount of online resources to learn from. And the code base wasn't too big so it was easy to pick up on. But at my new job I'm working with a 20+ year old enterprise code base that relies on internal tools with ambiguous documentation. I don't have a mentor assigned to me, but I do work closely with the lead engineer to ramp up. A good portion of what he says goes over my head, so I either ask for clarifying questions or take notes and do research on my own. There's a lot I don't know. I made an effort to keep notes of everything my coworkers and lead engineer say, as well as documenting my progress in learning all the technologies. In some ways I'm expanding my knowledge daily, but I don't think it's quickly as I'd like, and sometimes when my coworkers ask if I understand how x or y works and I don't, it seems like I've made no progress on learning at all. This is my 2nd month here. The first month I spent setting up my dev environment and waiting to be granted permissions to various services. Now that I have a real assignment, I slog through this massive code base and have no idea what I'm doing. I ask for help but have a lot of stupid questions and feel like I'm wasting everybody's time because I can't resolve things on my own. I generally have a good idea of what I don't know and how to learn it, but in a lot of cases I don't know what I don't know and thus don't know what to ask, or how to ask a good question. Maybe I'm being too hard on myself since I've only just started working and it's my 2nd month, but a part of me feels like I should be getting better at figuring things out a lot faster. |
A couple of vectors to approach the situation:
- Start top down. Understand what the entire system or product is supposed to do at the macro level. Understand the main architectural components, what the role of each is and how they interact with each other and users or the outside world. Once you can understand the big picture, the individual lines of code have a context that helps understand their purpose and how they perform it.
- Discuss with your lead engineer what his expectations are for your progress. Very senior people I have talked to will claim that it takes 6 months - 1 year before a new hire can really start to contribute. Longer if it is a legacy system as you are facing. Something like, 'Once I am up to speed, what kind of tasks or projects will you expect me to take on? Can you give a few specific examples (maybe things that actually are on the list today) and give a time line for how long you'd expect it to take me to get them done? This can be a bit dicey depending on the style of the manager, but it's good to learn their style in addition to their expectations of your performance.