My ALX Software Engineering Adventure: Learning, Growing, and Thriving

My ALX Software Engineering Adventure: Learning, Growing, and Thriving

ยท

7 min read

DISCLAIMER: This article will mainly focus on how the ALX software engineering program has benefited me, highlighting the skills I have acquired and the technical tools provided during the course.

I will not cover topics such as how to apply to the program, the internal tools used by ALX, or how to gain acceptance into the program. However, I will provide some useful links for further exploration at the end.

Introduction ๐Ÿ”ฐ

Now, I can proudly say that I hold a title as weighty as Software Engineer, and better yet, I can confidently defend that title as a powerful Software Engineer ๐Ÿ˜Ž.

Allow me to introduce my past self: a young web developer proficient in JavaScript with some knowledge of React.js/Node.js, but far from being an expert in the tech industry, and certainly not yet a Software Engineer.

Back then, I was able to write some code and solve problems, but when it came to more complex questions such as:

  • Designing a system

  • Choosing a load-balancer technique

  • Ensuring system scalability

  • Maximizing availability

  • Deciding between Monolithic and Microservices architecture

  • Selecting the right database

  • And determining the best technologies for a project

I was completely lost. To be honest, I couldn't even answer some of these questions. I vividly recall a software engineer job interview where I was asked to design a system and failed miserably. The memory still brings tears to my eyes ๐Ÿ˜ญ๐Ÿ˜ญ.

Hello, I am Bless ๐Ÿ‘‹

Allow me to introduce the current version of myself, molded and refined by the rigorous ALX software engineering program.

Hello, I'm Bless Ambele, a Full-Stack Software Engineer with the ability to design and implement end-to-end systems. I have extensive knowledge in ensuring high system availability and making it globally accessible while considering the location of the targeted user base. My expertise includes implementing scalable systems that adjust to varying request loads, determining the appropriate database type, caching, queuing events, and developing a cohesive code architecture that targets low coupling. Additionally, I have a strong command of data structures and algorithms to optimize system performance

Am I coming across as a bit of a show-off? ๐Ÿค” Well, maybe just a little bit ๐Ÿ˜‚.

Allow me to elaborate on my abilities and technical skillset.

What can I do now? ๐Ÿค”

I will split them into 5 parts.

  1. OS

  2. Infrastructure

  3. Databases

  4. Back-end

  5. Front-end

OS ๐Ÿ‘ฉโ€๐Ÿ’ป

After spending a full year managing servers, it's no surprise that I now excel at it.

Tools:

  • Unix-based OS

  • Systemd

  • Bash

  • Vim

Infrastructure ๐Ÿญ

I am now proficient in provisioning and configuring infrastructures for any given Unix-based system. Furthermore, I have expertise in continuous integration and continuous deployment (CI/CD), as well as deploying clusters to the cloud.

Tools:

  • Terraform

  • Ansible

  • Docker

  • Kubernetes

  • AWS

  • GCP

  • NGINX as a web server, proxy and load balancer

  • Computer networking

Databases ๐Ÿ’พ

Thanks to my education at ALX, which covered transactions, ACID compliance, and data consistency, I no longer default to MySQL for every app I build. Instead, I carefully consider the problem at hand before selecting the appropriate database solution.

Tools:

  • Structured DBMS (MySql, PostgreSQL)

  • MongoDB

  • Redis

  • Elastic search (currently learning)

Back-end ๐Ÿ”™

I apply extreme programming principles to all the code I write, including test-driven development (TDD) and prioritizing pair programming. Additionally, I have expertise in creating RESTful and GraphQL APIs, designing and implementing caching and message queues, versioning my code, prioritizing security in all aspects of development, and writing code that is easy to maintain

Tools:

  • Python (Django, Flask)

  • Node.js/TypeScript (Express.js, Nest.js)

  • Apache Kafka (currently learning)

  • Git

Front-end ๐Ÿ“ฑ

I am a dedicated app designer who prioritizes user empathy in my design process. With my expertise in coding, I can create both visually stunning designs and fully functional apps that effectively solve real-world problems and elevate the overall user experience.

Tools:

  • HTML/CSS

  • JavaScript/TypeScript

  • React/Next.js

  • Redux

  • GreenSock

How did the program help me? ๐Ÿ†˜

How did the program help me? Well, I am glad you asked.

mindset shift: Before I attended the software engineering program offered by ALX, I was focused solely on writing code and building applications. I believed that his success as a software engineer was determined by how quickly and efficiently I could write code.

However, during the program, I was exposed to a more holistic approach to software development. I learned about the importance of collaboration, communication, and project management in building successful software applications.

As I started working on group projects with some of my fellows who also adopted the same mindset of doing hard things, I realized that my strengths as a software engineer could be complemented by the strengths of others, such as project managers, designers, and quality assurance testers. I began to appreciate the value of diverse perspectives in building software applications that meet the needs of users.

My mind shift from a purely technical perspective to a more holistic and collaborative approach helped me become a more successful and well-rounded software engineer.

Challenging: The program presented a significant challenge, encouraging participants to step outside their comfort zones from the very first day.

As a result, I had to cultivate a mindset of embracing difficult tasks and learning new technologies, even when their practical applications weren't immediately clear.

However, the program's approach helped instill in me a love for tackling tough challenges, and I emerged from the experience with a greater sense of confidence and resilience. in short #DoHardThings

Resources: The program was incredibly resourceful, offering an intense but enriching learning experience.

While some of the technologies I encountered were directly taught in the program, many others were introduced to me through supplementary materials provided by ALX.

These resources included ebooks, videos, and blog posts, and served not only to support my understanding of the course materials but also opened the door to a wider world of learning and exploration. Through these resources, ALX fostered in me a love of reading, researching, and continuous learning, for which I am deeply grateful.

Set up for success: ALX has strategically designed its program to provide students with all the necessary technical tools and resources to enable them to excel from the outset. The program boasts a team of friendly mentors who are always on hand to guide and support students in their quest for knowledge and success.

I have found attending office hours, technical mentor sessions, and guest speaker events to be incredibly beneficial in my journey as a developer. The insights, tips, and tricks shared by these individuals have allowed me to hone my skills and become a better developer.

While ALX provides an impressive array of technical tools to its students, it is noteworthy to mention a concrete example of how these tools can be used beyond the scope of the program. Throughout the course, students learn to manage servers and execute projects on them. However, I took it upon myself to go beyond the curriculum and leverage these servers to delve into the world of distributed systems, including server configuration and scalability.

It is evident that ALX's program is designed to set its students up for success from the outset, and I can attest to the fact that this has been my experience.

Giving thanks ๐Ÿ™

I am forever grateful to Mr. Fred Swaniker and the entire ALX team for granting me the opportunity to kickstart my career. This incredible opportunity has enabled many of us to pursue our aspirations, and I am deeply thankful for the support that has been provided.

The knowledge, opportunity, and network that I have gained within a year are truly priceless, and I know that many others share this sentiment. It has been a transformative experience that has allowed me to grow both personally and professionally.

From the bottom of my heart, I would like to express my sincere gratitude for allowing me to learn, grow, and thrive. Your investment in my future is greatly appreciated, and I am excited to see where this journey takes me.

Thank you once again for everything.

References ๐Ÿช

ALX web site: https://www.alxafrica.com/

ALX LinkedIn: https://www.linkedin.com/company/alxafrica/

My GitHub: https://github.com/Ayaf-Bless

If any of the aforementioned technologies interest you, I highly recommend subscribing to my newsletter. I will be regularly publishing updates and tutorials on these subjects. Thank you.

ย