How and when did you get into programming? And into iOS?
My first introduction to programming was building my Myspace page in the days of myspace. I would later be introduced to java in college and I hated it. I hated it so much so that I switched my major from computer engineering to electrical engineering so I could focus on hardware instead of software. This was mostly due to the fact that the way programming was introduced to me was in this non-interactive, terminal based sort of way.
Fast forward a few semesters later I took a course on Web Development and it was one of the cherished A's I earned in college. I realized then that at some point in the future, I could switch my career to focus on programming and probably enjoy it. In my sophomore year in college, I was fortunate to get a co-op(internship) gig with this company working on ATMs. Being that I was majoring in electrical engineering, this job gave me a chance to use that hardware knowledge to repair ATMs and things like that. I worked that gig for 6 years and then decided to move over to the Professional Services organization to work on the software side of the house as a systems engineer.
I did that for about 6 more years and decided that if I didn't make a change, I would probably be stuck there for the next 20 years. I mainly wanted the change because the software I was working on was legacy stuff. In the summer of 2015, I decided to try to get back into modern web development and bought a few Udemy Courses. I would work my full time job during the day, and study web dev at night after work. Eventually after seeing the announcement of Swift I decided to give that a shot in late 2015. I fell in love with it because of how simple it was to get an app running on my phone. I've been doing it ever since.
Got it! So Swift itself was the main reason to get into iOS development? How were the early days of Swift like? Did you have to work with ObjC also?
Swift was certainly the main reason for me getting iOS development. At the time, after being a lifelong Android user, I decided to get an iPhone and I loved it. I thought about how the ecosystem made me feel including it’s reach and impact and from there I knew I could do amazing things on the platform. The early days were rough because the API was changing as I was learning in some cases for the better. I was fortunate to never need to work with Objective-C because my early days started with me freelancing projects where I had complete control on the language being used.
That's great! Sounds like freelancing worked out pretty well for you. How did you find clients in the beginning? Did you have your own projects maybe as a reference?
My very first "client" was a good friend and mentor of mine. I noticed that he had a website but no mobile app. I decided to build out a mobile prototype for him for free just to get the experience. I never actually shipped the app because he didn't want to change his business model in order to accommodate a mobile application.
However, it was an awesome learning experience in gathering requirements, determining scope and building out an application. As far as other clients, I happen to have a circle of entrepreneur friends that needed mobile applications to support their businesses and leveraged that to build momentum. Money wasn't the concern, gaining experience was.
That is a smart approach to start. Do you remember what was challenging to grasp when learning iOS/Swift in the beginning?
Generics and Closures 🤬. The overall concept wasn't hard to grasp but the syntax killed me! Over time, I came to understand them better but it took A LOT of practice.
Let's move into hardware a bit. What is the story behind try!Bot model 3? What lead you to Swift on Raspberry Pi? Did you miss the days of electrical engineering?
As the name may suggest, I'm a bit of a Tesla fanboy. Because I was speaking at the trySwift conference, I needed a creative name that could tie everything together. The intent was to build an autonomous car that could move around on its own and detect obstacles. Being that Tesla's are known for autonomy, I figured I'd name it after the Tesla Model 3.
As far as Swift on Raspberry Pi, the driving force behind that was to find creative ways to use Swift in a practical way without the overhead of needing a multi thousand dollar MacBook and a thousand dollar iPhone. The Raspberry Pi is priced low and has the ability to be used in all sorts of ways. If you couple that with the Swift language, you can now build an interesting hardware project with the same language that you could eventually use to build mobile apps. The process of building these hardware projects allows me to scratch that electrical engineering itch so I don't necessarily miss it.
How fast can you iterate on your Swift code when running on the Pi? In your try! Swift talk you mentioned remote build, I guess that helps a lot?
You can actually go pretty fast if you have the right tools. At a high level, if you didn't set up a remote build, you would need to write all of your Swift code in the terminal on the Pi. I don't know about you but I don't want to write code like that 😖. In order to simplify this process I created a library called Xport that lets you write your code in Xcode and then send that code to the Raspberry Pi whenever you build your app. The speed of that process is dependent on the size of your app. Once the build is done, you just need to run your code using something like `swift run` to see your changes.
That sounds really nice. I have a few Pi models lying around so next time I will try programming them with Swift.
If someone is interested in starting with Swift on Pi. Do you have any recommendations where to start?
So, most of my public facing work as a developer is centered around Swift on Pi. I've written several blog posts on lickability.com that cover all aspects of Swift on the Pi. From there, you'll find things like how to install Swift on the Pi all the way to how to drive motors and sensors with Swift on the Pi.
Besides the remote car, are there other Pi projects you would like to share? Or maybe something you plan to build?
:I have built a few other circuits involving various components to learn the way certain circuits work with the Raspberry Pi. One of those is a distance measurement system what used a HCSR04 Ultrasonic sensor to measure distance and a piezo speaker to make a sound if the object detected was too close. I also integrated a few LED's to light up based on the distance. The default state is Green, if you got within a few inches it would turn yellow, and red indicated you were too close.
What about Swift on the Server? That is another way how to write Swift without expensive hardware.
Ironically enough, I have used Vapor in the past as a way to power my remote car. Essentially, I specified a couple of routes that would perform different functions based on which one was hit. So if I went to /forward, the wheels would move forward and if I went to /backward the wheels would move backward. I have also been interested in using Swift on the server for my iOS apps but I've never found the opportunity to do so. I am looking to rewrite the backend for my brothers referee app so I may do that in Vapor.
You have a magic wand... and can change one thing about iOS development. What?
I would love it if iOS was more accessible from a cost perspective. As a black man, I spend a majority of my time supporting members of the black community with tech and not every member of my community has the means to buy a MacBook Pro or iPhone. Conversely, most folks would have a PC of some sort. With that PC, you could get started in web development or Android development.
Unfortunately, that is not my primary focus and area of expertise and sometimes I wonder if I should have chosen those ecosystems instead. For this reason, I have tried to find creative ways to use Swift on the Raspberry Pi because it is the cheapest computer that you can do some impressive things with using Swift.
Yea the cost is quite a big barrier to entry, at least with the M1 machines you can get entry-level and still have very capable machine. So that is at least a step into right direction. Would be nice when M2 is released, if Apple kept some of the M1s around with lower prices.
I sometimes wonder what apps and ideas we would have if iOS development was more accessible...
To step away from code, what do you do to relax?
To relax I mostly spend time with my wife and kids. I am the proud father of 2 boys and 1 baby girl. When we are not taking random road trips around the country, I have reacquainted myself with playing my xbox or playstation, which is what I used to do before the kids came. I found a subtle peace in doing something completely mindless that I don't have to think too hard about. Outside of that, I play music. I have played multiple instruments since I was a kid so that is also a natural past time for me.
Thanks so much for taking the time! Do you want to give someone or something a shoutout?
I want to shout out a few folks that contributed greatly towards where I am today
@bugKrusha - For inspiring me even when he didn't know he was doing so. It's because of him I knew I could speak at a conference.
@lamar3_ - For being a solid friend and for actually setting me up with the opportunity to give my first conference talk.
@Kilo_Loco - For being a supportive friend that gave me the idea and structure for my first talk.
@twostraws - For setting aside time to personally chat with me and help me structure my ideas.
@thedevme - For indirectly getting me my first full time iOS dev job and getting my name printed in a book.
@kthomas901 - For connecting me with HBCUC2 which allows me to serve my community through teaching.