Hello! To jog your memory, I am interning remotely with a Swedish software engineering company called Skanatek AB. Currently I am in the first phase of the internship, which is based around individual learning and completion of tasks to aid this objective. So far I have completed 2 of the 5 tasks of the first phase.
The first task revolved around understanding version control and becoming familiar with GitHub. GitHub is a very common version control software, meaning that Git takes a ‘snapshot’ of each item you upload (i.e. “commit”) so that even when you submit further changes you will always have a record of the previous states of the item in your commit history. I have used GitHub for classes and projects in the past, but now I have a much better understanding of the purpose of version control as well as concepts such as rebasing.
The second task revolved around learning the basics of PHP (a programming language) and Docker (a containerization platform). The simple idea of Docker is that anyone can run a program simply by running the image someone creates. For example, if I upload my PHP project, you can execute my PHP project without downloading any of the previously necessary software dependencies because everything my program needs to run is included in the Docker image I uploaded. Essentially, it simplifies running applications on different machines.
As I work on task 3, I am learning a new framework (essentially a structure for you to write code within) called Laravel, which creates PHP web applications. Through this task I am also learning about testing software through PHPUnit and a behavior-driven development (BDD) testing framework called Behat. Lastly, this task requires the application and tests to be run in a Docker container. Clearly this is a lot of new material. However, the toughest part of the internship is not the learning but rather the lack of support. It is indeed a remote internship and nearly 100% of learning is truly independent. I spend hours researching articles, watching videos, following tutorials, and troubleshooting errors. There are few occurrences more frustrating that following a tutorial and running into an error that no one else seems to have; in fact, I spent days looking for a solution that turned out to be one simple command in the terminal.
However, I am definitely gaining many positive insights from my experiences thus far. First, of course, is simply increased knowledge of new languages, frameworks, and design patterns. I have also gained confidence in my own programming and troubleshooting abilities. Being forced to solve all my own errors proves to myself that I really am a capable software engineer. These insights are great, but I think the most important insight I have gained is the value of having a team: colleagues to share ideas with or coworkers who may have insight into the error you continuously get. More than that, a team supports you mentally and emotionally through the programming process, as programming really can be a journey of highs and lows from frustrating failures to the sweetest successes.
My expectations for the rest of this summer are, of course, continuing to be pushed to learn new languages, frameworks, and platforms. I know it will be a challenge, but challenges reap rewards. And remember: when the going gets tough, the tough get going.
See you in a few weeks!
Laura