Disclosure: This post may contain affiliate links. Please read my disclosure for more info.
It’s been almost 5 months since I first discovered the world of computer programming.
I can only describe those 5 months with two words: Time flies!
It started with me forcing myself to learn Python to get a new job and progressed to me marveling at the thrill of coding.
Learning, especially learning a marketable skill, is always a good investment.
However, when you decide to invest your time and effort in something, your life and your relationships with other people will probably change as well.
And to Mr. FAF and me, programming has taken us on a new journey where we discover ourselves and each other.
Today I will tell you all the good, the bad, and the ugly of what has happened in our lives ever since I started learning how to program five months ago.
If you ever told me before Feb 9 of this year that Mr. FAF would be my mentor and biggest supporter when it comes to programming, I would probably laugh and think that you’re joking.
I have always envied Mr. FAF for having a well coveted job at a big tech company making a six-figure salary and amassing a bunch of perks that I can only dream of.
I told him that and even wrote about it on the blog. But Mr. FAF just brushed it off, saying he’s a nobody at his company.
To me, programming was something I wanted to do for a living but thought that it was way out of my realm. Whenever I asked Mr. FAF about his work or explain something tech-related to me, he would get uncomfortable and tell me that I didn’t need to know.
Maybe he was right, what do I know? I just accepted the fact that we could just never talk about what he does at work or anything programming-related. I just didn’t need to know.
All of that has changed.
Five months ago, Mr. FAF encouraged me to consider changing my career to programming. I first thought he was joking and got a bit upset at him (how dare him make fun of me like that?). But after realizing that he was serious, I was touched and motivated to try something new, something I thought was just too hard for me.
From that point on, Mr. FAF and I have spent countless late nights and weekends together going over programming concepts and exercises. On Friday nights, instead of going out to eat or strolling around the mall, we just sit in front of a white board at home where Mr. FAF patiently and passionately explains to me what I don’t understand.
And strangely enough, all of this studying has drawn us closer together. I am deeply moved by Mr. FAF’s interest in helping me improve myself and my career. Sometimes I think Mr. FAF might be tired and ask if he wants to watch a movie or go out instead.
But he decidedly tells me he wants to help me progress faster, so we should just stay at home and study. We usually study together when our kids are asleep or when our baby is taking a nap and our son is practicing writing the alphabet letters. When they are awake, we take them out to the mall or go grocery shopping.
Now when I ask Mr. FAF about his work, instead of avoiding my question like before, he will explain to me what he is trying to do. He told me that if I try hard enough, one day I can do what he is doing.
We started talking more about different programming languages, computer science concepts, and programming career paths every single day.
Sometimes I wonder what we used to talk about before I started learning how to code. I feel like Mr. FAF and I are speaking the same language instead of us living in two different worlds like before.
I will listen attentively when he talks about his work, and he will do the same when I talk about my concerns or challenges of programming. In other words, our worlds seem to have collided in a strangely pleasant way.
However, things have not been all roses and chocolate. Mr. FAF and I have gotten into multiple fights when we’re studying together.
Sometimes I can’t help but feel like he explains things to me in a condescending tone. Sometimes he would yell at me if I don’t understand something right away.
One time, he was bringing up all these math concepts that I had learned from high school 15 years ago.
When I was trying to recall what they were, he dropped the bomb, “You are so good at math.” And he said it in such a sarcastic and condescending way that it infuriated me. I snapped back, “You think you are good, but you’re not that great either.”
And the studying stopped that day.
Another time, I asked him what I thought was a pretty simple and straightforward question about arrays. Then he started bringing up what I thought was the history of computer science over the past decades.
Being an impatient person, I urged him to hurry up, and Mr. FAF got upset. Then he started yelling at me, “You just want to learn easy things. You need to be patient and understand the basic concepts of computer science. Do you know why there’s just a small percentage of people who excel at programming and get six-figure salaries? It’s because they take the time to learn and understand these difficult concepts. If you want something quick and easy, just stay at your current job.”
I thought that was pretty hurtful. I must have cried a couple of times after he yelled at me. I felt offended and stupid. Maybe I’m just not smart enough. What am I doing thinking I can be a programmer? Am I just wasting my time? Maybe I should stop and focus on my current career and take care of the kids instead of spending all this time learning how to code.
And I told Mr. FAF I was going to quit. Mr. FAF got scared and begged me to change my mind. He told me that he would never yell at me again and got down on his knees to ask me to forgive him (literally). He apologized and admitted that he had an attitude problem.
So far, the yelling has stopped, and he has definitely become more patient when I don’t understand something. I have also trained myself to be more patient when he explains something.
What Mr. FAF said was hurtful, but I think he made a good point. It was a tough pill to swallow, but it was needed. If programming were easy, everyone would be a programmer making six figures already. It’s not an easy career path, and I need to take the time to learn and understand it.
Back then, I just mentioned quitting out of frustration, but it seemed to work in my favor. And of course, I didn’t quit.
All of that yelling and crying happened. It was bad, but it’s not as frustrating as what I’m going to talk about. I hope that no one will get offended by what I’m going to mention below.
What I wrote in this post is purely based on Mr. FAF’s opinion and my limited online research. If you disagree, I really want to get your feedback. I don’t mean to put anyone down, and I hope no one will feel that way.
I first started to program on Codecademy using Python. However, as a newbie coder, I was eager to learn and turn to the internet for more guidance and information. I then explored the world of coding with so many career tracks: front-end developer, back-end developer, full stack developer, etc.
To me, my ultimate goal was to become a developer in the shortest time possible. I didn’t care if I could be a backend or frontend developer. I just wanted to have the word “developer” in my job title.
I also found a myriad of articles about people using FreeCodeCamp and other resources to build a portfolio for job applications and got a developer job within a year. I set a goal to be able to get a developer job before I potentially get laid off at the end of 2019, so those stories sound super cool and inspiring to me.
Contrary to my expectations, Mr. FAF wasn’t so thrilled. Actually, he looked deeply disappointed and got pretty upset seeing me so excited. He told me to focus on data structures and algorithms since they are the foundation of computer science.
He didn’t want me to spend time building pretty websites or fun apps. He wanted me to take more courses on data structures and algorithms and practice LeetCode problems. He also said there’s no shortcut to becoming a good programmer, and that he doesn’t believe in those coding boot camps.
I told him that I had gone to conferences and talked to multiple female developers who graduated from such boot camps. They now work as developers, and they said data structures and algorithms aren’t that important in their daily work. Our conversation went something like this:
Mr. FAF: You should focus on data structures and algorithms and becoming a backend developer. Let other people do the web development.
Me: Why? Other people are web developers. They like it and get paid well.
Mr. FAF: Technologies for frontend development change constantly every year, so it’s a hassle trying to catch up. Plus, backend developers get paid more. If you spend the time to learn, why not focus on what is more rewarding?
Me: But data structures and algorithms are hard. And it’s gonna take me forever to master those, let alone doing technical interviews.
Mr. FAF: It’s hard, but it’s more rewarding. The average salary for web developers is not much higher than your current salary, so why bother spending all that time learning it?
Me: Do you use algorithms in your daily work?
Mr. FAF: Not really. But the smart ones on my team do.
In a way, I thought Mr. FAF was acting like a demanding parent who kept telling me, “You can do whatever you are passionate about as long as you do what I say.” I felt like he wasn’t listening to me and just kept telling me what to do.
After various conversations (arguments?) like the one above, I started to think that Mr. FAF was right. At the end of the day, now matter how much I wanted to argue with Mr. FAF, it’s just a fact that data structures and algorithms are the backbone of computer science.
Technologies, libraries, and languages change every day, but the fundamentals of programming will always stay the same.
There’s a reason why those big tech companies got so big and successful with their technology.
They want software engineers who are good at what they do, and one way of testing that is through those notoriously difficult technical interviews.
It’s not something I have control over, so I just have to accept it if I want to break into the field.
And the more important reason is that, after taking the Web Development Path on Codecademy and built a personal website and two simple interactive apps for myself, I felt like something was still missing. I missed Python and wanted to focus on Python instead.
But Mr. FAF had a different idea. He told me to take the free online Princeton courses on Algorithms in Java. At first, I resisted the idea of learning a new language. I read online that I should focus on one language and master it.
Mr. FAF, however, had a different opinion, “Using Python is like driving a Toyota Corolla. It’s easy, and everyone can do it. But using Java is like driving a truck. Java is harder, but it’s more powerful. Once you can drive a truck, you can drive practically any other vehicles. But if you stick with a Toyota Corolla, you can only drive a Toyota Corolla.”
I thought that was an interesting analogy. Mr. FAF told me he had taken the Princeton course on Algorithms three times, so he understands the materials and can explain to me if I don’t understand something.
Mr. FAF made a good point. And I understand where he is coming from. Mr. FAF has learned programming in an academic setting most of his life. After all, he has a PhD in Computer Science. He also got a job offer from Google and Amazon Web Services, so he must know what he is talking about.
After much thought, I decided to take Mr. FAF advice and started on a plan he helped me draft below (in order):
Computer Science: Programming with a Purpose by Princeton University
Algorithms, Part I by Princeton University
Algorithms, Part II by Princeton University (Mr. FAF said I would only need to study graphs in this course since the rest is too hard.)
Introduction to Operating Systems by Georgia Tech
Mr. FAF said he took the courses on algorithms three times, so I will need to take the courses above multiple times until I really understand the materials. All of the courses above are free of charge!
After I get a firm grasp of the concepts and programming in Java, I will start solving problems on LeetCode. After that, I can start preparing for the job applications.
Mr. FAF said it would take me at least another year to finish all of this. It might seem long, but I can wait. I know it will take me a long time to grasp all of those challenging computer science concepts I had never encountered before.
And that’s what my life and my marriage have been like over the past five months. There’s more to the story, but I will spare you the detail.
Basically, I ended up in urgent care due to sleep deprivation and stress. I got all these rashes on my hands and face. I had trouble sleeping at night, got insanely hungry at night, ate like crazy, and gained a ton of weight. For two months, I had 4-5 hours of interrupted sleep (i.e. baby crying) at night and felt exhausted all the time.
At one point, I was 162 lbs (73kg), and I’m only 5’4. I was 35 lbs overweight. The doctor said I had eczema dermatitis and was stressed. They did a bunch of blood tests on me but couldn’t find anything wrong. They told me to try to relax and slow down on whatever it was that I was doing.
I took their advice, tried to go bed early, and told myself I wasn’t in a rush to get a developer job. Mr. FAF told me that if I get laid off, I can just stay at home and study full-time.
Things slowly got better.
Over the past month, I have lost 10 lbs. My eczema has also gotten better. That episode reminded me of when I was stressed out in grad school. Back then, I was all alone. Now I have Mr. FAF and two kids. I have a family who supports me.
Mr. FAF has been my biggest supporter during this journey. Over the past few months, whenever he hears me say “I’m not smart enough for this. Programming is for geniuses,” he will tell me “If you can overcome these hurdles, you will be a genius. And I will help you.”
I don’t care if Mr. FAF has flaws or if he’s not frugal enough. Hearing that he will support me and my career reaffirms my belief that I have married the right man.
Now I just keep to keep calm and focus on studying without going out of my mind. After all, programming is hard, and learning it takes time. I need to be patient with myself and take better care of my health if I want to keep going.