Breaking into programming with Go
I strongly believe that this is a niche. There are a lot of people who want to break into programming and they have a lot of choices for learning resources and a lot of options as to how language x is better than language y.
As this is a gopher blog, I would like to focus on the Go language and my journey in learning it.
I first interacted with Go in the spring of 2020. It was the start of the pandemic, we were all in lockdowns, and I thought that this is the best opportunity for me to take advantage of the situation and to touch programming. I did tech support and had various support roles for most of my working life, so 2020 was the obvious moment for me to level up my tech game.
The first step is which language to choose. I did my research and from the various options available, I bought a 9-dollar Udemy course on Python :). As I was going through the course, I heard about Go. In my initial search, I didn’t even find mentions regarding Go as a first language. Go as a language was introduced to me by a non-programmer friend who was in the same dilemma as me, what language to pick as a starter language.
Reading more about Go, convinced me that this is the obvious path for me. It had all the elements that I wanted. It is stated that it has an easy syntax, so it is easy to learn, it is a safe language (now maybe debatable but back then that was my understanding) and most important, it was touted as one of the new cool kids on the block.
Now starting with my journey, the things that I did and what I consider that I did good and what I consider that I did wrong. I don’t have a technical education, I started a Biology college which I didn’t finish so my background is the perfect foundation for success in programming and computer science :).
As now I had a new target in my head, came the resource part. Of course, I google searched learn Go and got a lot of returns. One of Google’s suggestions was Effective Go. What the fudge is Effective Go, when you don’t have a clue about programming?
Of course, I turned back to trusty Udemy, which has quite often promotions, and all of the course prices drop to 9 to 11 Euros. I picked a course that had 4 stars plus and a running time of +40 hours. I thought that this is THE COURSE, it is well-rated and had a big length which means that a big amount of information is covered.
The course play time was doubled as an old course was attached to the current course, making it look bigger. The first mistake,. I needed to learn how to use Udemy. I believe that Udemy is a great resource for learning new things but it is also full of bloat. As a student, you need to navigate through the material. Negatives aside, this first Udemy course taught me a little of Go but most important, it introduced to me some names of the industry, like Ardan Labs (this is a resource for advanced gophers but it introduced to me the Gophercon as an event to gather more info about and also a morale booster podcast that I will cover it later in the article), An Introduction to Programming in Go by Caleb Doxsey as a book and others that don’t come into mind now. Besides that, it didn’t provide much except a certificate that you can flash on LinkedIn.
At this point, I was aware that I don’t know anything besides package main and func main and how to print “Hello world!” I would say that I got lucky and found one of the best resources on Udemy. A course by Inanc Gumus, which I highly recommend to everybody new to Go but especially to people new to programming that want to start with Go.
The name of the course is “Go Bootcamp: Master Golang with 1000+ Exercises and Projects”.
What I valued most from the course, it explains everything from what is an int, string variable, etc to what is a function, method (those I didn’t quite get from this course, but they were introduced to me), and everything important for someone new to programming. The second valuable thing of the course is that it builds muscle memory, providing a lot of challenges that force the student to put into practice all the new concepts that are taught.
Ok, this course was finished and I also started a new support job which offered a good comfort zone for me and was unrelated to Go. As most of us would do, I enjoyed my comfort zone for mostly a year. At this time I kept an eye on the Go community, I started to listen to the Ardan Labs podcast in the background, on Spotify, while working. There are some episodes with which I didn’t relate too much, but there were some episodes that triggered something that was bothering my comfort zone. A specific episode would be episode 19 I think, judging by how Spotify plays them. Check out the episode on YouTube.
I related 100% to the lady that was invited to this episode. I would say that she made me feel very awkward in my comfort zone. She studied foreign languages, worked as a pharmacy technician and made it as a Programmer Analyst. Funny thing is that at least at the time of the podcast, she didn’t know Go.
For me, this episode was a kick in the ass. It gave me the initiative that I needed to get out of my comfort zone and do something.
I would also recommend the Jessica Greene episode, for motivation :) . She has a similar story, transitioning to a technical role from a non-technical background.
One of the first things that I did after I finished listening it, I started again to play the podcast from the first episode while working. At the end of each episode that I listened to, I used the contact details from the speakers and started following them on Twitter (writing this article I just found out that I was not following Renee), if they had a LinkedIn profile I started following them there as well and also tried to connect with them. I would say that most of my connect requests were accepted :) and now I have a better LinkedIn network. I believe that this is important for job hunting, as for me LinkedIn was my job search/provider since 2011.
Since I was out of my comfort zone, after work I started to put 1 or 2 hours aside in the evening for Go study. Searching for things to do, I found Jon Calhoun’s Gophercises (and also found Jon Calhoun as a learning resource). Trying to start with those, I realized that since I did my Udemy course I left a lot of time pass by, and that it was very hard for me to pick up. Especially, I couldn’t start a new blank project. This was my greatest fear. Open VS Code, and create a new main.go file and start coding.
Of course, quick fix, a cheap Udemy course. Now my requirements have changed. I looked for +4 stars and not a lengthy course, as I already knew the material. I found one that checked all my requirements but didn’t get me out of the situation. I was pointless. Continuing with my life, and working from 8 to 5, I was doing my support role and listening to the Ardan Labs podcast. I got another idea (I don’t remember from which episode), that to get a job in the development industry, you need a project. I found a project idea. My wife built a website in Wix and the site, among other stuff, is sending an email to the subscribers when she adds new photos on it. Since I want to work on backend (in my support roles I worked a lot with SQL and I consider myself a 0 creativity man), I decided that this would be my project. Create a platform in which you can upload files and MY Go code will send email notifications. As a side note, this is a project that I didn’t finish, but it is still on my roadmap.
Again, I created a new main.go file in VS Code and was completely clueless on what to do :). I started reading and searching for articles. This way I learned about the mux router, the HandleFunc, and the http.ResponseWriter. As I was working on my project, I got lucky because of a step that I previously took. When I was listening to another episode of the Ardan Labs podcast, I started following Martin Gallagher on Twitter and LinkedIn.
From the episode’s description, “Martin Gallagher is a specialist Go recruiter, matching developers with interesting companies across Europe.”
I saw a post on LinkedIn in which Martin started a Go mentoring program in which he was pairing mentors with people seeking mentorship. Of course, I approached him, and in under a week, he already paired me with a mentor.
Working with my mentor, I became more confident in my Go abilities, I managed to move forward with my project, and with his help I broke the main problem into smaller problems. I have a request form, an API that queries my MySQL data base and a Go API that uploads files in a Google Cloud Storage Bucket. Reaching this stage, I had to research besides Go, Docker and cloud providers (in my case I researched GCP and AWS)
Since for my project I used Docker, I did a Docker/Kubernetes course (polished my initial Docker files as a practice) and felt confident to hunt Go roles. My targeted jobs were junior Go roles. Didn’t really find just Go roles. Junior Go roles require another programming language or they are DevOps oriented.
I had some interviews scheduled. I was confident on my APIs and microservices, but nobody asked my about those. All the questions were like leetcode’s problem 1770, Maximum Score from Performing Multiplication Operations. Of course, I flunked the 3 or 4 interviews that I managed to score.
Before applying to other jobs, I did a sanity check. I attempted to solve leetcode problems and found that I didn’t have any clue on how to solve them. Remember when I said at the beginning of the article that I don’t have a technical background? Leetcode just bit me in the ass. Trying to understand the problem and searching for answers I read about algorithms, merge sort, bubble sort, big-O and greedy approach. I was what the fudge is this? This is when reality hit. An it was a hard hit. In my previous roles, I worked with SQL and most of my queries included selects, aggregates, joins, betweens, limits and so on.
Ok, what to do now? Since most of the exercises require an algorithm, I should search for a way to learn algorithms with Go. Easy to say/write, harder to do. I couldn’t find resources to learn algorithms with Go at that time. As a parenthesis, a couple a weeks ago, I found a book, Data Structers & Algorithms in Go, written by Hemant Jain.
I feel the need to mention this book as this is the only one that I found regarding algorithms with Go. The reviews for the first 2 editions are mixed because the author’s native language is not English and the word choice in the book is not the best. What I have read, that the third edition (which I just received), fixed the language barriers and that now it is a very good book. I just got it and didn’t read it yet so I can’t pronounce on it, but it is my next book on the list after I finish my current book.
Before I get into reading (which I now consider the most important): Since I am big online course fan, I found a data structures & algorithms course that was for Python. On my mentor’s suggestion, I took it and tried to apply the techniques explained in Python, to Go. This was a nice and useful challenge. This course wasn’t a complex course, but I learned about bubble sort, merge sort, quicksort, recursion, ordered and unordered list search and many others. It was a programming foundation for me and it still is a valuable asset for me when tackling a new exercise.
After I finished this course, my new focus was “Go problems”. From all the available websites out there, for a beginner, I would recommend exercism with its excellent Go track.
This site provides introduction to concepts, problems which focus on learning a new concept, like variables, functions, packages, etc in Go to actually bending your mind on more complex challenges, structured from easy to medium and hard. Also important to mention, after you submit solution that passes all the tests, you can request mentoring on your solution, and in a short time, someone will give you feedback on your solution.
If you don’t like working on a web interface (as me, you may be used to writing code in an IDE), you can just write your main function that calls the functions from the challenges and work in your IDE of choice. I consider this to be a plus as it forces you to think at the whole picture :) .
While working on these exercism challenges, I found out that I didn’t really understand more complex topics like methods, interfaces, embedding and pointers, just to name a few :) .
After a time of low self-confidence, during which I feared it is too difficult, I don’t have a CS background, I lack the knowledge to succeed, no matter how hard I try, I keep failing, I had a question for myself. If programming was easy, wouldn’t we all be programmers?
Then I though, how to learn? My whole life in school I didn’t really learn by the book. I got through school by just paying attention. I remembered that most of the things that I was interested in, I had to read about them to learn more (I spent my childhood in the 90s and didn’t have YouTube tutorials). So this is what I did next, and currently doing now. READING.
For me, reading at least one hour per day (and putting into practice the code that I find in the book), is more valuable than watching some hours on tutorials/online courses. Even though I know the basics, reading “Head First GO”, I got to be comfortable with pointers and methods. Now I am still working on my interfaces :) .
Since I still work in support, I tend to talk/write a lot and I believe that I should get to a conclusion.
Programming is hard and it takes a lot of time to understand it (not saying to master it :) ). Of course, what I just described, is just my experience and my struggle, but I think that as a general rule, if you work hard enough, you will have great results.
Now for the people who don’t have the patience to read my whole story, I will do a bullet point recommendation:
- Do an online course (Udemy, LinkedIn, etc.) to get a feeling about the language
- If you liked the language concept, try to follow online resources, like podcasts, blogs, Gophercon, etc
- As I said in my article, try to connect or to follow the important people. For me, following Martin Gallagher, paid off big time, as I got an awesome mentor
- Use sites as leetcode.com, exercism.org, etc. to practice and identify your weaknesses
- While trying to solve problems, when you get stuck, don’t demotivate yourself
- When I feel demotivated and frustrated because I can’t solve a problem, instead of procrastinating (of course, I procrastinate) or whining (and I also whine), I continue my book reading and try to use one of the concepts that I learned into a problem that I just made up, or I try to implement an algorithm or idea that I got from the book (at the time I am writing this article, I have a stupid problem on exercism that I can’t solve, that I didn’t touch in the last 2 weeks, because I am still reading a Go book and my focus is on the book. As soon as I finish the book, I will get to that problem and solve it ;) )
- Focus. What I like when I am working/learning, is focus time. Whenever I am committed to solving an issue/problem, in the allocated time, my goal is to be 100% dedicated to the task. Since most of us work remote, I have created my home office space. This space is ideal for me to focus, but since I share my home with my wife and kid :) , sometimes I need quiet. I achieved this with some noise reduction headphones (like the ones usually used on construction sites or loud premises) . What I want to emphasize, even if it is weird, if it helps you focus, GO for it.
- Bullets 5 and 6 are about motivation. Whenever you feel the urge to quit, pause and think, what motivates you to go further? I didn’t have the urge to quit, and I am sure that if you got to this point in the article, you didn’t as well. I know, it is frustrating when you can’t solve a problem, or learn a new concept, but after some hard work, solving the problem or understanding that new concept, is the best feeling in the world
- If you find your inner process and are motivated to put in the effort to pass the challenges, it is impossible to not land that desired Go job.
I know that my `var article stringz is huge and that the blog admin imposing an array would have been the better choice over slice, but I needed this intro for my next year’s advent calendar article on how I got my first Go job.
go install first Go job