Time to talk about the actual job. If you’re interested in how I prepared, check out my last post.
I don’t know what I was expecting, none of us ever do. But we have expectations, most of them built on the hope that you won’t find out at your first job just how terrible you are at programming. Most of those fears are unfounded and what you don’t often hear is how awful everyone was when they got their first development gig. I guess we tend to forget about that.
I sort of imagined that, ideally, I’d have meetings with my team at least every other day, get explicit instructions on precisely what to do, and maybe have “training wheels” sorts of tasks while adjusting. I imagined that, ideally, since they knew I had no knowledge or experience with Python, they would ease me into the work and not give me a lot of responsibility on the code. The reality is TOTALLY not ideal!
The company has wasted no time getting me straight into the code and handing me responsibility. I study a lot and I bring my passion to the work and I’m all in. My goal is to not be totally worthless, to be able to make meaningful contributions despite knowing what I’m doing. The trick is to not be a totally clueless apprentice who needs their hand held.
It’s an awkward feeling at times, really. On the one hand I’ve never seen a line of code in Python before, never heard of Django until I started talking with the company. I just left a 12 week whirlwind course that taught me two new languages and several frameworks and libraries. The last thing I expected was to pin on a third language. All combined, things feel very demanding. I did my homework and research on the language and framework before hand, but that’s not the same as having working knowledge. Week 4 is ending and I’ve been rewriting entire data models, unit tests and data migrations in a language I’ve had less than 2 whole weeks to learn!
So that’s pretty intense. I know my performance for the next few months are crucial to earning a permanent position here. To say the stakes are high doesn’t quite capture the urgency I feel when I go to work. One takeaway is that you could also be in this same position …and when you get here, what do you think would prepare you?
I’ve been lucky here and I think I’ve fallen into a super ideal team situation what with the friendly, helpful, supportive personalities. My team has been great. They’re all working fervently day in and out, so when they hand me a task they can’t exactly sit there with me and walk me through the code base. I get briefed on what we’re doing and what they need me to do and …then I go to work. They make themselves available and have been pretty patient and accommodating, allowing me space to ask questions, to misunderstand and request clarification, and sometimes to teach me concepts I’m not familiar with. Still, I’ve got to balance that need for guidance with reality: it’s a start-up and I’ve got to be able to get things done on my own.
Part of it is that start-ups don’t usually have the resources to build an ideal apprenticeship program, and that’s partly where mentoring options offered by GA really come in. So to expect a start-up to have this hands-on, well-researched approach to taking on apprentices is somewhat unrealistic in today’s climate. That’s not an excuse for companies to not take their recruitment programs seriously, but rather a reality of today’s tech economy.
Given the pace of work it can sometimes feel like the team is passing me info as fast as they can and they don’t have the time to ask me what I know or don’t know. Usually when I get a task I just go to it and fail my way through. I need to be resourceful, but to also know when to ask for help. On the one hand I have to demonstrate that I can solve problems. On the other, I can’t spend an entire day banging my head against code I simply don’t know anything about. I think I’ve found some semblance of balance, but it’s not easy. When I genuinely haven’t a clue or I get confused, I don’t wait: I ask immediately, because I can’t afford to pretend like I got it. It’s better to be honest about what I don’t know than to try to pull a miracle out of my ass. I’ve also got to set my team up for success and that means making them aware of my weaknesses as well as my strengths — and asking for help is a strength.
I work a solid 40+ hours each week. I have some leeway with overtime, but it’s not demanded and my team leader has made it very clear that he wants me to develop healthy working habits. Right now, I take my work home, even if it’s just handwritten notes so I can get insight from my mentor on newly encountered code.
My team seems to work long hours, but that’s sort of the nature of startups. We don’t have specialists for every little thing and we don’t have a large team of coders (right now). I don’t enjoy sitting in a chair *anywhere* for 8+ hours (who does?), but that’s just the nature of the beast. Do I feel pressured to work longer hours? To show that I’m dedicated? That I won’t leave my desk until a task is finished? Yes. And sometimes, I need to sit in that chair until 7pm because the world will end if I don’t.
I enjoy the work. I love being immersed in code. I enjoy the long hours right now. My problem is developing healthy work habits, bringing my work home less, saving time for side projects that I love and generally just not becoming the kind of person that let’s my job rule my life. When I started, I wasn’t sure if I’d be working “apprentice” hours which I sort of imagined as a kind of part-time schedule focused more on menial tasks far from things I could break. I’m happy to report I’m right in the thick of it with the rest of my team.
This is the hard part. I’ve come in with a total lack of knowledge about Python and Django. I’m having to learn both while working with a very complex and large code base. So the learning is on two fronts: general language learning and learning the company code base as it is. Those are very, very different things and while knowing the languages can help with the latter, knowing one doesn’t make up for the other.
Each day I make a list of what I need to know to accomplish my assignments. I then read up on those things before I get started. I use my googlefu and two mentors for the rest.
I’m learning that code inheritance is a big deal. Working with someone else’s code means working in their language, thought processes and methods. This concept is very familiar to me as a linguist. To switch languages is to switch mindsets and your communication approach. Some people are better communicators than others — a lot of it comes from practice, but a portion of it also comes from our ability to convey meaning. Diving into a complex code base can be like having a kindergartner read a PhD’s thesis on the nature of the universe. Fluency alone does not a great coder make. This is the same in linguistics.
Learning to read others’ code is an invaluable skill. I remember instructors during the GA course encouraging me to do code reviews or to surf Github reading someone else’s code. I believed them then when they said it was important, but now I’ve got a real world example of just how valuable a skill that is.
I mentioned I’m using mentors. GA provides me with a mentor, but I’ve also found a Python/Django specialist to help me as well. I pay for the service, but it’s well worth the money. I meet with my mentors at least 2 times a week, usually telecommuting (Google Hangouts or email). While I’ve got my co-workers to help me, it’s more focused on production than learning. I spend about 2 hours per week with my mentors, usually in 20 minute chunks or email correspondence. I don’t ask for solutions – I ask for examples and walkthroughs with recreating solutions on my own.
So far, this has been my experience and I’m pretty happy with it. My expectations have been exceeded and I can only hope to keep this positive momentum going. I don’t think anyone knows what to expect from their first job as a developer and from what I’ve read everyone’s experiences vary widely. Coming from a bootcamp can be even more difficult due to stigma and the general lack of a pipeline to jobs from the classroom. But hang in there. Just keep focused on your work and the reasons you’ve come this far. Like I said, my fate isn’t sealed either — it’s just an apprenticeship and I could find myself jobless in a couple of months. But with these experiences under my belt, I’m actually looking forward to whatever comes next.
EDIT: Debugging grammar, spelling and errors.