GoSchool afterthought
Disclaimer: This is all based on my experience with GoSchool and its partner "company" (no 's'). Please evaluate it neutrally.
TLDR; move to Expectations.
GoSchool, 5 months later...
If you have read my very first posts about GoSchool, you would find that it was quite good. This is from a perspective of someone who has some foundation in programming and know the basics of what a function, conditional statement, for loop, arrays, methods, classes, etc is supposed to do.
If you have no idea what I'm talking about, you will struggle and struggle really hard to understand what they are trying to teach. And ultimately get frustrated trying to complete the assignments on time. For now I will explain and give you my 2 cents about each and every module that is taught in GoSchool. Each module is taught in 3-4 full days, 9am - 6pm. Followed by a week to complete and submit the assignment, a week of break for the lecturers to mark.
Go Basics - Module 1
Let me once again make this clear, I have no qualms about the abilities of our lecturers/course providers. Ngee Ann Polytechnic is the course provider, and 2 of their lecturers are very experienced in their own fields. However, it could be said that some of the course materials were lifted from other sources with no credit given to the source.
So in Go Basics, you will first learn the syntax, quirks of Golang. It is a statically typed language, designed by google engineers closely similar to C and it has all the good parts of other programming languages combined into it. Their libraries & documentations are one of, if not THE best (my own opinion).
The first assignment after the 3 full days for Batch 1, was to create a CLI Shopping list. You will need to store the data in memory via a data structure, and be able to perform CRUD operations on the CLI.
Difficulty Level: 4/10
Go Advanced - Module 2
In Go Advanced, you will learn how Golang handles errors, and how to use import the packages and use them. They will also briefly cover, Data Structures like Stacks,Queues,Binary Search Tree, etc. Followed by how to use channels/mutex/concurrency/goroutines.
The assignment for this was a booking system, and the requirements was to implement some form of data structure, channel, concurrency. Additional points for a UI
Difficulty Level: 7/10
Go in Action I - Module 3
In Go Action I, you will learn how to implement a http service with Golang. You will learn about OSI Layers, TCP/IP, Routing, Security, using Go Templates. The most important being how to hash your keys/ generating cookie tokens. And also retrieving JSON data.
The assignment was to improve on the booking system, and to include a http component and create a simple html site, login with cookies, using the go templates for the frontend ui.
Difficulty Level: 7/10 (8/10 if you can build a RESTful API)
Go in Action II - Module 4
In this module, you will learn more about security in Golang. How to do input validation/ sanitization, encoding, more error handling and logging. Essentially this module is a build up from Go in Action I.
The assignment was to "further" improve on the previous project. This time, making proper input validation, sanitization, encoding it properly and logging errors.
Difficulty Level: 6/10
Go Microservices I - Module 5
In Microservices, as the name implies you get to learn about how to create a microservices API, or a RESTful API. This module is evaluated by NP, external Go Developers and is not taught by Ngee Ann Polytechnic. But an external trainer, whom I feel was really good. You can find him on his LinkedIN - Lee wei meng he is the founder of Learn2Develop.
So you will learn how to create a docker container. Play around building docker containers, containerize your code to docker. Use curl commands to interact with your container.
The project is to work on creating a RESTful API, industry standard no shortcuts. Many of us had to re-do because we weren't able to implement the correct security? anyway the feedback returned was too ambigious.
Difficulty Level: 8/10
Go Microservices II - Module 6
In Microservices II, you will learn about SDLC (Agile Development), TDD (Test Driven Development). How to create tests with Golang, learn how to use Github Actions for CI/CD. Use Github to collaborate with your batchmates, and finally setting up your own CICD repo.
In this assignment, you will have to create your own github account, create a repository and then implement some tests and create the CICD functionality. In my opinion this module was the easiest.
Lastly, around this time you will be sent an invite link for a technical test from Shopee. Its 2 questions in an hour to complete using Golang only. To my understanding, most of us did not complete both questions in time. And those who failed both questions, were asked to retake the test.
Those who were deemed capable had another opportunity with Shopee for another test. And the 2nd interview, it was to create a BST within an hour with no reference. Not sure if there was many who took it but I only knew one person who was offered to take the test.
Difficulty Level: 3/10
Go Live - Technically the final...
Well if you pulled through all the modules and reached here. Congratulations, you've done really well! Well not so, along the way my Batch grew smaller and smaller. From the initial 20 people, we were left with 15 people. Throughout the entire course, there was no feedback for the assignments that we have done. Everything was silent.
The "FINAL" project, or some they marketed. Was to create a MVP of an idea that you will have to think of and then present it to the partner "company" (not companies) For our batch, we were given a few topics to consider smart solutions for climate change and sustainable development, covid-19 support systems.
Difficulty Level: 8/10
My 2 cents of experience with GoSchool
Overall, I will give the benefit of the doubt as it was the very first run of GoSchool and it happened during unprecedented times. Thus this entire traineeship was conducted solely online.
Curriculum
As you can see that Ngee Ann Polytechnic is the course provider, being in the education field a recognised school. They have "the" experience in "teaching", the course content was enough to get you started with Golang. Some topics were touch and go/explained briefly, like Data structures it was too complex to really cover everything within a week (3 days) of lessons. And I would say that you will need to practice alot on your own to figure out as with all learning.
Expectations
In GoSchool, they marketed that they have "secured" over 150 Golang Developer roles with Top Tier companies. I do not know if this is true at all, in fact during the initial phase the advertised partner companies were (Shopee, SeaMoney, Garena, Zalora,Foodpanda). 3 out of 5 of the companies were affiliates, 1 is privately owned and another belong to DeliveryHero. And by the definition of "secured", have they placed anyone in the company yet? Batch 1 is 20 students initially. And not a single one of us have "secured" a job with their Top Tier company.
In Batch 2, the companies were reorganised to (Shopee,Acronis,Xendit,Taiger,Zalora,Foodpanda) as you can see it has increased. But the critera is as ambigious as you knowing me as a person.
Many of us (Fresh Graduates/ Professionals) were expecting the guranteed traineeship with Shopee after the 4 months of learning because it will be the closest we can get to understanding how a company actually work and in scale. However, it ultimately did not happen as expected. Some of the students probably had a premonition that it would happen due to the lack of proper communications and found Tech jobs on their own.
So what happened after Go Live (21 Dec 2020), after 2-3 rehearsals prior. When we presented to Shopee our projects demo, it felt like they were just going through the motion, and not actually considering us as suitable developers. The questions they asked were things like scaling, architecture, security authentications, stress testing/benchmarking. If you had a search feature, what's the search logic, if you had concurrency how do you set connection pooling and its considerations for scale.
As it happened during the Festive Week, naturally most people would be on break and responses will be slow. Giving them the benefit of the doubt again, I was expecting things to start moving as we progressed into the New Year. However, both GoSchool and NP did not provide any new updates until we some of us had to email them to ask for updates.
Clearly it was a case of left hand not talking to the right one. GoSchool was saying NP will update us within the week, while NP said that OpenNodes (GoSchool) will brief us once they finalise the details.
Fast forward to 11th of January 2021, they responded via email to all of us that we will begin our apprenticeship as a "Special Projects Intern" where we will be engaged to complete an industry project with SEAGroup over the next 4 months overseen by both academic supervisors from Ngee Ann Polytechnic (NP) as well as Product Managers from SEA Group. And an upcoming arrangement for a project briefing with the relevant parties involved.
That email broadcast sounded fishy, and I was right! Please take my opinion with a pinch of salt. In my 12 years of working experience, a "Special Projects" role is essentially a role that all the other teams do not want any part of. And because they are obliged to take in the person, they place him in a "Special Project" team to do some stuff which will not impede them.
So why I said that I was right? during the project briefing. It was essentially a Group Go Live project, with the 2 NP Lecturers babysitting the groups together with 2 representatives from Shopee as Project managers. The remaining Batch 1 were broken into groups of 3/4s, and given a project to complete for the next 4 months. As a developer, for a project to be successful it is always good to have a senior/lead developer managing the team to be able to clarify any doubts and to steer the juniors in the right direction. However, instead they were given a PM that will get updates every month for the next 4 months.
Maybe this is a Asian cultural mindset, like "your mom ask you to find out yourself" kind of situation. If you dont struggle you won't appreciate what you have right?
For someone who has not worked as a developer before, you will not know what tools will be used in development. So many questions so little information. How will you know as a complete fresh developer, the way to scale the technology? What techniques in Golang can you implement to ensure compatibility with the technology of the company?
Assignments
Overally i would say that it is achievable, but you will definitely need some form of help like a TA or an assigned mentor who can take time to figure out your problems. If not you will just struggle for a week and maybe not be able to complete the assignment and just submit what you have.
Communications/Support
This was a utter fail, many of us were left hanging in the dark. We had no idea, who to communicate, what avenues we had to contact for help. The natural choice was our 2 lecturers, but we only had 1 of their contact provided at the start of the course. Imagine 1 lecturer answering 20 students problems! Well that was what happened and by the 3rd module we were told not to contact unless die die cannot understand. HAHA! Well bascially you can say that your assignments = you are on your own to figure out how to complete it.
Ending Notes
That being said, I'm thankful that I was lucky enough to be offered a position somewhere else. And I'm perfectly happy where I am, being able to learn from really experienced colleagues who are patient and understanding. I'm also happy that another one of my classmate is having a wonderful experience with Razer, from my understanding the Lead developer is awesome too!
Someday, I would want to achieve that level of experience and pay it forward if I ever have the opportunity. Its really true that, finding a team that suits you or finding someone that suits your team is really tough. Being a developer is not a last man standing type of job, it is a team game. And a good team, will create great products!