It’s 2016 and we are riding the crest of a wave of technological advancement and innovation. In this age the computer nerd is king and startups are sexy. Finally, I am able to justify all of those endless hours spent on the computer as an adolescent to my parents. Its no secret, having computer savvy is more important now then ever and there seems to be endless opportunities for those who master the craft. In particular the popularity of the profession of the developer has resurged from it all time low at the tail end of the web 1.0 dot com bust. It is developers we have to thank for all the apps that have come to dominate our virtual lives, and developers we are looking to to bring about the next great innovation. Not to mention they are quite well payed. An associate of mine once told me he believed that software development as a career was one of the last bastions of hope for a comfortable upper middle income without having to sacrifice years of life to education. But how does one become a developer? These days many if not most people know that it has to do with the code. Coding, the word itself seems to imply a sort of esoteric craft. But if you were around during the Myspace days when you had to copy code into your page to get those flashy custom details, or if you built a website during a class in highschool or college then you already have an idea of what it entails. In this blog I will divulge the process I used to become proficient with coding or programming. Though I was able to do so in a relatively short time this process is admittedly not for the undisciplined. For this to work you’ve got to really want it!
My journey into programming really began my senior year in college. Early into the first semester it was apparent that I was becoming increasingly disenchanted with my major. I had just finished doing a shadowing of a pharmacist that summer and I realized that I was headed for a very different existence than what I had envisioned for myself as a child. Hanging out with my close friends over that winter break made this realization all too real. See, my friends and I would often discuss our visions for, not just our futures, but for the future of mankind and how we wanted to play pivotal roles in shaping that future. Yeah, I know, most normal youths probably don’t have these conversations, we are a crazy bunch and we thank the stars we have each other to share our insanities with.
But this time the conversation felt different, being mindful of my impending graduation I asked my friends – “What can we do now to be able to accomplish these goals?” This question, I believe now, forever changed the course of our lives. After that day I began to desperately search for the answer to that question. Very soon, the likes of Mark Zuckerberg, Kevin Systrom, and Evan Speigal popped up on my radar. Here were guys who were legitimately influencing the whole world and shaping its very future and started from a very young age. How were they able to do this? My research brought me to the simple fact that they all shared the ability to create. They were able to take the ideas that they envisioned in their heads and bring them to life without having to ask anyone’s permission. “How awesome is that!” I thought. If I could gain this ability, then perhaps I could also then be able to “create” the future I wanted and bring into existence the ideas in my head. Armed with this mindset, I set out to learn how to program. In three months I was able to land my first programming job before many of peers would have been heading out to grad school. Ever since then I have had many people ask me how I did it. How was I able to teach myself and start performing work that people usually studied years in college to be able to do? Well, let me explain.
Foundations come first
First, you’ve got to start with the foundations. I learned this a bit later into the process. I wanted to jump into writing code and making functional programs that I really neglected the foundations of programming in the beginning. After a few weeks I became frustrated at my progress. I could understand the syntax of the language I was studying well enough, but I didn’t understand how to design a program. Questions like: Where do I start? What is good code from bad code? How do I name my functions? Essentially, How do I think like a programmer? While scouring the user communities on google plus, I came across a user who gave me some great advice, after I asked a very noob-like question. This user told me that what I needed to do was to study programming paradigms. These are essentially fundamental styles of programming. He or she explained that once I understood the paradigms it wouldn’t really matter what language I was learning. So I took his advice and started learning things like abstraction, encapsulation, polymorphism, and inheritance of the Object Oriented Paradigm since I was focused on learning Java at the time. From there I started studying design principles. Design principles really provided me with the understanding of how to architect programs – how to strategically build your app in a way that was sustainable and efficient. It was during studying design principles that things started clicking. I started understanding not just what code to type but why to type that code. This helped immensely when making my own decisions in my own personal programming projects.
Learn the Lingo
Once you’ve been exposed to the foundations then its time to pick your target language. Notice how I did not say mastered the foundations. I have found from my own experience and teaching others that it will suffice in the beginning not to spend too much time mulling over these concepts because they will difficult to understand fully before you start having programming experiences. This is because once you start programming you begin to appreciate and truly understand why the concepts from the foundations are as they are. So don’t get too frustrated if these concepts seem to fly over your head in the beginning, these are ideas you will continually have to revisit as you gain more experience and proficiency in programming.
I recommend choosing your first language for the purpose of accomplishing a certain goal. For me, I chose my first language in order to learn how to develop android applications, which meant I was learning java. Since you have a general understanding of how object oriented languages work at this point, learning the language will be mostly learning the syntax. At Power Moves Development we start the student with resources that give an overview of the basic workings of the language. For this aim we have found the programming video tutorials at Lynda the best we have used. You should go through the videos explaining your target languages with the understanding, again, that you may not understand everything but it will make sense further down the process. Our students usually take a day to two days in this process, however all of our students have had the luxury of being able to focus more or less solely on our process. If you have time obligations that may take away from this you may find that it takes you a bit longer, but try to stay disciplined and push through at a good pace.
After running through the syntax, it is time to start your first programming projects. Find some beginner project tutorials and follow along creating your own version of the project. A basic calculator program is my recommendation to start applying the concepts that you have been learning so far. After following along with the safety net of this tutorial then get your hands dirty and start experimenting. Make some changes in the project and see how it affects the outcome. This is where all the real learning is done so take your time and play around with the process.
Apply the framework
Now it is time to learn the framework. A framework in programming is basically a foundation of pre-written code that programmers can use to write specific types of programs. In my example, I learned how to use the code provided in the android framework in order to develop android programs. Frameworks allow us to write programs a lot quicker by not forcing us to re-code components in the program that are widely used. This is the stage of the process that takes the longest time and will encompass the previous stages. At time you will have to go back to foundations to revisit a concept or going back to the basics of your target language when you get confused. This is where everything culminates and you build skills and understanding that you can take to the bank. I recommend completing 4 to 5 different projects using your target framework, challenging yourself with a new aspect with each project. Take advantage of free tools like Github in order to keep track of your progress.
This concludes part 1, in the next installment we are gonna take things to next level and see if we can start making some money for our time!