Programming sucks.
I just had an entire app project become inoperable on me. Gonna have to start all over...tomorrow. Here are some haikus on app development:
---
Emulator works
It only took five hours
Fetal position
---
What's project cleaning?
Stackflow says it will help lots
Project works no more
The last time I did any programming the whole world was using C. We, of course, learned Turbo Pascal. Towards the end I was just going for a clean compile. I didn't even give a shit if the fucker ran or not. I still pulled a C. Then I took an arcane grad-level course in stress analysis in composite materials. How do you do stress analysis in composite materials? You compile Fortran for the DEC Alpha in the basement. In 1998. Fuckin' Fortran. Sometimes Pro Tools gets its preferences upset. Does it tell you its preferences are upset? No, that would be too logical. Does it tell you that you need to trash preferences and start over? no, that would be too helpful. What does it tell you? I used to have to use a program called EASE to model rooms. This meant assembling the polygons - in 3D space - that make up a room. All of the room. The polygons must be contiguous - no air spaces. And you had to make sure that they were "facing" the right way - if you drew your polygon clockwise (remember - 3D space - Windows NT 3.51 - 1280x1024 screen) it was inside out and no longer "sealed" the room. EASE would make a sound like breaking glass and throw up a WinNT-era gif of a burning computer. And that's why I don't program.
Fixing problems is less a matter of logic, and more a question of how many goats you have to sacrifice and whether the moon is full. No wonder you don't program anymore.Turbo Pascal
The devil's gangrenous toenail. The GUI framework for the flagship product where I work is in Turbo Pascal.
Turbo Pascal may be reviled today, I don't know, but when it appeared in the world, it was some primo, A-1 tech. Like magic, I know, I used it. It came on a 360K floppy, a single floppy; didn't require a hard drive to run; contained a decent editor, compiler, and linker that could make your (then new-fangled) PC sit up and dance. It's all relative.
One day, software engineering will become a proper engineering discipline. I don't know when. Maybe it is, in the case of the software that they put on spaceships that has to be written and rewritten and tested and proven a load of times. I'd like to think so. All I know is that doing software well will always cost more than doing it badly. Therein lies the rub.
At a certain level, this is what a test-driven development is meant to accomplish. You write all the tests that show your software is working within specification, then you write the implementation to pass the tests. In practice? You've got the halting problem, which says that you can never be 100% sure that your process won't freeze unless you severely constrain how you program. You've got a workforce primarily composed of arrogant kids out of college who would rather make a name for themselves working on "sexy" projects than write documentation and audit code all day. And you've got the managers above who prioritize "it works" over an elegant solution.
Right, this is what I had in mind. There are definitely better ways to develop software than others, TDD is one. That's what the idea of SE means to me. Halting problem says that there doesn't exist a terminating decision procedure for all programs. You can still prove that a program terminates using Hoare logic or something similar.
No it won't. You need a stable body of knowledge to have an engineering discipline, and attempts to build one for software do more harm than good; see UML architectural astronautics and the patterns cargo cult. Engineers wouldn't have one either if they got to replace physics when they found it inconvenient.
I wish people would stop talking about software engineering and software architecture. We have a bad habit of believing analogies too much in software. It works well in AI, it doesn't work well in how we think about what we do. What we do isn't really like engineering at all. We could become an actual profession, with an enforceable code of ethics, but I doubt that will happen either. It has fewer advantages than it used to, and people would balk at not being able to form corporations for some sorts of software companies.
You make a good point regarding software engineering having no stable body of knowledge (apart from project management - The Mythical Man-Month?). I agree that analogies are shit, unfortunately the practice of using them to explain things is easy to pick up and hard to lose. Have you read "The cruelty of really teaching computer science" by Dijkstra? A lot of what you have said reminds me of that essay (regarding analogies). Program derivation sounds interesting, though. I'm tempted to say that that would count as "Software Engineering". Do you know anything about this?
Analogies aren't necessarily shit, you just need to keep in mind how deep (or shallow) they are. "Software engineering" is a very shallow analogy. You can use it to give laymen an idea what it is you do, but you don't want to believe it too much yourself. The predicate transformer stuff Dijkstra advocated was beautiful. Pick up a copy of David Gries's The Science of Programming if you can find it. Formal methods aren't worthwhile for programs that aren't really high risk though. Even in mathematics you only get that formal for important and hard theorems. Dijkstra was great, but he was still a product of his time, and Dijkstra's time was still a little too in love with formalism because of all the exciting stuff happening in mathematical logic in the first half of the century. By all means prove your space shuttle control system and pacemaker correct, but trivial CRUD forms are fine if they're legible and have some tests.
However, on September 23, 1999, communication with the spacecraft was lost as the spacecraft went into orbital insertion, due to ground-based computer software which produced output in non-SI units of pound-seconds (lbf×s) instead of the metric units of newton-seconds (N×s) specified in the contract between NASA and Lockheed. The spacecraft encountered Mars on a trajectory that brought it too close to the planet, causing it to pass through the upper atmosphere and disintegrate.
That's the Soviet Union's official "Dr. Evil" space station, Polyus (or Skif-DM): http://en.wikipedia.org/wiki/Polyus_(spacecraft) It was put together in a crash program to counter Reagan's SDI initiative. It was a scary fucker - giant megawatt CO2 laser, "nuclear space mines", 23mm cannon, all sortsa good shit. The Soviets put it up in May '87 but because things were a little too fancy with the insertion, it had to go through some complicated maneuvers to actually get into orbit - detach from the Energia, rotate 180 degrees and fire boosters. Depending on who you ask, it either didn't respond to inertial sensors or somebody committed a sign error. Anyway, it detached from Energia, rotated 360 degrees and fired boosters, thereby slowing its velocity and de-orbiting into the Pacific. It wasn't declassified until the 2000s, at which point nobody could make headlines about failed Soviet doomsday satellites. "I'm not entirely sure the error was accidental, although I've found no discussion on the subject," he said conspiratorially from under his tinfoil hat, "as is often the case with successful interdictions."
I've got quite a few friends currently writing code that will be in orbit within a year or two, and most of them already have quite a bit up there already. Mostly CSTOL code. Software is constantly shit on, budget-wise. The mechanical and electrical engineers take a pretty nice chunk, which is warranted, but the low-balled budgets that NASA receives and awards to contractors seem to really hit the software engineers hard. That isn't all bad though; they're the most unregulated branch of the engineering triumvirate (mechanical, electrical, software), the least subjected to QA and paperwork. Of course, that won't last. You are absolutely correct in your assertion about quality... it's all about how much money you're willing to throw at it. Unmentioned case #1 Unmentioned case #2 There are many more examples, most of which are likely classified. Hardware is important too... don't mount your velocity sensors upside down
If you haven't seen them, you might enjoy the old NetPositive haiku error messages.
The thing about programming is people normally go for the bigger languages even though there are smaller, more appealing languages which are just as powerful. Don't be afraid to go after languages that are aesthetically pleasing you can get the same thing done in your own way depending on what the language is built for. (my favorite atm is Haxe and GoLang.)
http://haxe.org/
http://golang.org/ C plus plus (C is fine but Hubski is hiding the two pluses for some reason.) too me doesn't look like something I would enjoy sitting at my computer typing all day. Please can argue it's complete bullshit but honestly I like a certain aesthetic.
If you're gonna put brainfuck on there, you might as well add whitespace, too. Edit: Holy cow, parentheses in a link worked first time round!