What Skills do Self-taught Programmers Commonly Lack?
…Or, to put it another way: what should self-taught programmers study to get up to speed with his/her formally-educated peers?
This piece is reposted from Quora with the writer’s permission.
Humility
Someone quite interestingly commented on “humility” as a thing that self-taught programmers lack. I agree.
I’ve been plagued by Impostor Syndrome for a long time, and I think that’s kept me humble and driven me to want to study and practice as much as possible—for fear of getting “found out”.
There’s no shame in being proud of the fact that you taught yourself, but you should be aware of the limitations of your teacher.
Want to Know if You Are You a Bad Developer? Take This Quiz to Find Out!
Algorithms
This is classic computer science right here. Programming without knowledge of algorithms is like carpentry with just one kind of saw: you can get the job done, but it’s going to take a lot longer.
You can look at an algorithm as “discipline”. When you learn to write them, what you’re doing is solving a problem with discipline; using structure, patterns, and logical steps.
When you don’t know how to discipline your mind, you don’t know how to write algorithms.
Not only can you not write algorithms unless you’ve studied them, you don’t know how many algorithms others have written, too.
I spent four days trying to figure out how to do a permutation. I was so proud of myself when I figured it out. Right up until I discovered that B.R. Heaps had figured it out in 1963.
Design Patterns
This comes with education and/or experience. There’s more than one way to structure your code, and there’s a right time and a wrong time for each. You either need to make mistakes along the way and learn when to use each pattern, or learn from someone else who’s already made the mistake (a teacher).
Programming Paradigms
Object-Oriented Programming is not The Way. Neither is Functional Programming. Nor Reactive Programming. It is A Way.
There are different ways to program, and they each have a purpose. Not only that, some languages are naturally better-suited for one paradigm or another.
If all you have is a hammer, everything looks like a nail.
Take that into self-taught programming and you’ll find yourself hammering in nails, screws, staples, and thumb tacks.
I remember a self-taught .NET programmer actually telling me once, “well, it’s not programming unless it’s object-oriented. And that’s why I don’t consider JavaScript a programming language.” That’s a very, very flawed train of thought.
Data Structures
Granted, your language can give you a basic idea of what the different data structures are. But again, that’s a basic idea.
Self -taught programmers can have a tendency to only stick to data structures that work within their favorite language. Just because it’s not a primitive, or even a common structure in your language, that doesn’t mean it can’t exist. Of course, that also means that maybe it shouldn’t exist, either.
The world is very small if it all can fit inside of an array.
Testing
Maybe it’s just me, but there’s a lot of ways to test your code before pushing it to an environment. Learn how to do unit testing.
More importantly, learn test-driven development.
There’s a difference between testing your code, and writing testable code.
For me, The Pragmatic Programmer was a big help.
Author’s Bio
Frank M. Taylor is a Senior Front-Developer at Tahzoo Worldwide. He specializes front-end architecture for content management systems. He is a three-time SDL Web MVP, awarded for his blogging contributions for SDL Tridion, an enterprise CMS. Frank is a hackathon winner, lecturer, and blogger for front-end development. He lives in Illinois with his wife and border collie, Lillith.