Posted at 8 July 2017
Testing website news
Hi Reddit, I am a software engineer that taught myself. Recently I had a chance to interview and mentor some interns at my workplace and doing so made me think about what I did when I was in their shoes many years ago.
I would like to share what I would do if I went back in time and were learning to program again.
Do not expect yourself to know it all
I noticed that learners of programming set a very high bar for themselves. While aspiring to the higher standard can be motivating, it often backfires because such mentality often punishes you for not knowing, or puts you in a self-denial in order to appear smarter than you really are in the eyes of others.
For instance, during the interview process, many candidates were constantly name dropping complicated terms or concepts that they did not really understand and had very little to do with the question asked. When asked to write a pseudocode using a for-lop, "I have been watching C videos and wonder if I can use pointer reference for that" does not really demonstrate your skills.
It is important to recognize that nobody expects you to know everything. Even experienced engineers often do not know shit, if you talked to them for a while, and they are okay with that. In my beginner years I was also conscious of what I did not know and I could clearly sense the same vibe from the interns. If I went back in time, I would start by being absolutely non-apologetic about things I did not know and just saying "I don't know."
Do not go to bootcamps
Many of the intern candidates were graduating from so-called coding bootcamps often costing thousands of dollars, and that was absolutely crazy to me. First of all, knowledge is free and you do not need to pay hefty sums of money to so-called mentors to learn to program. You can go to GitHub, clone a repository that interests you, and study how it works and imitate other experienced programmer's style and it's all free.
At least that is how I learned, and it's effective because copying is the best way to learn. For example I copied famous guitarists for seven years straight before I could write a shitty original and coding is no different; I think many of us expect to get better ASAP by throwing money at the problem and such instant gratification does not pay off.
Secondly, most bootcamp attendees I interviewed all sounded exactly the same. When asked to describe a project they were proud of working on, 9 out of 10 the answers were something along the lines of "this market place app we built in class using Rails" or "this book review app we built in class with React."
The thing is, you do not need to pay thousands of dollars to build those shitty apps. You can build shitty apps yourself for free. I am speaking from personal experience because I learned by building shitty stuff that mostly made zero sense (you can still see some of them in my github https://github.com/sungwoncho). At least doing so gives you some originality and saves you money.
Write down what you learn
This is the biggest mistake I made that I would change if I can go back in time. A lot of people will tell you to "get your hands dirty" to improve. But in my opinion the more important thing is to remember what you learn. How many tutorials and articles have you consumed recently, and how many lines of code have you churned out? And from those endeavors, how much knowledge did you actually retain? Unless you keep a note or a journal, give it some months and you will forget the most, like I did time and again.
When you learn a concept (language feature, algorithm, data structure, ...), write it down in your own words. Regularly go back to your journal and refresh your memory. I am not a beginner anymore, but I still do it and even wrote an article about it (https://dnote.io/blog/writing-everything-i-learn-coding-for-a-month/).
The thing is it's a good habit to have because you will be learning forever if you choose to code professionally. And those that can learn more effectively can really set themselves apart from the flock.
Build shitty stuff that works
Some interns that we ended up hiring stood out in that they actually shipped working software on their own. I know a plenty of experienced engineers with academic background that have never shipped a program that does something by themselves. Therefore when you go through such journey as beginner you can immediately set yourself ahead of most engineers. And by continually putting in hours, you will come to a better understanding of how software works.
The part I struggled when I was trying to ship as a beginner was the fact that my code was shit. I just could not come to terms with it especially when hosting my code publicly. If I could go back, I would tell myself that nobody really cares about your code because everyone's busy with their own stuff, and that I need not be self-conscious about how bad or good my code might be.
Remember that most master artists such as Picasso or Warhol were insanely prolific. A large portion of their works are not neither well-known or critically acclaimed. I'd like to think that, by producing more and more, they were able to develop their own style and programming is no different.
Hope it helped
I decided to share this opinion at the risk of sounding self-aggrandizing or too pedagogical. After all, these are some things that I'd like to tell myself in the past.
There are more to be said, but I am hesitant to write more because the best advice beginners can get is the advice they did not get because they were too busy shipping. But there were some things to be said. Sadly these cannot help my past self, but I'd be happy if they helped someone here and now.