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!!!
Top comments (11)
Great post; thanks for sharing!
I was reminded by (5) of something I read a long while back. The jist of it was that techy people (whether developers or other) tend to love trying out the newest toys, tools, and tech... but rarely stick with them. Instead, they'll try them out, see what they're all about, and then go back to their own preferred tried and true standby, with no regard for how popular that standby is.
I'm addicted to trying out text editors usually do go back lol.
I use Vim. Day-in-and-day-out. I've been using it for about 20 years.
You might think that I'm an advocate, and evangelizing about how awesome it is. (Well, it actually is awesome.)
My fingers know it tacitly. The editor gets out of my way. It's zen-like.
But no, that's not the case. My advice is: IT'S TOO LATE FOR ME! SAVE YOURSELF!
Haha, I actually have been teaching myself vim as its useful for server work. I think i'll keep atom for my regular work but I appreciate vims simplicity, at least I appreciate it until I forget how to exit for 5 minutes lol.
I will add that I do live the fact that I can pushd to a location touch a file and then edit on the spot. Never leaving the command line is great for focus and I appreciate that.
Also there is the whole "emacs vs vi" flame war that was raging decades ago, only remembered by neckbeards like myself. I was an emacs user, tried vi for six months, and never went back to emacs. The other dev with whom we had bet to switch editors, immediately went back to vi after having used emacs for six months.
I know, there are emacs fans out there. After having used it for years, I can say that it is an impressive development environment, an operating system unto itself, and really an entire religion... the only thing it lacks is a decent text editor.
Interesting that you jumped into multiple languages at once! I actually had a really hard time getting the basics of programming when I first started learning my first languages. It wasn't until after I had to learn another one, that I realized there were so many similarities. Using multiple resources was also a big one for me. Thanks for the inspiring post!
I think it only worked for me because I had a really strong background in tech. I had been reading programming material and blogs for a few years already and spent a lot of time trying to understand the basics long before I ever jumped into actual programming.
I'm still a novice by far but I'm learning more every day but I know that by jumping into several languages at once it helped me pick up things more quickly in the long run. Thanks for the encouragement!
A nice list :-).
With the first one "Be willing to throw away everything, the best, right solution is all that matters", it's however important to temper that when working in a business context: sometimes 'good enough' is indeed good enough. Balance is everything :).
Absolutely, balance is everything. Personally, I find myself sticking to something far longer than I should just because the puzzle fixer in me can't let go. Or I get sentimental about something I wrote and annoyed when someone just wants to throw it away for whatever reason. I hope some of that goes away when I've been coding long enough to have tons of code and not care as much.
Absolutely great post.
I myself is still in the process of finding my “comfort zone” and still trying a lot of different tools and learning materials. Your post really helped me to be more comfortable of exploring more and not to be pressured with what other developers are saying. Thank you very much for sharing.
Glad to hear it was an encouragement. Keep exploring and you'll do great!