For over 3 decades, programming has been a part of my life. During that time I went through more than my fair share of highs, lows, and a lack of various resources. In this day in age there is nothing stopping anyone from getting started learning how to program, with a large plethora of options. As long as you have a strong ambition to learn, you will have one of the most important keys to making this an easy process. Even if you do not have that going for you, we will discuss the highs and lows which may or may not change your mind. Onwards!

 

Is Programming Right for You?

Before I jump into it I want to ask a very candid question, are you learning to program because you enjoy coding and creating, or are you learning to make money? I ask this, because if you are learning for the latter, you will be making things a lot harder on yourself. Without a passion and ambition to create you will have a very hard time progressing in the field, and find yourself loathing your future jobs.

Along the same lines, if you are someone that truly enjoys this field, you do need to keep in mind that learning 100% yourself is a bad idea. This is why paired programming is important, and even CodeWars where you’ll find many ways to accomplish the same tasks, and you will find yourself encountering many people with different opinions, and solutions to familiar problems. I know it’s easy inexperienced professionals to think their way is the best way, think of these times as opportunities to learn from others. The more information you gather from your peers, the better programmer you will become.

 

Working for a Team

As you start to get into a junior position of some sort, you will find yourself trying to find your limits, limits self-motivated projects will not test. If you end up working for someone on a team you need to ask yourself if you can handle the pressure of deadlines, having an authority figure, and of course following the guidelines that team may have. You also need to prepare yourself for rejection, as not everything you write will be excepted especially when starting out. The main bit of advice to consider would be to work on these issues if you have any of them, and if they feel like they are impossible tasks even after working on them you may want to consider freelancing instead.

 

Freelancing

If you find yourself wanting to start a freelancing career instead, there is just as many points to consider when getting ready. The biggest issue of them all is that you will be spending at least your first year promoting and selling yourself. This takes a large amount of self-motivation, and a lot of time. If you want to make a career out of it, you will want to spend your first three months seeing out clients, and doing everything you can to prove to them that you are an asset to their company. If you have a strong passion for doing exactly this, you will most likely not have an issue accomplishing this. The one deal-breaker can be a pretty bad one though, and that is the amount of money it will take to cover this time especially when you are starting from nothing to become something.

If you need a concrete income in your personal life, it is going to be very hard to create this as a new competitor in the market. The rule passed around the block is that you will finally be out of the red after a year, that is if you spend that first year really pushing yourself to market yourself, and setting up many different ways for people to find and get a hold of you like a website, social media, an alternate phone number for business-only contacts, and of course working on making the website and social media to help work for you with SEO, demographic specific ads, and even promotions.

 

Side-Projects

No matter which route you take if you find yourself wanting to pursue your own passion projects, these projects can be a great way to market yourself through the open-source community, as well as creating closed-source software to make money from selling it directly, or relying on donations when open-source or freeware.

 

Picking a Language

Picking a Language is a huge choice to make. I have seen people pick languages based on what was the most wide-spread for hiring possibilities, but the truth is that’s not the best idea. It’s best to find a language you really enjoy, and can imagine creating something with. If you do not know what to expect in the first place, it never hurts to just jump into any language. I would suggest what is called a dynamically-typed language. The whole point is to get the idea of programming, and get your foot in the door. Once you do you will start to see how code syntax works, and how code most likely works nothing like you expected.

Chances are when you get to the point of covering intermediate topics, with a decent understanding of what is going on, you will have a good amount of ideas in your head. This is the time to act, and apply that knowledge! If you don’t you are only wasting your time trying to learn more through example. Create, make mistakes, and learn the experiences a teacher cannot teach you. From this point on you can start to see how well you enjoy the language you have chosen.

 

Now Pick Another

With the first language loosely under your belt, pick another language! I know it may sound a bit abrupt, and jumping the gun, but the whole idea is to see how another language works, see the similarities from the first one, and who knows you may even enjoy it even more! The entire point of picking up a second language is to see just how much alike various languages are.

If you at least toy with the idea of a new language every year or so, you will find yourself becoming a better programmer each time. A lot of that will have to do with the fact that you will start to see just how much they are the same, but also learn practices that will work with other languages you use. I bring this whole idea up, because I know some of my developer buddies can get into any position because they have the ability to pick up a new language very quickly, giving them a huge upper hand in the market.

 

Learning the Basics

I won’t get into this much, as I wrote an entire article on this subject in my Programming: From Beginner to Intermediate. I do want to say that no matter what new language I jump into I like to visit TreeHouse first. From there I was able to refresh myself on Java, SQL, pick up missing tidbits of JavaScript and Python, learn Ruby and Rails, CSS3, SASS, and Swift to replace Obj-C. Needless to say they cover a lot of different languages and practices to get you started.

 

Progressing Further with Your Language

I know this should be a pretty obvious answer, but I do know some people will learn a language and just stop there. Sure they may get a job from it, but they usually fail to move up the ladder. The point being that once you learn your language and start to create your own little apps, take it even farther by tearing down open-source projects, maybe even contributing to those projects. No matter what the language, be sure to learn everything you can about your language as well as the practices others use in various situations. Also keep up with new libraries, APIs, and frameworks, so you can see how teams of programmers create large projects with your language. Last and most importantly always practice coding, if you are not creating your knowledge is going to waste.

 

Create Everything

Once you get to the point where your head is full of ideas because of everything that manifested while learning, now is the time to start creating those projects! It doesn’t matter how small it is, or how large it is, as long as you make an effort to create it, and if you have enough passion for it finish it. Starting a project is not a hard thing to do, but following through and finishing it is. Even with your small projects I would suggest going full force on finishing, and doing everything you need to publish that app. The reason being is that the production stage of programming is something you will not be use to until you have done it a few times. This includes compiling/bundling, packaging, code-signing, writing documents and licensing, staging and releasing.

Make an Open-Source Project

As an addendum to the previous section, as you start to get use to creating full projects you may want to start an open-source project or two. Projects like this allow you to make a name for yourself, your project, and also give you the experience of working with end users. Just always keep in mind, you are creating this project for yourself, and the end users just happen to be people who were lucky enough to use your app without paying. In other words, if you have a user who feels they are entitled to tell you what to do, remind them of this.

With an open-source project, you can also get some experience with handling a community, as well as being a lead developer when working with contributors. Having a community to help find bugs and give input as to how feature requests could make your app better is an amazing way to get feedback and testing results without spending your own time.

 

If You Do Not Have Ideas

Sometimes you may not have any ideas for projects to create, and that’s ok. As long as you have the drive to create, you will be just fine. To give you a few ideas to work on, here are some suggested projects from various learning sources.

DevCamp: Top 5 Development Projects to Build for Your Portfolio

If you are learning JavaScript, you can find lots of projects given to you as you work on your certificates:

FreeCodeCamp

Also P1xt from FreeCodeCamp came up with this awesome JobGuide for getting the experience needed prior to job searching. Keep in mind that it is JavaScript and JS Framework Specific but a great guide for aspiring web-developers. Of course you can use the Projects suggested as ideas for other languages, but keep in mind they are pretty front-end heavy.

Summary

So that’s it! Everything I have given you here is a collection of what I learned over the years of bring a programmer and administrator. I spent so many years programming in several languages I didn’t like while lacking a passion, with one language being completely ruined for me by a college instructor taking the fun out of programming by forcing a specific OS build. Once I found that language I really enjoyed, I found myself wanting to create everything, and I still have that mindset at work, and on my own free time.

For those of you that love a challenge and keeping up with the times, it really wasn’t until I made the change to functional programming that I found myself really enjoying programming, so that’s another thing to look into (imperative vs declarative programming). Best of luck, and please by all means give me feedback if you feel something else should be addressed, explained in a better way, or even changed, and most of all tell me how you are progressing!