5 ms·
Yes,I'd be fine with it as long as they could read and understand a table of data specifying the time and space complexity of various data structures and algori
by sidlls 9y ago
Yes,I'd be fine with it as long as they could read and understand a table of data specifying the time and space complexity of various data structures and algorithms.
The amount of programming done in memory constrained apps and for large scale data is tiny in comparison to all programming, most of which is very basic CRUD type work meant for use in resource rich environments at small scale.
- seanwilson 9y ago> Yes,I'd be fine with it as long as they could read and understand a table of data specifying the time and space complexity of various data structures and algorithms. I'd find it highly unlikely they could do that while being unfamiliar with core data structures and algorithms. A big reason to learn basic algorithms and data structures is not to reimplement them yourself but to help you design and understand your own algorithms and data structures. > The amount of programming done in memory constrained apps and for large scale data is tiny in comparison to all programming, most of which is very basic CRUD type work meant for use in resource rich environments at small scale. Those were just examples. I've seen plenty of cases of code for CRUD apps that had problems handling just a few 1000 records because the coder didn't understand memory usage and algorithmic complexity. I'd certainly want lead/senior developers to have this knowledge even if it's rare they have to step in to help in this area.
- lmm 9y ago> I'd find it highly unlikely they could do that while being unfamiliar with core data structures and algorithms. A big reason to learn basic algorithms and data structures is not to reimplement them yourself but to help you design and understand your own algorithms and data structures. But you so rarely want to implement a new algorithm or data structure. I suspect someone who knows how to implement a red-black tree is, all other things being equal (and I know all other things would not be in practice, but bear with me), worse for most programming jobs than someone who doesn't (but who knows what its performance characteristics are) - you'd never want a programmer to implement their own red-black tree, that's a maintenance nightmare even if they do it correctly, you'd want them to use the one from the standard library.
- nerdponx 9y agoThe analogy doesn't extend other fields, so I would be skeptical that it holds in computer science and software engineering. Consider, for instants, a data scientist who does great in Kaggle competitions but has a poor understanding of probability theory. That data scientist will not be able to estimate or control the error in their models effectively, and will not even know that there is a way to do so. You do not want to hire that data scientist for a senior role.
- lmm 9y agoSoftware development is the art of abstraction, and it works both ways. Do other industries have anything like the "not invented here" problem that software does?
- nerdponx 9y agoI can't speak for other industries necessarily, but I would suspect the answer is "yes". It's certainly rampant in all forms of social science academia. It's mercifully absent from professional data science in many places.
- seanwilson 9y agoYes, you should never be reimplementing something that's in a standard library and for what it's worth I would never expect an interview candidate to know how to implement a red-black tree. What I meant was that knowing core algorithms and data structures is important so you can recognise familiar problems so you avoid reinventing the wheel + you know where to look for answers. Maybe you have to use some clever combination of data structures to model your data efficiently. Maybe your data is actually a graph so now you can lean on graph algorithms. Maybe you just realised you're naive implementation to answer some question about your data has n^2 growth so now you can consider if a different data structure would help. Personally, I find people that have poor knowledge of data structures and algorithms are the ones that will reinvent the wheel the most as they don't know what exists already.
- 9y ago
- jimbokun 9y ago"The amount of programming done in memory constrained apps and for large scale data is tiny in comparison to all programming, most of which is very basic CRUD type work meant for use in resource rich environments at small scale." Thus, the other article on the front page about the staggering space requirements for phone apps.
- sidlls 9y agoIt's amusing that you think these apps are developed by people who aren't CS grads that have not been put through the absurd hazing ritual that is the modern interview. Look at Facebook's monster, for example. The reason these apps are bloated is because too much attention is paid to basic CS and not enough to engineering.
- seanwilson 9y agoI don't understand this kind of reasoning. Why would knowing basic CS correlate with you not caring about memory, storage and CPU usage? It's really grating to be tarred with this brush that having an academic background means you don't know how to optimise or write practical code. Surely not having a basic CS background means you're not going to be great at picking the right data structures and algorithms? Coders that over abstract and build layers and layers of interfaces likely didn't learn that from university.
- sidlls 9y ago> Why would knowing basic CS correlate with you not caring about memory, storage and CPU usage? It wouldn't necessarily, but I didn't make that claim. GP's claim was that these apps are bloated because a lack of knowledge of CS fundamentals amongst developers who write them. I pointed out that one of the biggest offenders, Facebook, has a strong bias towards hiring people with strong skills in CS fundamentals.