44,386 karma · joined August 30, 2007
http://dbmarkham.com/
daniel@danielbmarkham.com
I understand the desire to use webkit, Typescript, and so forth to develop modern apps, I'm just confused at why Vue in a stand alone page delivered by ftp or usb drive isn't a "full" SPA
It sounds like the same thing, but acknowledging that mistakes happen no matter what and trying to focus on preventing them is something much more tractable that trying to come up with the perfect thing that can be understood right away.
For instance, I used to be a fan of long variable names that say exactly what they do. I still am, but only in certain situations. In fact, I'd argue that using very descriptive variable names in the wrong situations can actually make the code less maintainable, not more.
This takes us naturally to a discussion about what works, why it works, and under which circumstances it might not work (or actually hurt), which is probably a much more productive conversation than something along the lines of "how do you guys think the best way to code is?"
I envy you. Must be cool to get immediate, day-to-day feedback on your work, even if it wears on a person after a while.
I always thought there should be some form of yearly bootcamp for nerds. Drop out of larger society for most of the year, doing your thing, then for a week each year you get indoctrinated in all of the crap everybody else is doing and thinking. That way you can stay mostly culturally-relevant without spending huge hunks of your time becoming the master of the intricate details of things like Game of Thrones. Just know the general themes, be able to tell some jokes and create metaphors and illusions.
I don't know who would run this bootcamp. I assume teenagers. Your teenage years are a time where it is very important to stay with the group, establish social ranking, be the master of conversation about various widespread cultural events. Those feelings never go away, but for many of us they die off as we get older, have families, and absorb ourselves in work we find important.
There are some very weird things about getting older. First off, you only are old on the outside. While people, especially some younger folks, may look at you as if you were an alien that just arrived from Mars, inside you're the same old kid you always was. Just the outside has changed. When presented with a new situation, you may appear to decide more slowly, but you're also thinking about a lot of different things and options you wouldn't have thought of in your youth, and you realize that unless you're driving a racecar, most times it's better to take a minute and decide and get it right than it is deciding in two seconds and getting it wrong.
You see a lot of stuff. Hopefully you learn from it!
- The problem is requirements. Is the system broken? Yes. Do the requirements say for it to be this way? Yes. Must be broken requirements, right? Since requirements are the "driver" of the process, if the process is broke so must be something about requirements.
- Software is never done. Bullshit. Do I need somebody to reprogram my decades-old mp3 player? I do not. Would it be nice if somebody did? Maybe, but it's not required for me to enjoy the software. The software is written, does its job, and needs no maintenance. It's done. There's plenty of software being updated today for pretty good reasons that for all intents and purposes is done. Just nobody wants to admit it. If it's possible to add stuff or update it, we do. It's what we do.
- FTA, "...Requirements change. Every software engineering project will face this hard problem at some point..." That's true, but woefully incomplete. Your job creating software is not to meet the requirements, it's not to change and add stuff as the requirements change. That's viewing the work, once again, as requirements-driven. No matter what your process or paperwork, the work is ultimately user-driven, not requirements-driven. Your job is to scope a domain, anticipate change in that domain, and provide easy-to-use configurable software that anticipates that change. You do that by knowing the users and the work, not by reading requirements or responding to updated requirements. That kind of thinking removes the key piece of the entire work, the user. By the time somebody gives you a requirement, it's too late. Your design is whack.
How do we make aviation and space travel gear safe? We fly the hell out of it. What's the wrong way to go? Build one-at-a-time and ask for changes and complete reworks for every new project. How do we build software today? Like we used to build rockets; using the wrong metaphor. We need reusable, configurable, capabilities-driven software, not endlessly worked-on huge hunks of bytes from BigCorp feature factories.</rant>
EDIT: Just to clarify the rocket metaphor, we'd be far, far better off using COTS tools and writing minimalist, simple code that only does a few things, then pounding the hell out of it with actual usage to figure out which "axes of change" we missed. Instead, more and more everything has some unique tech stack, a byzantine testing and deployment deployment system, the entire thing fun of tons of complex one-of code everywhere ... then we stick on new features one at a time every time there's something a user wants that it doesn't have. From a managing-complexity and managing-cost standpoint, it's actually worse than the Big Project rocket situation we had for decades.
I find that emotionally-laden content with overly-specified points combined with extreme surety sells better than more intellectual content that leaves many questions open to the reader. I find that in my own writing, over the years I'll take the same subject and move slowly from generalisms to specifics, and that *the process of reading, writing, and thinking about the generalisms are what drive the eventual specificity an confidence. I also find that writing and editing is itself thinking, that many times I don't slowly advance towards a goal until I've flailed around at the edges for a while. (Which he says as well, I think)
Being wrong a lot in public helps to be eventually be right. There are things you'll never see unless you establish feedback mechanisms and run through them several times. There's a popular idea among some intellectuals that most books don't deserve to exist. I understand and mostly agree with that; there's been a ton of books that are supposed to say something that don't. There's also a ton of essays that show a writer wondering around in a field, circling around some idea they can barely express and how no idea how to understand.
I'm okay with all of that. In fact, I think it's a good thing. I might not read any of it, but we need lots of people thinking about important things and trying to work through the issues. That's going to mean breaking a lot of these rules (or scoring low on the multiplied metric).
Don't get me wrong, I like the metrics and they're a goal of mine. But you shouldn't write for other people, you should write for yourself. Otherwise you'll spend a lot of time worrying about what other people say about you. Write for yourself, figure out what's important to you, then work through becoming more and more specific as you grow. You don't play tennis by watching the scoreboard, you play by hitting the ball and engaging in the game. Likewise while you want to score high on these metrics, you've got to spread your intellectual wings and grow some. Otherwise it's just somebody talking to himself in an interesting manner. That might make a great thing to consume, but how useful is it actually?
tl;dr it's better to write a lot, continue to score low on all of this as long as you're learning. Much better than scoring high and never changing.
We keep having these discussions about the impact of social media as if the relationship was directly causal, ie Zuck pushes a button and robot people do his bidding. Wish the problem were so easy. It's at scale, dealing with fractions of percentages over thousands of randomly subsegmented markets, nobody knows what the hell is going on. It's incomprehensible by any human.
What we know is that people pay billions of dollars to advertise there. We know that most of the world's population (!) has signed up. We know that people who quit feel better. We can observe people doing and saying things with other people at a scale never seen before. In fact, that's one of the selling points. We know that more and more studies are showing addictive and maladaptive behavior from people who spend a lot of time there.
We're not trying to convict FB in a court of law or inventing some new science. The preponderance of all the available evidence says that there's a major social change at work worldwide that has at least some deleterious effects. Works for me. Any small number times a billion is a big number. That's the entire business model of social media. You logically can't deny the way social media works in order to make a defense of social media.
I think you've created a bit of a dichotomy where none was implied. All of our experiences online can be a form of entertainment, at least in part, politicians may be elected or not based on perception, and it's critically important to have and express values using good people. These ideas do not have to be in conflict with one another, and no cynicism on my part was intended.
If you'll allow, I'll use a political example from 15+ years ago.
When young Bush was running for president, you'd see commentators on TV talking about which candidate had some demographic. Such-and-such had the 50+ white male vote, so-and-so had the hispanic vote, and so on.
These people did not know what they were talking about, but it made for good TV. The people who knew what they were talking about, the folks like Karl Rove, knew that today they were looking to talk about subject X in context Y to a certain type of voter described by several adjectives in precinct 7 of the south side of Columbia, SC.
Pick a word that describes a social problem, say homelessness. There's not one homelessness, there's a dozen or more, each with their own qualities. There's people who are the victim of a disaster, people who have medical bills, people with addiction problems, people living in poverty on purpose for religious reasons, etc. Not only do the reasons vary, the possible solutions vary by personality, demographic, geographic location and resources, and so on.
Your response to my point demonstrates the problem. We talk about social problems in grand and expansive terms because we have to. Otherwise we'd spend forever in analysis. Politicians get elected based on grand visions for social problems expressed in expansive terms. But the actual problems themselves are highly nuanced. So what you're suggesting is that we throw everybody worldwide into one bucket, stick a label on them, and attempt to help them. That's only going to be a workable solution in only the most simple cases. In fact it's not workable. I'm being kind.
Worse, for all of the cases where it doesn't help, you've just given over a monopoly of ideas, labels, and solutions to some company that's beholden to nobody, Facebook. So what will happen, what is happening now, is that people looking to exploit problems are working at the very detailed level. Right now there's probably some scammer looking to target 70+ white females in Sioux City Iowa who voted for Bernie last time. That guy is going to exploit the hell out of his target. There are thousands of targets like this. But when we identify the problem, all we get is how great it is to have some universal solution to addiction or something.
Yes, in grand terms wouldn't it be great to have some solution to X? I'd love it. But that's not how these kinds of solutions work. What we're doing is enabling the people with bad intent to have their way while justifying it all with promises of how huge categories of people might be helped. That's bullshit, and it's the kind of bullshit we've put up with for far too long from SV, making money with one hand while giving out platitudes with another, trusting on the complexity of the application to hide what's really happening from the average voter. It's only continuing. Now, however, we're going to take it to the next level, regulatory capture.
In defense, I don't think anybody that was on-board at the beginning realized this. I do, however, feel that anybody in the last decade working at FB should have been smart enough to figure out what was going on. They just didn't care.
Too often we confuse analysis with design, then the heartaches start. Some problem domain things are immutable, some are not, some change over a fixed range, some are firm but expected to change, etc. All that stuff is critical to know as part of analysis.
I'd argue that you can do analysis incrementally right along with everything else. Reports sound like a great starting point. I agree with your advice, even the part about the pendulum swinging too far the other way. The problem is that, honestly, we suck no matter which way the pendulum swings. We continue to confuse the process with the goals.
Unfortunately, and I apologize for sounding difficult, this is still far too broad to gain traction on.
I think the thing to remember when you're learning various architectures, from database schemas to build pipelines, is that many times the people teaching you are teaching you from a position of having a completed project and then looking back on the lessons learned and applying some heuristic-making to them.
For instance, if you look at database normalization, which I started with when I started coding, it makes total sense for a small-ish project. Back in the day, you controlled the app, the machine, the storage, and the code. You owned it all. So changes to the schema involved a finite and easyish-to-do set of practices.
This started falling apart really quickly, though, with folks talking about impedance mismatch just a few years after relational databases went mainstream. If I had to generalize, everything got more and more complicated and the assumption that you could grab the entire application in your head easily and change it was no longer true. Then came a ton of CASE tools, now ORMs, and so forth, all in an effort to get us back to easily owning and changing data schemas.
But the real problem was there all along we just didn't realize it: thinking you knew everything and could manage it. This idea worked great in classrooms, worked great in personal and small apps. It even worked great in larger apps with tight control. But at the level of complexity we have now, it just doesn't seem realistic to be teaching people the perfect way to do things. (Of course, they should be aware of them!). Instead, what's needed is how to gradually get from here-to-there in a complex world without getting lost. So the heuristics you'd get would be perfect world completed apps, and what you really need to know is, well, how to develop software. That kind of advice ain't happening in an HN thread.
Hope that made some sense. Ping me offline if I can help explain any more.
But that leaves the obvious question: use for what?
Structures, whether it's databases or object graphs, exist for only two reasons: to do stuff and to fit into a pattern of rules you've decided to use beforehand. Without either of those, there is no way to judge a schema. We could talk about generally organizing data. That's set theory and normal forms. But that wasn't your question.
I would design the schema for a three-microservice widely-distributed high-performance application far differently than I would a local checkbook app for my brother. You gotta have more information.
Apologies. I am unable to help.
I consulted with a team last year that was moving to microserivces. They bought BigToolX and had already created a disaster ... and they weren't even through their design. Most all of what they were doing was just best practices in some other paradigm. It was painful.
Whenever I fall in love too much with a technology, I get paranoid. There's usually something I'm missing.
I'll delete the comment if I was unnecessarily cruel or missed the sarcasm. It was not intentional. But it is important to understand that you want to think of persistence and deployment coupling as independently of your microservices strategy as possible. The vast majority of problems we see with people implementing microservices is people carrying baggage over from some previous project or pet technology. K8S's great. It's just not relevant here.
I've seen X be a dozen things: UML, databases, User Stories, Functional Programming, Testing... It's too much to list.
Yes. If you do it that way it will hurt, and you should stop. I don't know this author, but I suspect that many people who jump into microservices are not getting the foundations they need to successful. The idea that microservices are just broken-up monoliths is a big clue. They're spot on about marketing and spend, though. In this community we're quick to hype and sell things to one another whether it's a good idea or not.
I've seen some great criticisms of microservices, some of which made me pause. Now, however, I think there's a reasonable way through the obstacles. It doesn't have to be a mess. Nothing is a magic bullet, but about anything will work if your game is good enough. You don't buy a bright and shiny to make your game better. Doesn't work like that.
Being a good hacker, I pulled at that thread until I had another, and another. Now I'm writing about semiotics, language, lambda calculus, and philosophy of science stuff. It's all related to my original quest for a better explanation, and it affects everything from AI to coding practices. I'm about done now. Now the trick will be getting it all in a format that's consumable by the average programmer.
Suppose I told you that taking bazookas away from people that live in the city prevents bear attacks? You might say that there aren't bear attacks in the city anyway, which would be true, but you couldn't prove it one way or another. Who knows, maybe there would have been one bear attack if people ran around with bazookas shooting up the nearby forest.
Now add in the complexity that terrorism is more like a rate than a yes/no question. What if I told you that taking away bazookas in the city reduced the crime rate? Well, the crime rate in many cities has decreased, but how are those two related? Once again, we're left with a statement that might sound good to some and bad to others -- and no way to reasonably discuss it.
The only thing we can say with certainty is that no matter what we do, terrorism will continue exist. We can never eliminate it no matter how hard we try. So unless we want each new terrorist act to wreak havoc with massive changes on our societies, we're really talking about trade-offs here. How much stuff do you want to give away for a 50% reduction in terrorism? And once you come up with that answer, how would you know if your giving those things actually was the thing that reduced it?
It's one thing when a pubic discussion has reasonable people talking about the various sides. It's another thing entirely when we start injecting these semantic landmines into our conversations. I'm not saying you're wrong or right; I'm saying there is no way to know.
Once again, as an outsider it doesn't seem to me that they are anywhere near "done", but they sure as heck look like a mature science. Physics and its children have given us amazing things. Spending a lot of time playing with math wasn't one of them. All sciences have one aspect in common: until you get to reproducibility, the conversation in the community tends towards groupthink over time. That's a human characteristic not related to any one field of study.
It's not wrong. It's just not changing over time. It is stagnant.
The nice thing about physics is that with new advances in astronomy and the lack of a unified theory, it keeps getting poked with reminders that there may be missing pieces. That's not true in many other fields.
Based on that, I experimented quite a bit with my blog, here on HN, and on various social platforms. Could that magic be reproduced online? Out of 1,000 or so online "friends", I have maybe 3 that consistently promote diversity of thought. Those people could moderate a room on about any topic. The people they gathered around them had all sorts of views and ways of thinking. It wasn't what I had seen in person, but it was the closest I've seen online.
So why not HN? Or FB? Or Twitter? Why did it work when some people ran/moderated discussions but not when others did?
There's too much to go into here, but one takeaway is that there was a system of incremental trust. New people we treat with kid gloves, see how they handle people who are smart and disagree with them. As we get to know you, everybody can relax more and have more direct, honest conversations. But when we did that, it was always full of things you wouldn't want copied and pasted to the public. Not bad things. Yikes! Just stuff that taken out of context would drive some folks nuts.
Online forums do not have that. So we're stuck desperately needing to meet and talk about complex and sometimes provocative things, but our tools are basically made for cat pictures and political memes. The social media services we have today simply are not in the public interest. There's no amount of tweaking that's going to fix that. They exist to serve base and lizard-brain impulses in various fashions.
One thing though. You're absolutely right about the dangers of echo chambers. But if you have an explicit small group, everybody knows what's going on. You know what's worse? Hell-banning, ghosting, and all of this damned AI trickery we do to one another to make people appear as if they are part of groups they are not actually part of. FB is getting so it'll stick you in that small echo chamber ... and you'll never know it. That's fucked up in more ways than one.
I set up a blog way back when blogs were first a thing, maybe 20 years ago. Started posting articles about internet, culture, tech, anything I found interesting.
Almost immediately, I had people dropping by and posting the most vile comments. Whatever I did, I did for bad reasons. I was a bad person and there just wasn't anything I could do or say to fix that.
I never learned how to mentally deal with this kind of blind anti-fandom, but I did learn an important lesson: never joke on the internet, or if you do, be very, very careful it's obvious it's a joke. Because whatever I think is funny because it's silly, obnoxious, or ludicrous? Somebody else will take seriously. And now you've got a new hater.
The net is drifting towards private communities. I think that's a good thing. This kind of environment really isn't healthy for folks.
What we're seeing is a breakdown of the bipolar world. At the same time, we're seeing the potential for massive destruction from a number of new attack vectors, and smaller and smaller actors are capable of wielding them. And warfare itself has changed from army-on-army to desultory, infinitely-lived affairs many times done using proxies and fake information.
That changes a lot. The _message_ of using tactical nukes may very well be more important to control than the actual use of them.
But these guidelines were documented and well-known.
There's a good case to be made for the use of tactical nuclear weapons at some extreme case, the nature of that case might vary. But it is very important to make sure everybody knows what conditions have to be met for this to happen.
We have many more weapons that are much more dangerous than tactical nukes. If we want to isolate them because of the fear of escalation, that's fine. If we want to include them in the mix of options that's fine too. But what we can't do is keep potential adversaries in the dark and then spring them on them. That's because the problem with nuclear weapons is their unlimited ability to quickly escalate destruction. That's the much more severe problem to deal with than what kind of guts make up a particular delivery system.
Let's say you never saw a baseball game before in your life. You know nothing of baseball. You come to visit me, so you and I go out to the baseball game.
It would make no sense at all. Who are these people? What's the stick for? Does everybody get to run at the same time? Why do they keep changing around so much?
I, on the other hand, would be fascinated, enthralled. Each player has a backstory, the history of these teams playing is involved and dramatic. And did you believe those calls? It was robbery!
It's not the baseball game, the game is the same for both of us. It's the preparation and expectations that define our differences.
Books are a particular form of artistic expression. For fiction at least, I would argue that they involve a physical object you manipulate in various ways to hear a story conveyed by an author. It's an experience. You have a special reading place, you might have a favorite beverage, there are things you expect from various genres, and so on.
E-books and online reading are a separate art form, at least in my experience. For instance, the average video viewer only watches a few seconds. Content online has been optimizing around realtime reader stats for many years now. It's a separate art with its own separate genres.
I would argue that there are certain things you can experience from a symphony that you can't from a music streaming service. But it's not for everybody. Without the background and preparation, without the context, it just seems so much of a waste of time. And perhaps it is for you. It's for you to decide.
The only thing I'd add is to not make the mistake of confusing art with information. The net primarily exists to move information around. Art primarily exists to be experienced. They sound the same, but they're not. A good author can convey feelings, thoughts, and opinions to you in a book that you'd never get from a thousand wikipedia articles or blog entries.
tl;dr not everything collapses down to a tl;dr