I wrote this article because I took a sit back and I couldn’t even remember anything from PHP aside the fact that I used a lot of dollar signs $$$. In this post, I will mostly be documenting in chronological order, the tools I learnt since I started programming. (At least the ones I can remember)

Finding myself

LOGO programming was taught in early secondary school years as part of school curriculum. I remember drawing very basic shapes with LOGO. In fact, it felt more like maths than programming because we actually had to calculate angles and shape functions before actually drawing them. I was pretty good at maths and learning LOGO was cool. I’d say, it created a spark in me to learn more about programming.

HTML / CSS

html css image It was also compulsory to learn HTML in Computer Science in Junior School. The curriculum only actually covered basics, but my friends and I built some websites with HTML/CSS then. I remember building a download site that hosted all the images on my computer. The site was really bad, because I wrote all the pages by hand, copied and pasted blocks repeatedly. W3Schools was a very good guide to learn HTML and CSS.


School happened, so I had a brief pause


PHP

php image There was a Wordpress workshop two years before I graduated from secondary school that actually ended abruptly, if I remember correctly. I dug the source code for most of the things and started learning PHP myself from a very scanty PHP manual. It was actually the only resource I had then, but at the time, it was enough.
PHP was the first programming language with which I practiced my knowledge of control flow and flowcharts in programming.
Why did I stop PHP? Python was starting to gain hype and I was advised to learn it by my Physics teacher.

Python

Unlike PHP, I was able to find a lot of resources on python. Python was actually very easy to learn for me. I used certain materials that I still recommend to people that have reached me to learn programming as a guide to learning python.

  • Automate the Boring Stuff with Python by Al Sweigart link
  • Beyond the Basics with Python by Al Sweigart link
  • some material I can no longer find anywhere on the internet // TODO:
  • Solved a lot of hacker rank problems with python
  • Making games with Python and Pygame link
    I loved games a lot, so I was curious and very interested to learn the act of making one with my newly developed skill. Did I get heart broken? It took me sometimes to actually realise how unfit and very difficult it would be to make a game with pygame, even though it was fun to learn.

It was at this point I chose to study Software Engineering instead of Medicine. I mean, it made sense because I was interested and curious mostly about programming and tech stuff.


The Journey

Git / Github and Version Control

github logo
git logo

I started using git and github very early and that is why I have a lot of repositories on github. I really cannot recall how I started using git and github but I started pretty early. This is good because, over time, I could share my progress with friends and keep track of changes on the projects I worked on. I also tried other repositories like Gitlab and Bitbucket, but I still prefer Github.

Java / Android Development

java logo
android logo

In my first year at the University of Lagos, I met a lot of friends and seniors who had interest in programming like I did. I joined Engineering Career Expo and learned Android development with Java. I still regard Java as my native language till date. I learnt a lot while learning Java and I think most things in Java made a lot of sense compared to the languages I have used previously. This dates back to 2018.

JavaScript, Node and ExpressJS

I learnt backend web development with ExpressJS. This was the first ever server that I built, and I created and exposed endpoints that were consumed by the apps I was building at the time. I really never learnt Javascript actively, it just kind of clicked. I had to take some tutorials to learn ExpressJS on the other hand because the concepts of server and the whole backend was strange at the time.

Flutter and Dart

A friend recommended Flutter to me and I agreed to look into Flutter because it was built by Google and also because it promised to build cross-platform mobile applications. This meant that learning Flutter would actually make me write both Android and iOS apps, so I gave it a shot and it was a very long shot 😂 (because I still use it to date). I immediately started using Flutter because:

  • building UI is wayyy easier than building natively with Java
  • I was using a 4gb ram lenovo laptop at the time and using Android Studio was a pain. (At least, I got to use vscode with Flutter).

Java II

The funny thing was that I never really learned Java the first time. Yes! I built some applications with Java, but I was only focused on the Android Framework and never used Java for things like data structures and algorithms for example. I didn’t even understand how many of the libraries I used, worked in-depth.
In Kazan Federal University, Java was officially taught in-depth this time and I learnt super fast, because of my previous experience building Android applications. This time around, I learnt in-depth concepts ranging from data structures, algorithms, Object Oriented Programming, Generics, Concurrency and Threading, Design patterns, Architectures, and so on.
Java set the foundation to professional programming for me. I learnt a lot of things that I still use till date and I am happy I started with Java. Thing is, my choice of languages since Java has been influenced by the fact that I learnt Java first because I am more inclined to learn languages that are similar to Java.


At this point, learning new languages has been breeze for me. I can learn a new language in less than a week or two, and I can build a simple application with it. I have learnt a lot of languages since then, but I will only be highlighting the ones I have used extensively.


Kotlin

I had a very short experience with Kotlin. I guess every Java developer must have tried some Kotlin at some time. I used Kotlin only for some Codeforces contest.

PostgreSQL

NoSQL database was my bread and beans then. I used MongoDB and Firebase a lot. I actually knew some SQL before it was taught in school, but I never knew things like normalization and other relational db concepts. PostgreSQL was reintroduced as a course in my second year and I went really deep into SQL concepts. Most importantly, I learnt how to use PostgreSQL with Java and I also learnt how to use it with Node.js. I used PostgreSQL for a lot of projects and I still use it to date.

iOS Development (Swift / Objective-C)

I picked iOS development as my technical area of specialty from my second year at the University to augment my Flutter skills with native development. I learnt extensively, iOS development with Swift and I can boast of middle level experience with Swift and iOS development.
I also learnt Objective-C on my own, because I was curious to see how much of an improvement Swift was, when compared with Objective-C.
I have built a lot of applications with Swift and some of them are available on my repo on Github.

I also had my second year summer internship with a company as an iOS developer.

Before I move to other languages, I think Swift is one of the most properly designed programming languages I have used. Furthermore, I’ll explain how iOS development was easy but complex at the same time:
As a beginner, one is abstracted away from serious swift code and can use the Layout Builder to build a decent app in Xcode. When moving up the ladder and getting better, you have to do everything without the layout builder altogether and also learn about ARC memory management model.
Altogether, I really enjoyed iOS development, Xcode, and the Swift programming style guide. I think Swift is a very good language to learn for beginners and I recommend it to anyone that wants to learn programming practically.

TypeScript

Finally, developers were starting to see what I saw wrong in Javascript. I jumped on the train when Typescript came on board and some of the projects I worked on, at Paytrybe were built with Typescript.
Typescript is a very nice language and I always advice backend developers to check out NestJS. Nest is a progressive Node.js framework that uses Typescript and makes backend development a breeze. It utilises the power of decorators, generics, interfaces, dependency injection and many other OOP stuff and best practices, that JS was missing.
If I had to build a LTS server in the shortest possible time, I’d use NestJS.

Go

I started learning Go programming language in the summer of 2022 and my growth in the language has been extremely rapid. First, I learnt the syntax in less than two days, but I guess everyone has similar experiences learning Go because Go is a very simplistic and yet very powerful language. It’s easy to get addicted to Go because it combines the best of many worlds. Currently, this is my go-to programming languge (Sorry Java 🫠). I explained the reasons why I started learning Go here in my other article.
Learning Go means that I had to learn about containerization, microservices, tooling and profiling.. Go is very fascinating, and there is so much to learn writing Go. I have built a lot of end user applications as well as open source libraries in Go. I have also contributed to several open source Go libraries. You can check them out in my Github repo.

Docker

Docker! Docker!! Docker!!! These days, it’s impossible to not see a post about Docker. I used Docker before Go, but I never saw the need for containerization until Go. I use Docker greatly for spinning up containers for integration testing, maintaining singular application environment / workflow and application deployment. In production, I also have some applications running on Docker swarm.

Linux / Operating Systems

I took operating systems as a course in my third year in the university and we covered a lot of Unix specific concepts which includes Networking, File systems, security, containerization, etc. All of these concepts came in handy because I deployed most of my server instances on linux machines.

Others

In no specific order, I’ll like to name other concepts, popular architectural patterns that I appreciated, used and I think are notable mentions in my journey:

  • MVC, MVVM architectural patterns in iOS / Android development.
  • Clean Architecture, DDD, BLOC, Redux, TDD, animations in Flutter.
  • SOLID principles, SPRING, Enterprise development in Java.
  • Package Oriented Programming (POP), microservices, error handling, profiling and tooling, optimization, concurrency techniques, Docker, (omg testingggg) and other low level system stuffs in Go.

Tips and Tricks to learning new languages

I cannot guarantee that my method will work for everyone, but I found out that since I already know most programming principles and techniques, all that is required to learn a new language is to learn the syntax and the language specifics. Hence I do the following:

  • Check out the language on learnxinyminutes.com
  • Read the official documentation of the language.
    Some languages actually have very good documentation for example:
    • Swift releases a new version of The Swift Programming language ebook in the Books app on MacOS. link
    • Go has a very good documentation on go.dev as well as playgrounds.
    • Typescript as well has a very good documentation.
  • I solve some algorithms and data structure problems with the language to familiarise myself more with the language syntax and libraries. Personally, I use Exercism to learn a new language.
  • Finally and most importantly, reaching out to the community is the best way to learn a language, because you can ask questions and learn from the rich experience of developers that have been using the language for a long time. In fact, they can recommend the best materials to learn the language.