One thing I find generally worth improving with these sorts of introductions is that they always seem to introduce data structures as a pick-and-mix bag of prebuilt parts, rather than a set of techniques which allow you to enforce properties which allow you to build objects that do what you want efficiently. Teaching the former is like teaching a physicist all the different kinds of gear systems, rather than the math that lets you model them.
Knowing how binary heaps and hash maps work is great, because binary heaps and hash maps are very useful data structures, but knowing the fundamental reasons behind them in a way that composes to building new things is much more useful. What happens when you want properties that someone hasn't already built a data structure for, at least as far as you can find? (Pet example: ordered container with efficient append and the ability to query the maximum of any subslice length k in O(log k). Extension: what are the minimal assumptions you need to do better, eg. amortized O(1)?)
I think this contributes to the attitude where programs are built out of monolithic, ill-fitting parts rather than actually looking at the problem and building the solution which does the right thing, the right way. (Pet example: if you designed websites as data structures and the browser to support doing so efficiently, 90% of requests on a site like Reddit would be a single `memcpy`.)
What I would attempt is rather than saying
"Here's one way we could do it: <explaination of pre-baked hash table>."
talk about the underlying tool first
"One tool that can help us is hashing: <explaination of general technique and why its properties are useful>. In this example we want <these properties> but can't immediately get it because our data has <these properties>. But we can apply hashing to get <technique that looks decent but has caveats>. Handling the caveats by doing <hash table things> gives us a data structure called a hash table."
Yes, this is probably a harder way to handle things, but I'd like to think it'd be worth the trouble.
That was a clearly-written, knowledgable, info-dense and effective bit of writing you just did, @Veedrac. Ever considered doing more of the same, and delivering the kind of educational material you just described?
> (Pet example: if you designed websites as data structures and the browser to support doing so efficiently, 90% of requests on a site like Reddit would be a single `memcpy`.)
You'd still want a compressed form, even if you had a good way to bypass parsing.
> (Pet example: if you designed websites as data structures and the browser to support doing so efficiently, 90% of requests on a site like Reddit would be a single `memcpy`.)
Formatting a webpage cannot be done by a simple memcpy, especially since you don't know the size of the browser window in advance.
But perhaps I didn't understand the point you were trying to make.
I'm all for stuff like this in theory, but in my experience I never use said knowledge for any productive purpose and eventually it degrades... until I read a post like this, feel a surge of professional inadequacy and go re-learn it. :P
A small thing: the slide in subscription popover contains language which is dangerously close to the dark pattern of framing refusals as guilt/shame inducing.
A simple no thanks would do.
Because “they won’t remember what you did but hey will remember how you made them feel” and this made me feel “eww”.
Interview cake is amazing. The way the problems are presented and the hints are given is often better than what you'll get in an actual interview setting.
After using it myself, I could not recommend it any more highly.
I've had the same concerns but I think--this is all my thoughts, no official sanction--Interview Cake started by catering to people who had interviews coming up, and so it didn't look like they will need more than a year's access. Neither would they need the material after they got the job. But I think @gameguy43 will see your comment and hopefully take it up with his team. I'd love to have eternal access, but then the 1-time charge might be bumped up too. Who knows?
Shoutout for including the bit about constants in O(n) notation, 99% of things I see cover it gloss over it.
I've seen radix sort walk all over quicksort for common datasets many times. Knowing your dataset is at least as important as knowing the right algorithm.
I really love this. Frustratingly few articles/posts/courses actually follow through on their promise to make difficult material intuitive. I'm only halfway through your Big-O post but it's already obvious that you've put a lot of care into really making it accessible.
This is something I've entered my email into after at least a year or so. Great presentation and design and I'm sure it's good content too -- I'll get to know over the coming week :)
I think these styles of puzzles borrow a lot from competitive programming (e.g: ACM, IEEE).
And while competitive programming requires skill, what you do most of the time is collaborative programming: create software that interoperates with other software, with a user, that is maintainable, etc. Software without these skills quickly becomes really expensive and hard to maintain.
This is really beautiful. I love that the images are SVGs as well, makes perfect sense for these line drawings. Though it is a little bit of a bummer that all of them have embedded fonts, even those that don't use text.
Oh iiinteresting I guess we are doing that! Probably not too hard to fix. Thanks for pointing that out!
They used to be just inline svgs (instead of img tags), but (at least a couple years ago) our research suggested using img tags was better for SEO and screen readers and even page load time.
edit:
(Of course, when they were just inline svgs, they got the fonts for free from the surrounding webpage).
So far I'm thinking we'll just turn off the embedded fonts for images that don't have text. Definitely not expert on this stuff though--open to other advice!
[+] [-] Veedrac|8 years ago|reply
Knowing how binary heaps and hash maps work is great, because binary heaps and hash maps are very useful data structures, but knowing the fundamental reasons behind them in a way that composes to building new things is much more useful. What happens when you want properties that someone hasn't already built a data structure for, at least as far as you can find? (Pet example: ordered container with efficient append and the ability to query the maximum of any subslice length k in O(log k). Extension: what are the minimal assumptions you need to do better, eg. amortized O(1)?)
I think this contributes to the attitude where programs are built out of monolithic, ill-fitting parts rather than actually looking at the problem and building the solution which does the right thing, the right way. (Pet example: if you designed websites as data structures and the browser to support doing so efficiently, 90% of requests on a site like Reddit would be a single `memcpy`.)
What I would attempt is rather than saying
"Here's one way we could do it: <explaination of pre-baked hash table>."
talk about the underlying tool first
"One tool that can help us is hashing: <explaination of general technique and why its properties are useful>. In this example we want <these properties> but can't immediately get it because our data has <these properties>. But we can apply hashing to get <technique that looks decent but has caveats>. Handling the caveats by doing <hash table things> gives us a data structure called a hash table."
Yes, this is probably a harder way to handle things, but I'd like to think it'd be worth the trouble.
[+] [-] chrisweekly|8 years ago|reply
[+] [-] catnaroek|8 years ago|reply
Most programming work is less like theoretical physics and more like car repairing.
[+] [-] Dylan16807|8 years ago|reply
You'd still want a compressed form, even if you had a good way to bypass parsing.
[+] [-] amelius|8 years ago|reply
Formatting a webpage cannot be done by a simple memcpy, especially since you don't know the size of the browser window in advance.
But perhaps I didn't understand the point you were trying to make.
[+] [-] scottLobster|8 years ago|reply
[+] [-] petra|8 years ago|reply
[+] [-] andrei_says_|8 years ago|reply
A simple no thanks would do.
Because “they won’t remember what you did but hey will remember how you made them feel” and this made me feel “eww”.
[+] [-] gameguy43|8 years ago|reply
Fixed in master. Not freaking pushing while we're sitting at #1 unless I have to tho :P
Edit: Thanks for the note!
[+] [-] MattRix|8 years ago|reply
[+] [-] cbzehner|8 years ago|reply
After using it myself, I could not recommend it any more highly.
[+] [-] irl_zebra|8 years ago|reply
[+] [-] victorhooi|8 years ago|reply
> No subscriptions to cancel—this is a 1-time charge. > Access lasts (3 months) 1 year.
So sure - the fee may not automatically renew - but then you lose access to all the material after a year.
Is there not simply a way to pay for the course, and own a copy?
[+] [-] yawboakye|8 years ago|reply
[+] [-] gameguy43|8 years ago|reply
[+] [-] vvanders|8 years ago|reply
I've seen radix sort walk all over quicksort for common datasets many times. Knowing your dataset is at least as important as knowing the right algorithm.
[+] [-] tenaciousDaniel|8 years ago|reply
Well done!
[+] [-] namanyayg|8 years ago|reply
[+] [-] notjackson|8 years ago|reply
Did you write each of them yourself or is there a way to automate such simple code already?
[+] [-] unknown|8 years ago|reply
[deleted]
[+] [-] xenihn|8 years ago|reply
[+] [-] quickben|8 years ago|reply
Sadly, an experience tarnished by the three, full page prompts for email subscription, right in the middle of the information flow.
[+] [-] partycoder|8 years ago|reply
And while competitive programming requires skill, what you do most of the time is collaborative programming: create software that interoperates with other software, with a user, that is maintainable, etc. Software without these skills quickly becomes really expensive and hard to maintain.
[+] [-] gregable|8 years ago|reply
[+] [-] gameguy43|8 years ago|reply
They used to be just inline svgs (instead of img tags), but (at least a couple years ago) our research suggested using img tags was better for SEO and screen readers and even page load time.
edit: (Of course, when they were just inline svgs, they got the fonts for free from the surrounding webpage).
So far I'm thinking we'll just turn off the embedded fonts for images that don't have text. Definitely not expert on this stuff though--open to other advice!
[+] [-] unknown|8 years ago|reply
[deleted]
[+] [-] codingninja15|8 years ago|reply
[+] [-] hbk|8 years ago|reply
[+] [-] nixgeek|8 years ago|reply
Is there a good reason not to just do $199 lifetime?
[+] [-] neeleshs|8 years ago|reply