No, seriously. We allow side effects. We have the STM monad, the ST (single-threaded) monad, and the IO monad if you really want to go wild. And almost no one seriously argues that the IO monad is "dirty" and should be avoided. In fact, the type signature of a top-level executable's main is IO () by mandate.
I want to make a proposal, which is that we ban the term "side effect". It doesn't mean what people think it does.
For example, the print function puts output on the console but that's not a "side effect"; that's the main effect. I would argue also that non-detectable stateful effects (e.g. building up a large dictionary mutably) shouldn't be called "side effects" (although they are stateful effects) if they're purely implementation details that are hidden behind an interface.
"Side effect", I think, is a case of a term that used to resemble either a design flaw or a non-intuitive behavior (i.e. reading your command-line arguments deletes the strings, which is something that I encountered in one system) that is tolerated for performance's sake; but that has now been expanded to include stateful main (i.e. desired) effects as well.
That said, age is only a small part of the issue. I'm older and there's still a lot more that I don't know than there is that I do know. I don't expect that fact to change in a fundamental way: there will always be far more that I don't know.
The problem is that Silicon Valley people are arrogant and don't listen. They call the rest of the country "the paper belt" and think that regulators are just stupid, without taking time to understand why the regulations exist in the first place.
Also, there are a lot of older, man-child VCs who aren't 20-somethings and ought to know better.
Much of the youth/inexperience image that Silicon Valley wants to project is out of an intention to create plausible deniability when these companies do wrong. (The same with "Aspie chic"; Evan Spiegel is a lot of things, but I don't think that he has Asperger's, and I wish these people would stop using a real disease that they don't have to justify assholish behavior.) In comparison, if you're 55 and your company is at the center of a sexual harassment scandal, you can't use the "I didn't know any better" excuse or the "I was crushing code 20 hours per day, but I'll create a token 'Chief Cultural Officer' position and pretend to have solved this" justification.
Except that the junior engineer's old company won't sue because he is just a junior engineer...
True in practice, but there is risk.
Plus, it's just a shitty conversation to be compelled to have when you're trying to convince someone to hire you. ("One last thing, I'm under this non-compete, so can I get a written agreement to cover legal costs?") An executive can probably get that protection. For a junior, that's a deal breaker. And typically, the vindictive or paranoid firm won't actually sue your next company, they'll just ask your new firm to fire you... and often (for low-level people like software engineers) they will.
Tech is diverse enough and "competition" generally amorphously-defined enough that junior engineers rarely get strung up on non-competes. It's more of an issue in finance.
The only time it happens in tech is when there's a deliberate attempt to destroy someone's reputation, like what a few people (none especially important) from Google tried to do after I left that place.
Non-competes aren't there to be enforced, but to make the person stinky to future employers. A decent company will cover legal expenses and, in the extreme outlier case, judgments-- and an indecent one will fire you, but you probably won't get sued in either case. The effect of a non-compete on a star hire is relatively small, but if you're an entry-level engineer, the difference between $85,000 per year and $85,000 per year plus theoretically unbounded legal risk is huge.
Non-competes, non-solicits, and (except in a severance) non-disparagement clauses are shitty practices that deserve to die in a taint fire.
There is... certainly a learning curve. The Haskell community is still tiny. Per capita, it's one of the best language communities out there. It just hasn't had the thousands or millions of person-hours necessary to make everything pretty and intuitive.
I generally say that, all else equal, and if I were to use a GC'd language-- obviously, there are projects that mandate C or other low-level languages-- then I would use: Python for a short-term (days) project, Clojure for a medium-term (< 3 months) one, and Haskell for a long-term (> 3 months, or multi-developer) one. You don't find yourself needing static typing if you're doing a small, self-contained, line-of-business task like a script. You start to really want it for multi-developer programs and for infrastructural jobs that'll take months to complete (and, at age 32-- that's ancient in programming years-- the only programming challenges that really interest me are the hard ones where Haskell's type discipline pays off in a major way).
Haskell will probably never beat Python in terms of ease-of-use, and (while I would prefer Haskell over other offerings for hard-core machine learning infrastructure) it has a ways to go before it can take over the exploratory data science world (we need data frames, and it's not at all clear what the "right" way to impose type discipline on such beasts is).
All of that said, Haskell is way better than it used to be in terms of user experience. It's gone from god-awful (circa mid-2000s) to hard-but-acceptable, and in the context of a longer-term project (i.e. at least 2 months) the uptake is a rounding error and the pain is paid off.
Furthermore, I don't think that Haskell's opt-out approach to laziness is more than a cosmetic issue. You can have as much strictness as you want; you just have to ask for it. However, high-performance programming in other languages (e.g. Clojure, Python) is also deeply technical and warty. When you start adding type hints and using Java arrays in your machine learning code, it doesn't look like Clojure anymore. My point in all this is that HPC is technical and rough in all of the major languages, and Haskell's laziness is just a small part of that.
The 'thinking about money' is not at all the same as we in industry think. Its about survival on a shoestring, not about making it big.
Absolutely correct. It also begets the False Poverty Effect, in which negative, antisocial, and even unethical behaviors become more acceptable because people think of themselves as poor relative to where they belong.
You see the same thing (False Poverty Effect) in startups. Plenty of startup CEOs and founders feel like it's OK to be unethical because, at a salary of a "mere" $150,000 per year, they're practically performing charity work. When people like they're underappreciated or behind where they "belong" in terms of money or status, they're more willing to do things that aren't exactly legal or ethical.
At least in startups, as you noted, there is upside. In academia, the reward for busting your ass and beating the piss out of the odds is... a middle-class job where you can't be fired. If you'd worked as hard in finance, you'd be able to retire at 40. The stakes are small, the rewards are meager, and this gives the people who are in that game a huge sense of moral superiority.
Did you get your degree from Phoenix, the for-profit college? No? Because its not as legit somehow? That's the real issue. Ivy-league schools are the way they are, because we keep throwing money at them.
And, sadly... we'll keep doing so. If I ever have kids, I'm going to have to spend six-figure amounts on what is, in essence, a socioeconomic advantage under the name of "education". Schools have become a socially acceptable form of inherited wealth that looks like meritocratic academic admissions because, for the outsiders, it legitimately is very difficult to get into the top schools, hence the mystique and prestige.
I think it would be better if we replaced this socioeconomic "black box" of educational admissions with a purely test-driven system. Sure, there'd be really smart people with mediocre test scores who can't get into top schools... but that already happens, just for different reasons (socioeconomic ones rather than flawed testing). However, you'd kill that stupid mystique about Harvard and Stanford having some supernatural ability to select future leaders and people could just say, "yeah, my test scores weren't great", and that would be that. It wouldn't be some huge shame for a valedictorian to get shut out of the top schools; it would be, "I'm not great at standardized tests" (and smart people who aren't good test takers do exist) and that no one would care after age 19. It would work out well for the students at the Ivies who actually want to learn because, on average, they'd have better colleagues. It would probably end the 6- or 7-figure per child, pay-for-socioeconomic-advantage racket surrounding the top colleges and prep schools (and, in New York, grade schools and fucking pre-schools).
I agree with your assessment of academia, but I don't think "startups", as HN defines the term, will improve anything.
Academia's one imploded guild system, but venture capital is just as bad. The transition from a "what you know" to a "who you blow" culture happened a long time ago, and I don't think there's any turning back for the Valley. It's one of the most corrupt economic ecosystems known to humankind. VCs collude and arrange outcomes based on prior socioeconomic value to them rather than allowing the market to determine the actual merit of a company or product, and most of what Silicon Valley-style venture capital is, is taking behaviors (insider trading, market manipulation, anti-competitive collusion) that are illegal on public markets and applying them to unregulated private equities.
The trillion-dollar question is whether it's possible for something else (possibly outside of the U.S.) to emerge that outperforms the Silicon Valley nonsense. Academia itself is done, as far as I can tell. It selects for a naive lack of humility (as does the Valley, where people honestly believe that their engineer positions on 0.02% will lead to investor contact and founder status in their next gig... and, of course, that never happens for socioeconomic reasons) because anyone who is capable of getting a realistic picture of his or her probable future in that game is going to exit.
This is an interesting perspective. I didn't intend to "frame the academics as the bad guys" but I can see how it came off that way.
To be blunt, I don't think that the current generation's academics are at fault at all. This rotten system was built decades before they came on the field, and they're just trying to survive in it.
I'm putting blame, mostly, on the older generations: the Boomers, the Silents, and the "Greatest" Generation. They had it so good that they must have assumed that they could just ignore the teaching part of the job, so they devalued it, creating a state where even those who want to focus on teaching aren't rewarded for it.
I don't even fault specific people. I fault the tenure system. I understand its value, but I also see how it allows the older, comfortable generation to behave in a way that hurts the young. The blow-off-the-teaching attitude isn't something I see in most 30-year-old professors (and, to the extent that it exists, it's a rational response to a system that doesn't reward it at all). It's something that started decades ago. The tenured professor, who could blow off his teaching and administrative duties with minimal consequence, could say to his juniors, "I get five papers out per year, so I don't see why you can't do it." Academia has this weird dichotomous system where you're either almost impossible to fire (tenured) or treated as human garbage, with nothing in-between.
Of course, university administrators and politicians are also at fault, but one has to wonder why they've decided to impoverish academia. Many of those administrators are ex-academics, and the politicians' anti-intellectualism and resentment of academia has to come from somewhere. To blame academics entirely is to miss a lot, for sure, but one has to assign to them (again, with blame falling most on the older or retired ones who were most influential when this mess began) a fair share of the responsibility.
I think the selectivity problem is less of one for programmers than screen actors. We can use code tests or Github for membership screening. Thus, we don't create the chicken-egg problem where (a) it's almost impossible to prove yourself if you're not part of the union while (b) you have to prove yourself before you can join.
Getting broad-based membership is much harder. This is an industry full of (a) young people who think they'll have investor contact in 6 months and be founders in two years and retired in six, and (b) indentured servants on H1-Bs. Even if we get 95% of the top 50% of programmers (and that's wildly optimistic) as members, most managers will just ignore their need for talent, in that case, and hire bottom-rung engineers, preferring that over being responsible for bringing in a union. It (that is, hiring bad engineers to avoid bringing in represented ones) won't work, but it won't hurt those managers' careers personally, so nothing will be done about it.
Academia is a horrible industry and it's really just CTD (circling the drain) at this point. It's sad, because basic research is important and right now, there's far too little of it being done. Teaching the liberal arts to the next generation is also an important and catastrophically underappreciated job. I think that only about 1 percent of the population (if that) is in-tune enough to see how bad it is that academia is failing, because we rely on it for so much and yet we've allowed it to fall into a state where (barring seismic social changes) it seems to have no future.
All of that said, the ivory tower brought that upon itself. Or, to be more precise, the tenure system killed it by allowing older generations to cannibalize their young, not only by refusing to retire, but by blowing off the work that kept academia relevant. At some point, academics began to openly cop the attitude that research and publication were the real work and that teaching and outreach were just grunt work. The tenured people didn't even bother hiding this shitty attitude, knowing they couldn't get fired for it as long as they had the connections to get their papers published in a timely fashion. A generation later, you had state legislators who went to college but remembered 200-student lectures and professors who obviously didn't care about undergrads, who didn't think much of the experience for that reason, and who cut funding for state universities and public research grants in response, because they saw no value in higher learning or what academia studies because it had never been really shown to them. The big crime here is that, due to the tenure system, the people who originally copped that attitude (being established and hard to fire) kept their jobs and it was the rising generation (which played no part) that got stuck with an imploded job market. A tenure system allows the established generation to put a funnel over the next generation and shit right into it.
What I think is hilarious about academic conceits about "life of the mind" is how opposite it is to the truth. Academics portray non-academics as philistines concerned only with money. In fact, they think about money all the time, whether they're grad students who don't have enough of it, or writing grant proposals, or trying to manage their careers in a collapsing industry. On the other hand, those of us who've left academia think about money much more rarely: it gets put in our bank accounts every couple of weeks, and we don't have to constantly write grant proposals to make that happen. Sure, we have to roll our eyes through meetings about "quarterly KPIs" when the unambitious don't care and the ambitious only care about their personal careers and visions... but that's way better than having to fret constantly about fucking grant proposals like a high school student mashing out a five-paragraph essay about some dead famous person and what it means to him personally. It's hard as hell to have a true life of the mind no matter who you are, but most modern academics are hyperspecialized and so enslaved by the grant-money treadmill that the main difference between them and corporate serfs is that they work 3 times harder for half the salary.
The false assumption is that you need to have 100 people under you to be a Director. It's a title, not an organizational role.
Managers benefit from a seniority system at places like Google because you get automatic level bumps after so long. Sure, the ladder will get longer at the top (there will be VPs and SVPs and EVPs and SEVPs and CVPs) as they have to invent new levels up there, but the fact is that it's just much easier for you if you're a Google manager with guaranteed promotions for average performance, as opposed to an engineer who has to do something special to get Principal+.
You could be right, though. Google may have to do an honest layoff (as opposed to the dishonest stack-ranking/PIP bullshit which is a layoff masked as a "low-performer initiative") and, when that happens, a lot of managers are going to find themselves on severance packages. The ones who manage to hold on will still be getting the guaranteed title bump every 2-3 years, unlike engineers to whom no guarantee is made, but it won't be the same, and being a manager at Google won't be the cushy, write-your-own-performance-reviews job that it historically has been. The churn will free up positions, but the game will (as you noted) feel more zero-sum than it is when it's expansion that creates them.
I don't think a manager does either - Google will be dead before they can climb the hierarchy.
You think so? Why do you think Google will be dead in the next few years? I'd bet on it being around, in some form, even 50 years from now.
A halfway competent manager at Google will make Director in 5 years and VP in 10. That might be, in part, because Google has so few competent managers that a "5" or a "6" is a local 9.75. And (for as much as I trash Google) I think the odds are that Google will be around in 10 years.
All of that said, I'd imagine that there are plenty of VPs and Directors at Google who are not making 8- or 9-figure packages. You can get VP on seniority alone at Google, just by not making mistakes once you're on the management ladder, but the 8-figure RSU packages require a bit of luck.
There were Senior Staff SWEs at Google NYC when I was there. It's not surprising that there's a Principal SWE now.
You're talking about anecdotes with regard to those highly-compensated engineers. They exist, but I don't think that anyone entering Google at 2015 has any real chance of becoming one of those 9-figure engineers from a SWE-3 start.
FYI, SAG does set minimum compensation, working conditions, meal requirements, etc. It doesn't set upper bounds or demand that more senior people get the better jobs.
Sounds like what we need in software: downside protection (especially against managerial misbehavior) but no limit on the upside, and no stupid seniority system.
It's also somewhat difficult to get into. Any aspiring actor can't just go and join.
Engineers, speaking generally, are more than happy to work with the business.
Where there's divergence is that engineers don't want to work for the business as a subordinate, or for compensation that justifies working on something less interesting or career-beneficial than what one would prefer.
Well, if nothing else works, a programmer's union.
I'd prefer something more like the Screen Actor's Guild, which provides support (legal assistance if you need it, access to talent agents) but doesn't regulate compensation. That said, I don't think things necessarily need to go that way, and I don't want to see the negatives of traditional labor unions. But that shouldn't be off the table. The other side isn't going to play nice, so neither should we.
Worth noting is that it's not just about titles. Titles matter, but they can also become a joke. It's easy to imagine a company, realizing that its best seniors are underpaid, inventing a new title to justify paying them only 10% more instead of the 30% they should get.
The bigger problem is that most companies view "engineer" as "implementor of ideas that come from the business". Hence, all that Agile/Scrum bullshit in which engineers just churn tickets, rather than making meaningful technical decisions and building projects of increasing scope. No one who has any leverage and talent wants to work in that way. This becomes self-perpetuating, because even though there are good people who stick around (usually, with kids in expensive private schools, or uninsured sick relatives) the assumption becomes that good engineers leave after a certain point and, thus, that anyone left isn't any good.
For me, I only enjoy coding if it's part of a bigger whole, and if I am proving something in doing so. If I'm stuck in a ticket shop and can't leave for 2 years for some reason, I'm going to manage (preferably officially; unofficially via aggressive delegation if necessary) because I was done with that junior-level business-story coding several years ago. I graduated out of it long ago, and I won't be put back there like Billy Madison.
The "parallel" technical career path never seems to deliver equal amounts of power, or even money, as compared to managers on the same level.
Very true. Engineering is the hard way up, because there's so much less of the title and grade and salary inflation on the management track. Take Google. If you're a manager and don't make Director in 5 years, you fucked something up. On the other hand, the Director-equivalent Principal Engineer rank is 3 jumps (all of them non-trivial to make) above Senior. When I was at Google (and this is probably no longer true) the number of Principal+ Engineers at Google NYC was... zero.
The cynic in me suspects that dual-track organizations actually serve management's goals by making it look rank-per-rank superior, just as the lopsided college admissions climate convinces middle-class public school kids that prep kids who get into Harvard are somehow impressive (because it is very hard to get into an Ivy from a middle-class background, but really easy for rich legacy kids). If you make it astronomically difficult to become a VP-equivalent engineer, then the VPs (who had a much easier climb) look more impressive. Far from providing a genuine alternative path to success, this process cements the tribal superiority of management.
Most telling is that when Google really wants someone and is competing with finance or Facebook and gives them a High-Compensation Plan (HCP), the person is put on the management ladder, even if that person intends and expects to be a full-time programmer. It's really hard to justify a $500,000 salary for an engineer but much easier if you give that person a managerial title. I'd imagine that Google isn't alone in this. It's probably a standard big-company thing.
Engineers (and, in finance, also quants and strats) also share some of the blame for the relative grade deflation, because we beat each other up relative to businessmen. They give each other consistently high marks and talk each other up. We're far too honest. And this "honesty" is something I've come to view negatively because what it really is, is ratting someone out to management, often cheaply or for free. My inclination, if they aren't hurting me or a project that I care about, is to protect underperformers, not because I like it when people underperform, but because information is power and I'm not going to share honest performance information on other people unless there is a legitimate reason to do so. (I care if someone is fucking up my project, or an existential threat to the company or my career. I don't care if he's costing someone else's company a salary while doing nothing; that's not an existential threat, so who cares?) But engineers have a storied history of being willing to tear each other down for cheap or even for free, and technology management has been exploiting our lack of tribal cohesion, in order to turn us against each other, for decades.
No, seriously. We allow side effects. We have the STM monad, the ST (single-threaded) monad, and the IO monad if you really want to go wild. And almost no one seriously argues that the IO monad is "dirty" and should be avoided. In fact, the type signature of a top-level executable's main is IO () by mandate.
I want to make a proposal, which is that we ban the term "side effect". It doesn't mean what people think it does.
For example, the print function puts output on the console but that's not a "side effect"; that's the main effect. I would argue also that non-detectable stateful effects (e.g. building up a large dictionary mutably) shouldn't be called "side effects" (although they are stateful effects) if they're purely implementation details that are hidden behind an interface.
"Side effect", I think, is a case of a term that used to resemble either a design flaw or a non-intuitive behavior (i.e. reading your command-line arguments deletes the strings, which is something that I encountered in one system) that is tolerated for performance's sake; but that has now been expanded to include stateful main (i.e. desired) effects as well.