~/nevie/blog / self-taught-java-android

Personal journey Mobile learning

I Taught Myself Java and Android Development on a Cheap Smartphone

No laptop. No university course. No mentor sitting next to me. Just a low-end Android phone, a determination that refused to negotiate, and a question that kept coming back every single night: what if I actually figure this out?

· Nevie Technologies · 12 min read

Let me tell you something that most programming tutorials will never say out loud: you do not need a computer to learn how to write software.

I know that sounds wrong. Maybe even offensive to people who spent years in computer science programmes with labs full of equipment. But it is the truth — at least it was my truth — and I think more people need to hear it, especially those living in places where a decent laptop is not something you can just go and buy.

My name is on the work behind Nevie Technologies. I am a police officer by profession — Second-in-Charge, Research and Planning, Eastern Region Police Headquarters. I hold a Bachelor of Science in Forestry and Environmental Management from Mzuzu University. Nothing in that sentence points toward software engineering. No one who knew me ten years ago would have predicted that I would end up building production Android applications, Spring Boot backends, GIS systems, and government software platforms.

But here we are. And I want to tell you exactly how it happened — because the story might matter to you.

// chapter 01

The device that started everything

The phone I learned on was not impressive. Small screen. Slow processor. The kind of device where opening two apps at the same time was already pushing it. The kind of device that most developers would dismiss as unsuitable for anything serious.

I did not dismiss it. I had no alternative, so I used it.

I installed a code editor app called AIDE — Android IDE — which lets you write Java code directly on your phone and compile it on-device. No computer required. Real Java. Real compilation. Real error messages staring back at you on a four-inch screen.

The tools I started with

AIDE (Android IDE) on a low-end Android smartphone. Later, Dcoder and Spck Editor for JavaScript experiments. YouTube tutorials on mobile data. Stack Overflow pages loaded one at a time. W3Schools when the connection was too slow for anything else. That was my entire toolkit for the first two years.

The first programme I wrote successfully was the one every programmer writes first: it printed Hello, World! to the screen. I stared at that output for longer than I will admit here. Something had shifted. The phone had done exactly what I told it to do, in a language I had only started learning, and it worked.

That moment is smaller than it sounds when I describe it. But it did not feel small. It felt like a door had opened in a wall I did not know had a door in it.

// chapter 02

What self-taught actually means

People hear "self-taught" and imagine someone breezing through tutorials, naturally talented, picking things up effortlessly. That is not what self-taught looks like. Not for me, anyway.

Self-taught meant reading the same explanation five times because the phone screen cut off half the code example. It meant running out of mobile data halfway through a tutorial and having to continue from memory. It meant typing hundreds of lines of code with two thumbs on a cramped keyboard while commuting, or late at night after a full shift at work.

It meant getting an error message I did not understand, not having anyone to ask, and having to figure it out anyway. Google was often the mentor. Stack Overflow was often the classroom. The error messages themselves — as frustrating as they were — turned out to be the most honest teachers I had.

"The error message is not your enemy. It is the computer telling you, as precisely as it knows how, exactly what went wrong. Learning to read error messages is the single most important skill in programming — and nobody teaches it explicitly."

I spent weeks on things that a bootcamp might cover in an afternoon. That was not inefficiency — it was depth. When you struggle with something for a week and finally crack it yourself, it does not leave you. It becomes yours in a way that a lecture never quite is.

I was also working a demanding job the entire time. Policing is not a nine-to-five. There were stretches where I barely touched the code editor for days. That is part of the story too — the learning was not linear, it was not disciplined by a timetable, and it was frequently interrupted. And it still worked.

// chapter 03

Why Java, of all languages

People sometimes ask why I started with Java rather than Python, which most beginners are now pointed toward. Honestly, the reason was simple: I wanted to build Android apps, and Android apps were written in Java. I was not interested in learning programming in the abstract — I wanted to build something real, something that ran on the device in my hand. Java was the path to that.

Java is not the easiest first language. It is verbose. It is strict about types. It will not guess what you meant — it will stop and tell you that what you wrote was wrong. At the time, that felt like hostility. Looking back, it was a gift.

Java taught me discipline

Its strictness forces you to understand what your code actually does — not just hope it works.

OOP rewired my thinking

Objects, classes, and inheritance gave me a mental model for organising complexity that I still use every day.

The ecosystem opened up

From Android to Spring Boot to GIS tools — one language unlocked an entire professional world.

Learning Java also forced me to understand concepts that other languages hide behind convenience — things like memory, types, how objects relate to each other, what it means for code to have structure. These are not Java-specific ideas. They are programming ideas. Java just refused to let me ignore them.

By the time I encountered other languages and frameworks later on, I had foundations. Not just syntax knowledge — actual conceptual foundations. That made everything that came after easier.

// chapter 04

The first Android app that actually worked

There is a specific memory I keep coming back to: the first time I ran an Android app I had built entirely myself on my own phone, and it worked.

Not "Hello World" this time. A real app. It had a proper interface — buttons, text fields, a layout I had designed. It took user input and did something meaningful with it. It looked like an app you might actually use.

I had written every line on that same low-end phone. I had debugged it on that phone. I had run it on that phone. The whole development environment — the editor, the compiler, the emulator — was on the device I was building for. There was something almost poetic about it: the tool was building itself.

I showed it to exactly one person. Their reaction was underwhelming — they did not really understand what they were looking at. And it did not matter at all. I knew what it had taken. I knew what it meant. And I knew I was not stopping.

// chapter 05

From hobby to production systems

The jump from "things I built to learn" to "things that real people depend on" did not happen in one moment. It was gradual — and then it was sudden.

At some point I stopped building apps for practice and started building them because there was a real problem that needed solving. A system that needed to exist. People who needed it. That changed the nature of the work completely.

When other people are using your software — when it stores data they need, coordinates work they are doing, manages records they depend on — you stop tolerating the corners you used to cut. You start caring about correctness in a different way. You start thinking about what happens when things go wrong, not just when they go right.

Spring Boot entered the picture around this time. Where Android development had taught me how to build things that users touch, Spring Boot taught me how to build the infrastructure those things depend on — backends, APIs, data persistence, security. The two sides of software engineering, learned sequentially, from a phone.

Today, Nevie Technologies operates multiple production systems: a government information platform for police operations, a financial system handling real loan transactions, a developer tooling environment, and this corporate platform — all designed, built, and maintained by me. All originally traced back to that small screen, that cramped keyboard, and that first Hello, World!.

// chapter 06

What I actually learned — and what no one told me

These are the things I wish someone had said to me at the beginning:

01

The tool is not the obstacle

I built real, production-grade software on a budget phone that most developers would laugh at. The constraint was real, but it was not fatal. If you are waiting for better equipment before you start, you are not waiting for equipment — you are procrastinating. Start with what you have.

02

Build something you actually care about

The tutorials that are built around imaginary projects — a "todo app", a "weather widget" — will only carry you so far. You need a real problem, one that exists in your life or in the lives of people around you. When the software matters, you will find the energy to push through the parts that are difficult. Abstract motivation runs out. Real purpose does not.

03

Confusion is not a sign that you are in the wrong place

Every programmer you have ever admired was at some point completely baffled by something they now consider obvious. Confusion is not a warning sign. It is a sign that you are at the edge of what you currently know — which is exactly where learning happens. Do not retreat from it. Sit with it. Work through it. The clarity that comes after is disproportionately satisfying.

04

You do not need permission

Nobody handed me a programming career. Nobody saw potential in me and offered to develop it. There was no programme, no scholarship, no lucky break. I simply decided that this was a thing I was going to learn, and then I learned it. That decision is available to anyone. You do not need institutional approval to start writing code. You need a device that can run a code editor and the willingness to be bad at it for a while.

05

Your background is not a disadvantage

Forestry taught me to observe systems and think about how parts interact. Policing taught me operational precision — the cost of errors when things actually matter. Both of those frameworks made me a better software engineer than a purely technical education might have. Your background, whatever it is, contains ways of thinking that programming needs. They just need translating.

06

Slow is not the same as stopped

There were months where I made almost no visible progress. Life interrupts. Work interrupts. Energy runs low. The learning was not consistent — it happened in bursts and gaps, over years, not in a tidy linear trajectory. And at the end of it, the knowledge was there. The software was there. The gaps did not erase the progress. Keep going, even when the pace is slow. Slow gets there.

// chapter 07

To the person reading this on a cheap phone right now

I want to speak directly to someone for a moment. Maybe you are reading this in a country where access to technology is expensive and patchy. Maybe you have an old phone and slow internet and the feeling that the world of software development was built for someone else, somewhere else, with resources you do not have.

I know that feeling. I had that feeling. And I want to tell you, as plainly as I can, that it is not accurate.

What you actually need to start

Any Android phone

AIDE or Dcoder will run on hardware that feels too old for anything else. If it runs Android 5 or above, it is enough.

Patience with yourself

Not talent. Not prior knowledge. Not connections. Just the willingness to not give up on the days when you understand nothing.

A real problem to solve

Something in your community, your work, your daily life that software could make better. Let that be your direction.

Occasional internet access

Stack Overflow, YouTube, and W3Schools have more programming knowledge than most university libraries. They are all free. They are all on your phone.

That is it. That is the complete list. Every other thing you think you need is either optional, acquirable later, or simply not required.

Programming is one of the very few technical professions in the world where the work you produce can be the entirety of your credential. A portfolio of real, working software speaks more plainly than a certificate. The internet does not care where you learned to code or on what device — it only cares whether the code works.

The systems running under nevie.xyz are not there because I had advantages. They are there because I had a phone, a question I refused to stop asking, and enough stubbornness to keep going past the point where giving up would have been the rational choice.

You have access to the same question. You can ask it tonight, on whatever device is in your hand right now. The answer, eventually, will surprise you.

// end

If this post resonated with you — or if you are at the beginning of your own journey and have a question — reach out. I am not a mentor in the formal sense, but I remember what it felt like to be stuck with no one to ask. I read every message.