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.