> I spent twelve weeks, ten to twelve hours per day, of my boot camp working primarily on algorithms and data structures, and was tested on that knowledge every three weeks. So that can’t be the skill I’m missing. Wow, 3 whole months ? I wonder why they didn't want bootcamp applicants... But, in general, I agree. They should be filtering by ability rather than putting a blanket ban on people who have done a bootcamp.…
****** No Bootcamp Applicants ******
51–55 of 55 posts
Re: ****** No Bootcamp Applicants ******
#52Earlier quoted context omitted.
They are, everyone is being trained on a job to some degree. If you are hiring graduates you are going to be training them on the job for a while even if you hire SE/CS students only there is a big difference between knowing how to program and having experience in software development and delivery. But some things can be trained while others realistically cannot, you can train people on the job rather quickly to deve…
The initial comparison was between someone with little training in a discipline and someone educated in a discipline. Of course every graduate needs plenty of mentorship at their first or first few jobs. That's not the same as training someone with no exposure to a discipline. As far as bootcamp graduates go, I would be careful about assuming that's their only exposure. I'll take someone who has been obsessed with co…
If you need them to work on more complex things say computer vision it might be more tricky unless they only consume existing libraries. It’s much easier to learn RoR than it is the lean the math needed to say understand what a Fourier Transform is.
It really depends on what the programmers actually do; implement a known solution or come up with one.
Re: ****** No Bootcamp Applicants ******
#53Earlier quoted context omitted.
If you don't use math, it's almost certain that you're writing inefficient code. There's no way to estimate big-O complexity of the procedures you're writing without at least some math. Unfortunately these days it's considered ok to write chat applications that consume several gigabytes of RAM, so maybe nobody cares about efficient code anymore.
I see tons of people online writing algorithms in python and ruby, that will run against a few megabytes of data, and worry about getting the "big-O" of their algorithms right. Then I go ahead and show them that just by doing the same thing in C++ you get a 10x speedup if you know what you're doing, sometimes more. And then they say "but I'd never get an optimal algorithm done" (that C++ is typed actually makes this…
The big-O thing is not about C vs Python. A slow C program will lose to a Python program with a properly written algorithm any day of the week. Just because of how the math works out. The speedup of using C is linear (in practice, worse than linear). Suppose the O(n^2) C program executes each instruction 1000 times faster that the corresponding O(n) Python program. Then you only need n to start reaching thousands to blow the C program out of the water. Meanwhile, O(n^2) Python program would be a thousand times slower than that. And to me, that's unacceptable.
Re: ****** No Bootcamp Applicants ******
#54Earlier quoted context omitted.
I see tons of people online writing algorithms in python and ruby, that will run against a few megabytes of data, and worry about getting the "big-O" of their algorithms right. Then I go ahead and show them that just by doing the same thing in C++ you get a 10x speedup if you know what you're doing, sometimes more. And then they say "but I'd never get an optimal algorithm done" (that C++ is typed actually makes this…
No, algorithms always matter. Especially in web-development. Yes, Javascript is slow. But there's no need to make it even slower by writing O(n^2) code where O(n) suffices. You don't even need to reach large n's to feel the lag. I personally had to rewrite such code, which was causing horribly slow website performance. The big-O thing is not about C vs Python. A slow C program will lose to a Python program with a pro…
The thing about O(n) algorithms versus O(n^2) algorithms is that very often rewriting an O(n^2) algorithm into an O(n) algorithm involves splitting the loops, and using way more memory.
And that's assuming you do it correctly. Mostly people don't. Example, your basic optimization of a double for loop turns into:
# (1)
x = {}
for e in lst:
x[e.field] = e
for e in lst:
e2 = x[e.value]
# do something with it
Is that x[e.field] is an allocation and takes O(n) time. So this is an O(n^2) loop, and you have saved nothing over this, even in theory # (2)
for e in lst:
for e2 in lst:
if e2.field == e.value:
# inner loop
So in this obvious case it takes infinite items in theory. Even that is a wrong prediction. (2) will also behave very differently depending on whether the VM is just starting up or has been running for a while. So in practice here's what's going to be faster: n 10000 and total size
Why, in the beginning not doing the setup is just faster by itself. This lasts a long time because when the inner loop executes in cache and the hashtable copy does not fit in cache the loop is 100 times faster (on top of that ~100 times C acceleration). This means the loop stays fast for a long time.Needless to say, this means that for anything you should do client-side the double loop will be the faster option, even on the slowest mobile cpu any of your customers might use.
At some point the Hash table will start winning. Until it causes virtual memory activity during the lookups. At which point, it's memory usage makes it useless. I'll see about actually running this test with an actual example program.
Hence, it's good to keep Rob Pike's rules of programming into account: http://users.ece.utexas.edu/~adnan/pike.html
Rule 2. Measure. Don't tune for speed until you've measured, and even then don't unless one part of the code overwhelms the rest.
Rule 3. Fancy algorithms are slow when n is small, and n is usually small. Fancy algorithms have big constants. Until you know that n is frequently going to be big, don't get fancy. (Even if n does get big, use Rule 2 first.)