I'm writing this post in response to a post I read last night by Alex Smith https://dev.to/ajsmithsw/the-advantages-of-being-self-taught-2lcj. I was very encouraged and wanted to share my learning experience in hopes to pass the good feelings along. Please note I’m primarily in web development so my stack reflects that.
1. Be willing to throw away everything, the best, right solution is all that matters.
This goes with everything from code to languages to ideas. Programming changes so fast and theirs so many amazing ways to approach problems that its important to remember that the solution is the reason for programming. Its all about solving the problem and never about the journey. It’s super easy to get angry or defensive when you’ve spent 2 days coding something or building a page and someone walks by and points out a faster/better solution.
If you’re focused on the best solution it helps make throwing that code away so much easier. I recently had spent 2 days working on some flexboxes for a project and my business partner (totally non-techie) decided that not having that feature would be better for our client's vision. My instinct was to get mad and want to keep the code in anyways but a few breaths later and thinking it through and I realized my partner was right.
Plus if i'm honest, my clients could care less how many hours I worked on x cool widget or how beautiful the code of y doodad is. They just want their product the best it can be.
2. The language your learning doesn’t matter as much as everyone says it does.
I’ve never been a fanboy of a particular technology, I love windows 10 and have a separate equally loved laptop running Kubuntu. I even enjoy using my wife’s MacBook.
I approached languages the same way and am grateful I did. I decided to learn a few languages I need in my business (HTML/CSS/JS *I know html and css aren’t true programming languages.) and then I’ll pick a few I want to learn, (SQL, Python, Perl, Java) and then I added C because I wanted to fill in my lack of a compsci degree a little with a more fundamental language.
After all of the studying and reading, I’ve learned that there’s a place and value for all of them. Unless you having a pressing need to learn a single specific language than play with a few and find out what feels right. Which language flows when you use it. Then learn it no matter what popular culture says about it. If you have a passion for assembly than that passion will take you farther than a slight interest in python any day.
3. Programming really is as hard as everyone says.
When I started out I truly thought that I was a super genius who could figure out everything in a few hours of study. C and CSS have humbled me. The days I’ve spent on trying to figure out even basic CSS concepts is embarrassing and I’ve hence changed my tune to “given enough time, stack overflow, documentation and forum posts from 2009 I can figure anything out.”
If you understand that programming is hard and you approach it as such I believe you have a better chance of not quitting and it's tempered how often I get frustrated. Now instead of frustration at every error or broken page, I understand its part of the process and get frustrated less. I only swear now after having been unable to find a semicolon after more than 4 hours of searching at 3 am in the morning. (this is a lie, I swear anytime I use CSS which is almost daily.)
4. Try different learning methods.
I started out with books, then online text courses and was really struggling, I tried forums but was so new that I didn’t even know how to ask questions properly. I finally grabbed some video courses and things really started clicking.
Be willing to try other mediums of learning. videos, books, Courses online, Forums and even coding games and such all are amazing tools and if you can try to learn to use as many of them as your comfortable with. If I had stuck with books only I would be so frustrated and might have quit programming outright. I had never used videos and don’t like them for most other learning but for coding, it's amazing to be able to follow along and pause right next to the instructor.
I learn best by learning concepts as a whole so I jumped into learning 7-8 languages all at once. I absolutely understand that this is generally a really bad idea but for me, it worked. I have now settled down into 5 consistent languages I'm focused on and the rest are just for dabbling in for fun. I am lightyears ahead of where I would have been learning just one language at a time. I also get bored easy so I probably would have quit learning together but being able to switch from web dev to building an SQL database to reading about pointers in C to learning Git. It was a lifesaver for me and helped me get past that initial learning hump and stick with programming.
This worked for me but it might not work for you. My point is that it's worth experimenting and trying different things no matter what others may say.
5: Try everything you can and then pick what is most comfortable for you.
I love trying new text editors, its a sickness. I can’t tell you how many different linux distros I tried before settling on my current one. Be willing to try different things and if you like it and your productive than rock it. Don’t let anyone else tell you whats the best editor or operating system or even language. Just try it out. I’ve fallen in love with things that are very counterculture in some things (I love php, I can’t help myself) but I also have followed the crowd in other things because the crowd was right. (linux for development has changed my entire workflow for the better)
Try it and if you like it keep it. Never stick with something because some random person on a forum or tech blog said that its the best thing ever.
6. Stay Humble,
This is tough but being humble and willing to listen to others and approach others with humility is priceless. I haven’t had a lot of luxury of working with other developers and most of my clients don’t know or care about code at all. I have to remember that I've just chosen to learn this skillset and that i’m not god’s gift to mankind. I learned before I got into coding what it was like working with developers or programmers who didn’t have great communication skills or who were arrogant. It was never fun and most of the time resulted in neither party being happy with the end product.
On the spin side working with a team focused, humble developer or coder is absolutely amazing and the team can do really cool things. Its super important to remember that the person who can’t figure out how to turn on their computer might be an absolute genius in another field. Keep focused on being a team player and work on building leadership and communication skills and everybody wins.
I’m new enough that a semicolon can humble me on a weekly basis, however, I already notice times when I have approached a conversation with an exasperated “why can’t you get this simple concept” attitude. It's easy to forget that the “simple concept” took days or weeks of study to understand. EGO IS THE ENEMY
>>>>> Last Thoughts<<<<<
I hope this is encouraging and useful to someone reading this. Programming is hard but it's absolutely worth it. I love how it feels to hate something for its difficulty and then later love it because you finally got it and can now do amazing things. I love how precise and yet imprecise coding can be (Floats anyone) and the joy of typing a bunch of symbols into a keyboard and hitting refresh on a webpage and seeing your creation come to life.
I don’t know of many other fields that allow for the creativity, problems solving, extreme hatred and absolute love of the same concepts and keep me up all night working on some silly personal project like programming and web development does. Thanks for reading and keep on coding!!!