Contrary to popular belief, software developers don’t hide behind their computers all day long and create ruthless memes. While I never subscribed to this line of thinking, to begin with, I got official confirmation of its inaccuracy this summer while interning at Stratasan.
I am a Nashville native, a rising Swarthmore College sophomore and a mechanical engineering and computer science major. I wanted to experience what it's like to work for a company as a software developer. This summer was about breaking out of the classroom bubble and getting industrial context for why I’m learning what I’m learning. My time at Stratasan covered that -- and more. I learned how to apply, not just understand, the technical concepts I picked up in school. I learned how to communicate ideas to and work cohesively with team members outside of the development team. I also got a glimpse into the business side of software development and saw the early stages of a new product’s development. My summer internship was essentially a crash course on technology and its industry. Here are some of my takeaways as an intern testing the waters out in the field.
Programming is not a ‘dive in head first’ activity.
It pays to be meticulous, patient, and always ready with a backup version. Before any new code is written down, there is a lot of planning and discussion that needs to happen between the development and product management teams. At Stratasan, I joined the weekly meetings between the two teams, where we reviewed each other’s progress that week and discussed new feature requests and bugs. The development team sets the cost and feasibility of a new feature and the production team determines the value and projected impact of that feature. These meetings were also a good communication exercise because it is so important for everyone to be thorough in expressing their opinions and ideas. This process does slow work at the beginning; but once the team is clear on their expectations, there is an exponential growth in progress that makes the planning worthwhile.
Design code one step ahead to avoid falling five steps behind.
An advantage of planning is that you have time to think about everything that can go wrong. It’s your time to be pessimistic. From this summer’s experience, I found that it takes a lot longer to realize that there is a bug and then locate it than it does to fix the bug from the strat. It’s far more efficient to design defensive code that addresses worst-case scenarios and protects your app from being susceptible to these errors. It is also worth the time to write test functions to double check your work. By designing for failure up front, I was able to develop more simple and succinct features.
Lists are versatile.
I have never appreciated lists more than I did this summer. For each of the applications I used this summer (GitHub, Django, iTerm, etc.), I kept a list of commands that I found useful so I could reference them quickly when I needed to. I made lists of the things I wanted to accomplish each day, and it felt really good to be able to check things off as I finished them. When I worked on GitHub issues, I kept a list of my notes and plan of action nearby so I could easily keep track of what attributes I’d be working within the code, remind myself of the methods I’d need to use, and jot down tests I should write to check my work. In general, I found that writing things down is a good practice to have; it helped me keep my thoughts organized, and I could easily track my train of thought when I was stuck or confused as to why I wrote something a certain way. It was also easier to remember things and not repeat mistakes when they were written down and ferociously underlined.
A little bit of struggle is healthy.
It was easy to be intimidated as an intern because I was surrounded by people who have so much more experience than I do. But, at the end of the day, I realized that you waste less time asking for help than you do scurrying around trying to figure everything out on your own. Some things just come with practice and this is what the internship was meant to provide … practice.
That said, I also learned a lot when I struggled. I’m sure some of the problems I got stuck on would have been easily fixed by another dev, but I picked up a lot of other useful information while looking for the solution to my original problem. Plus, the process of thinking through a problem isn’t something you can learn in a classroom. It comes with experience, which is exactly what I was looking to get out of my internship. So ask for help and guidance, but only after you’ve had time to see if you can work it out yourself.
A career in technology is a major life choice, and as an intern, you are surrounded by people who have already gone through the decision-making process you’ll have to go through before graduation. So ask questions; especially ones you can’t get answers to in the classroom. And ask questions from everyone: development, production, management, sales, services teams, everyone! Not only does that give you a well-rounded idea of how the company works, but you gain different perspectives on how the company’s core values and purpose are viewed. This can, in turn, give you a better understanding of your role. You’re here to learn, so take advantage of that, and make the most of your experience.
Article by Nhung Hoang, Software Development Intern for Stratasan
If you would like to learn more about Stratasan and how we could equip your team to maximize strategic growth potential, contact us at firstname.lastname@example.org.