GO-SQUADS Tech 3.0 Mini Bootcamp: an Eye-Opening Experience

Fadhriga Bestari
6 min readJun 18, 2019
GO-SQUADS Tech 3.0

Early Expectations

Last week I had just finished my mini bootcamp — the first step of my journey as one of twelve GO-SQUADS Tech 3.0 intern. My internship experience so far is very different than what I had previously imagined. It also has a lot more learning than I had anticipated. Even though I have only experienced one week of this 12-week internship, I can safely say that this will be the most exciting, challenging, and rewarding experience of my life yet.

My internship started on Monday, 10 June 2019. I had mostly spent my holidays with refreshing activities and not much studying. Although there were assignments that were due before the internship, it didn’t really bother me so much so that I needed to spend a whole month doing the assignments. It was because the assignments were fairly simple. We were instructed to read a book called The Pragmatic Programmer and to familiarised ourselves with a new programming language called Ruby.

I completed my assignments before the internship. Even so, I still feel mostly unprepared. It’s because GO-SQUADS Tech 3.0 was going to be the first internship experience of my life. My first ever internship and I’m already working in one of the biggest (if not the biggest) tech company in Indonesia. Only a few people get the opportunity to work with the best of the best in the tech industry, and surprise, I’m one of them.

Bootcamp: to Learn and Grow

It’s clear to see that GO-JEK isn’t fooling around with their internship program. This is real. Some other people might tell you that their internship was boring or uneventful. Mine is anything but. One week in and I’d already learned more than I could’ve hoped for in a year. I remember the first question that one of the bootcamp coaches asked was,

Why do you think that we hold this mini bootcamp for you guys, our interns?

It was a simple question, with a simple answer,

We want to win

The bootcamp was designed by winners, for winners. We needed to prove that we can adapt and grow at an incredibly fast pace, or else we would get left behind.

There were quite a few things that I learned during my mini bootcamp last week. In this article, I would like to share my experience with you, in hopes that it might be an inspiration and a valuable lesson for you.

Styles and Conventions

Often when we code, we do it in groups. Not just because coding in a group eases the burden of building a big software, it also disseminates responsibility so that each person could focus their attention on their respected responsibility. Each programmer codes their program on their own machine and at the end of the day, they combine their code in a single place called repository.

Everyone has their own style of writing book. Similarly, with coding, everyone has different styles in writing code and a different approach to solving a particular code. Here are two code snippets that both handle the addition of two numbers.

Int addTwoNumbers(Int firstOperand, Int secondOperand) {
return firstOperand + secondOperand;
}
Int add(Int a, Int b)
{
int c = a + b;
return c;
}

Both codes will work perfectly fine, but the two code snippets use different styles. If you are working in a group, the coding style should be a focal point in your programming process. Where should we put the curly brackets? How should we name the variables? In which directory should we store this file? These are the questions that you need to ask early on so that everyone has a clear understanding of the coding convention that they need to adhere to for the rest of the project’s lifecycle.

As a side note, I recommend you to look up and read on the already established convention for your programming language. Not only this clears up the inevitable debate of “My style is better than yours”, but it would also serve you greatly to use the provided style formatter plugins available online, such as google-java-format for Java and rubocop for Ruby.

Automation

Building, compiling, and running your program can be a tremendously tedious action to keep doing every time you want to test or debug your program. It might be okay for the first one hundred times you do it, but it will get old very quickly, especially if the building, compiling, and running your program requires you to insert multiple commands into the shell.

At first, it might sound overwhelming for the uninitiated to hear the word automation. Don’t worry, we aren’t talking about Artificial Intelligence here. The automation I’m talking about is to automate the process of encapsulating the multiple commands needed to build, compile, and run your program into a single command.

Some of you might have heard of a Makefile before. It’s an example of automation that you can utilize to make your building process a lot simpler in C/C++. What if the project you’re working on isn’t using C/C++ you say? You’re in luck! You can achieve the same outcome by using bash scripts or ruby scripts. In essence, a bash script is just a file that contains a list of commands that will be executed if you execute that particular bash script.

Here is an example of how you could simplify your building process by using a script that encapsulates all the commands into one file.

#!/bin/bash
mvn -q clean;
mvn -q compile;
mvn -q test;
mvn -q exec:java -Dexec.mainClass=com.myproject.Main

See what I did there? I didn’t compile my Java project using javac. That’s right, you should also consider using build tools available for your programming languages such as Gradle and Maven to help you manage your project — be it to simplify the building process or to manage your project’s dependencies.

Design Patterns

Programming isn’t easy. If it was, then everyone and their mothers would be doing it right now. Creating software that solves real-life problems is one thing, but creating one that is also efficient, easy to understand, and extensible software is another. Those of you that are familiar with the concept of Competitive Programming (CP) knows exactly what efficient code means. It means we need to create a program that takes the least amount of resources (money, time, storage) possible. Unfortunately, coding efficiently is good, but not good enough. If we were to only be concerned with the efficiency of our code, we would overlook another important of programming, which is to build an extensible software.

Here is where design patterns come in. A design pattern is basically a pattern that you would use to structure your application. You should do yourself a favor and read up on the available design patterns you could use for your particular project. There is no be-all and end-all design pattern, so have a thorough discussion with your colleagues before adopting any particular design for your project.

Communication

Last but not least, we need to be able to communicate with other people effectively and efficiently. It doesn’t matter how great of a programmer you are, if you can’t convey your intention to your colleagues or worse, your client, then what’s the point, right?

I could tell you a million tips and tricks, but all would be to no avail if you don’t practice. So first things first, you need to practice. A lot. To be honest, I’m still refining my public speaking skills as we speak (pun intended). You might not be confident enough now, but everything takes time. Don’t give up just because people didn’t understand you last time. Learn from your mistakes and apply new approaches next time around.

If you’re already comfortable to talk in front of people, then the next step is to actually form your sentences correctly. It would not be a surprise if in one of your stand up meetings, one of your colleagues or supervisors challenge your design decisions. At times like this, it’s good to know about bias and fallacies.

As I feel like I am unqualified to teach you about bias and fallacies, you should do more reading on your own to understand what bias and fallacies are and how you could avoid using bias and fallacies in the future.

Sharing My Experience

For the upcoming months, I’ll be sure to keep writing and share my GO-SQUADS Tech 3.0 journey here. Not only this is the best platform that I can utilize to share what I’ve learned during my internship, but writing blog posts is also one of the best ways for me to practice my communication skills. Though if nothing else, I hope you take my experiences and learn from my mistake instead.

Bye for now!

--

--

Fadhriga Bestari

An up and coming software engineer, learning to love to write.