The Dark Roast

By Sean Lunsford

<blog>

Welcome to the inaugural post of my new blog, where I plan to log my experiences as I try to break into the world of development—specifically of the Apple variety (probably some web, too). Programming in general has been a thread that's weaved through my life, in and out, over the years, but as much as I love Apple products and have wanted to develop for them, I've never taken the time to do it. This summer I've finally realized there's no reason I shouldn't just go for it.

Like I said, my history with code is a long but inconsistent one. It started in Dreamweaver MX. Back when Macromedia was still a thing. I think this was seventh grade. My dad had a copy that he was using some for a couple of projects, and he installed it on the family desktop so I could play around with it some. (Most of what I've learned about computers over the years has been using the dangerous but effective method of: I wonder what this button does...) Anyways, I started using the splitscreen view, with code on top and WYSIWYG on the bottom. It was cool to see the code take shape as I played with stuff down below.

Then I bought a book on C++. Knowing nothing about programming languages, I went to the bookstore and looked at the programming section. I saw a lot of books about C, and some about C++, and a bunch of others with weird names. C++ sounded better than C, so that's what I bought. I don't remember getting very far before losing interest. But I learned what a variable was from that book. When I took algebra a year later, in eight grade, and the class was introduced to variables, it immediately made sense because I was remembering that book.

Also in eight grade, I came back to HTML. I didn't have access to Dreamweaver at the time, so I opened Notepad and started recalling those tags I'd learned by playing around before. I loved the instant gratification of typing a few lines, Control-S, refreshing Internet Explorer (remember IE6?) and seeing my page appear right away.

Starting with the basics I remembered, and experimenting, I kept building web pages for the next few years, for fun, and occasionally for school projects. Nothing was ever actually live on the web, just running locally. But it was cool. Then I bought a book on CSS, which revolutionized the way I designed my web pages. (I cringe when I remember tables used for page layout.) A byproduct of this book was picking up on more HTML from the examples to add to my arsenal. By my senior year, I was the developer for an online school newspaper. Of course, this was well before I'd discovered CMS or platforms like WordPress. (Needless to say, this was way before Ghost, what I'm using here.) So the editors sent me each article, which I handcrafted in its own web page, down to every <p> tag. Yeah, it was a little tedious.

In spite of all this, for some reason, when it came time to pick a college major, computers never even crossed my mind. I ended up studying construction engineering, but by the time I started into my senior year, about a year ago, I knew I was in the wrong major.

One of the required courses for my major, which I took in my junior year, was "Computer Applications for Civil Engineering." It was mostly a class in Excel and VBA. I had a pretty good handle on Excel already, but VBA got me back into code again, and I loved it. The fact that I was the only one I knew of enjoying this class was the first sign that maybe I was pursuing the wrong degree.

Then last summer I got an internship at a builder in Bethesda, MD, tasked with building a tool in Excel that they could use for budgeting jobs based on data from previous jobs. What it ended up becoming over the course of the summer was a database of cost and budget data with an Excel front end for both reading and visualizing the data from the database, and aggregating and analyzing the data from the subcontractors' bids before importing the contract amounts into the database. Under the hood it was all VBA.

It was really cool to see this vision develop, and to build it. The thing is, I could never have just walked in and built what I ended up building with the knowledge I started with. But as we kept dreaming up features, it kept pushing the product just a little beyond my capabilities, so I would have to figure out how to implement it, build the parts of it I could, and then go hunting around on Stack Overflow for snippets of code I could modify and use for the parts I didn't know how to do. Through that iterative process each time I added a feature, I kept learning new ways to do things and discovering entirely new things I'd had no idea could be done. By the end of the summer, I was rebuilding components of my work from early in the summer, with the more advanced, streamlined methods I'd learned since then.

I spent the entire summer flying by the seat of my pants, and it was hands down the best way to learn this stuff.

I took two things away from that summer. One, I now knew beyond the shadow of a doubt that I was in the wrong major—although at this point it just didn't seem worth it to change majors and have to start basically at the freshman level all over again. But two, it's entirely possible to learn this stuff on your own, with the abundance of resources on the internet, and it's even better to learn it in the context of a real-world project than in the classroom. Especially for me and anyone like me. I think academia has picked up on this, hence all the hands-on learning that's being pushed more and more. It's a step in the right direction, but in the end, it's (usually) still a simulated experience, and can only approximate the real world so well.

Having built what I built last summer, I found myself wanting to get into iOS and Mac development. I started by finding some online tutorial for Objective-C. That tutorial strongly recommended familiarity with C, though, so I started there instead. I guess I picked the wrong tutorial, but the guy's philosophy was that if you type the same line of code enough times, it'll stick. That probably works for some people, but I'm not one of them.

So here I was, typing the same line of C over and over, so that eventually I could move onto a new line of C, so that eventually I could repeat the process in Objective-C, so that eventually I could actually write the first line of code for my own iPhone app. This completely flew in the face of the whole approach I'd been taking with VBA in my job the whole summer, and it was sucking the life out of me and my excitement about development.

Then my senior year started, and it was a long time before I touched a line of code again.

After graduating in May, I started working part time back at the same company in Bethesda. (The rest of the time I'm raising support to go back to Virginia Tech for campus ministry.) My desire to get into Apple development was rekindled, and when Apple announced Swift, it seemed like a good time to start learning a new language—since I'd never really gotten anywhere with Objective-C anyways.

So to cut a long story short, over the last couple months, I've started tinkering with Swift development in my free time. I'll follow up this post at some point soon with what I've done so far. I've also been getting back into web development some and I want to develop those skills further—both front end, where I already have some experience but am way behind the times, and starting into back end development.

This blog is running on a pretty new platform called Ghost. While I could've used their hosted service and installed a theme that someone else has already created (or stuck with the default), I opted to self-host on Digital Ocean (for the same price—and cheaper if I ever have multiple sites) and to build my own theme from (almost) scratch (that is, borrowing snippets of code from the default theme here and there). Building what I've called Arabica (available to download) was good for bringing back my HTML and CSS from days of old, and self-hosting has been a good introduction into running a VPS.

I could see all this coming together in developing an integrated Mac/iOS app with my own back end service, and possibly a web app as well. Which is basically what I'm shooting for now. One piece at a time, obviously. This is strictly a hobby at this point, but I would love to see this become a sustainable side business, and eventually, maybe more.

I wanted to start this blog as a way to share about my progress with all this, as I go through the process of learning all these languages, learning the ins and outs of the App Store from the developer's side, learning server maintenance, and whatever else gets thrown at me. I hope this can be a resource and even an inspiration (or warning) to others who are on a similar path or maybe just thinking about it at this point.

PS: Courses on Sale

I wanted to mention a couple online courses that would fit better in my next post (I'll probably have more to say about them then), but they're on sale now, and I don't know for how long. I've been exploring different resources for both Swift and web development, and last night I came across two courses on a site called Udemy:

These are both by the same guy, and normally cost $199 each, but as part of a giant sale across a few hundred courses on the site, they're $24 and $49, respectively, if you buy them in the mobile app. (They'll still be available in your account on the web site as well.) So if you're interested, download Udemy on the App Store (or Google Play, if that's your thing. I won't judge. Too much.) The web developer course, as I'm looking now, is the second one on the "On Sale" section of the iPhone app. The iOS course is the first search result for "complete ios developer".

I started the iOS course last night, and so far, it seems good. It's a series of video lectures, which are mostly screencasts of the guy working in Xcode. It's hands on, and seems pretty comprehensive. It looks like the web one covers a lot too, including PHP, MySQL, jQuery, Bootstrap...you get the picture. All stuff I've had on my list.

Like I said, I'll get more into these courses next post, but there's so much to wrap my head around, especially on the iOS/Swift side, that I thought something structured, visual, and practical, like these, would be a worthwhile investment and a good place to start.