Back

Learn to code smarter: How to become a senior software engineer quicklyFeatured

When I first taught myself to code, I noticed a gap. Even though I’d been teaching myself to code for five years, I didn’t have the skills necessary to reach the next level. I was technical, but not technical enough.It wasn’t just me who noticed this skill gap either. After years working to become a Product Manager at Google, I finally had the opportunity to interview for the role. However, after passing five internal interviews, I was told by the hiring manager that I would never pass the technical ladder transfer interviews. The job was given to someone else. After all my hard work, I felt defeated. My insecurity– that I wasn’t technical enough– was staring at me in the face. Despite all the hours I'd spent building mobile apps and learning how to develop in Java, Javascript, and Python, I wasn't skilled enough to snag my dream job.I wanted to be a better software engineer and product manager, so I got a (second) bachelor’s degree, this time in Computer Science. Because I’d been in the job market before this degree, I gained unique insight into how Computer Science is taught, as well as how those lessons directly translate into our roles as engineers.Now that I have a Computer Science degree, have put in the hours as a technical product management executive, and have founded my own tool for developers, I understand what was preventing me from exceling. Although I’m happy about where I’ve landed, this knowledge shouldn’t be locked in a Computer Science degree.Today, I’m sharing how you can learn to code smarter so that you can become a senior software engineer quickly. Even if you have a ways to go, this knowledge will help you become better than you were yesterday. Why become a senior software engineer?First off, what’s so great about becoming a senior software engineer? Why go through the trouble? In my experience, senior software engineers are trusted to solve harder problems and handle more complexity. Although this can be challenging, it also gives you the opportunity to build something that’s rewarding and impactful. It gives you a seat at the table.Not only that, but being a senior software engineer gives you the chance to mentor and provide insights to others. Often, it may lead to managing your own group. And, let’s not forget about the senior software engineer salary. On average, senior software engineers make 92% more than junior ones, according to PayScale.For me, becoming a senior leader changed the trajectory of my career. While I was completing my degree, I landed a senior role at eBay. Not only did I get the role I wanted, but I was also able to skip the junior level. In doing so, I instantly tripled my salary. In that first year, I took seven separate products from ideation to launch, giving me enough experience to get into even higher level roles.How to become a senior software engineer quicklyIf you want to advance in your engineering career, you shouldn’t have to go get a second degree. That’s a big (and expensive) commitment that requires years of your time. Becoming a senior software engineer quickly requires you to read, understand, and have a big picture understanding of programming languages.How can you ensure you have an in-depth understanding of code? You’ll need to read a lot of code, get a lot of code reviews, and give a lot of code reviews. Spending time with code and gaining feedback from others will help you gain the depth of knowledge you need to move forward.But giving and receiving code reviews isn’t enough to put you on the right track. Ultimately, you need to gain the ability to build large mental models. This all boils down to loading up more complex systems in your head. Engineering requires us to hold abstract systems and concepts in our heads via a skill called spatial reasoning. Spatial reasoning is the ability to “generate, retain, retrieve, and transform well-structured visual images" (Lohman 1996). It's what we do when we visualize shapes in our "mind's eye".In engineering, we use spatial reasoning to create a mental picture or a mental model of how our systems should look. We hold it in our heads. You follow a function call from one file to another. You imagine how data at runtime flows through that picture you created. You transform that picture by flipping it and manipulating it daily. To get to senior engineer, you need to hold larger and larger systems in your head. You need to add more and more to your mental model. You need to build up a database of things you have seen before. This is what takes so much time and it’s what you need to conquer to go from junior to senior engineer.A few tips for building these modelsTurns out, I have terrible spatial reasoning skills. This challenge is so visceral to me that I’ve built an entire company around it. CodeSee’s mission is to help developers and development teams master and maintain their understanding of large scale codebases. Codesee.io helps dev teams all speak the same language. It takes these large scale systems that engineers have traditionally held in their heads, and it creates a visual map along with all of the data that PMs can understand and that shows how all the pieces fit together. This map shows everything from the line of code that gets run to the higher level system architecture. Here are a few recommended tips for building mental models, all of which are built into the CodeSee platform. 1. Write things down. Some say that good writing is good thinking, and I agree. Being able to write down what’s going on in your code will clarify your thoughts, help you see the big picture, and ensure that you’re able to communicate your ideas to others. Make sure you write things down in a scalable way that you can search from and build onto. Make sure these notes are available when you need them. 2. Practice spatial reasoning skills. Spatial reasoning does not come naturally to me, but I’ve practiced these skills to become an expert. Every time I write a bit of code, I work to build a mental model in my head.3. Draw a picture instead of holding something in your head. Drawing a simple picture or diagram can help you plot out your ideas and situate them contextually. Similar to writing things down, drawing a picture helps you solidify your thoughts and share them with others.4. Reason about the data. Every system is made up of code and data. If you are only looking at the code, you're missing half of the picture. Ask yourself: where is the data stored? What does it look like? Where does the data start, go and end up? How is the data transformed along the way?5. Read a lot of code. This is what most people advise, but it’s really important. I put reading of code into my calendar, and I go to Stack Overflow and other open source codebases. The best advice I’ve heard here was from a language teacher: Read it once, ignoring the things you don’t know. Read it again, noting the things you don’t know. Then, look up everything you don’t know. Finally, read it again.No matter your background or experience, it’s possible to go from a junior to senior software engineer– just as long as you have a solid, big picture understanding of programming languages. Shanea Leven is the Founder and CEO of a developer platform called CodeSee (https://codesee.io/). CodeSee helps developers master understanding of codebases. We visualize in real-time how a software system works and fits together, so developers — and anyone else — can onboard more easily, plan more reliably, and ship features faster and better. Shanea has spent many years as a technical product leader building platforms for developers at Google, Docker, eBay, Cloudflare and various startups. She is also the chair of Executive Women In Product.
@Shanea, thank you for sharing your wisdom! I've been thinking about this topic lately, including getting a second degree in CS. For now, I'm erring on online courses on C and theory, but the academic part of me longs for good ole campus time. One of my biggest knowledge gaps is the right vocabulary for a white board type setting, and now I'll be adding practicing mentally designing large systems :DI'm curious, will CodeSee also support testing frameworks that Eng or QA might develop or use? The tool definitely sounds like something that would help us write test cases and find new cases on top of its other benefits, even if testing isn't explicitly included. That seems to be one of our biggest time sucks. I'll tell my team about CodeSee :D
That is definitely on the roadmap! Email me Shanea [at] CodeSee.io I'd love to talk to you about what you have in mind! Or give you access to our beta and you can try it out and see if it helps
Awesome, I will! :D
Thank you for sharing this advice! I will definitely be coming back to it
@Shanea thanks for sharing! @Aeryn - I think you'll find this helpful.
Thank you for this Shanea! There are some really useful and practical tips in here. I'm about 10 months into my first developer job after self-teaching myself into the field as a career change, and I'm finally mentally ready to start studying on my own again so I can keep leveling up.+1 to writing and drawing! I use that strategy a lot when I find myself struggling to build that mental model.Also, I'm totally writing this down:"Read it once, ignoring the things you don’t know. Read it again, noting the things you don’t know. Then, look up everything you don’t know. Finally, read it again."
Hi Shanea, thank you for sharing! It’s so inspiring to see this many self-taught developers here! I’m about to start learning Python due to a fin tech tool I’m creating. As a non-technical founder, I will still need some high-level understanding of the product so, well, here goes nothing. Any feedback on the best programming language(s) for fin tech using blockchain will be greatly appreciated!
Unfortunately this isn't my personal area if expertise but I would join a few communities online and ask around
Hi Shanea,Thank you for sharing!! This reminds me of my current journey on possibly becoming a software developer. Due to a recent job loss, I thought that this can be the opportunity to get into software development. However, I was in the very beginning stages of coding so I needed more time to learn.I’m currently a payroll administrator & I am working on building an employee scheduling & time tracking web application. This is my first project ever so there is a lot of learning happening on my own. I will definitely incorporate your technique of reading, ignoring, reading again, etc into my learning style.Thanks again for sharing 😊