Skip to content

Growth Mindset: The Foundation of Success

Don't Be Afraid of Your Weaknesses

As a mentor and coach at CodePath, I’m often asked by college students, “what tips do you have so that I can be successful?” While I could list many things that will make your college journey and later career a success, there is one attitude that, if you adopt it, will prepare you to be successful today, tomorrow, next year, and for the rest of your life. This is the growth mindset.

The growth mindset means not viewing your skills and abilities as fixed, but as malleable. We’ve all heard someone say, “I’m not good at math,” or, “I can’t code.” And even for those of us at CodePath, who are probably good at math and coding already, there are certain skills that are still daunting to us. For example, using dynamic programming to solve a LeetCode problem, or using pointers properly in C++. Having the right attitude about our skills — understanding that our skills are malleable, not fixed — is crucial to take on these challenges.

In fact, as a software engineer at Amazon for five years now, I realize that confronting my weaknesses and knowledge gaps is something that comes up daily. Learning how to use a new AWS service or apply a new design pattern to a project’s proposed design are two examples of recent challenges.

Learn and Be Curious

The fact that Learn and Be Curious is one of Amazon’s Leadership Principles tells you just how fundamental learning is. Learning never stops in a software engineering job — every year, there is a new technology, a new design pattern, and a new peer on your team with a unique opinion. In this job, we learn both from each other and from the ever-changing industry.

Coming into my role as an SDE 1, I had never coded in Java before, never used React before, and never used — nor studied — AWS or cloud computing. And all of these technologies were fundamental to doing my job. However, this was not treated as a problem. On the contrary, my job at the beginning was simply to learn, and learn by doing. Within a week I had made my first code change in React, and the second week I made a code change in Java.

This was all aided by the fact that I was assigned an onboarding buddy who I could lean on any time I was stuck. I asked her a million questions and often asked her to sit down with me to walk through a problem. I can’t overstate how important it is to have a support network — people around you who can help you face challenges and grow your skills. In general, having a support network — whether it’s your classmates, a tutor in the college tutoring center, a mentor at work, or one of your teammates — is a powerful and essential part of learning.

Self-study was also an important ingredient. For example, I realized that by reading through the code my team had already written, I could quickly pick up proper Java and React syntax and coding patterns. Supplementing that with a book about Java programming that my manager recommended (Effective Java by Joshua Bloch), I was able to establish foundational knowledge within the first few months.

One thing I have realized over my time at Amazon is that learning and being curious constantly is scary. It’s much more comfortable to stop learning after you know “enough.” For me, after two years at Amazon, I knew the ins and outs of developing and maintaining on my team’s tech stack. The processes were simple and familiar, and I was easily pushing code out every day. This meant that my pace of learning slowed down a lot, but I barely noticed that, and for a while, it wasn’t a problem.

But with a new organizational initiative to move to “cloud-native AWS,” which would force us to change the entire tech stack down to the way our infrastructure was managed, I was forced to confront the fact that I would have to start over again, as a total beginner, in a new subject area, even after I had reached a point of being considered a “seasoned” software developer. At this point, instead of being the go-to guy for answering peers’ questions, I had to once again lean on engineers more senior than myself to get the help I needed. I faced six months of working every day with unfamiliar tools and services, but came out of it with a much deeper knowledge of cloud computing.

Adopting the Growth Mindset Sets You Up For Success

As a college student preparing to get into the software engineering industry, you're going to learn a lot — how to write a strong resume, solve data structures and algorithms questions under pressure, and answer questions about your projects and prior work experiences. And while it would be awesome if you were great at those skills from the start, most likely you won't be. The first time I interviewed for Amazon (for a summer internship), I didn't make it past the first coding round. However, I didn't let that sink my sense of belief that I could pass their test the next time around.

In order to best prepare yourself for success, it's important to reflect about your current knowledge. Passing a coding interview can cover a variety of subjects, such as linked lists, binary trees, or dynamic programming. By trying a variety of problems and noticing which subjects you understand well and which ones you don't, you can focus your energy on those subjects you need to work on. 

And when you complete a coding interview but don't make it to the next round, reflect on your performance — was the data structure or algorithm required for the question one you were less familiar with? Then spend some time learning more about it. Or, did you dive into coding before defining a plan for how you would solve the problem? Then you should adjust your interview approach.

By treating interviewing as a process, you can learn far more than thinking of it as a simple case of failure or success. On top of that, by adopting a growth mindset, you will set yourself up for long-term success. Ultimately, having a growth mindset means knowing that our skills and aptitudes are not fixed, but rather are like plants: if we want them to grow, we need some water. And to grow, the best sources of that water are personal determination, self-belief, and a support network of mentors and peers. This mindset will help you make it through coding interviews, onboard to a new software engineering role, and grow yourself into a future leader at your company.