S4E2 - DSA doesn't adequately prepare you

Show Transcript:

Many software engineers over-optimize their study and interview prep for Data Structure and Algorithm (DSA) Platforms like Leetcode/HackerRank, and while they are fantastic learning tool - they're not a good indicator of a real-world developer. A developer's Leetcode or HackerRank score often has little to do with their ability to deliver in a commercial environment, and indeed over-focusing on DSA platforms can mean a considerable skill-gap when it comes to working in a business and it can cap your employability.

When we talk about a real-world developer, they create products or services with a client or customer in mind. They're not solving a problem for the sake of solving one. It's no longer an academic exercise. They need to think of something or somebody beyond themselves.

There are serious considerations given to their work in terms of:

  • Uptime/availability

  • Security

  • Robustness

  • Data and Input validation

  • Error-handling

  • Code Quality

  • Meshing solutions with existing System Architecture

  • Compliance or Legal liability

  • Product / Problem Domain Knowledge

    ...that Leetcode and HackerRank do not account for, nor care about.

DSA vs the Real World

When we look at DSA Platforms:

  • The data is always perfect and with clear bounds

  • Execution happens in a sandbox, sequentially (e.g. no parallel processing)

  • Requirements are often quite clear

  • Test cases verify functionality

  • The problem domain is isolated, and doesn't require much software architecture or design

When we build software for customers or clients, those training wheels don't exist. It can be pure, unbridled chaos

  • Data will be a catastrophic mess

  • Execution happens in concert with many complicated moving parts, all being accessed concurrently

  • Requirements will be vague, with an acceptable solution crossing many layers (UI, BLL, DAL, DB, etc...)

  • Test cases or clear Acceptance Criteria may not exist

  • The feature or problem domain you're being asked to implement might require a lot of critical (re)architecture or design research in order to implement.

While DSA is an important part of Software Engineering, it's just that - a part. There are many other aspects like the ones mentioned above that will be part of your acceptance criteria. You won't just be working on pure algorithmic solutions. You will spend a LOT of time debugging, bug-hunting, technical writing, architecting and re-architecting solutions, testing that you're not breaking anything else in the system with your implementation and of course keeping a complicated software systems running. DSA only prepares you for a subsection of that.

Unforeseen complexity

In the real-world, you'll come across problems that DSA cannot help you with.

Resource Usage

Accessing Infra like database, disk, 3rd party APIs. Network can temporarily drop, disks can fill up, dynamic IPs can rotate, DNS can just happen, rate-limiting from accessing too much, too fast, or beyond your usage limits. API Keys or Licenses expire. Connection details like passwords or secrets can be rotated. Accounts can be locked/deleted from going beyond a platforms fair-usage limits.

Caching

Syncing issues and invalidation. Stale Data. Under or Over-caching - both of which can be extremely problematic

Parallel Processing

Concurrency, Parallelism and Multi-Threading. Doing more than 1 thing at once can result in all sorts of weird, almost undetectable issues - especially when we involve shared resources, or incorrectly using non-threadsafe constructs.

3rd Party Code

Authentication/Authorization/Logging/Validation Middleware, SDKs, 3rd Party Libraries. Packages can become unpublished and gone forever. 3rd Party Devs/Maintainers can pivot a library's usage, License or commercial TOS and there's nothing you can do. Code disappears, Security vulnerabilities arise, etc. A whole lot of code your system depends upon, that you have NO control over, can cause you all sorts of grief.

Deliberate mishandling

Malicious Actors taking advantage of security vulnerabilities. Well-intentioned users repeatedly performs destructive actions. Scripted exploits. Not every user of your work is a good one!

Interpersonal issues

Working with other developers can mean both merge and interpersonal conflicts, differences in opinion over implementations, designs, code-style, etc. Solo algorithm crafting does not help you here, and you'll need to develop your soft-skills to navigate these tricky situations.

It's not all doom and gloom though...

We talk about a lot of problems that DSA Platforms don't prepare you for, but there's also a lot of positive aspects of real-world software engineering that they can't match either.

Professional Pride

Pride of solving an actual person's needs and making their life easier. Software is a tool to enable people do things, can helping them achieve what they need to can be a personally empowering experience.

Problem and Product Domain knowledge

Algorithms and Software Engineering don't exist in a bubble, and you'll be tasked to apply them in context. Usually that context is within a defined industry or sector like Health, Finance, Insurance, Marketing, Video Streaming, Audio Engineering, etc.

As time goes on, you absorb deep information and wisdom related to that context, making you a specialized expert in the field. Depending on the field and your level, this can have HUGE positive impacts on your earning potential.

Teamwork makes the Dream work

Software Engineering is a team sport, It's not just a solo academic exercise. Practicing your craft in it "in the real world" means you get to works with all sorts of people across all sorts of functions - not just developers. Getting access to the PRoduct, Business, Marketing, Sales, Design, QA, etc.. slices of the Pie can pique your interest and help you broaden your overall understanding of how best to serve the business and customer, as well as sharply improving your career potential.

Upskilling apart from DSA Platforms

Build projects. LOTS of them!

Create End-to-End applications that have a purpose. You'll need to think beyond yourself or the exercise, and build something that someone can use to solve a problem in the personal/professional lives. Good software accelerates and has REAL function, not just existing as a siloed thought-experiment.

We talk more about building your portfolio out here: Power Up your Portfolio

Summary

DSA Platforms don't prepare you for real-world software development. They only focus on a highly-specific (and easily measurable) subsection of Software Engineering. To increase your employability, career and earning potential - you NEED to be building actual applications and services.

Previous
Previous

S4E3 - Industry Insight: AI in Recruiting with Melica Moshiri of SkillTorch

Next
Next

What makes a Senior Developer? Abstract Classes