The black hole of software engineering research (2015)
blogs.uw.edu
blogs.uw.edu
1. A lot of research is based on mining open source projects which bear little resemblance to how software engineering is done behind closed doors.
2. Very few prospective trials (much less randomized controlled trials), which are considered the gold standard of evidence for a good reason.
These retrospective studies are very useful, but to really have faith in a conclusion that X is better than Y you need to assign several engineering teams to condition X and several more to condition Y and then compare.
Nobody has money for that and it would be hard to find even one team (let alone several) that is going to let a local professor flip a coin and decide whether they are going to do Scrum or Kanban. You'd also need quite a few teams because there would be so many uncontrolled aspects.
Researchers in this area are in the very difficult situation where the interesting things are difficult to measure and the things that are easy to measure aren't that interesting. Somehow they still do good work and that's very impressive but I don't envy their task.
You can even do proper causal analysis when all you have is an observational study, given that you can get an expert to produce a decent guess at the causal network. (And this guess can to some extent be verified by plain correlations.)[1]
Sure, you might not get the extremely high external validity of e.g. particle physics, but in many cases something is better than nothing.[2]
Heck, screw external validity. I'd be ecstatic to see more experiments just within an organisation, focusing on internal validity. Every engineering organisation can afford to experiment with different tools and practises. There are huge productivity gains to be unlocked (is my hypothesis, anyway), and the cost is small.
If we get together enough small studies lacking external validity, but which point in the same direction, we might even be able to infer some external validity between them.
[1]: For more on this approach, see Judea Pearl.
[2]: To use an example close to my heart: pregnancy is a condition where you rarely see randomised trials, and any research is sorely underfunded. Yet when people actually take the time to sit down and answer questions with data, we get something meaningful out of it.
As far as I'm concerned that book significantly changed the game, not only because of the findings, but because it showed that hard results are possible in this arena. The downside is that you need enough data to make the maths work, and that precludes applying the techniques to internal studies in most organisations. There's just too much noise.
It would also be great if there was more awareness of the kind of data the research community needs so that if someone saw a natural experiment shaping up in their company they knew who to call.
Regarding budgets, these researchers are a lot smarter than me and I bet they are doing their best with what they have. What might be good though is having several labs join forces and collaborate on one very good trial of a core issue.
Then you have a hope of settling a question and moving the field forward while creating some infrastructure that will help answer other big questions.
Maybe that's happening, I haven't seen a lot of it though.
Things that must work, and were every transactional loss has a cost to it. The first fb-implementation could be lousy technological wise, but the moment it generated add revenue and the site was "slowed down" to the point it lost people, cooperated software-engineering starts to exist.
Any architecture created before these constraints applied, is just legacy and if burdened with useless abstractions, often even a total loss. So, the war stories, the strange Optimizations needed to get something valuable enough for somebody to be "on call 247" thats the actual software engineering research.
Academia does not really work under these constraints, thus its solutions are "beautiful" but only relevant, when "pre-incident" architecture proofs it can survive even to post-incident.
In particular, if you have a study showing that X tool helps people in Y situation, and your subjects were CS students, then you have a study showing that X tool helps CS students in Y situation. Does it help people with 5 years professional experience? 20 years? You can't tell. It might, but you don't know.
Generalizing from studies where all participants were students is one of the things that psychology and the social sciences have had to stop doing (except when they are studying students specifically, of course).
We are currently growing into it and may find we get the same mixed results.
I work with a lot of undergrad CS students and the difference between an undergrad senior and a second year junior developer is enormous.
That's not a problem in general, but it is if you want to test software engineering practices with students beyond just working the kinks out of your protocol.
Say you're in Iowa or Kansas or somewhere. You can probably hire software engineers, with 5 to 10 years experience, for $100K/year, maybe even less. Hire 10 of them, for two years. That's $2 million.
Assign them to random teams. Give them non-trivial projects that run, say, three months each. That gives you eight experiments you can run. Change the methodology, or the language, or whatever you're trying to study.
You say that you can't get funding for a $2 million experiment? Tell Microsoft, and Oracle, and IBM, and the federal government, that the things you learn will enable them to more efficiently create software. See if they'll fund at least part of it.
Binary search isn't all that great due to cache misses. It's likely you won't regret using a hash table instead.
As for pointers, depending on the programming language you use they may not be exposed in a way that the knowledge is all that relevant. In a language such as C you can't reasonably avoid them, but for Java, or Python, SQL, or JavaScript you just have references, which tend to be much simpler.
Knowledge about how to use Framework X will probably turn out to be a lot more relevant and helpful for the day-to-day work of most developers.
Yes yes boss, we're on it.
like...what? which practices?
> I’ve demoed exciting tools from research, but my team has found them mostly useless, since they aren’t production ready.
just getting teams on board with "classic" tools like static analysis and sanitizers is major. And those can usually be described as 'production ready'
So yeah, I mean even if these tools were production ready, they wouldnt be used. If they solved a problem people had, you d bet we d stay at night to make them production ready.
He seems to think his devs are like mindless zombies needing constant intellectual feeding from him, the researching CTO, but it s probably more like they raise their eyes "oh god what is the guy producing no value day to day going to show us again while we stress on the deadline pretending to listen to him"
It fails to provide documentation of academic software engineering research that they have tried to apply to actual practice.
Software Engineering as a science has always been a bit controversial; mainly because a lot of computer scientists are involved with it and it is a bit of a soft science that most hard beta types would be uncomfortable with. Additionally, the whole notion of software engineering actually being an engineering discipline is not something everyone agrees on either.
Software Engineering is fundamentally a process that involves people interacting. That means a lot of the challenges and problems are related to that and a lot of the solutions are related to that as well. Simply put, a tool won't fix your process and people issues, generally.
The software engineering challenges in the industry are numerous. But I'd say the number one problem is that the demographics are completely skewed to propelling very inexperienced individuals into leadership roles because there simply aren't enough more experienced people around. Basically, the number of programmers doubles every five years or so. I'm 47; I routinely work with engineers half my age. Having anyone else in a team even close to 35-40 is very rare for me. The reason is not that my generation chickened out and went off and did something else; it's because we are outnumbered by about 2^5= 32x by people aged 22 or so. And about 16x by people aged 27. And about 8x by people aged 32. The median age in this industry is is 25-28. If you are lucky those people actually finished a degree and had one or two meaningful jobs before they joined you on your current project. Looking back at myself at that age, I definitely wasn't very senior.
But it's great fun to work with young people and it keeps me sharp. The reality is that young people don't have a lot of older peers to learn from. So, a lot of issues in this industry are repetive. Young person gets propelled into a senior role and gets to rediscover all the same issues that people were dealing with 30 years ago as well. And they get to make all the same mistakes before they figure out some solution. The smart ones, pick up a few software engineering books and find out that people were dealing with the same shit 40 years ago and found some pragmatic ways of dealing with stuff.
However, I'd caution anyone to apply anything they read blindly and dogmatically. Very little of it has been empirically validated in a proper software engineering research study. Doing so is hard and requires a lot of work. Most of the software engineering books out there don't bother with doing that work. That doesn't mean it's wrong but just that you need to separate facts from opinions. If it has the word "Agile" on the cover, you might want to keep that in mind. Most of that stuff is written with the same level of enthusiasm and assertiveness as the stuff that came before that.
You might not have worked on an individual project where technical reasons were the root cause of failure, but I've seen many projects not happen at all because changing a badly engineered platform was deemed too risky or too expensive, or just couldn't get scheduled because another project - made slower by poor past engineering decisions, but important enough to go ahead anyway - was occupying the team's time.
Focusing on projects and not on platforms and products creates these blinkers.
Research looks like a hermetic world and little osmosis happens with surroundings
Why? Because education as a business has fundamentally broken incentives. Most educators have never worked in the private industry, or did so for very little time. This means they don't actually know what they're talking about, they just follow courses accreditation allows them to. You will never make as much as a professor in software than you will privately, unless you are in one of the top schools that are inaccessible to the overwhelming majority of the population.
The workplace politics are egregious, because universities are not a meritocracy, universities have created a system where your skin color matters a lot more than your qualifications to conduct your job. For example, someone becoming head of department because they're from India, not because the product of their research or overall conduct in their job was the superior choice. This trickles down, students become the professor, and over time we are now here.
Tech companies are the wealthiest in the world out of any major, yet contribute very little funding. If anything they make a killing off of schools and students buying hardware and software. Look at a company like Apple, that goes out of its way to make exclusivity deals with university chains, yet still charge their artificial $1200 price tag for the mandatory macbook. These students are having the life chocked out of them, why would we expect them to want to keep doing that and do "research"?