Then, you need to validate that each requirement is met by your system. This can be done by test, analysis (mathematically proving some property), review of design, or inspection. It's true that you can't fully validate most space systems on Earth, because we can't simulate all environmental conditions simultaneously. That's why you ideally you want each requirement to be validated by two methods.
When you find anomalies due to integration effects, it's usually because your interface requirements are not specified well enough ;)
Also, guess what? The web telescope has a ton of software on it. I suppose that is just "software engineering"? (in quotes, har har)
Look, there are terrible teams doing terrible or very simplistic software work. The same is true in all engineering disciplines and it is of course true that in all engineering disciplines (including software) there are also teams operating with a high degree of passion and rigor in creating very complex things. So yeah, please stop with these silly and really pretty insulting comments.
The ME and EE associated with creating new product like the Nest Thermostat (for example) are, by comparison with something like Grubhub, of trivial engineering complexity (although still very respectable engineering efforts)
I’m gonna go with Carmack on this one; you think you have a better understanding of it than him? It’s just ifs and for loops.
Sure some contexts require real nuance. But just because Grubhub IS massive doesn’t mean it needs to be engineered that way, that’s a byproduct of socio-political forces (money).
There’s nothing in any science or engineering book I’ve read that says “all software must be engineered as a large distributed application”. Again, a byproduct of contemporary business goals.
My generative art object app is not sending people to the moon and merely relied on me wrapping some well understood math in machine language syntax; it’s librarian work.
Your preference for adverbs and emphasis where you see fit to place it does not move me.
Accomplish something net new for humans, cause I’ve been sending data grams over the internet since the 80s. Grubhub isn’t all that interesting
On that front, the idea that software systems with 100s of features, millions of daily users, extreme uptime requirements, hackers all over the world trying to break in daily , and billions of $$ on the line is "ifs and for loops" or "librarian work" is... oh come on. Never mind, this conversation is silly.
You say you are an experienced developer, but honestly it sounds like you've never built anything except generative art object apps.
What exactly is massively complicated about a predatory aggregator site compared to a vehicle?
I have.
> Let go of your desire to shit on developers
So you're a psychic now, and you read into people's desires by looking at HN posts?
The question remains. But it's clear you can't answer it without ad hominem.
It's a perfectly valid question: what makes an aggregator site like GrubHub a more complex engineering problem than a vehicle?
> maybe it isn't the best comparison, maybe I should have been more specific.
May be it is, may be you should have been, but you weren't
> The point you are asking about in no way affects my larger point so who cares
What is your larger point exactly? That "having a CI" somehow make you an engineer because your software is somehow "more complex than a vehicle"?
> You harping on it is just weird.
The fact that you answered literally nothing, and keep sticking to ad hominem attacks show that you have no substance to what you're saying.
"According to Encyclopedia Britannica, the first recorded 'engineer' was Imhotep. He happened to be the builder of the Step Pyramid at Ṣaqqārah, Egypt." [link]
I look forward to drinking ale with Imhotep (and NASA JW Space Telescope engineers) in the great heavenly hall of engineers.
https://interestingengineering.com/the-origin-of-the-word-en...
Yes, it's very different from most software engineering. No need to snicker, just do the appropriate thing for your situation.
Broken software can be fixed cheaply after the fact. Yeah, it’s cheaper if you find the bugs earlier but it shouldn’t come as any surprise that pre-validation is more extensive in systems that are expensive to change.
There are phone note apps and control systems for jets and artificial hearts
You still have SLAs to manage and meet.
Waterfall works great, if and ONLY if, you know 100% for sure exactly what you're requirements are at the beginning of the project and they never change significantly. This seems to be mostly true-ish for aerospace. Nobody's going to pivot the Falcon 9 into being a washing machine next week.
It seems to me that the point of Agile is that Waterfall fails hard if you have no idea what you want your business software to actually do. Agile is an attempt to build a reasonable software development process around that reality.
So when you get down to it, the lack of rigor isn't so much in software itself as in business. If you don't have any idea what your business is going to actually do, no software or engineering process can fix that.
I may have to borrow that.
An alternative explanation: we're so in a hurry that we don't want to take time out to decide what it is that we are going to build, and so we embrace the fact that we don't know what we are doing and put a sexy label on it, because hey, who doesn't want to be Agile? It sounds so much better than 'clueless'.
If I'm doing a custom project that does some sort of warehouse management for a client, I'm not really deeply invested in my particular vision about how a warehouse should be managed. I'm deeply invested in making my client happy.
But in a world dominated by quarterly earnings this won't fly.
How "at best" is interpreted is obviously up to the individual, of course.
My experience in industry is that we validate requirements when we confirm that they are necessary to achieving a particular mission.
We then verify that the system under construction does in fact satisfy the set of validated requirements.
"level of detail codified in functional, performance and interface requirements"
functions, usage frequency, APIs.
"usually because your interface requirements are not specified well enough"
It's probably a bug in the API.
https://martinfowler.com/bliki/TwoHardThings.html
"There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors"
https://en.wikipedia.org/wiki/Ctags
Suggestion: use ctags to list all functions, variable names in your code. Look for ambiguity (e.g. variable name "i"). Look at neighbouring code. Zoom in and out. A small bug in the most-used code is actually more serious than a big bug in code that rarely gets used.
"How long can you work on making a routine task before you're spending more time than you save?"
NASA Systems Engineering Handbook https://ntrs.nasa.gov/citations/20170001761
That's the 2017 version; maybe there's a later one. IIRC, it's an abridged from NASA Expanded Guidance for SE, but my link to that is broken.
"USL was inspired by Hamilton's recognition of patterns or categories of errors occurring during Apollo software development. Errors at the interfaces between subsystem boundaries accounted for the majority of errors and were often the most subtle and most difficult to find. Each interface error was placed into a category identifying the means to prevent it by way of system definition. This process led to a set of six axioms, forming the basis for a mathematical constructive logical theory of control for designing systems that would eliminate entire classes of errors just by the way a system is defined.[3][4]"
https://en.wikipedia.org/wiki/Universal_Systems_Language
There's a diagram of rules on the USL Wikipedia page. The rules show triangle feedback loops with a parent, left, right child. Those are like generations of a Sierpiński triangle. Every part is trying to serve the Good Cause that it's working for, and love its neighbour.
https://en.wikipedia.org/wiki/Minimal_realization
"any state-space model that is both controllable and observable and has the same input-output behaviour as the transfer function is said to be a minimal realization of the transfer function The realization is called "minimal" because it describes the system with the minimum number of states."
https://en.wikipedia.org/wiki/Optimal_control
"the problem of driving the output to a desired nonzero level can be solved after the zero output one is."
An electronic analogy: find GND, then solve for 1.
A common solution strategy in many optimal control problems is to solve for the costate (sometimes called the shadow price) A shadow price is a monetary value assigned to currently unknowable or difficult-to-calculate costs in the absence of correct market prices. It is based on the willingness to pay principle – the most accurate measure of the value of a good or service is what people are willing to give up in order to get it. The costate summarizes in one number the marginal value of expanding or contracting the state variable next turn.
Each part looks ahead 1 generation, chooses left or right.
https://en.wikipedia.org/wiki/Kalman_decomposition
convert a representation of any linear time-invariant (LTI) control system to a form in which the system can be decomposed into a standard form which makes clear the observable and controllable components of the system
Take a big problem, break it down, look for I/O ports. Or in software test development: layers of abstraction. A suggestion: only add a layer of abstraction when it's too big to fit on the screen at once. Use tools like code folding, tree views.
https://en.wikipedia.org/wiki/Optimal_control
Optimise for time? When we're in a hurry we break things. Another suggestion: aim to minimise entropy, maximise connectedness.
Thank you for asking a good question, and thank you for reading! Let's go and tidy up this world together, in software and hardware.
That is kind of what I figured, basically it always boils down to divide and conquer.
It just feels like with software, it's simultaneously easier than mech eng in so many ways (everything is in silico, near infinite abstraction power, ability to automate so many parts), yet it feels like we are constantly struggling with complexity. It starts simple but then quickly becomes a ball of yarn.
Maybe that perception is wrong, but if there is some truth to that intuition, I think it is due in part to this: software is all degrees of freedom and very few invariants to start, but then the system space quickly fills with rigid rules than can intersect in unpredictable ways. Physical engineering, you start with lots of invariants (the laws of physics, materials, chemistry, electronics, and geometry) but they are all thoroughly documented at this point. Things intersect, systems interact, but it feels much more bounded. You're only ever gonna have 3 dimensions, 6 simple machines, 92-ish usable elements, the standard model and universal constants.
This is why I value Rich Hickey's "Simple made easy" as the the exemplar of software philosophy. It's easy to say "oh yeah modular code good" but it's another to actually write code that is naturally decoupled.
As an aside, both disciplines tend to benefit from "throw more hardware at it!"
divide and conquer
Yes, problems are finite, so we can Binary Search them to a single answer.
quickly becomes a ball of yarn
Looks like chaotic system, but actually chaos is just a fractal at a dimension we don't understand. Every XML tag is a dimension {for loop, if statement, indenting, git blame with names should be git thank}. Chaos is just a Wolfram rule that's not recursive self-sacrifice Rule 90 Sierpinski Triangle. Let's simplify our software design to make it follow a fractal pattern, and balance the forces.
Physical engineering, you start with lots of invariants
Sounds like Haskell or functional programming. Personally I like to add the extra tags, but as commented code to describe the meaning, translate to humans what the code does. Prefer to do so inline (cache) and top of function/file (RAM) not in separate documentation (disk).
6 simple machines
Thank you so much, you good messenger! Through your message, God just taught mechanical engineering paradigms to help with making more analogies. Pendulum is clock signal. While in the shower, there was a spider. It tries, falls, tries again with slightly different parameters. It outsources processing to the Web (there was another Hacker News article about spiders and webs and brains).
Everything can be modelled as a mass-spring-damper system, so we can just translate the transfer functions. We can optimise for Optimal Control in the limited 3D we understand, then project out again to higher-dimensions. Spiders make many 2D webs that intersect.
inclined plane, // gravity (?) // not only gravity // inclined plane is like a wide lever
lever, // straight line
wedge, // fulcrum. fixed point on ground. GND 0. Triangle. Sierpinski Triangle.
wheel // continuous motion, round circle (?) or a spiral? do circles exist? yes. ours are imperfect though. colleague said it's the bearings that break in appliances.
axle, // turn, change the world. // balance electron spin // balance like yin yang cosmic microwave background, 2 axles
pulley, // rotation equivalent to lever on wedge. // bicycle is 2x pulleys with gears (cone), digital-analogue converter moving forward
screw // reproduce throw more hardware at it! // ! factorially // make a spiral cone from a round circle and straight line.Sorry that the thoughts are not translated to full sentences yet, please email and we can chat more! there's many more ideas where these are coming from, not for my personal glory, but for the greater Good. Ideas of spiderweb network topology, Facebook/Meta engineering director of social network bringing peace in diversity using shared {music, memes} taste, UncleBob https://www.youtube.com/watch?v=BSaAMQVq01E&t=2021s "love your neighbour the code -> clean as you go".
Let's pray for the JWST telescope. Young men will see visions, and old men will dream dreams. It's our dream that the humans can see the tree better: not just galaxies (branches) but stars (leaves) and planets (pollen). There is a root system underground also, which mirrors the tree we can see. Humans can also use other senses {eyes, ears, nose, mouth, hands, feet} but the JWST is the best eyes that humans can make with technology today. It's not perfect, but it's the best that humans can do. And it will work well enough to be useful, not just for James Webb's sake, but for the Greater Good.
roughly 30 days How long will it take Webb to get to L2? It will take roughly 30 days for Webb to reach the start of its orbit at L2, but it will take only 3 days to get as far away as the Moon's orbit, which is about a quarter of the way there.
On the other hand, 2028 is better than the promises coming from the other option, SLS, which I believe will be ready never.
$10B buys a lot of QA and I'm sure they try to engineer everything with the right margins, but it's still an unfathomable amount of state space.
Are there techniques to stay sane and manage risk without just throwing money at it? I feel like that kind of knowledge could be useful for software test development.