How I Taught Myself How to Code

This entry is part 1 of 2 in the series Developing In The Dark

Now that my first game, Zanagrams, is available on the App Store, it’s not uncommon to be asked

“IF YOU CAN’T SEE ANYTHING, HOW CAN YOU CODE AN APP?” And to that, I reply with something along the lines of, “A lot of blood, sweat, and tears- without the blood and sweat.”

In all seriousness, the feeling of creating apps that everyone can enjoy, regardless of disability or lack thereof, is wonderful. And though there is a lot of frustration that comes with having to navigate inaccessible tools to make that happen, this journey has been totally-worth it, and is something I plan to continue for a very long time. In the following paragraphs, I’m going to outline the tools I use to learn and create my app, both s in-hopes of making the learning path easier for other blind folks and educating those who are curious. So, without further adieu, here’s a little context for those of you who are unaware with the world of digital accessibility:

How I Use A Computer Without Sight

I lost my sight four years ago to a suicide attempt, and am now am absolutely, positively, Supercalifragilisticexpialidociously blind. That’s the medical term for it. Okay, maybe not, but it’s close. The point is, I see nothing but blackness, so I use screen-reading software to access the text-based information displayed on websites and inside apps. “What’s the catch,” you ask? Well, my screen-reader isn’t reading the visual representation of these text-values that you’re seeing with those wonderful peepers of yours; it’s actually accessing the underlying code your app or website is made of behind the scenes, and reads it aloud to me. The problem with this is that creating software that provides these readable values requires careful design considerations, and, in some cases, extra work and time.

Unfortunately, a lack of knowledge and legislation often leads to developers taking shortcuts and creating software that’s inaccessible in the interest of saving time. Although the Americans with Disabilities Act (ADA) provides some provisions regarding digital accessibility, the outlined requirements are relatively minimal, and rarely enforced. The end result is that many people with disabilities are left without access to information and opportunities the rest of the world is privy to.

This not only includes inconsequential things like TikTok, but educational platforms in school, and employment opportunities, which ultimately contributes to the overwhelming fact that, as of 2022, the Bureau of Labor and Statistics stated that 78.7% of Americans with disabilities are unemployed.

              You know what’s awesome about all of this? We currently have the ability to address the issue of inaccessibility in digital platforms, and who better to fix it than those who need it most?

The Software

                            Whether you have a disability, 17 disabilities, or none at all, you need to choose a programming language and find the required tools to write code in said language. These choices are typically dependent on the type of project you want to create, but I’m going to explain this in the context of Zanagrams, since that’s likely what led you here.

My intent with Zanagrams and every game that I make moving-forward is for it to be accessible for everyone. As of October 2021, when I started teaching myself how to code, the best way to do this is to develop natively for each platform. All that means is that I have to write and maintain a different codebase- in different programming languages- for each platform I want to develop for, which is why Zanagrams is currently only available on the App Store. So, I chose to use Swift, which is Apple’s programming language.

With a programming language in-mind, the next choice I had to make was which frontend framework I wanted to use. Frameworks can be thought of as toolboxes that contain different functionality of a programming language. So, frontend frameworks refer to the ‘toolboxes’ that contain  the functionality of a given language to produce graphical user-interface (GUI) elements. These elements are all of the things that appear on-screen, like buttons. When it comes to Swift, I had to choose between Swift’s older frontend framework, UIKit, or the most-modern option, which is SwiftUI. In the interest of longevity and supporting the most-current features of Apple’s various operating systems, I chose SwiftUI.

Note: If you choose to follow in my footsteps, you will have to learn how to write UIKit code for rare occasions, because SwiftUIis still relatively new and doesn’t support all of the functionality that UIKit does.

As with all of Apple’s other technologies, they’ve made-sure to make Swift and SwiftUI exclusive to their ecosystem, so I have to develop my apps on a Mac using their Voiceover screen-reader. Personally, I was  taught to use the JAWS screen-reader on a Windows-based machine after losing my sight, so I used JAWS to teach myself how to use Voiceover. To do this, I read articles on Apple Vis using JAWS while I had my newly-purchased Mac right next to me. It’s a painful process, but it’s doable and worth the effort.

Finally, I had to download Apple’s mostly accessible app called Xcode, which is an Integrated Development Environment(IDE). IDE is a common term in programming for the apps that developers write code in, regardless of language. Essentially, Xcode takes the human-readable code developers write- like Swift code- and compile it into machine-readable code that runs behind the scenes on your device. With my new skills and tools in hand, it was time to actually learn the language, which I’ll explain next.

Learning Swift and SwiftUI

As with everything I mentioned above, I used Google to find an accessible means of learning Swift, and it didn’t take long to find Hacking With Swift. Don’t be alarmed: ‘hacking’ is a term commonly referred to in programming for throwing something together that is not optimal, but still works. Personally, I was apprehensive to investigate this site because I thought I might end-up on some sort of government watchlist. Although, with all things considered at the time, I figured a blind guy would be the last hacker anyone looked into, so I figured taking a peek wouldn’t hurt, and I was not disappointed.

Please note: I am in no-way affiliated with Hacking With Swift, nor am I receiving any compensation for mentioning the site. I used this site to kickstart my development career and I believe in what the owner is doing.

Paul Hudson is the creator of Hacking With Swift, and he’s also devoted to creating accessible software. Fortunately for myself, this also applied to his website, which is widely regarded in the Swift world. He offers articles alongside each of his tutorial articles, and even offers accessible eBooks for-purchase that delve into more advanced topics. However, you can learn everything you need to know to get started by following-along with his free 100 Days of SwiftUIcourse, which is the primary learning tool I’ve used for my entire Swift journey.

The first 20 days or so focus on teaching the basics of the Swift programming language, and the subsequent 80 days tackle SwiftUI with a project-based learning path. Because I am completely reliant on Voiceover, there were two or three projects I couldn’t complete due to accessibility issues with Xcode, but all of Paul’s material is accessible, so I still read along to learn the concepts. By the time I’d completed everything I could, I had enough knowledge to tackle any additional learning on my own via Google, which often ends-up leading me to more-advanced Hacking With Swift articles.

In Conclusion

Wrapping-up, I want to make a few things clear. I chose this language and related tools because of my own goals; there are many platforms out there, and your project may be better suited for one of those. However, the accessibility of Zanagrams speaks to the power of native development for Apple’s platforms, and it’s a great place to start, as I’ve just outlined the path for you. Whether or not you choose to follow in my footsteps, remember that you’re going to become incredibly frustrated at times, and that it’s okay to take a break. During those times, remember what you’re trying to do and the end result, as your creations could have a tremendous impact on the lives of others.

What’s Next?

If you’d like to listen to me nerd-out explaining how some of this works at a very surface-level, you can watch or listen to my interview with Aaron Spelker here.

If you’ve enjoyed this article, please share it with others and check-out Zanagrams on the App Store! Also follow me on ‘X’ @ZachCTidwell to keep up-to-date with Zanagrams and my next project.

Series NavigationGetting Started with Xcode >>