Lessons Learned From My First Month of Programming

I started programming a few months ago. Me and a friend were up late talking about our futures and we both concluded we weren’t happy in our jobs. Me as a teacher, him as an IT professional. After a lengthy conversation, we’d determined that he would be better suited in the world of business and since he was in tech and told me about all the possibilities, I became fascinated with the world of programming. I stayed up late that night researching as much as I could about it.

I had no programming experience before that night. I remember looking up the word ‘String’ trying to figure out what that even meant. I hadn’t heard of java more than the pop-ups that appeared sporadically asking for updates. Swift, not a clue. Python, a snake? The world of C, C++, and the rest of the programming world was Greek to me. I was 28 and had no idea what anything meant that first night I spent googling for information. I had been to codecademy.com and had started ‘html’ in the past but had stopped after the second lesson.

So that’s where I started my journey. I was at the bottom of the mountain. I had so many questions but didn’t have any programming friends, no network base, nothing. Just google.

So where did I start?

I started with swift. Not sure why? Maybe because I had an iPhone and a MacBook and it seemed like the logical choice. I’d googled programming for iPhone or iOS and swift came up and so I started there. I didn’t even learn about Objective-C’s existence for another month and even then had no idea what its purpose was.

When I woke up the next morning I got right to work. I was motivated, ready to learn the language and make apps. I thought that’s how it would work. I just needed to learn the language and then put it into some program and away we go. I had not researched enough. If you’re reading this right now, go and google “things I wish I knew when I started programming or coding.” I wish I had done that.

Or keep reading because I’ll tell you all the things I wish I knew when I first started.

The language
So I started with the language. I can speak a number of human languages and decided to treat this the same way. I literally went on the AppStore, searched ‘Swift’ and downloaded the first app that looked promising. I think it was called ‘”Swifty” and then changed its name to “Mimo” while I was halfway through using it. It had a similar flow to human language learning apps and I like that.

Mimo goes through a bunch of different concepts that are essential for programming, variable, constants, functions, classes, arrays, etc… however it just teaches how to use these concepts in the swift language. It did very little to explain what an array was or how I could implement it in a program. They assumed you knew how to program and were just learning a new language.

I would compare it to going to Japan, being give a list of Japanese words, with their romanticized pronunciation and being told to go get a hotel room, dinner, and get a job with that. The actual definition of the words and their English translation not given, you would certainly wind up in trouble. I had the language but no concept of what to do with it.

Mimo was a great tool to learn the swift language and it doesn’t advertise itself as anything else, but it doesn’t offer any fundamentals of programming. You have all the ingredients but no recipe. I almost finished before I realized I had no idea what to do with what I was being given. I stopped. It wasn’t a wasted 1-2 weeks though. I learned a valuable lesson. I wasn’t going to be able to just jump right into this world. I tried the sink or swim approach and realized that there was no swim method, just sink.

Obstacles and Next steps
So I regrouped. I figured that I knew some very basic swift (very basic – I could say hello (world) to some local Japanese people and say goodbye) but I had a long way to go. It would be more challenging than I initially thought but I kept going.

I decided it was time to just make something. 2 weeks had gone by and I had nothing to show so I wanted to see how to actually program something. I downloaded Xcode. I would be able to use swift to build an actual application or a program with Xcode.

I spent the next 2-3 weeks playing around with Xcode and a ton of online tutorials. Two tutorials I used that were really well done were: hackingwithswift and codewithchris. Watching their videos and reading their posts and books helped a lot. It was like meeting a foreigner in Japan, who spoke the language and understood the culture and wanted to help you do the same. So I followed them around, getting acquainted with some of the features of Xcode, and swift. They had their own techniques and included different concepts that the others left out.

I made programs. They weren’t mine because I pretty much followed the tutorials word for word but I was able to see things(objects) actually appear on a screen. Even though it wasn’t my code I got excited. I showed my family and friends. I felt like I made progress with the help of my new friends.

Hacking with swift introduced me to API and frameworks. I now knew of its existence after a month but had no idea how to really use it. With the help of these tutorials I started to get a sense of how to use them and where I could go if I was stuck. The tutorials were well written, and easy to understand and follow.

Code with Chris introduced me to programming fundamentals. I learned how to apply the language in a way just learning the language could never offer me. I learned what about Object Oriented Programming, and Model-View-Controller (MVC). I learned how to really use Xcode with the help of these videos and encourage anyone who would like a tutorial of Xcode and swift to check out Code with Chris.
After a couple of weeks of this approach I realized that I wasn’t improving the way I wanted to because I would just find myself copying the tutorials. I wanted to write my own code. The tutorials made some sense of the language I had picked up with Mimo, however I felt that there was a large gap of programming fundamentals that I was lacking. It was as if these friends of mine could hold my hand, introduce me to locals, but the minute they walked away I could just muster a few words and then have nothing else to say. So I told my friends that I appreciated their help and would certainly be back if I needed a helping hand but this was a journey I had to do on my own. I had to start from scratch and climb this mountain on my own.

A month had passed since I had decided to take on this journey. I had learned so much. I had learned what I had done wrong, what had helped and what hadn’t. I don’t regret anything: I wish I hadn’t jumped right into the language without knowing the principles. I wish I hadn’t just copied the codes word for word from others without knowing why I would be doing it that way. But I don’t regret having done it. I learned what a programming language looks like. I learned that that language can actually put objects on a screen and be used. I learned about something called an API reference that scared me when I looked at it.

But most importantly, I now knew what I had to do: I had to start from the beginning. I had to learn the foundational principles of programming, then I could put the language and the principles together to build programs and apps.