Enova’s Software Apprenticeship Program
By: Jill Lynch, Software Engineer
How did you get involved with Software Engineering?
I was always the resident computer kid when things would go wrong at home, but I imagined programming as a solitary endeavor and didn’t think to choose that as a major. When I graduated from the University of Illinois, Urbana-Champaign with a degree in Communications, I started working on small website, and kept wanting to learn how to do more with it. I’d have the sensation of doing a magic trick when I could automate a repetitive task for a coworker or turn a paper process to a web one.
I attended programming classes at my local community college, and also completed courses through edx.org and coursera.org. I then worked for the University of Michigan on the Cell Biology Department’s website for a few years, but I worked alone and hit a brick wall with my progress.
What qualifications are needed for a Software Engineer Apprentice?
You definitely need a foundation to be successful as an apprentice. As I mentioned previously, I had a mix of academic preparation and hands on experience that helped tremendously. I attended the Startup Institute to get my feet wet with the Ruby, and worked professionally to create sites (but not at Enova’s enterprise level with a code base that is thousands of lines long).
What did the Software Apprentice program help you learn?
I heard about Enova’s culture of learning at Tech Week last year from the Enova booth. When I was told they had code reviews, learning groups, a specific training program and organized curriculum (LevelUp) to help fill in any gaps in your skillset — I knew this was the place I wanted to work.
My previous classroom experiences and learning independently had prepared me, but my apprenticeship at Enova has accelerated my learning at a rapid rate. It was a great mix of self-directed and guided learning. There was a structured curriculum and list of reading resources, married with a hands-on pair programming and an instructor within earshot at all time. I think anyone who has tried to learn a language can attest to the fact that there is no substitute for immersion, and that was exactly what this apprenticeship did for me.
The structured LevelUp curriculum, which was a few months of programming assignments in different languages and curated list of required reading made sure that we were directed toward titles that would give us the right fundamentals, and best practices, while still be up- to- date and relevant and not too niche-specific. When you are reading a large text, you often wonder, do I need to learn all of this? Is it really relevant to the work I am doing? As you complete the assignments you learn that it is really relevant – you need it to do you work and it’s vetted by a pro. They don’t want to waste time teaching things you aren’t good enough!
It’s surprising how much you truly learn by aping and watching others as you pair-program. What is their process? What questions do they repeat to themselves as they search for a solution? What fads come and go? Also I hadn’t realized how much ‘reading code’ is a part of programming at a large company. I also learned a lot from reading other people’s work. The pair programming and conversations with the director of learning was part of the immersion process. It helps to have someone checking your path – making sure you aren’t focusing on the wrong thing. Bad habits are immediately corrected through code review.
There are a tremendous amount of truly confident and skilled software engineers who have learned a lot in their careers, and they are often quick to try to point out ways you can avoid making the same mistakes they did. .
How was the Software Apprentice program structured?
The first half was spent on the curriculum, and the second half was geared toward creating tools for improved workflow in the call center.
It was a greenfield project, a term, which I had never heard before. It means there was no existing code, but also meant the design was entirely up to us. We had to decide: What should each part of the machine do, and how should it interact with the other parts of the machine? How will breaking up the problem make it easiest to understand? One of the big takeaways was the importance of modularization to be able to make changes quickly when needed.
Designing an API was a tremendously creative and fun problem to work on, because it is a cross between working on a puzzle and editing a manuscript. We were also able to improve the workflow of fellow employees to save them valuable time and to be more efficient.
Describe an average day as a Software Engineer.
A typical day begins with a trip to the kitchen for a delicious yogurt and fruit, then checking emails to see what issues have come up per the suite of tests, and the corresponding tasks that our project manager has created, I pull the latest code to remain up to date with the changes other teams and products are making. Then I mosey on into the team room to get more feedback on how I suspect I should accomplish proceed solving a problem or how the small problem works with the entire ecosystem of the larger app, and I begin to work. If I run in to difficulties, I ask someone on my team for guidance. I slowly chip away at a problem, until I have a solution.
I’ve heard the phrase “Half of the art of programming lies in naming things”, so my communications degree does come in handy. We spend a lot of time verbalizing how to solve a problem, and what is the best way to name it so it is clear to other programmers who look at what you have written two years down the road with little context, or naming the different pieces of the puzzle.
How do you envision your future as a Software Engineer?
I often feel overwhelmed by how much there is left to master, especially with how quickly techniques change, but it’s also what makes it such a stimulating field.
Having Enova recognize hard work to get 80% as a software engineer, and investing their support has given me a lot of confidence to tackle increasingly difficult challenges in my career.
Recently, I have become the Assistant Education Director at Girl Develop It, and hope to pass on some of the lessons garnered from my apprenticeship to other individuals looking to join the field. There is absolutely no scarcity of ways to improve and build with technology, and we need as many people laying the virtual bricks as possible!