Why You Suck At Progamming
We All Started Out With A Dream
If you're reading this the chances are you have hit a slump in your programming career. The journey to this points has been long and much has been achieved. Taking those first steps of ripping your PS2 apart because the CD-ROM would no longer play games was just the beginning of some of our journeys. If you're like me than you downloaded countless viruses attempting to get free software and cheats for video games. That desire evolved into wanting to build your own programs and your own video games and that would lead you to the world of programming. We all started with a dream and most of us did not have money in mind when we began our journey. The countless hours we spent trying to get that first data file to read into an array. Most of us have been tested and through many books, lectures, examples, and hours of diving into our code, we finally got a grasp of how to actually create something that was useful. The dream seemed within reach and our progress encourage us to try new things.
Where Things Probably Went Wrong
College prepared some of us for our career in programming while others were self taught. This exposed us to various forms of programming but did not specify what type of programming we really needed to know to become good at our jobs. All the practice we did with C#, Java, or any other language seemed useful at the time until we actually started looking at job postings. While a job posting may state in the title that they are seeking a C++ programmer the reality is you will need to know an array of languages and most of your interview and time working will have zero to do with C++. Making matters worse is the differences in syntax that exist from some of the more common OOP languages verses other languages companies require. It becomes so overwhelming that some of us actually stop enjoying programming and give up on learning new languages that we need.
How Do We Fix It
Two years ago I was working for a local software company when we hired a developer who had no formal education but made far more than any of us. At first we speculated that he must of knew someone high up in the company but as time passed we realized that he was a master of every single programming language out there. One day I was complaining about using Python when I asked him how he ever managed to focus on all of these subjects at once. He responded that he didn't and he use to be exactly like me. I asked him what he did to go from a bad or average programming to becoming a master programmer and his advise was simple, keep it simple. He advised me to program in the language I loved. He told me to only program things I wanted and not to worry about the other language but focus on the program. Then after I was done I should take the entire code I just created and instead of thinking of it in terms of programming and learning syntax, I should think of it like translating. I didn't believe this would work but then I started translating projects I was working on using Google to research and YouTube to fill in the gaps. In six weeks I mastered Python and Ruby. In 11 months I found myself translating every program I wrote in my free time into C#, C++, Java, Python, and Ruby. The problem was solved and it's something I was never taught in College.
So How Do We Really Fix It
The morale of the story is that you are not a bad programmer but instead you are taking the wrong route in learning the languages. Follow these rules to improve your programming experience and learn a new language as efficiently as possible.
- Don't Like It? Don't Write It - Spend your free time writing programs you will enjoy and let the language learn you in the translation process. You will find that not everything translates perfectly but that through repetition the concepts of the new language become clear to you.
- Expand Your Knowledge- Spend some time getting to know different libraries and what libraries they are similar to in a language you may already know. Skim documentation and look up concepts on YouTube when possible.
- Don't Give Up But Don't Burn Out- Take time to enjoy your programming and try things that interest you. If you get bored with translating a program then set time limits per day. The more you practice the more you will absorb and the less you will have to research while translating next time.
- Program With Tomorrow In Mind- This is what a lot of people have trouble with. When you write a program it is important to take a step back and think about what this program will do in the future. Practice programming in a way that allows for flexible code that can adapt to future changes.
Becoming a world class programmer shouldn't be your ultimate goal. You become better at programming through knowledge. The more you learn the better you can plan new projects. This allows you to plan projects out clearly in your head. You can then test these plans in your code which you will be prepared to write because you already reviewed code you know by heart and how it will work in the program. This is how master programmers approach their assignments in the workforce. The programmers learn to take a program and break it into pseudo code inside of their head before they even touch the project. It is always good to map your program out ahead of time but using techniques such as translating to other code will allow you gather more knowledge. The more you program the more likely it is that you will cover material that will apply to your future needs. The following are tools you should already be using:
- Google- Google is your best friend. Try not to steal other peoples code and plug and play but try to take their examples and make it work for your own programming. If there is an issue, GREAT! That means you have to dig a bit and change some code to fit your new found method. This should force you to consider the code and what it does multiple times and get a better understanding of it.
- Bitbucket- You should start storing your code so you can access it later. You will need the ability to share your code as a professional programmer but even as a private programmer you will find storing code to be a really good idea. It allows you to label certain code so that you can reference it back. While storing code on google drive is possible, you will eventually run out of space and you can't store it in a very friendly way either. Bitbucket allows you to open a free account and you can store a bit before you are prompted to pay a small monthly fee for storage space.
- Github- This is probably the best known Git repository service there is out there. You can use a free account to store as much as you want and it's a place where a lot of open source software is developed. If you want to keep your git and code private though, you need to pay up. The fact that a lot of it is open to public and searchable makes this a great place to look at code and pick up tips on concepts if YouTube and Google haven't made the ability of certain methods, classes, or libraries perfectly clear to you.
- Finding Open Source Project- Open source projects can be a great way to challenge yourself. If you are new the field and open source project can net you experience in the field beyond just your internship. Employers like it when you come sit down for an interview and instead of saying I had such and such GPA with a 3 months internship with blah blah, you also add something like "I worked for 6 months on three open source programs " and list the location of them. It really goes to show that you have taken steps to be a self starter and you have continued your passion in the field.
- Trello- Trello is a cool cloud based program that really allows you to do a few things. You can write down and design out different projects you intend to work on and use the board to organize those projects in sort of a to do style. It also allows you to store all those great ideas for apps, programs, video games, ect into a cloud for safe keeping. You no longer need to hold on that fragment of memory you retained during a lunch date. You can no safely store that brilliant idea inside your Trello cloud.
- Notepad++- Now finding a great deal of people to agree on great code editors or IDE's is a challenge in itself. Many programmer prefer what they have and there are some people reading this who run linux and think "oh , program on windows, that's depressing". The truth is that notepad++ is a great program that allows you to do a variance of task from writing out equations to building websites in custom HTML5/CSS3. The notepad is very simple to use and accommodates a variety of different codes. It is the same notepad you use to scribble things down and save to desktop to remember later but it is written in C++ with the purpose of accommodating different types of code and equations.
There are plenty of other tools out there that can help you along the way. These are just some of the basics that can give you a feel of what you may be missing from your arsenal of tools at the moment. Remember that being a great programmer will not come over night but all of us sucked at one point. Time and dedication is what is needed to move on to the next stage of your programming path.