Humble Beginnings
In the ever-evolving landscape of technology, my journey began with the humblest of origins. It was 2013, and I was a wide-eyed 15-year-old when I first held my very own mobile phone - a hand-me-down Nokia 2700 Classic. This four-year-old "brick," as we affectionately called such devices back then, was far from cutting-edge, but to me, it was a marvel. It was my first real touch with technology, a window into a world I had yet to fully comprehend.
As I fumbled with the small buttons and squinted at the tiny screen, I found myself awash with questions. How did this device work? What made it tick? But these questions, numerous as they were, remained largely unasked and unanswered. At the time, I lacked both the resources to seek out this knowledge and, if I'm being honest, the burning desire to do so. Instead, like many of my peers, I dove headfirst into the world of mobile gaming. Asphalt 6, Gangster City, Anno - these Java-based games became my constant companions, filling countless hours with their pixelated adventures on the Symbian operating system.
Little did I know that this unassuming device was merely the first step on a long and winding path that would lead me deep into the heart of technology. The world of tech moved at a breakneck pace, and within a year, I found myself surrounded by friends brandishing shiny new Android phones. I remember the confusion I felt when I first heard the term "Android." What was this mysterious operating system that everyone seemed to be talking about?
From Cupcake to Vanilla Ice Cream
It wasn't long before I too joined the smartphone revolution. In 2014, I got my hands on an LG E410, complete with Android 4.1.2 (Jelly Bean). At the time, these version numbers meant nothing to me, but I was soon to become intimately familiar with the intricacies of Android versions and their delightfully sweet codenames.
My transition to this new device brought with it an unexpected challenge. I found myself longing for the games I had grown to love on my old Symbian-based Nokia. Naively, I attempted to run these familiar .jar files on my new Android phone, unaware of the fundamental differences in architecture that made this impossible without an emulator. This seemingly simple desire to play my old games on a new device became the catalyst for my journey into the depths of mobile technology.
It was in pursuit of a solution to this problem that my life as a "googler" truly began. I scoured the internet for answers, my searches leading me down increasingly complex rabbit holes. I stumbled across Oracle's documentation for the Java JDK, a text that might as well have been written in an alien language for all I understood of it at the time. But even as I failed in my initial goal, I had taken my first steps into a larger world.
As I abandoned my fruitless search for game compatibility, I found my curiosity drawn in new directions. In 2014, internet access was a precious commodity. For 20 KES on Airtel, I could get 100 MB of data - a fortune in my eyes at the time. When funds were low, I sought out Wi-Fi hotspots in my neighbourhood. There was one particularly strong network near my home, tantalizing in its proximity yet frustratingly out of reach behind a password prompt.
Rather than seek out the owner and politely ask for the password like a sensible person, I made it my mission to "hack" into this network. This decision, born of equal parts teenage bravado and genuine curiosity, set me on a path that would shape the next several years of my life.
My quest to crack this Wi-Fi password led me deep into the world of network security. I learned about tools like aircrack-ng and John the Ripper. I discovered the concept of packet capture and the vulnerabilities of WPS-protected networks. But more importantly, this journey led me to a revelation that would change everything: Android was built on the Linux kernel.
This discovery was a turning point. Suddenly, the device in my hand was not just a phone or a gaming machine, but a powerful computer running an operating system I could potentially bend to my will. I delved into the concept of "rooting" Android devices, a process that would give me superuser access and open up a world of possibilities.
Despite the warnings that flashed across my screen, cautioning that following random instructions from the internet might leave me with a bricked device, I pressed on. I tried MtkRootKit and failed. I tried KingoRoot and succeeded. The rush of achievement I felt when I first accessed a root shell on my device was indescribable. I was halfway to my goal of Wi-Fi hacking, or so I thought.
As the August holiday of 2014 faded into memory and December rolled around, I returned to my self-appointed task with renewed vigor. But I was in for a disappointment. I discovered that what I needed next was a network card capable of simultaneous listening and transmitting - something my humble device lacked. And so ended my brief career as a Wi-Fi hacker, but the knowledge and skills I had gained in the attempt would prove invaluable.
With root access to my device, a whole new world opened up before me. I had access to a bash shell, which I soon learned to navigate with growing confidence. I began to read about programming, installing apps like SoloLearn. My editor of choice became gedit for Android - a far cry from the sophisticated IDEs I would later use, but more than sufficient for my early coding experiments.
The ability to root my phone allowed me to customize it in ways I had never imagined. I found myself diving into the world of custom ROMs, experimenting with different operating systems for my device. CyanogenMod (now LineageOS) quickly became my favourite, offering a level of control and customization that felt almost magical. To flash these new systems, I had to install ClockWorkMod Recovery (CWM), a process that thrust me into the depths of system development.
I'll be the first to admit that for much of this time, I was in over my head. I was following tutorials and instructions without fully understanding the underlying principles. But I was moving forward, driven by an insatiable curiosity and a desire to push the boundaries of what I could do with the technology in my hands.
My pursuit of the perfect phone customization led me down yet another path. I had a specific vision for how I wanted my taskbar to look, but no existing solution seemed to fit the bill. And so, armed with more determination than knowledge, I set out to build it myself.
This decision led me to spend an almost unhealthy amount of time poring over Android documentation. I learned about decompiling dex files using tools like dex2jar, editing smali code, zipping and signing assets, creating flashable zips, and even patching the Android kernel. The fact that I was attempting all of this on a single Android phone, without a proper development environment, seems almost comical in retrospect. But at the time, it felt like I was unlocking the secrets of the universe.
Game Changer
This device was a game changer!
When I got my third Android phone, a Samsung GT-S7262, I approached it with the confidence of a seasoned (if amateur) developer. Fresh out of the box, I used a friend's laptop to download Odin and flash TWRP and CyanogenMod onto the device. The 512MB of RAM might seem paltry by today's standards, but at the time, it felt like I had the world at my fingertips.
It was on this device that I set up my first real development environment, right there in the terminal. I discovered AIDE, an Android app that allowed me to write Java code and build applications right on my phone. It was a novel tool that compiled my admittedly pathetic Java into working Android applications. Another tool, Terminal IDE, further expanded my capabilities. At the time Samsung had just released the Galaxy S6 and everyone was on the rage about it. I was particularly drawn to the new Android OS (Lollipop). My device was not going to get the update, but this did not stop the community at XDA from developing their own version. My phone always ran the latest version.
Looking back, it's hard to believe that all of this happened while I was still in my third form of secondary school. These activities consumed an ungodly amount of my time, much to the consternation of my guardians who couldn't understand why I was always glued to my phone. While my peers were busy with social media and games, I was indulging my curiosity, diving deeper and deeper into the world of technology.
Through AIDE, I learned to build Android applications, familiarizing myself with the Android SDK. Though I never published any apps, I had perhaps a dozen experiments scattered across my phone's storage. It's worth noting that despite all this, I still didn't truly understand most of what I was doing. My approach was largely based on action and reaction - I did this, that happened, so let's try something else. But this lack of formal structure was, in its own way, liberating. I was free to experiment, to try and fail and try again, unencumbered by the weight of "proper" methods or best practices.
As my skills grew, so did my ambitions. Java no longer seemed enough, and I sought out other languages. Before long, I was fairly adept at scripting with bash and Python. The discovery of cron opened up new possibilities - I dreamed of the automations I could create, the tasks I could offload to my ever-faithful phone companion.
Books, Books and More Books.
For Dummies are for dummies (they aren't!). I was not a script kiddie. (At least my pride wouldn't allow me to acknowledge this)
It wasn't until I was about to complete my secondary education that I began to feel the need to truly understand what I was doing. The tutorials I had been following showed me how to do things, but they rarely explained why things worked the way they did. I found myself craving a deeper understanding.
This craving led me to books. I started with simple texts that were little more than collections of tutorials, but soon graduated to more complex tomes that delved into the principles underlying the technologies I had been tinkering with. I read books on hacking, on malware creation, on the inner workings of operating systems. Much of the content went over my head, but I persevered, driven by an unquenchable thirst for knowledge.
I tried my hand at any tutorial that my limited resources would allow, moving from one to the next as my interest waxed and waned. All the while, I was gathering skills, building a foundation of knowledge that would serve me well in the years to come.
My turning point came when I discovered nand2tetris, a course that promised to teach computer science from the ground up, starting with basic logic gates and ending with a functioning computer capable of running complex software. It was here that I finally threw up my hands and accepted that despite all I had learned, there was still so much I didn't understand. I needed guidance, a curriculum to follow.
Is Life A Simulation ?
What are the philosophical implications of Conway's Game of Life
At this time, life had taken me to Maseno University, where I was pursuing a degree in philosophy. The irony of studying the nature of knowledge and existence while grappling with the complexities of computer science on my humble Android phone was not lost on me. Despite my lack of formal training and limited resources, I followed the nand2tetris book as best I could.
But when I reached the section on compiler design and discovered the infamous "Dragon Book" (Compilers: Principles, Techniques, and Tools), I knew I had hit a wall. I simply couldn't wrap my head around concepts like Backus-Naur Form (BNF), nor could I get tools like Yacc and Bison to compile on my device. It was clear that I needed more than just books and determination - I needed to sit in an actual lecture, to learn from those who had walked this path before me.
Fate, it seemed, had other plans for me. Due to circumstances beyond my control, I had to drop out of my philosophy program. But my passion for technology remained undimmed. I acquired my first laptop, a Lenovo Flex 11 - a modest device by most standards, but to me, it was a quantum leap forward. With 2GB of RAM and 32GB of storage (expandable to 96GB with an SD card), it opened up new horizons of possibility.
My first order of business was to install Kali Linux, the operating system of choice for aspiring hackers and security professionals. I ran every tool I could get my hands on, exploring the depths of this powerful OS. This exploration gave me deep insights into security and open-source intelligence gathering. It also drove me to read even more books, delving into topics like executable file formats, malware analysis, and exploit development.
I tried my hand at writing viruses in assembly language, following the obscure teachings of "The Little Black Book of Computer Viruses" by Mark Ludwig. I learned to use debuggers like GDB to analyse programs for vulnerabilities, and attempted to craft my own exploits. It was a time of feverish learning, driven by equal parts curiosity and the thrill of pushing boundaries.
Throughout this journey, I found myself particularly inspired by Kevin Mitnick and his path into the world of hacking and security. Reading his books, like "Ghost in the Wires" and "The Art of Deception," opened my eyes to the human element of technology and security. Mitnick's tales of social engineering and his eventual transition to ethical hacking resonated with me, showing that curiosity and skill, when channelled correctly, could lead to a fulfilling and legitimate career in technology.
Comprehension. Finally!
Seriously, you will never perfect the craft that is programming until you wrap your head around Automatons.
In 2019, fortune smiled upon me once more. I was given the opportunity to return to formal education, this time to study the subject that had captivated me for the past seven years. I enrolled in St. Paul's University, ready to begin my journey into the world of computer science proper.
As I sat in lectures, learning about algorithms, data structures, and software engineering principles, I couldn't help but reflect on the winding path that brought me there. The years of self-directed learning, of trial and error, of late nights spent poring over obscure documentation - all of it had given me a unique perspective on the field of computer science.
As I delved deeper into both my personal studies and my new computer science classes, I found myself grappling with complex concepts that bridged the worlds of language, thought, and computation. Noam Chomsky's work on formal grammars, which I had encountered while trying to understand compiler design, left me both fascinated and baffled. The challenge of comprehending Chomsky's theories of syntactic structures while simultaneously exploring the fundamentals of computer science created an interesting intellectual tension. It was a vivid reminder of the deep connections between different fields of study and the multidisciplinary nature of computer science.
I learned the value of curiosity-driven exploration, of breaking down complex problems into manageable chunks. I experienced first-hand the importance of resourcefulness in the face of limited resources, and the power of persistence in overcoming challenges. Perhaps most importantly, I came to understand that true learning comes not just from reading and listening, but from doing - from getting your hands dirty and building things, even if those things don't always work as intended.
The Road Not Taken
My journey is far from over. Every day brings new challenges, new technologies to explore, new depths of understanding to plumb. But as I continue my education, I carry with me the lessons learned from those early days of tinkering with a hand-me-down Nokia. The world of technology is vast and ever-changing, and there is always something new to discover. And that, perhaps, is the greatest lesson of all - the journey of learning never truly ends. It simply evolves, taking us to new heights of understanding and capability.
To those who might be starting their own journey into the world of technology, I say this: embrace your curiosity. Don't be afraid to experiment, to fail, to try again.Fail first, Fail fast. The path may not always be clear, and there will be times when you feel lost or overwhelmed. But keep pushing forward. Every challenge overcome, every problem solved, is a step towards greater understanding. And who knows? Your journey might just lead you to places you never imagined possible.
Given my unique journey and perspective on learning, I've come to realize that my true calling lies in "hacking" - not in the malicious manner often portrayed in popular culture, but as the noble pursuit of figuring out how things work, what makes them tick, and how they can be pushed to new limits. This form of hacking embodies the spirit of curiosity, creativity, and continuous learning that has driven my journey from the beginning.
My ambitions don't stop at personal growth. I've set my sights on a career as an educator and mentor, aiming to provide others with the guidance that I lacked in my early days. By sharing my experiences, knowledge, and passion for technology, I hope to inspire and empower the next generation of tech enthusiasts. In this way, I aim to give back to the community that has given me so much, enriching not only my own life but also the lives of those I teach. After all, in the world of technology, knowledge shared is knowledge multiplied, and there's no greater satisfaction than watching others light up with understanding and excitement as they embark on their own journeys of discovery.
... I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and Iā
I took the one less travelled by,
And that has made all the difference.
Top comments (0)