The Intuitive Guide to Data Structures and Algorithms
interviewcake.com
interviewcake.com
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.
Most programming work is less like theoretical physics and more like car repairing.
You'd still want a compressed form, even if you had a good way to bypass parsing.
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.
>> A lot of problems seem like we’re repeating ourselves writing the base algorithms and gluing things together when we really should be investing problems around resource constraints and system trade-offs and priorities
What's the minimal platform that would enable library developers to monetize such things ? and does it or something close to it exist ? because that seems like the fastest way to make this happen.
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”.
Fixed in master. Not freaking pushing while we're sitting at #1 unless I have to tho :P
Edit: Thanks for the note!
After using it myself, I could not recommend it any more highly.
Out of curiosity: is Go actually your most comfortable language? Or are you just interested in using Interview Cake to get some more practice with it?
Not the most comfortable language but a very worth addition!
When you get stuck, don't get worried or frustrated. Get excited about getting to play around with a hard problem.
I found that once I actually got an interview or two, it was like a bit of a waterfall. I applied to companies X, Y, Z. When I got an interview at X, I emailed Y and Z and said I'm interviewing elsewhere and if all goes well plan to be in SF, and would love to interview with you. I think this is confirmation bias at play or whatever, because that really seemed to help get additional interviews.
> 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?
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.
Well done!
I always worry that we're just spinning our wheels. But it's great to hear that the extra effort is showing through :)
Did you write each of them yourself or is there a way to automate such simple code already?
It was important to us to not just translate our Python into C++, but to have C++ that was actually good, C++-style C++. So we hired C++ experts to do all the C++ translations. And same for the other languages.
Now, none of us are C++ experts. So how did we know if the contractors we hired were any good? That's a whoooole blog post for another time.
In short: Noah (an engineer on the team) came up with this clever system where we hired a bunch of people to translate the same code sample (as a paid trial task), then we hired a bunch of people to rate those people's translations (again, as a paid trial task). Then we hired the translator who had the best ratings, and we also hired the /rater/ who was most /thorough/--they do code reviews of the translator's code.
Edit: but it'd make a good one, right?
Some combination of:
- Did they catch stuff that the other reviewers didn't catch?
- Of the stuff they did catch, does it look to us like that's actually stuff that'll help make our code better, or is it just unhelpful pickiness?
Curious: what language do you currently use on the site? And how painful is it for you to not have Go or Rust?
(Also, you're talking about having the /content/ in those languages, right? Or supporting those languages in our code editor?)
I use Swift and Objective-C, but I've consulted InterviewCake content for every other language except PHP at some point. The sample data structures and question answers are nice code samples when I need a quick reminder for how to do basic things in languages that I don't use on a regular basis.
Not having Go or Rust isn't a big deal, if I could choose one it'd be Go. I want to learn Go for myself, and asking for a friend for Rust.
I also never use the editor on the site, I write/run the code on my machine. I never liked using the editor the few times I tried it. I see in another comment you made in this thread that a new one is coming soon, so I'm excited to try it. Any chance I could beta test? :)
Sadly, an experience tarnished by the three, full page prompts for email subscription, right in the middle of the information flow.
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.
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!
Is there a good reason not to just do $199 lifetime?