From Lawyer to Engineer at Google: How to Switch Careers and Learn New Skills

Five years ago, I was a corporate lawyer with over a decade of experience in commercial litigation and contract negotiation. Today, I‘m a software engineer at Google. As I reflect on my unlikely journey from the courtroom to the keyboard, I‘m convinced that pivoting into technology was one of the best decisions I‘ve ever made, both professionally and personally.

But it certainly wasn‘t easy. Transitioning into software engineering in my mid-30s, without a computer science degree, felt daunting and improbable at many points along the way. I had to confront deeply ingrained doubts about my own capabilities, push myself far outside my intellectual comfort zone, and persevere through countless moments when I felt hopelessly stuck.

My goal in sharing my story is not to present my path as a cookie-cutter template – everyone‘s ideal career trajectory is unique. Instead, I aim to distill some of the most important mindset shifts and strategies that I believe can help accelerate anyone‘s journey of reskilling into a technology role they love, at any stage of their professional life.

The Growing Demand for Software Engineering Talent

Before diving into the specifics of my career change, it‘s worth noting the incredible opportunities that exist in today‘s technology job market. The U.S. Bureau of Labor Statistics projects that employment of software developers will grow 22% from 2020 to 2030, much faster than the average for all occupations.[^1] In 2020, the median annual wage for software developers was $110,140, more than twice the median wage for all workers.[^2]

Perhaps even more encouraging for career pivoters is that a large percentage of professional programmers do not hold computer science degrees. A 2020 HackerRank survey of over 116,000 software engineers from 162 countries found that nearly a third had not learned to code through formal computer science education.[^3] Instead, many developers are self-taught or have gone through alternative programs like coding bootcamps.

This data underscores that with the right learning approach, mentorship, and grit, almost anyone can transition into a fulfilling and lucrative software engineering career. The path I carved from law to tech is perhaps less conventional, but it‘s becoming increasingly well-trodden.

Overcoming the Mental Barriers to Change

Before we dive into the tactical game plan, it‘s crucial to address the most common mental blockers that prevent people from even contemplating a major career change in the first place:

1. Fear of failure and self-doubt

The little voice in our head saying "what if I‘m not smart enough to learn this" or "it‘s too late for me to start over in a new field" can be paralyzing if left unchecked. Learning to notice and neutralize these creeping thoughts is essential.

When doubt arose, I found it helpful to reconnect with the reasons behind my career shift. For me, it was a deep curiosity about how software is built and an irrepressible urge to create. I knew I‘d always regret not taking a shot. Anchoring myself in my purpose made it easier to accept that stumbles on the path were inevitable and worth pushing through.

2. Unhelpful comparisons and unrealistic expectations

It‘s easy to fall into the trap of comparing our beginner-level coding skills to those of experienced engineers who may have been honing their craft since their teenage years. These unfair comparisons can make us feel permanently behind before we even begin.

Two mindset reframes were game-changing for me:

a) Focusing on consistent incremental progress rather than huge leaps. Trusting that tiny gains would compound over time.

b) Defining success as the continual practice of learning and problem-solving, not the achievement of specific milestones by arbitrary deadlines. Detaching my sense of self-worth from external accomplishments.

3. Lack of clarity on what to learn and how to learn it

The sprawling landscape of programming languages, frameworks, tools and platforms can feel overwhelming. It‘s tempting to jump from tutorial to tutorial without a clear roadmap, never going deep enough on any one topic to reach a point of practical utility.

After an initial period of floundering, I realized the importance of setting clear learning goals aligned with the roles I was aiming for (in my case, a full-stack web development position), crafting a structured curriculum based on those goals, and measuring progress through building projects of increasing complexity. Having a north star to guide my learning made it less likely that I‘d get lost in the weeds.

The Power of Effective Learning Strategies

With the right mindset in place, I turned my attention to implementing evidence-based learning techniques known to promote efficient skill acquisition and long-term retention. A few of the most impactful strategies in my experience:

1. Deliberate practice and spaced repetition

Psychologist Anders Ericsson, a leading expert on expertise, emphasizes the importance of deliberate practice – focused, effortful training on the edge of one‘s comfort zone – for achieving mastery.[^4] Rather than passively watching coding tutorials, I made sure to actively practice recalling and applying new concepts through hands-on exercises, gradually increasing the difficulty and scope.

I also leveraged the power of spaced repetition, a technique for distributing practice over time to combat the natural forgetting curve.[^5] By revisiting topics at increasing intervals (e.g. 1 day, 3 days, 7 days, etc.), I was able to move knowledge into my long-term memory more reliably.

2. The Feynman Technique

To stress-test my understanding of new concepts, I used a method popularized by Nobel Prize-winning physicist Richard Feynman.[^6] I would attempt to explain ideas like closures or recursion in plain language, as if teaching them to a non-technical friend. The process of articulating concepts from first principles and filling in any gaps in my knowledge deepened my grasp of the fundamentals.

I also wrote technical blog posts synthesizing what I was learning. This had the added benefit of creating a paper trail to demonstrate my knowledge to potential employers.

3. Collaborating with others

Pair programming with a mentor or study buddy was incredibly valuable for getting unstuck, being exposed to different problem-solving approaches, and preparing for the communication aspects of real-world software engineering. I also became active on #CodeNewbie Twitter and freeCodeCamp forums to learn alongside a vibrant community of learners.

Research has shown that collaborative learning activates several cognitive mechanisms that enhance understanding, like the self-explanation effect (solidifying knowledge by explaining it to partners) and co-construction (building on one another‘s ideas to fill in individual knowledge gaps).[^7]

4. Timeboxing and habit stacking

To ensure consistent progress amidst a busy schedule, I timeboxed my daily study sessions using the Pomodoro Technique, alternating 25 minutes of focused work with 5-minute breaks.[^8] I also leveraged the power of habit stacking, anchoring my coding time to existing routines like my morning coffee or evening wind-down.[^9]

These techniques helped me maintain momentum and avoid procrastination even when my motivation dipped. The steady drip of small wins and the satisfaction of showing up each day, no matter what, sustained me through the inevitable learning plateaus.

Building a Standout Portfolio

As I progressed in my studies, I realized that demonstrating my skills through a portfolio of practical projects would be crucial for standing out to potential employers, especially without a traditional computer science degree.

Some of the most impactful projects I built during my career transition journey:

  • A web app for visualizing and filtering data on U.S. immigration trends, which showcased my ability to work with large datasets and create interactive user interfaces using React and D3.js.

  • A machine learning model for predicting flight delays, trained on historical flight data using Python and scikit-learn. This project demonstrated my proficiency with data preprocessing, feature engineering, and model evaluation techniques.

  • A blockchain-based supply chain tracking system, implemented in Solidity and deployed on a test Ethereum network. This dApp (decentralized application) highlighted my understanding of smart contract development and cryptographic primitives.

  • An open source NPM package for generating PDF invoices from HTML templates, which gave me experience with the full lifecycle of maintaining a software library, from writing documentation to responding to bug reports and feature requests.

When selecting projects, I optimized for relevance to my target roles, technical challenge, and "wow factor" – the ability to impress an interviewer in a concise demo. I also open sourced the code and wrote detailed READMEs to make my work more accessible and searchable.

Having this tangible evidence of my abilities to point to made a night-and-day difference in my job search. It gave me a confidence boost walking into interviews and equipped me with concrete stories to share about my problem-solving process. Several interviewers even commented that the breadth and depth of my portfolio rivaled that of far more experienced candidates.

Leveraging Existing Strengths and Experience

One of the biggest mistakes I see career changers make is completely discounting their prior professional experience. The reality is that we all bring a unique blend of hard and soft skills honed in previous roles that can meaningfully accelerate our transition into tech and boost our impact once we get there.

For example, my legal background instilled strong written and verbal communication skills that helped me collaborate more effectively with non-technical stakeholders and excel in the behavioral portions of job interviews. My stints in adversarial negotiation and high-pressure litigation also lent me a certain unflappability that was an asset during technical whiteboard sessions.

Other less obvious transferable strengths might include:

  • Research abilities that enable you to efficiently get up to speed on new technologies and problem domains
  • Presentation skills for clearly conveying complex technical concepts to diverse audiences
  • Leadership experience for mentoring junior developers and interfacing with cross-functional partners
  • Domain expertise in fields like finance or healthcare for building innovative vertical-specific applications

The key is to practice identifying these portable gems from your background and translating them into terms that are compelling to hiring managers and future colleagues. Many of the most impactful engineers I know are those who combine deep technical chops with a broad base of interdisciplinary knowledge.

Committing to Continuous Growth

My learning journey didn‘t end the day I accepted an offer to join Google as a software engineer. In many ways, it had only just begun. I quickly discovered that building a successful technology career means committing to lifelong skill development just to keep pace with the accelerating rate of change in the industry.

To stay on the cutting edge, I‘ve made a habit of:

  • Reading tech blogs and listening to podcasts to absorb new ideas and get exposure to how more senior engineers approach problems
  • Picking up a new programming language or framework each quarter to expand my versatility and gain an understanding of different language paradigms
  • Contributing to open source projects to learn best practices from veteran maintainers and get experience with distributed collaboration workflows
  • Attending conferences and meetups to soak up knowledge from domain experts and form relationships with talented potential collaborators
  • Distilling my learnings by writing, speaking, and mentoring to give back to the community and clarify my own understanding

This continuous learning mindset has opened doors to exciting projects at the vanguard of emerging technologies like machine learning and augmented reality. It‘s also made me realize that even the most accomplished technologists are perpetual works in progress. We‘re all wading into uncharted waters and figuring it out as we go along.

Perhaps the most important skill of all is getting comfortable with discomfort – leaning into the uncertainty of not having all the answers and trusting that consistent, incremental efforts will eventually yield a breakthrough. It‘s this embrace of the beginner‘s mind that will fuel ongoing growth throughout a technology career.

You Belong in Tech

If you‘re contemplating a transition into software engineering, know that you‘re not alone in your doubts and struggles. Every single developer I know, from the most junior to the most luminous, has grappled with imposter syndrome and flashes of fear that they‘re in over their head.

The reality is that the technology field is in desperate need of more diverse problem-solvers from a wide range of backgrounds – people with the drive to dive into the unknown, the humility to learn from their stumbles, and the audacity to challenge the status quo.

Equipped with the resilient learning strategies outlined here and an unwavering belief in your own capacity for growth, you have everything you need to carve out a fulfilling niche in this endlessly fascinating domain.

The myth of the "born genius" programmer is just that – a myth. Behind every awe-inspiring engineering feat or polished app is a former beginner who took a leap of faith, sought out the right mentors and resources, and kept showing up day after day to put in the hard work of honing their craft.

You already possess a unique constellation of passions, skills, and life experiences that will enrich the collective intelligence of the tech community. We need your fresh perspective and inimitable humanity as we work to build a more connected, creative, and equitable world.

So take that first small step with the knowledge that you deserve to be here, coding alongside the most capable minds of our generation to shape the future. I‘ll be cheering you on as you embark on the most important upgrade of all – unlocking the upper limits of your own potential.

[^1]: U.S. Bureau of Labor Statistics. (2021, September 8). Software Developers, Quality Assurance Analysts, and Testers : Occupational Outlook Handbook. Retrieved from https://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm

[^2]: U.S. Bureau of Labor Statistics. (2021, September 8). Software Developers, Quality Assurance Analysts, and Testers : Occupational Outlook Handbook. Retrieved from https://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm

[^3]: HackerRank. (2020). 2020 Developer Skills Report. Retrieved from https://research.hackerrank.com/developer-skills/2020

[^4]: Ericsson, A., & Pool, R. (2016). Peak: Secrets from the new science of expertise. Houghton Mifflin Harcourt.

[^5]: Kang, S. H. (2016). Spaced repetition promotes efficient and effective learning: Policy implications for instruction. Policy Insights from the Behavioral and Brain Sciences, 3(1), 12-19.

[^6]: Farnam Street. (2021, May 7). The Feynman Technique: The Best Way to Learn Anything. Retrieved from https://fs.blog/2021/02/feynman-learning-technique/

[^7]: Sears, D. A., & Reagin, J. M. (2013). Individual versus collaborative problem solving: Divergent outcomes depending on task complexity. Instructional Science, 41(6), 1153-1172.

[^8]: Cirillo, F. (2006). The pomodoro technique (the pomodoro). Agile Processes in Software Engineering and, 54(2), 35.

[^9]: Clear, J. (2018). Atomic habits: An easy & proven way to build good habits & break bad ones. Penguin.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *