I'm curious to know what do you think is a reasonable wage in SF for a "full-stack" developer. Feel free to break it down by years of experience.
And by full-stack CEO, you mean someone who understands all the aspects of the business and isn't a pandering, disconnected, figure-head? In a lot of companies they'd be called the operating CEO, or in more cases, the COO/president.
How about in the ballpark of a health specialist (doctor) salary? 200k at least? 300k? Or maybe pro-Athlete level salary? 700k/season (NBA, 2nd round draft)
Am I exaggerate in terms of salary? probably... these days, who can learn every single technology (from hardware to software) under the sun?
WebServices, REST, ORM, DB, data modeling, data warehouse, virtualization, security, capacity planning, storage, performance tuning, backup and recovery, test automation (you do test your own code right? not just throwing shitty code to QA right?), build and deployment strategy.
There are really two types of coders: the scrappy Ill-figure-it-out-as-I-go-along full-stack coders, and the Im-working-9-to-5-and-have-50-certifications coders.
Of course I exaggerate a bit, but businesses like to put people in little boxes. That means that the vast majority of business programmers (which are most of them) are working in one specialized area. They can write code, but don't know how the database works. Or they can make a kick-ass website, but have no idea how the back-end works. They can make the best library you ever saw, but they have no people skills. It's very common.
In fact, "full stack" to me means making things people want, which includes a lot more than just bits and bytes. It starts with words coming out of somebody's mouth and ends with them being happy. Lots of little steps in between.
I think they really just fill those shoes because they have to until someone more specifically experienced comes along.
In my case at least I'm "full stack" but as soon as it's feasible it'll be someone's job to do what I've done a whole lot better.
Until then though I'm full stack because I'm intimate with my entire platform cause I wrote it of course, not because I have some deep knowledge of everything I'm doing... most of what I'm learning is how not to do things.
The author achieved a big speed increase with a faster disk, more RAM, adding indexes, and rewriting slow queries. The relevant skillset is "knowing a thing or two about databases", not "full-stack programmer".
Incorrect, the point about being a full stack programmer is knowing where to look. You only need to know about databases to FIX the problem but you need the full stack to FIND the problem.
If you knew a little about assembler then maybe you'd waste a lot of time rewriting code. Instead of fixing the db. Full stack programmers are valuable for their knowledge that is an inch deep but a mile wide. Any fix a full stack performs is going to seem trivial to an expert in that field.
A "full stack programmer" will be able to look at the whole and see what should be done differently, but a database performance person (not a generic DBA) will be bring a much deeper knowledge of that one area (just as a GPU programmer will know more about GPU optimization then the application developer). Sometimes you need that specialist to get you over the hump. An "inch deep and mile wide" sort of knowledge will not get you the fastest performance.
It's been my experience that most of the time, you don't need "the fastest performance." You really only need things to be "fast enough." Though the dividing line between "too slow" and "fast enough" is pretty murky, it's obvious when you're firmly on one side or the other. In the article example, 24 hours is clearly too slow, while 10 minutes is clearly fast enough.
Consider, too, that expert-level knowledge of the sort a DB performance person will bring is often (rightly or wrongly) more expensive than that of a generalist. Maybe the expert can bring the runtimes down by a further factor of 100 (to 6 seconds), but, at that point, you have to seriously question whether it's worth it. They might be able to get another factor of 100 and get the runtime for a single analysis down to 6 seconds, but at that point, you have to start seriously questioning whether it would be worthwhile to do it. In the article's example, the analysis step could only be run twice in a week because it took 24 hours to execute (and, then, presumably the other 3 days of the week were spent doing something with the results). Since it might take a full day and a half of work to actually do anything with the results, getting the time to run an analysis down from 10 minutes to 6 seconds clearly isn't worth it. If it were me, I might have even stopped once I got the runtime down below an hour, because then it could be run over a lunch break or during a meeting or something.
I suppose my point is basically equivalent to Knuth's quip about premature optimization. In this particular example, there seems to be no reason to optimize further, because the system is probably 95% as useful as it can possibly get. Eliminating 47.8 hours of runtime per week lets you squeeze in one more run per week, but cutting that runtime down to 12 seconds per week (which is essentially 0) would seem to have a very small marginal gain.
Wait a minute, who says that the specialist also can't do "fast enough"? And more to the point, how do you know that the "fast enough" solution is within the reach of the generalist or that the specialist can't figure it out sooner than the generalist can? I can't count the number of times I've spun my wheels on something for days and then brought the problem to an experienced database developer who figured it out in minutes.
It won't get you the fastest performance, but usually it will get you fast enough performance.
Knowing enough to not do bone-headed things is what gets you acceptable performance. And, it gives you the ability to know where your critical paths are, and to hand those critical paths off to the most expert person in the room.
If something is taking way too long, often times it shouldn't be made faster, it should be done differently.
For example, it takes me 4 hours to get to work, just making the car faster isn't going to help. Maybe the solution is to take a plane, get a different job,work from home, or move closer to where you want to be.
Yep. What the post described as the final solution was bringing down the running time from 24hrs to 10min using straightforward optimisations. I would guess moving from 10min to 30sec would take doing it differently.
... unless it's something like a forgotten index in a database. Which can easily make a difference for a factor 10 or more.
That's the problem with computing: Often you don't have a very good understanding if there's a good reason for the thing to be slow. Only if there is such a conceptual reason (like, you're solving a problem involving very many variables that must be optimized), you must start thinking if a different approach is in order.
Which is just what the guy describes in his article. At least, thats how I read it. If you only hire people who only know about cars, you're fucked. You'd need someone who knows about a ton of different transport "technologies", and knows, say, that you can combine the technologies optimally, say taking a shuttle to the airport whereas the trolly station terminates two miles away and the cab rank is always empty.
Ain't nothing faster than 0. I've done games for 20 years. The best optimizations are figuring out how to avoid running the code in the first place. This is where full-stack programmers come in.
There seems to be a battle here between full-stackers and specialists, but if you think of a full-stacker as "an extremely experienced generalist", then I think there are plenty of "extremely experienced specialists" who fit that description too. That is to say, an extremely experienced "database optimizer" is going to know how the presentation layer hits the database and how the database hits the disc, and I expect they would know many different database technologies.