It's nice that we agree, also for medical equipment it should really be done in something like Coq.Brendan wrote:For medical equipment, I agree, but most software isn't as critical.skeen wrote:Brendan wrote: Imagine a triangle like this:
Code: Select all
|\ |_\ | \ Skill/knowledge | \ | \ | \ | \ |_______\ Number of people
Okay, so while I like the idea of having programming be a common skill, alike mathematics, then there's something that I'd like to note;Brendan wrote:Stupid people like Bjarne Stroustrup and Simon Peyton Jones try their hardest to destroy programming for 95% of the people on earth; and amazing people like Alan Kay are trying their hardest to bring programming to 100% of the people on earth.
If somebody is to build a piece of medical equipment, which my life depends on, then I'd like them to be at the top of the triangle, this goes for programmers, as well as other engineers. Because programming correctly in a multi-threaded environment using languages alike C/C++ actually require knowledge, as proven by Therac. - And I'll agree that this is partly because of the languages.
For programming correctly in multi-threaded environments, I don't think it's the language's fault. The problems are that the "procedural programming" model is bad ( causes the need for locks, etc); and a lot of programmers simply didn't have the knowledge/experience to deal with concurrency properly.
And if you think it's the paradigms fault, then well, the language that uses that paradigm is somewhat an accomplice, and we can agree, that the use for locking is indeed troublesome, and hence you need knowledge/education and/or experience, to deal with it, that is unless you use another paradigm.
As I wrote in the other answer, implementation is actually a part of the design process, at least to me, and I already stated what my goals for a programming language is, that is mainly to be able to express my intent. And yes programming should be simple, but no simpler than I'm able to express my intent, without having to deal with breaking it into smaller bits, than I'd like.Brendan wrote:I'd argue that designing complex systems is hard (including breaking large things into sufficiently small things that can be implemented easily); while programming should be simple (laborious rather than complex). Like I said in my previous post, the tools for software design either don't exist or suck a lot, so nobody uses them, so design problems end up being implementation problems.skeen wrote:Also I'd like to argue, that programming is not simple, simply because of the immense required complexity of large software systems (i.e. not language complexity, even though that may be contributing), and because of the rather complex mathematical foundation, also Stroustrup is not trying to destroy programming for the 95%, he's trying to make it more accessible! - Which is quite a task with C++ indeed!
Just did, and there's more truth in that, than one can be comfortable with, however this is always the case, when several people are in charge, now isn't itBrendan wrote:Just for fun, do a google search for "designed by committee"...skeen wrote:Alan Kay, on the other hand, is indeed doing some fantastic work! Compared to Stroustrup however, he's got the easier approach, as he's not bound by billions of lines of code, which cannot be broken, and an entire C++ committee with various interests and intents for the languages. He's able to focus on one intent, that is bringing programming to the 100%, that being said, Etoys is actually a domain specific programming language in that sense (even though it may be general purpose).
If I were to cut a lot of wood, and there were no proper saws, then I'd rather have a weird belt-sander. That is without any saws that can do it on their own, I'd rather use bring in improper tools and get the job done.Brendan wrote:Because it's the wrong tool for the job. It's like using belt-sander to cut wood - it's technically possible, and you could improve the belt-sander to make it cut wood better, but you're doing something very very wrong.skeen wrote:I partly agree, to deal with the complexity of large systems, you definitely need software engineering tools, however if programming tools are able to help you out with the same task, why not make sure of that as well?Brendan wrote:To deal with the inherent complexity of large projects, you need software engineering tools and not programming tools. These are things like UML diagrams, and breaking large/complex systems into smaller/simpler things when the system is being designed (before anything is implemented at all). People that think things like generics are going to help with the "inherent complexity of large projects" problem are trying to solve the wrong problems in the wrong tools - these things do not help at all, they only make the "complexity of programming languages" problem worse.
What I'd end up, is a swiss army knife, that's able to do a lot of things. I'll end up with something which is general purpose! - While I'll not be able to do things as well as some domain specific tool, then I'll be able to do everything reasonably bad!Brendan wrote:If you did improve a belt-sander to make it cut wood better, it's very likely that you'd just end up with a tool that isn't as good at sanding wood. Programming languages are tools to help with implementing the design, one small piece at a time, until the entire design is implemented. They aren't a part of the solution for design complexity, just like a belt-sander isn't part of the solution to cutting wood.skeen wrote:Programming language tools is not *the* solution, it is *part* of the solution for complexity.