Remember all the way back to the fine year of 2008. Yeah that 2008. When the housing bubble basically crippled the global economy.
Got that pictured in your mind. Awesome!
That following year myself and others would begin the magical search for careers in the field that we had been studying in so vigorously for the past several years. Promises of jobs that we worked so hard by studying were not there, college grads struggled to find jobs in their skill fields.
So what do we do? How can we educate new college grads or anyone looking to better themselves on steps that may help them land that great job or career they might be looking for.
Disclaimer this might not be a silver bullet for everyone on anyone, but this did help me and I hope it might help someone.
Learning to Code
I went to school to study marketing at business school. I knew that I wanted to be in a creative field and I knew that I had an uncanny desire to build things from scratch. When the job market for marketers dried up (because marketing is the first that is cut always) I began to explore opportunities in developing products in the tech space. There was one minor problem, I didn’t know how to code in the professional sense that I could get a developer job. I knew how to change the background of Myspace page back in the day and how to monkey around on a Geocities site, but I did not know how to build a modern web application. I didn’t know anything about MVC Frameworks, NoSQL Databases, Version Control, Web Services or APIs.
So where to begin?
For a self taught programmer most of ways to learn to program and code was primarily by trial and error. You would find a book or two about databases and stumble through writing SQL queries. You may have found yourself hacking away on a WordPress site beginning to feel comfortable building out websites and blogs and starting to develop HTML and CSS chops and enough PHP that you could get into trouble. Personally, I hacked around a few WordPress sites and by doing so it gave me a safe environment that I was able to “try things out in”, I was able to experiment safely. Having that sandbox to play around in a break things early on was crucial. It allowed me to start to see errors that I may see later down the road, but it mainly starts to get my brain accustomed to critical thinking which came from debugging issues and bugs, trying to fix what I broke (I broke a lot of sites early on). There were numerous times that I deleted my entire database or royally messed up my site’s DNS and was forced to learn how to fix it… and by learning how to fix or resolve those issues it was what helped me become a better developer and programmer.
Focus on How… Not What.
Early on people trying to learn how to program or become a developer have an idea of the things that want to build. I’m going to build the x of y, and make a Zillion dollars. They focus solely on the what they are going to build they forget about the how to build it. This is not the best focus because you focus more on the end goal of the product and not the steps and amount of work it takes to build a product. More often than not the first project any developer has will become a practice project relegated to the depths of a Github profile in favor of a future grandiose visionary idea for something bigger. That first project may run locally and might be able to login to an app but it is not optimized or built to withstand large traffic. That project will look and feel like that first gingerbread house made growing up, trees on the roof, no doors It’s a practice run. The first project is the time to understand the principles of architecting a project, understanding version control, and building foundational principles to expand on in the future.
The main reason I first started to learn to program was to be able to better estimate the costs associated with building technology projects. It wasn’t until I became proficient in learning the process to build software that I really understood what actually goes into building a software application. From a non-technical perspective I was unaware of all the moving pieces that could go into making even a small change. This has help me through the years guide my expectations of what can be done with software based on resources.
Where Do I Start
In the early days as a developer you will want to start to focus you learnings on grasping skills;
- Server Side Technologies (Backend)
- Client Side Technologies (Front End)
- Systems Administration
- Version Control
You will learn various languages and different technologies if you choose to have a career in software development. Once you learn a language do not think that you have learned everything and you are done learning. The process of becoming a better developer is through continual learning and one of the best ways to foster that skill is by rewriting code that you have previously written to make it better. I find myself often going back to code written 3-6 months ago and refactoring it to see if I can apply newly learned skills to make it run faster or reads more clearly. Getting in this habit will help you understand new principles you will learn and give you a place to apply those lesson to develop a career.
There are several career paths one may choose to take in software development. You could focus on server side technologies and become a backend developer, client side technologies and be a front end developer, or both client and server side technologies and be a full stack engineer. Just because you begin learning one set of skills doesn’t mean it will prevent you from learning other skills. Being well rounded as a developer is a good thing. I personally ascribe to being a full stack engineer. From the days of hacking around WordPress sites my path has had an equal mix of both backend and front end projects.
When starting out writing code and building applications may look like a daunting task and intimidating. It will feel that way at first but there are great resources that are available to help ease the learning curve.
The single handed biggest thing that helped me to continue to grow as a developer was to having a mentor. Having a mentor will help guide you on the journey of discovery and point you in the direction of resources that will help you grow developer. A great development mentor will help you learn the topics by guiding you to try and fail and try and fail again. They will point you in the direction of the answers, but not give them to you because like developing any skill learning to code takes time and practice.
Find a mentor. Talk with them. Have conversations about what interests you in programming and writing code and they can help answer questions and point you in the direction of what you should be learning.
Once you have a mentor and have discussed what may be a good path for you to take, find resources online to learn the technical skills required to achieve what you are looking to become. In my journey, I began working with Ruby on Rails in late 2009-early 2010 and one of resources that helped me jump in with both feet at the time was the content on RailsCasts. RailsCasts was a site where short videos teaching topics on how to build applications using the Ruby on Rails framework. It would walk you through how to implement a technology and have you code while watching. I remember having having my Textmate window in one view and my browser in another and I would pause the video then go write a bit of code and then come back to the video. It was a great tool for me because I was able to learn by having someone explain in detail the concepts as to how to do things not just, “here is a piece of code that will do xyz”.
** RailsCasts has not been updated in a while.
Another resource that helped me learn was the Rails For Zombies course. This course was similar to the RailsCasts videos but also added interactive coding challenges along with the videos. You would watch a video then code out what you just learned in a small example and take a quiz. Rails For Zombies was put out by the fine folks at Code School which has evolved into one of my first recommendations for anyone looking to learn a new programming language or development skill set (*no they are not paying me to say that). After developing software professionally for a while I still find myself going to Code School when I need a refresher or learn something new because the approach of videos with coding challenge is a very practical method to learn from.
Hackathons – Startup Weekends
You’ve got a mentor, have done a couple courses on Code School, maybe even some open source Github contributions, a great way to accelerate the learning process is participating in a hackathon or Startup Weekend. Events of this nature will force you out of your comfort zone and allow you to work with other developers, designers and non technical people with a clear set of expectations. For a Startup Weekend, your task is to build a company in a 54-hour period over a weekend and a hackathon might have you build a certain type of application in a set time frame. The pressure and working environment that these events have simulates what it is like to be a professional software developer in a startup setting. As a developer, you will get an opportunity to apply the lessons you have learned to a real world problem.
The first Startup Weekend that I attended in 2011 gave me the confidence and fueled my desire to continue to learn new skills and better myself as a developer. I highly recommend that once you have a mentor, have done some of the code challenges and have been to a meetup or two to try a event. The events can be life changing.
Becoming a developer wont happen overnight. It takes time, patience and practice. Keys to developing a strong foundation for continued learning include mentorship, utilizing online resources, attending meetups, and participating in event that will challenge you comfort zone.
You will never know everything in software, but the goal should be to continually learn new technologies and frameworks based on a foundation of solid principles. Like playing the piano, throwing a perfect spiral football, and becoming a grandmaster in chess, becoming a software developer takes time, practice, and a willingness to learn from your mistakes.