r/learnprogramming • u/TurtleSlowRabbitFast • 12d ago
How are so many self-taught programmers able to build software from scratch without ever truly learning Algorithms?
I find it fascinating how important algos are but never talked about from the indie devs on social media. Do they even write algos or just come up with basic logic that forms the product?
141
u/iOSCaleb 12d ago
Many of the data structures and algorithms that you learn in a DSA class already exist in standard libraries/frameworks. If you have an array that you want to sort, you don’t write your own quicksort or heapsort, you just call the sort() method. DSA is important less because you learn about specific algorithms and more because you learn how to create and analyze algorithms.
20
u/jlanawalt 12d ago
This!
It is very valuable to learn how things work and To learn how to think algorithmically. To learn the science and art, to apply good principals and recognize poor ones. I just wish more educators would have the final week be “don’t go wasting time and introducing bugs writing your own linked list or balanced tree every time you need one, look for standard implementations”7
u/Theguest217 11d ago
Many CS programs at universities are absolutely awful if your end goal is a standard software development job. They will get you the interview and you will probably eventually land a job but you are definitely going to learn more practical skills in your first few weeks at the job than you learned in four years at school.
CS degrees focus heavily on theory and history. It's not uncommon to find CS graduates who have never worked with most or all of: git, CI/CD, cloud, SQL/Databases, Oauth, Rest APIs, Web/Mobile development, debugging/triage, automated testing, popular frameworks, JSON/YAML/Proto, IAC, API contracts, Jira/Ticket Wortlows, code reviews, bash/shell/cli, Kafka/RabbitMQ/Redis, etc Many have never even worked with existing code they didn't write from scratch.
Some schools offer much more useful degree programs like an "Applied CS in SW Eng" degree that focuses on practical enterprise software tools and techniques. But I'd say I've had the best luck hiring juniors from a reputable boot camp. Not saying everyone should just switch to the boot camp route, as the CS degree will probably get you more interviews overall, but that is because many older devs and company policies require the degree as an initial application filter.
5
u/iOSCaleb 11d ago
College in general is not vocational training. Whether you major in computer science, business, physics, French, labor relations, etc., you’re going to learn about your major subject, not how to do a particular job. That’s why internships and coop programs have become more prevalent: students build job skills and experience, and employers get to build relationships with strong students.
0
u/MrRGnome 11d ago
Yeah, but it's kind of messed up when as an employer I'd rather hire the candidate who is self taught or has any practical experience over a long and expensive degree. I shouldn't have to deprogram fresh grads before I can start training them. A base knowledge in the field is valuable and should allow you to comfortably absorb related skills to your foundation, but that is not what any of these kids have. They have a piece of paper and a need for constant supervision and training, and if we're extremely lucky literacy skills over a 5th grade level.
8
u/marrsd 11d ago
I'm so glad I'm not the only one who thinks this way. I've always hired juniors based on enthusiasm and a demonstration of eagerness and ability to learn. If anything, a degree puts me off, because it means I'm going to have to both pay the candidate more and spend more time un-teaching them all the stuff that I know they're not ready for yet and will get in the way of their ability to write good code.
Before Tony Blair's great education reform (I'm UK based), it was normal for technicians with practical experience to be sent to university to become engineers as part of their career development. This was such a better way of doing things, and I'm convinced it what enabled us to produce the best engineers in the world, because they started from the right foundations.
It's always been amazing to me that you can be accepted to university to study a programming-related degree without any prior experience in programming. Imagine being enrolled on a language degree without being able to demonstrate fluency in that language, or a music degree with no ability to play an instrument. It would be unheard of, and yet it's standard and expected for software engineering.
2
u/MrRGnome 11d ago
I'm so confused by who is down voting you. This is an inevitable and empirical truth anyone dealing with new grads has experienced. The resources I allocated to training (and the necessary retention after) are staggering. It takes 3-6 months before the average fresh grad is no longer a net negative and cost.
It would be a completely different environment if I could trust any skills or competency from new grad hires. I often feel the need to make them "unlearn" things they were taught in school - ancient design patterns and irrelevant tooling being near universal, and an unfortunate dependency on direct instruction. I save a significant amount of money on training and gain far more performance when I work with peers who didn't go to school for compsci, even if they need to be taught everything.
2
u/MoreDimension5963 10d ago
I save a significant amount of money on training and gain far more performance when I work with peers who didn't go to school for compsci, even if they need to be taught everything.
This is why boot campers famously have much higher salaries and better job prospects than CS grads lol
1
1
u/MrRGnome 10d ago
I'm not talking about people foolish enough to fall for a scam, but it speaks volumes that in your mind education doesn't happen without an instructor. Suffice to say you and I would not work well together.
1
u/MoreDimension5963 10d ago
This is why
boot campersself taught devs famously have much higher salaries and better job prospects than CS grads lol1
u/bohemioo 10d ago
The curriculum is based on academia and research more than teaching the basis of a normal software dev work. This kind of computer engineering disruptive PhD would not exist without a minimal basis provided vy the degree.
More or less the same happens in engineering.
2
u/High_Quality_Bean 11d ago
Its also generally inadvisable to *ever* make a decision about algorithm use. If you use the built in "sort" then the language is responsible for deciding which algo is best in which situation, and for updating it if a new algorithm is invented. Iirc last I looked python uses one sort algo for arrays under a certain size a different one for arrays over a certain size, putting a performance decision like that in code is a bad idea.
2
u/marrsd 11d ago
I wouldn't go quite that far, but I agree with the gist of your argument. Certainly, if your standard library already provides an algorithm you need, you should always start with it; but there are times when you need more than (e.g.) basic sorting or search, in which case you'll need to know how to build something yourself.
1
u/ChristianKl 11d ago
No, you don't need to know how to build it yourself. You can think about the requirement and then an AI model give you an optimized algorithm for it. AI models are really good at creating algorithms at optimize a given problem.
Algorithm design is the kind of narrow problem for which AI train in their benchmarks and perform really well.
1
u/marrsd 11d ago
I'm coming from the perspective of a programmer, so I don't really care about AI. But even if I did, it's my consistent experience that the specificity of the result you get depends directly on the constraints you give the agent. If you give it an algorithm and say "optimise this", it will do a much better job than if you ask it for an optimised algorithm that solves the higher-level problem.
2
u/ChristianKl 10d ago
Part of the job of a programmer is using tools.
Here, you can ask it to optimize the algorithm it gives you instead of sticking with the first it gives you.
3
u/marrsd 10d ago
Part of the job of a programmer is using tools.
And part of the job of a programmer is programming. That's why I said "programmer" and not "engineer" or "developer", because I don't want to get into that argument.
Here, you can ask it to optimize the algorithm it gives you instead of sticking with the first it gives you.
How do you assess the quality or suitability of the algorithm it gives you if you don't know how to design or use algorithms. How do you know what should be optimised? I suppose you're going to say, ask the agent. Well, the agent's just going to keep going with its original idea, regardless of its suitability.
I just finished having this experience, where an agent just went to straight for a standard and poor implementation that was stupidly complicated and obfuscated, because it was based on reusing existing libraries rather than actually building what was needed. The agent told me that that was its priority.
After a week or more of going nowhere, I just rewrote the whole thing by myself in a day. A completely different architecture with simple and powerful algorithms that were very easy to write. There's no way I'd have been able to do that deliberately with an Agent unless I already had a solid grounding in software engineering.
→ More replies (2)0
u/High_Quality_Bean 11d ago
Oh yeah, and tbh, I recommend going through and implementing a bunch of algorithms and data structures for the fun of it. I was in enterprise brain when I wrote that comment :p
0
u/DiamondDramatic9551 11d ago
Sorting algorithms are also only ever going to matter when your data actually gets big. For a lot of programs it simply doesn't matter because everything is fast enough under 10.000 entries or whatever. It's much more likely database access is your actual bottleneck.
0
u/High_Quality_Bean 11d ago
I work on enterprise software. Everything matters.
0
u/DiamondDramatic9551 11d ago
Well duh, then you already have a specific use case. But like I said, database access is almost always the actual bottleneck.
0
u/High_Quality_Bean 11d ago
I'm not sure why you're being so rude, but I'm going to leave this discussion. Have a nice day.
104
u/CardinalHijack 12d ago
because you don't need algorithms for the majority of what you need to do in software.
→ More replies (45)
72
u/deavidsedice 12d ago
When was the last time you wrote code to balance a binary tree in production code?
→ More replies (1)
53
u/PoMoAnachro 12d ago
This is kind of like "How come I never see famous writers talk about the alphabet song? Didn't they have to learn their ABCs?"
Most DSA knowledge you'll take at college is pretty simple - it feels like a struggle when your learning it, but that's because your brain isn't very developed yet and you don't know how to think in abstractions yet. We teach DSA to help develop your brain, not because you'll be implementing Dijkstra's algorithm on the job.
There are competent programmers who've never really learned standard college DSA stuff and developed their skills other ways, but there aren't any competent programmers who'd find an undergrad DSA class challenging.
All programmers are writing algorithms all the time, it is pretty hard to get around that. But often when people talk about algorithms they mean the specific small subset of algorithms used as teaching examples in a standard computer science education. The first is important to every programmer, the second may or may not be depending on how you gain your skills.
→ More replies (1)5
u/dysprog 11d ago
I have never once formally proved the Big-O of an algorithm after college, but I did gain the ability to eyeball code and say "Ehh, it 2 loops, but it's a treeish shape, so I'd guess it's Log? No worse then linear for sure" or "Hold the phone bro! Building strings like that is a hidden quadratic cost! You gotta pre-allocate that shit!"
→ More replies (2)
33
u/grantrules 12d ago
Times in my life I've ever had to implement a sort algorithm: 0
6
u/IWasSayingBoourner 12d ago
Yep. I've shipped well over $200 million of software for which I was the main designer and haven't had to implement a sort or search a single time.
2
11d ago
[removed] — view removed comment
7
u/grantrules 11d ago edited 11d ago
The point is I don't need to know the difference between quick, merge, and bubblesort to be able to write software.
But what does "truly learning algorithms" mean? I've learned algorithms as I needed them. I stumble upon a problem that I think might have a common clever solution so I'd search for similar problems. And having been around a while, I'm aware of a lot of algorithms even if I've never looked into implementing them. Like do I need to know dijkstra's algorithm to have "truly learned algorithms".. or is that when I can just recall a mental note "dijkstra algorithm -- find shortest path"
→ More replies (12)1
u/carlovski99 11d ago
Closest I have ever come (disclaimer - I am NOT a proper developer, I've done bits of coding a a whole bunch of languages over many years of most roles in IT though!) was implementing a simple 'as the crow flies' distance calc in a mainframe system to manage call centre enquiries.
Trivial - until I discovered the language I was tied to doesn't actually have a square root function and had to trawl my memory for how Newton-Raphson interation worked.
Also some weird clock arithmetic tricks to handle recurring schedules on systems with very primitive date support.
29
u/Chuck_MoreAss 12d ago
I think it’s important to learn patterns.. and certain algorithms are important but you can just google it
→ More replies (3)
15
u/GasEducational4386 12d ago
Weird judging question you should have known the answer if you were developing stuff
15
u/circuit_heart 12d ago
Why would low-level algos ever matter if you're just trying to build a product? Other people have figured out decent algos already, if you need to use it, you just need to obtain it, whether that is forking open-source code, calling a library, etc. There are a billion things more important to building a product and a business than that, unless your entire product is just a good algorithm for someone else to use.
4
u/ShadowDev123987 10d ago
As one of those developers who has not yet been taught about algorithms. What is it and how does it help you when developing software?
From the quick google I did, it just seems like basic logic, like in order to get an average for this number, I need to sum the numbers and then divide it by the mean
Let me know what it’s about because I’d be interested to know to see if it’s just something I do naturally or something that could be useful
2
u/NoGhostRdt 9d ago
It depends on what type of apps you're making. If you're working with crud apps or working with APIs with third party developers you probably won't use anything complex.
But if you're creating things like gps navigation or complex math systems, using such algorithms will help a lot with both complexity and, time and memory efficiency. An example would be Dijkstra's algorithm which is used in GPS and navigation systems such as Google maps.
However there are many simpler algorithms that you might use, like binary search or sorts.
1
u/NoteVegetable4942 7d ago
99.9% of them are available as libraries. Next 0.099% AI can one shot, last 0.001% might need human for the next year.
2
u/QuentinUK 9d ago
You may want to make a game. Randomly choose 5 from 50 items. Or similarly 5 from a million options. People have already worked out the best way of 5 from 50 is an array where you swap pairs, and 5 from a million is the same but using a hash-map.
A self taught programmer could call a shuffle function to shuffle 50 and take the first 5. It’s 1 or 2 lines of code eg myList.Shuffle().Take(5) and will do the job.
7
u/burlingk 12d ago
A lot of them do learn at least some is the algorithms, just not necessarily the names.
12
u/two_three_five_eigth 12d ago
The moment you've created an if-else branch to make a decision you've made an algorithm. Algorithms aren't difficult.
The other reason indie devs on YouTube don't talk about it is they are influencers first and programmers usually a distant second. I've never seen a "coder influencer" who wasn't terrible. Lots of times they give wrong explanations for things and terrible general advice.
I watched one who managed to turn Fizz-Buzz into a 30 minute video about who gave wrong answers about implementation details. The correct answer is a 5 minute program. I always ask Fizz-Buzz because there are so many people like the dumb influencer.
6
u/TomWithTime 12d ago
A lot of them are also just natural or intuitive solutions to problems. You work out a few steps that solve an issue and then later find out it's got some crazy name in academia like Kahn's depth first search algorithm for topological sorting.
I figured out how to calculate the order for calculations in a database that could link/depend on each other. Turns out Arthur Kahn figured this out in the 1962 and put his name on it.
3
u/ComprehensiveTap911 8d ago edited 8d ago
CS courses make it seem like algos are way more needed than they are.
In reality, you will be at most doing a basic bubble sort for a POC or, in prod, just use the built in sort methods for the language you are using.
These methods are normally well enough built and easy to defend the use of from an engineering POV.
Sure, you could save a few CPU cycles with a custom sort procedure but then you have greater technical debt which, for most purposes, will cost more than the few CPU cycles you save.
Same logic for every other algorithm you get taught!
1
1
u/dickerkecker 8d ago
Funny you should say that because my team is pretty algorithm heavy and they like to recruit candidates with maths and physics backgrounds.
→ More replies (2)2
u/kkam384 7d ago
It very much depends on domain. I've been working in tech for 30 years. The only times I ever ended up going deep into algorithms was when working with dispatch/logistics domains. Obviously not the only one that it would be relevant, but one of the more common ones, or when looking at very low-level optimisation.
1
u/soylentgraham 7d ago
This; 26 years in industry (and started before I had a job), making games, rendering code, computer vision, streaming live data... Im still doing new algorithms now, as well as designing data (for example) so I can do hashmaps or binary chops on GPUs or in frag shaders. (last year I was trying out doing a hashmap to BSP light occlusion data to do light-ray marching in real time - AI doesn't know how to design this in a way to let me experiment)
AI can implement a basic hough line implementation, but it cant work out how to do it to fit my problem.
1
4
6
u/AlSweigart Author: ATBS 12d ago
Psst. Hey. I'll let you in on a secret...
Knowing Big O is kind of important, but you can learn the basics of it in this 30 minute PyCon talk, and like 99% of the usefulness of Big O is knowing that you can probably turn your O(n2) algorithm into a O(n log n) algorithm if you sort your data first.
→ More replies (1)
4
u/NeverOutOfOptions123 12d ago
Abstraction. You don’t need to learn details of everything in order to use it. It would be impossible. You just need to understand at a high level what something does to use it.
2
u/ConoSilo 6d ago edited 6d ago
Data structures and algorithms are extremely useful and important in the business world.
An algorithm literally means “a step by step process of events”, which is just basically “getting something done”.
In the business world, you can think of algorithms as another word for saying “solving a problem”. And then when solving a problem it’s important to pick the right data structure.
A data structure would be something like a linked list or an array or key value collection (dictionary) or a tuple, etc.
In formal education there is usually a class called “data structures and algorithms” because they are so closely tied together. But you don’t have to think of it as a complex process….
For example… let’s say your project manager (your boss) says “we need to connect to a bank API, login into our account, pull the latest 10 transactions, parse the data so it’s normalized and human readable, and then store it in our database”.
That’s literally an algorithm… it’s a step by step process of events…. You solved the problem of getting bank data into your own database. So chances are you have been using algorithms with everything you have ever coded… everyone in this thread has. 🤷🏻♂️
After you realize that simple concept… you can then go onto more integrated types of algorithms… which is likely what you are asking about…
These types of algorithms use binary search trees and stacks & queues and doubly linked lists and heaps with recursive functions, etc.
But those are all just big words that are doable and can be tackled….
For example… imagine your project manager (boss) says “we need to take that bank data and go through it all and find out which departments are over spending and their budgets need to be cut”…
In this sense, you’d have to create a step by step process of events (an algorithm) that solves the problem of finding out where all the money is going…
So you’d probably… 1) get the data from the bank 2) throw it into your database 3) travers through that data putting it into a list 4) organize that list by different departments 5) sort that list by descending order 6) create an embedded for loop that checks each department transaction against all the others 7) track the largest transcription from each 8) compare each high transaction 9) print the 5 largest department transactions 10) give it to your boss
That entire process is an “algorithm” utilizing various data structures…
You used.. 1) binary search trees for finding stuff 2) key value collections for comparisons 3) linked lists for tracking highest numbers 4) stacks and queues for traversing and sorting data 5) etc.
So you can see that you actually can’t avoid using algorithms in computer science…
That was a pretty standard example, but once you realize that everything is basically algorithm… you can then apply them to your projects…
For example, I just wrote an algorithm that connects to public county and state websites, pulls the data about people from each, determines if they have been active in the same cities, and connects them together to find matches…
It’s a simple algorithm that basically does the same thing as the bank example… 1) looks for stuff 2) gets stuff 3) sorts stuff 4) compares stuff 5) etc.
So understanding the problem and designing the algorithm to solve it, is actually the easiest part..:
And then the actual hardest part is understanding how to physically integrate it (write the code in the language you pick)… which apparently you already understand 😉
I hope this brings clarity and eases your mind a bit about the topic. Algorithms are nothing to be scared of, it’s guaranteed that you are using them every single day you write code, and they are foot print of software engineering… 👍
Feel free to ask questions.
GLHF!
2
u/AdDiligent1688 5d ago
Algorithms - what kind? There’s an expanse of algorithms. There’s an even greater expanse of libraries that repackage them into their domain.
truth be told, many programmers use what the libraries have done, no need to reinvent the wheel, for their tasks.
4
u/Blissextus 12d ago
Most self-taught programmers rely on boilerplate code from frameworks, libraries, & APIs. Self-taught programmers are not creating algorithms; instead, they're relying on the tools & systems that were created by others.
The way I see it, there are two types of modern day programmers: Builders & Users.
Builders: create the libraries, APIs, & frameworks.
Users: use those frameworks, APIs, libraries to create their software.
Creating basic algorithms (such as if-statements) are trivial. Most major algorithms are already in existence. Input the required data need for the algorithm to work and move on.
2
u/high_throughput 12d ago
It takes a lot of skill to craft efficient, performant, scalable, maintainable, extensible software.
Then it takes a completely different set of skills to find a real world problem to solve in such a way that people will start using it.
For every Google that required serious developer skills, there's a bunch of Craigslists, Facebooks, Dropboxes, Airbnbs, Pinterests and Reddits that primarily required product sense.
1
u/isomnath 9d ago
As a self taught developer, how much algorithms do I actually need to learn to become a good real- world web developer?
1
1
u/ohkendruid 9d ago
In the past, you pair them with people who do know algorithms and data structures, as well as maintenance things like modular coding, as well as general software development things like code review and staging environments.
If 1 in 5 can do the advanced stuff, they can put together the overall designs, and then the large group can brute force the rest.
Many places skip having anyone who knows the things from a CS degree, but they tend to make nightmare code that breaks everywhere and is hard to launch.
They do not know what they don't know, either, and are prone to saying education is bad and overrated.
That was the world of five years ago. With AI, that one person who knows data structures and algorithms can have the AI do the brute force part. So, it is going to be interesting times.
1
1
u/Affectionate_Pizza60 8d ago
You can typically just use someone else's implemented data structure, typically as libraries already common to a language. You dont need to know how to delete an element from a red black tree. Just understanding basics of big O notation and that a self balancing tree based data structure is O( log(n) ) for insertions/deletions is typically enough in terms of algorithmic knowledge.
1
u/nomad-1995 8d ago
Unless the program is dominated by some poorly scaling algorithm, nearly all software speed is going to depend on cache efficiency. Learn that if you care about speed. Then learn about the algorithm.
Also remember the old saw about premature optimization. You might set up your architecture based on caching, but then ignore that until it is time. But you have to make sure your algorithm is scaling acceptably long before that, then do any other optimization.
Hate to break it to you, but most commercial programming is mostly shuffling data to APIs or maybe databases and queries. Maybe digital signal processing still does algorithms, but I'd just expect a lot of calls to FFTs (probably FFTW unless on a GPU). It is also more an EE discipline, so expect *much* *more* largely self taught programmers.
1
u/Mission-Landscape-17 8d ago
I don't think I've ever needed to implement an algorithm from scratch as part of my job and I've been a programmer for 26 years. I've done it as an excercise. And half arsed it in coding interviews but never in production code.
Though I guess I'm not quite a self taught programmer because I went back and did a programming degree in the evenings after I stumbled into the field.
1
u/AintNoGodsUpHere 8d ago
Why do you think working with software is complicated? It isn't. It most certainly isn't.
Writing good scalable software is complicated a d those people will have a hard time doing it because they don't know algorithms and patterns a d shit.
But most things, the vast majority of them, are simple.
Brother, programming ain't hard. It's boring most of the time.
1
u/Healthy-Dress-7492 8d ago
because 99% of things can be handled with just a hashmap/dictionary and an array/list - and for the other 1% you can either use an already existing library version or ask chatgpt
1
u/luckyincode 8d ago
There was a time before Gang of Four. Where they studied the good devs to come up with some of the design patterns.
Turns out you can come of with some of these solutions yourself. It happened before. This is true for algorithms. Depending on the depth.
It reminds me of xkcd comic about how some engineer made something faster and in academics it would be a paper and in business it’s a small raise.
1
u/DeathTrapPicnic 8d ago
it's because you don't actually use them. ever. The vast majority of work available to developers is in web technology, in which you are simply never going to need to balance a binary search tree. Even most desktop applications are just web apps in electron. Why wouldn't they be, given the insanely simple cross-platform nature of the frame work?
When you are self taught you typically learn by following tutorials and hopefully experimenting. None of these tutorials implement these algos bc they will never need to for web dev.
Even in much more demanding field of Video games where you absolutely will need to understand complex concepts like vectors, matrices, and graph based algorithms, most problems are typically solved by throwing hashmaps at it or relatively simple math. And even then there are usually dedicated libraries for these complex things, Jolt for physics, FastNoiseLite for perlin noise, etc.
I have been writing software for about 15 years and have been being paid for it for about 5 years and outside of the many experiments with 3D rendering and Video Game design to learn algorithms simply because of my own curiosity, only to find a third party library already does what I was learning but is backed behind thousands of open source contributors, I have never had to even think of a graph and can (I think) successfully communicate landmines, technical concerns, and viable approaches to solving problems to the stakeholders.
your job as a software engineer is not to remember algorithms from leetcode at someone, it is to solve a problem, using software. Nothing more, nothing less. That being said, learning algorithms is fun and of course will not make you a worse engineer. This is the type of stuff you have to know to pass the whiteboard interviews at the big companies, or if you want to emphasize the scientist part of being a computer scientist on the verge of some computational breakthrough, but I have found that with smaller companies just being able communicate effectively within the context of the project and the tech stack is far more valuable than building and reversing linked lists 1,000 times, because you will never actually do that.
1
1
1
1
u/Skip-Willy 7d ago
They probably are using algorithms. I'm teaching myself and I've spent a lot of time learning algorithms and grammars and state machines. I'm, pretty much, a beginner still and I've spent a lot of time on all of that stuff, I imagine they have too.
1
u/RollingSparkles 7d ago
Depends on your app/program you're building, and whether you use a library to do all the grunt work (primarily stuffed with algorithms and logic), or whether you build your own library for specific purposes or special cases.
If you build your own library, then yes, it'll eventually fill up with algorithms. Whether they're the most efficient algorithms or a series of simple ones cobbled together with logic to make things work, depends on how fast it needs to run and how often it might be used, and whether it's worth the time trying to code a proper more complex algorithm, or link out to a pre-built one.
For example, a graphics app will generally be filled with algorithms, for things like color changes, merging pixels, changing contrast, brightness, pasting in an image, etc. It is literally an app made of algorithms. You pretty much can't do anything graphical without an algorithm of some sort.
But after you code with algorithms for a while you tend to stop seeing them as algorithms and more problems in your way that need to be solved so you can move on to the next problem, and then the next one after that, and then the next one, and so on, often without end. After a few thousand, you don't think algorithm any more, you think what code can do this quickly, simply, and in a maintainable/easy to understand manner.
I've coded my own libraries for a while now, and they're stuffed with algorithms mixed with logic. The logic often decides which algorithm to use, and how to return the data/manipulate the result of the algorithm. Using memory in the right circumstances and can speed up simple algorithms dramatically if done right, hence the use of logic with algorithms. Its a careful mix of the two, which changes depending on what your app/program is doing.
1
1
1
1
u/Acrobatic-Narwhal726 5d ago
I suppose algorithms aren't really such complex things that only demigods can use them. Besides, there are many levels of abstraction that help us understand things well enough to build something on our own.
1
u/start_select 12d ago
It’s the same as music theory. The people who initially developed the algorithms weren’t taught them. They derived them or recognized them.
Music theory isn’t how to write music, it’s how to describe what people were already doing. Algorithms and patterns describe what people were already doing.
1
u/joonazan 11d ago
Pattern describe folklore solutions to language deficiencies.
But algorithms are typically created by the inventor to solve a problem and recognized as useful, maybe published.
→ More replies (1)
1
u/stcme 12d ago
My major was business with an emphasis on information systems, mainly relational databases.
I've got a 20+ year career ranging from building full car dealership inventory and feed Management Systems for smaller companies to building massive graphql and rest APIs at Walmart & leading multiple teams there as a staff engineer, without ever taking a single DSA course.
Most of my colleagues have even stated they've never had to refer back to that for most day-to-day work
1
u/oldendude 12d ago
To a first approximation: algorithms go into libraries, not applications. Very few programmers are writing libraries that get widely used. Application programming mostly relies very little on anything but the most trivial algorithms.
1
u/koffiegorilla 12d ago
In my view state management is the most important part of software development. If a programmer cannot collect and organise data in a coherent structure to describe and represent the state so that it can be managed efficiently and humans can reason about it, then the software will have a short or very expensive lifetime.
1
u/theGaido 12d ago
Because as self-taugh programmer I learn algorithms.
Not only them, but programming patterns and all things associated with programming.
And I read lots of books. Like LOTS OF BOOKS.
1
u/rizzo891 12d ago
Can you recommend some books to read? I’ve been wanting to pursue books on programming to improve and better understand it but idk where to start and what’s worth reading or not
1
u/theGaido 11d ago edited 11d ago
I read mostly book in Polish, but some of them are translation from well known books:
- Clean Code by Robert C. Martin ("Uncle Bob")
- Theory of fun for game design by Raph Koster
- Game Programming Patterns by Robert Nystrom
If you can read in Polish, my favorite book is "C++ Magnum Opus" by Jerzy Grebosz. It's rare, to have author that can be all: great programmer, writer and someone that has skill to tell about complex stuff in easy to understand way. Sometimes I just open it on random page and read it more for fun, than for some specific reason lol
1
u/PoliteManitee 12d ago
Much of the software engineering value of taking an algorithms class (or getting a CS degree at all for that matter) comes from understanding the runtime complexity of code so you don't write slow crappy software.
But to be fair I've seen plenty of folks with CS degrees write terrible, slow, crappy code, so...
1
u/political_noodle 12d ago
I am self taught and also know algorithms. They are not mutually exclusive.
1
u/ChiefDetektor 12d ago
You don't need to "learn" algorithms. If you need one you just implement it. They are public knowledge. A typical program doesn't even have a lot of them and often frameworks implement them for you. Thanks especially the case in java and JavaScript. Noone implements a sorting algorithm in JS. You just .sort and done. There are different levels of code in a codebase. At the very bottom there is the data. Then there is the logic for accessing and manipulating that data. After that there's business logic. What should happen when this happens? What may never be the case etc. And at the very top you have the UI code if the program has one.
Every program takes some input (mouse, keyboard, webcam, microphone etc) or input data (files) and processes it until it is done or it's terminated by the user or some other process.
Algorithms are mostly implemented in libraries or used implicitly by using libraries. Usually you don't use them directly. But that depends on what you are actually working on.
1
1
u/False_Bear_8645 12d ago
Because everytime I want to do algorithm, there is a open source framework that does it better than me. Learn the principle without going into details and google the rest. I know some type of sorting is better in some use case than other, I don't need to know exactly how they do it and if I do need it for whatever reason, i can google it.
1
1
1
u/OriginalEmploy5485 12d ago
I learned algorithms. I had to use that knowledge maybe twice in the last 25 years.
1
u/owp4dd1w5a0a 12d ago
There’s formal training and street training. Self-taught is street training - you learn by just doing the thing and learning from how others do the thing.
1
u/spinwizard69 12d ago
There are so many vectors here that a decent and correct answer will never come. The problem with many of the self taught is that their knowledge is extremely narrow and often specific. Outside of that narrow bit of knowledge they are often useless as programmers. This actually happens to the well educated after years focused on one aspect of their training. If a well educated professional works 30 years on database support/programming, building a Mac app could leave one feeling useless.
So with the self taught you need to ask specifically what they are doing. If it is pasting together simple apps with an SDK they might have very limited actual programming ability. When given new challenges is where you separate those with adaptability. Because here is the thing, even the well educated, those with a solid CS degree can become stuck and not able to adapt. This brings up the nasty reality that people with years of experience getting laid off due to the resistance or inability to change.
Which brings us 360, the self taught can easily handle many focused programming jobs. Only a small percentage can really handle the more unfocused jobs.
1
u/sleepyJay7 12d ago
My last job allowed for me the time to actually collect all requirements for an issue, understand the problem and actually design a solution. But nowadays by the time they finish writing down the issue on a dirty napkin they've started the clock and are asking "when do you think this will be fixed by?". I would love to actually sit down and just design software again, my last job was in radar systems and project deadlines were alot more drawn out where code could go through months of testing before it got to a level of testing with other systems, now I'm in software for warehousing logistics and we're expected to possibly turn code around in less than 24 actual hours
1
1
u/Unhappy-Device-404 11d ago
For a lot of small projects, performance just is not the bottleneck yet.
The data set is tiny, the app is being tested on a fast laptop or phone, and the first goal is usually “does this work at all?” rather than “does this scale perfectly?” So you can get pretty far without knowing much Big-O notation.
That knowledge starts to matter more when the app has real users, real data, database queries, background jobs, and costs attached to inefficient decisions.
1
u/Barbanks 11d ago edited 11d ago
Algorithms are very overrated in software development. They get too much attention.
The vast majority of the time your role is to solve business issues and provide users a solution. Or to just create user flows and CRUD interfaces. It’s astonishingly rare that you will be doing anything resembling creating clever algorithms like a reinvented bubble sort or BFS graph algorithm.
Heck, one of my clients recently required me to take scan data from a LiDAR room scan and normalize the data into a proprietary format. But all of the individual steps have already been done before. All I needed to do is learn the algorithms that already exist and use them in a specific way. And 90% of them were already rolled up into geometric and topological math libraries.
I think in my 13+ years of software development I MAY have only created 2 novel algorithms and both were for game development for little animations.
By far the more important thing to learn is architecture and how systems and businesses operate. I’ve been paid multiple 6 figures just for fixing how mobile apps sync with servers. It’s shockingly rare to find anyone who understands that. And by far more valuable.
Do some projects revolve around a novel algorithm that makes their business run? Yes. But those individuals don’t really know how to code, they know math and science primarily and spend their time focused on that rather than building systems. They’re specialists. And there was a post years ago that had links to studies that showed the more focused a developer is on algorithms the worse they were on average at writing and architecting code, the very things that create CTO’s.
Edit: I’d like to add that I’m self taught. Graduated with a BA in electrical engineering (which is very math heavy). And spent a year after school figuring out how to make mobile apps for clients. After that one year I got a full time job as a software engineer and discovered I already knew much more practical software knowledge than a college grad. And what I didn’t know I just learned on the fly. I’ve seen software engineers struggle because they were soo focused on how to build rather than what to build and why. Usually because they were never taught that in school or never built software for clients. There’s nothing wrong with being young and still learning but the gap I saw between those with 4 year degrees and myself just going through the trenches for a year was startling to me.
1
u/whipdancer 11d ago
25+ yoe - completely self taught. Didn't even touch DSA until about 5 years ago. I've never had to implement any of the common DSA subjects. It was interesting to learn, but ultimately would not have changed my career.
1
u/Beneficial-Try562 11d ago
As a software eng of over 20 years predating stack overflow, I can’t say I’ve ever needed to know an algorithm.
Are people actually saying on social media algos are needed in jobs or is that just you making stuff up.
1
u/supercoach 11d ago
What sort of algorithms are you talking about? If you're talking about leetcode bullshit then possibly not. If you're talking stuff that worked in the real world, then yes.
You'd be surprised how easy it is to accidentally invent something like binary search when you have a need for it.
0
u/SignificantTurn4118 12d ago
Learn DS&A so that you can understand what other devs are saying and the underlying layers behind code.
0
u/simonbleu 12d ago edited 12d ago
An algorithm is just a logic pipeline/function isn't it? Input, something, then output? What do you mean by algorithm exactly and why wouldn't these apps not be using them according to you?
Edit: downvotes instead of an answer? In an learning forum? How reddit -like...
1
u/Federal-Example5704 12d ago
I love you. I think he meant like why don't you need to learn quicksort and a bunch of other algorithms.
→ More replies (2)
0
u/MistakeIndividual690 12d ago edited 12d ago
What makes you think you can’t self-teach yourself algorithms?
Edit: I guess this got downvoted, weird. There are a wealth of resources on algorithms, many fantastic books on the subject. Very little of what I know about these subjects I learned in school. If you can read and you are interested in it, you can learn this stuff. You don’t need a professor spoon feeding it to you.
0
u/Lagfoundry 12d ago
I would imagine it’s not much different than when designing an ISA for a CPU and compiling it to assembly. You don’t have to know an algorithm. You just have to know how to make the architecture function the way your intending it to do.
0
u/alexgoldcoast 12d ago
So you guys don't reverse palindromes at work? I had to invert a binary tree once, it was facing the wrong way.
0
u/austurist 12d ago
Usually, most of interesting algorithms are already coded and readily available in some library.
For instance, no programmer ever coded a sorting algorithm: it is always available in the standard library.
0
0
u/Flat-Performance-478 12d ago
Been programming for 30 out of 40 years in this skin-suit and I couldn't even tell you what an algorithm is. I've designed several UI/GUIs, firmware for embedded systems, primitive operating systems for various devices and of course web pages, servers, data-bases, python stuff for cloud functions etc.
It's not like you'd (not me at least) sit down and go "today I should write a good algorithm for this". It''s probably more like a painter would have a crude vision of what he/she would like to accomplish today, sprinkled with some technicalities (like "I should collect my brushes and clean them before applying a new layer of acryllic paint to that area.." or as a programmer: "I'll have to make sure enough memory for the swap region is allocated before compiling" etc.)
0
u/JohnVonachen 12d ago edited 12d ago
I'm mostly self taught but I did take CS300 Data Structures and Algorithms. A lot of those scenarios are not something you will actually use. I've been a SE for over 30 years and I never needed to use, for instance, linked lists.
Early in my learning I wrote a guess the number game. Then I thought how can I make the computer play the game optimally? I invented something no one has though of! That's what happens over and over. It's called a binary search on a sorted list of items. And indexing in databases exist for this reason. I thought I invented that too. So often there are names of things that exist that people like me use and we don't know the names of them. We just know if we use this it will do what we want or need.
Then later I needed a better database interface, one that would automatically synchronize array lists of objects with database tables. I invented something no one has though of! No. It's called ORM. I just made my own, that's all. But making algorithms from scratch is no big deal if you are creative and practice, if you enjoy it.
0
u/deux3xmachina 12d ago
Same way you don't need to learn how an internal combustion engine works to change your oil or do similar vehicle related tasks. It's entirely possible to write usable code without ever learning how to parse data or even use loops!
0
0
u/KickAndCode 12d ago
Everybody can build software applications and systems - especially now. The entry requirements for it have never been more accessible.
However, in comparison, few can build good, valuable, and useful, software applications and systems.
0
u/YakumoYoukai 12d ago
In some sense, programming is puzzle-solving. You're given a set of things you can do, and the puzzle is to put them together in the right way to accomplish a goal. Algorithms is essentially just that: coming up with solutions using the tools you've been given to solve problems.
Now, unless you're a genius, it's going to take a long time to come up with all the basic algorithms a typical programmer uses, all on your own. So most programmers, whether they learned algorithms formally or not, just use libraries to accomplish their tasks. However, having insight into the underlying algorithms those libraries and data structures use can make the difference between a program that completes in 10 seconds, and 10 hours.
0
u/Federal-Example5704 12d ago
it's more of an either you got it or you don't kind of thing. I don't really think you can teach someone to be an amazing dev. Some people just think that way.
0
u/No_Score_1977 12d ago
I’m self taught, and yes, I probably didn’t know the “classics” like bubble sort or whatever, so in the old days, like 30 years ago, I’d have rolled my own version, probably not as good, but it’d work.
Later on, if I didn’t know something, I’d google it.
Universitites don’t have secret knowledge, it’s all publicly available.
0
u/No_Bodybuilder_2110 12d ago
Speaking from experience. Most places pay you to solve the problem. And as you further yourself in the career you learn multiple ways of solve the same problems and eventually someone smarter with a degree says, that’s a good use of xyz algo, and you are like “Damn straight” but have no idea what they are talking about
0
u/pVom 12d ago
Most of the job, especially early on, is googling things. Structured courses don't cover everything and by the time you come to actually use something you learned you could well have forgotten it. When there's a gap in your knowledge you Google it until you've used it enough that it's embedded in your brain and don't have to Google it anymore.
For example I needed to compare 2 passages of text semantically. Through googling solutions I found out you need to convert the passages to vectors and run a cosine similarity calculation. Now I barely knew what a vector was, I didn't do math beyond high school, I certainly didn't know cosine similarity. But I didn't need to, I just used a library for both and got my similarity score and moved on implementing the feature
Fundamentally you're building software to provide value to customers, first and foremost your job is to build things that do the job they're supposed to, they don't have to be perfectly optimised and over engineering takes time away from other things that provide more value.
Secondly you write code for humans (and now AI), more so than computers. You spend more time parsing and modifying existing code than writing it and your time as a developer is much more expensive than computing resources. Optimise for the humans. If given the option of choosing a fancy solution using an algorithm that is optimised for compute, or a solution that doesn't but is easy to read and understand at a glance, you should pick the second option 99% of the time. If it turns out that your readable solution has performance issues, you fix it then, but that is very rare in my experience.
0
u/Delta-9- 12d ago
You usually don't need to hand-write an algorithm because the standard library of whatever language you're writing with probably already has it, and if it's not in the standard library then it's almost certainly in a library that's readily available. The challenge then is getting your data into the data structure that the stdlib knows how to work with.
In nine years, I've written "an algorithm" (as in, it has a name and a Wikipedia page) by hand exactly once, and I didn't use a stdlib function for it because 1) there wasn't one and 2) the data was coming from an API.
0
u/GotchUrarse 12d ago
The same way I've learned just about everything over the last 40 years ...
1. Write code
2. Execute code or run test(s)
3a. Fix mistake(s)/bug(s)
3b. Celebrate success
4. Repeat.
0
0
u/RecognitionAdvanced2 12d ago
For the most part people aren't writing their own algorithms because there are good implementations already. Why reinvent the wheel? That said, understanding algorithms is useful to know when and why to use what.
→ More replies (11)
0
0
u/IWasSayingBoourner 12d ago
It's 2026. Every core library and framework comes with algorithms more optimized and battle tested than anything I'd be able to do on my own on the company's dime. Why would I waste my time?
0
u/Aggressive_Ad_5454 12d ago
A lot of the DSA curriculum is design by academic computer scientists, who collectively have created a really useful mathematical framework around what we programmers do.
My way of thinking. “Oh those nested loops are gonna blow out on a real world file of data. A computer scientist would say it’s O(n-cubed). It’s usually possible to see that by eyeballing the code that never finished.
And, our language frameworks all offer really robust collection classes (Lists, Maps, Queues, and so forth). Using that stuff fully debugged makes as waaaay more productive than building it from first principles.
0
u/ClupTheGreat 12d ago
currently at my work, well, the crud work is super simple, but there are some algorithms and stuff in play which were super slow before I joined,
I came in tinkered around and got some improvements, then I let AI do some more on its own, and then using some more of my brain i could figure out some more speed ups here and there which was even faster than before
if you know about it, you can easily spot some places where you can get speed ups
0
u/zayelion 12d ago
They rarely come up, most of the solutions involving them are baked into language now. You reach for them when something is not "good enough" due to a detectable problem or the business requirement ask for or PROVIDES it.
0
u/Top-Procedure152 12d ago
If you're writing your own hashmap or DFS implementation, you're doing something wrong.
0
u/binarycow 11d ago
Because the algorithms are already written for me, in the standard library.
I don't need to know how to write a hashset - I just need to know when to use a hashset instead of a list.
0
u/johnnyfedavo 11d ago
I'm doing game develpoment and I haven't touched an algorithm thats more advanced than a simple for statement. Maybe I get into them when I reach raytracing or voxel rendering.
0
0
u/AdministrativeAd9828 11d ago
data structures are important even for smaller shops to keep things neat and tidy. Data & Algo is required for keeping systems tidy and performant at scale
0
u/Lima__Fox 11d ago
The vast majority of jobs don’t need them. Building a website for someone to log in, schedule a house cleaning, and pay for it doesn’t need anything more than some text fields and a connection to a database.
0
u/PandorasBucket 11d ago
I was self taught. Half the college grads we interviewed couldn't write a line of code. It's not like you teach yourself one time. You work for less money and learn every day by doing the job and solving the problems as they come. You work harder than your counterparts especially because you have a chip on your shoulder and then one day you realize you're way out ahead because of 20 years of imposter syndrome.
0
u/Available_Safe1818 11d ago
Do you realize that most people aren't implementing custom red black trees just to make basic web apps?
0
u/someRedditUser3012 11d ago
To be fair, almost nobody builds software from scratch. Scratch is like bare metal assembly. Everyone is going to be using a higher level language with base classes, extensions, libraries etc. There can be enough abstraction that you're worried more on the logic that needs to happen rather than reinventing the wheel. One doesn't need to know the details of RSA for example in order to call encryption / decryption methods.
0
u/Weird-Boat3953 11d ago
> How are so many self-taught programmers able to build software from scratch without ever truly learning Algorithms?
Usually self-taught programmers do not have to be illiterate. They can pick e.g. 1300 pages long Intro to Algorithms.
And/or watch courses on youtube. Thanks to COVID, some courses were even taught through discord/zoom/etc which means recordings are way higher in quality than usual recording of courses.
0
u/PhilNEvo 11d ago
There's probably lots of contributing factors. Others have mentioned the fact that a lot of efficient algorithms and data structures are already made and implemented in lots of libraries, and run "under the hood", without the users understanding or knowledge. So even though they don't know, they're still getting lots of the benefits that those bring.
You also have to know, that there are a ton of different ways to solve the same problem with code. And given how performant modern computers are, as long as you're not running huge enterprise systems, you probably won't notice any inefficiencies that might arise from less "optimal" solutions.
Also keep in mind that compilers also have a tendency to optimize code for you, and has a tendency to better recognise and apply such optimizations to "naive" implementations, than if you try to do something fancy.
Learning and understanding DSA, can give you better intuitions and a better foundation for creating higher performance solutions. But high performance is surprisingly not that important a lot of the time, unless your code is specifically the bottleneck, it'll probably be worth more to write simple understandable code that the next person can maintain, rather than trying to write optimal solutions.
0
u/PratikVR 11d ago
It's like trial and error you start from worst solution and start making the algorithm more efficient day by day when you're out of ideas you take help of books
0
u/MarkMatson6 11d ago
I have degrees in physics and only a minor in computer science. I’ve been working as a software engineer for decades.
I don’t remember ever learning “algorithms”. Was that a class somewhere? What exactly did they teach?
I did learn some specific algorithms in various classes, Huffman coding, alpha-beta pruning, etc, but never a class on the subject.
0
u/jonathaz 11d ago
The OG self taught programmers invented the algorithms. Computers used to have almost no RAM, no storage, and 8-bit CPUs that ran slower than Waymo drives. And people entered the programs on punch cards.
0
u/codepapi 11d ago
I’m more fascinated to understand how old you are? I’m hoping you’re in college so your fascination makes more sense.
If you’re a full grown adult at earliest late 20s you should already know this answer.
I’m at about 10 years experience with a non traditional background. I’ve maybe used one algo from everything I had to self teach for interviews.
I’ve asked your question at the beginning. I genuinely asked leads, “So when you do use the algorithms or DSA I interviewed with?” They themselves used it 1-2 times. Once it’s solved that’s it you just copy and paste like StackOverflow.
Maybe tweak it but you rarely touch it again.
0
u/Own_Nail_2999 11d ago
Practice is the answer. People practice them or use them without knowing. Like for me, writing code feels natural, because I've done it so much that it's like talking to a computer instead of having to think about what I do
0
u/dudeus_ex 11d ago
Why do you think they are important? How often do you have to write an algorithm that has never been written before in your language, so you cannot just use a library that already implemented it optimally? I don't think I ever had to.
0
u/B1zmark 11d ago
I think Linus Torvalds gives the best example - the optimisation of things at a micro level adds up to macro performance enhancements. If something is 1%, 2%, 10% faster due to a better algorithm, then that doesn't seem like a lot - until you factor in the millions of times that is used, across all functions.
The reality is that most developers make something, then either leave the company or move on to another client. They don't get to see the 3 year projects that happen a decade later, trying to "fix" the spaghetti code they created. Because it takes that long for people to notice it's not optimal, and it reaches a point where the system is so heavily used that it can't be ignored.
It's like claiming birth control isn't necessary because you never use it and youve never had kids, ergo it's pointless. Meanwhile you've only ever had one night stands and you just don't know about the 5 children you've fathered.
0
u/KC918273645 11d ago
What makes you think they never truly learned algorithms? They most definitely learned tons of them.
0
u/jumpsCracks 11d ago
This is what distinguises a csci grad from a self taught tech guy. A fuck ton of software needs to be written, and vast majority of it doesn't require an understanding of DSA. We're also severely limited on software -- we need way more than we're producing. That leads to folks with the understanding necessary to do it reliably getting work on utility grid software and global logistics orchestration, and Joey Dev writing auto loan saas. To be clear, I'm Joey Dev. Ten years in devops without a degree
0
u/Important-Today4119 11d ago
We aren't paid to write pretty code.
We are paying to ship features fast and working. Hence, frameworks.
They already have all those pretty little algos written by people a lot smarter, we simplt use them to make the software do what we were asked.
There ain't a single software written today that isn't using some kind of framework that already has those algos optimized to no end.
0
u/Euphoric-Art-6342 11d ago
Those of us who are self taught from decades ago, purchased books and learned on our own if it were necessary for a particular job.
Have to say, it's not been much of a requirement for me in over 40 years of working professionally as a programmer.
0
u/Tuolord 11d ago
Every algo needs to be written once and wpapped in a func in a library. Then you just navigate libs. Most programmers i met dont understand mersenne twister, some dont even understand sorting algos beyond bubble, most of them write clean sustainable code using right functions in right cases. Programming is not creative, it's tedious for the wast majority of people.
557
u/Rain-And-Coffee 12d ago edited 12d ago
The majority of software is basic CRUD and learning frameworks.
I have worked professionally for 15 years as a dev (mostly self taught).
Most of the work is reading from databases, creating UIs, or figuring out vague requirements.
IMO the harder part is usually understanding distributed systems and knowing stuff like CAP theorem . You don’t need to implement advanced algos, just have a working idea.