I had big plans for my summer holidays. Visiting my grandparents, extended family, old friends, and enjoying my favorite food while spending quality time with them. Before I flew back home, I also did an internship at the world’s leading digital farming company in Cologne, Germany. With an aspiration to study software engineering, this venture was great fun and an experience that strengthened my understanding of software development and its real world impact. Travelling an hour in a train from Dusseldorf to Cologne like an office guy, working and learning with the team, sitting in meetings, and observing conversations reminded me of my childhood imitations of adult lives 🙂

The industrial world operates very differently than the educational one and I saw what actually goes into the software development process. Here are my 5 best IT learnings from my internship:

Software Development Methodology

I was introduced to Agile development methodology the first day itself. It never occurred to me that there are different methods to collaborative working. I was told that Agile is the most popular development methodology nowadays and this is what is used in the this organization’s IT department, where the teams work on their software products, which are industry leading applications for digital farming. They use Agile methods to structure their workflow and efficiently complete their tasks. Agile works in an efficient way where progress is iterative. All parts of the team work together and make continuous changes that are continually reviewed.

Testing/Quality Analysis

Before a product is made available to the public, it goes through lots of testing. The ‘updates’ on apps that we receive, go through a much longer process before that. Micro-updates occur daily in the agile process through a process called version control. A git server is used to collaborate and update the code each day and each change is stored as a new version. If something is faulty, the coders can ‘roll-back’ to the older version. I was impressed how multiple checks and controls ensure production of quality software. I loved the way testers found ‘bugs’ that were then fixed by the development team.

Continuous Integration/Development ( CI/CD)

CI/CD is the basis of software development where changes are constantly made. This method relies on version control. When different people code one application at the same time, they have to make sure they don’t override each others work, or do not have errors storing and combining all the differently written codes. As a preventive measure all the code is daily updated to a git server, where the collective code is stored and combined. This is the process of continuous integration.

Continuous development is the automated process of testing whatever new features and functions are added by the back-end. If every single function was tested manually it would be very inefficient and take a long time. Instead, most of it is automated where the automation software is given instructions and the expected outcome is received. In case the expected outcome is not reached, manual intervention is required. This method is very efficient in speeding up the development process. Furthermore, automation is independent of human testers and therefore is useful through any circumstances.

Databases

Databases are an integral part of any software. I got to see how vast actual databases are. The database I saw had seemingly infinite sections with each having lots of rows and columns. The database itself has several tables residing in it that store different data. What is especially interesting is how data from different tables was linked to each other. For example, one table containing different field names and their locations would be linked to another table stored separately different. The other table could give me much more specific information such as soil type just by referring to the field name from the initial table.

Machine Learning

During my internship, I also got to learn about machine learning, which is used in agriculture mainly to determine and predict what growth in the farm is weeds or other unwanted crops as well as determining the crop diseases. This has an important use in decision on spraying pesticides and helps clearly map their positions and minimize pesticide usage. The machine learning component here is helpful due to the big size of the farms. Some farms can be as vast as many square miles, which requires machine learning to identify weeds and diseases through manual labelling by image annotators and after the model is trained the software can automatically carry out the same process for the on an ongoing basis for vast volumes.

I thoroughly enjoyed my internship experience. Not only did I learn a lot, but also got to experience how software companies work structurally all around the world. I also got to see how several people work in collaboration to create software products that are used globally.


0 Comments

Leave a Reply