Hello there. Thank you for stopping by. Many people today are self-taught programmers in the software industry and that is quite commendable. Some however, still view the idea of a college education rewarding in the computer science field in particular while some don’t agree. The fact is, going to college doesn’t guarantee you the skills you need to succeed just as being self-taught doesn’t.
Top 5 Skills You Should Have
I will go right to the point here. If you feel this list is too short, please add more ideas using the comments section. Thank you in advance.
- Programming Languages - You are probably thinking, what? On a serious note, there are thousands of programming languages out there. Reading a ton of “programming languages for dummies” might not help very much. Often people get caught up in a bubble trying to learn how to program in a given language and missing the important details like: lexing, parsing, optimization, type safety, scope, type systems among others. If you are interested in finding more information, Udacity offers a course on Programming Languages - highly recommended.
- Algorithms and Data Structures - Concepts like Sorting, Recursive Algorithms, Language Structures and Compilers, Dynamic Information Structures among others are very important. Understanding Data Structures helps in designing efficient Algorithms. Examples of Data Structures include: Arrays, records, hash or map, union, tagged union, sets, object among others. For a great course on the same, please try University of New South Wales’ course which is totally free.
- Systems Architecture - Many self-taught programmers forget(mostly because they don’t realize how important it is) to focus on systems architecture. The fact is, knowing the parts of a computer and how they work together(interactions) is highly important to say the least. Think of the physics of implementation behind the system. If you feel rusty on this topic, please use your favorite search engine to find some great resources online.
- Operating Systems - Understanding the kernel and how it abstracts the hardware into useful services. POSIX - knowing how it relates to the Standard Libraries of a given language like Java or Python (your favorite language for that matter). Hardware functions like IO and memory allocation depends on the operating system to act as an intermediary between the programs and the computer hardware. There are thousands of resources on this online.
- Compilers - One interesting thing about compilers is that you can actually write code without knowing much about them. That doesn’t mean you shouldn’t learn how compilers really work. Writing your own compiler is probably the best way to go if you are truly interested in knowing what goes on behind the scenes. Again, there are unlimited resources out there. Just do a simple search online.
I know for sure that I could be wrong and that is why I always like to state clearly that these are my personal opinions. In fact, someone else might argue that self-taught programmers are better than those who spent 4 to 5 years in school learning the craft.
Either way, this topic is subject to an endless debate. The list could have been longer or even shorter. Communication is equally important a skill. No matter how skilled you are, being unable to communicate clearly puts you at a disadvantage.
One guy once said this:
Universities teach the science, self-taught programmers learn the art
Whether he is right or wrong is up to your judgement really. I believe that there is nothing that cannot be learned. Just having the enthusiasm to crack open a book and learn something totally new and sometimes scary is all it takes to do something.
You can read my other article on how to succeed as a software developer.
Thanks for stopping by. If you have any ideas that you would like to add to this post, please let me know through the comments and I will be more than happy to share. If you liked my post, please share it using the buttons below. See you soon.