16

In contrast to what the nay-sayers say, there are many effective techniques for doing this. Bisimulation is one approach. See for example, Gordon's paper on Coinduction and Functional Programming. Another approach is to use operational theories of program equivalence, such as the work of Pitts. A third approach is to verify that both programs satisfy the ...


12

I would like to refute my hypothesis that all safety-critical software (that is, software where errors can have catastrophical consequences, either in terms of human lives or high material costs) is a real-time software (where tasks have timing constraints) by finding interesting counterexamples: systems without timing constraints which are safety-critical. ...


11

While I'm not aware of research on productivity, there's been research on comprehension. Philip Wadler has been collecting links to papers on this topic: see this post and this one.


11

As a graduate student in computer science, who has exposure to research in fields other than computer science, and whose research group works in an area of computer science where statistics can be fruitfully applied, I can offer my experience; your mileage may vary. In general, even the most well-meaning scientific research can fail to rigorously apply ...


10

The intuitive answer is that if you don't have unbounded loops and you don't have recursion and you don't have goto, your programs terminate. This isn't quite true, there are other ways to sneak non-termination in, but it's good enough for most practical cases. Of course the converse is wrong, there are languages with these constructs that do not allow non-...


10

Yes, there are plenty of studies on this topic. Of course, the question is too general to answer for all kinds of software development projects, but there is evidence from several contexts that support the notion that properly doing requirements analysis will have a positive impact on the implementation stage. This evidence has been partially collected into "...


10

See Code Complete, By Steve McConnell, Table 3-1. He compares the average cost of fixing defects based on when they're introduced and detected. Detection at construction time costs 5-10 times more than detection at requirements time, and 10-100 times more post-release. The table is based on the following sources: "Design and Code Inspections to Reduce ...


10

To elaborate slightly on the "it's impossible" statements, here's a simple proof sketch. We can model algorithms with output by Turing Machines which halt with their output on their tape. If you want to have machines that can halt by either accepting with output on their tape or rejecting (in which case there's no output) you can easily come up with an ...


8

Specifically on productivity, Hanenberg has investigated the impact in development time when the same task was implemented in Java (static) vs Groovy (dynamic). Their results were described in the following paper: Static vs. dynamic type systems: an empirical study about the relationship between type casts and development time, 2011. There's also been ...


8

It was very common for early patterns research to put a lot of emphasis on the "intended use" of a pattern, over and above any structural differences in the implementation. Then, people who were at that stage of architectural maturity where they were "doing patterns because patterns is what you do" developed long, often elaborate explanations on why these ...


8

The main reason why computers are complicated is because they are really optimized to deliver the maximum speed. There are a lot of places in a computer where information is stored: processor registers: here the speed of memorization is really high, but this memory is very expensive; random access memory: slower and cheaper then processor registers, but ...


7

Architecture generally refers to a design-level structure or organization for an entire system. Platform generally refers to something (an operating system, a library, a programming language, a programming environment) which you can build other things on.


7

(I did some extensive searching and found material that answers my question. I liked Patrick87's answer, but I found this to be more complete.) The answer to the question lies in a careful examination of the philosophy of Computer Science. In Computer Science, three intellectual traditions meet (or collide, if you wish) in a single discipline: the ...


6

Generally there are a lot of notions of interfaces in computer science. You should probably say that you are talking about about design patterns. In the corresponding Wikipedia article, there is a classification of different patterns that clears things up: The mediator pattern is behavioral (about communication between interfaces) and unifies several ...


6

Since you are asking on CS.SE rather than StackOverflow, I presume you are looking for a principled look at the fundamental underlying problem and principled solutions to the general problem, from a scientific/conceptual perspective (as opposed to a "quick hack" or a engineering solution that'll work for your specific situation). So, that's what I'll try to ...


6

The last time somebody asked this question, I replied: why not just use an existing language? What you have right now is an API. You can provide a library in which your commands are function calls, or method calls, or whatever suits you. This saves you from having to design and implement a language, and it saves your users from having to learn yet another ...


5

"Is there any scientific research or paper that suggests a certain number of evaluators for such a rather theoretical approach?" There is a statistical method to calculate the correct sample size for an experiment. This method is called a "power analysis" [1]. It calculates the minimum sample size needed to verify that an experiment's results are ...


5

There are differences. Most of them are subtle enough that you wouldn't care, but they generally differ either in intent or in implementation. The overarching idea is to provide class A with access to the functionality of class B, without A having to care that it's B doing the work (so that a class C can be substituted without any of these objects having to ...


5

The important thing is to understand that real-time software is a strict subset of "software with timing constraints". If you want to be nitpicky about it, all software has timing constraints: if the algorithm is correct, but it's not gonna give you the correct answer until one billion years from now, then it's not very useful. So one can make a quite ...


5

This is actually an excellent question. The fast answer is that we are not good enough yet to make them simple. As Pascal said in his 16th Provincial Letter : "Je n'ai fait celle-ci plus longue que parce que je n'ai pas eu le loisir de la faire plus court". In English: "I wrote a longer letter, because I did not have time to make it shorter". Similarly, ...


5

"Underlying this fact is that all [programming] languages serve the same purpose: to turn human thoughts into the 1’s and 0’s that the computer understands." That statement is clearly wrong. Malbolge, for instance, was specifically designed to be counter-intuitive. The purpose of all soucre code written by developers is, that other human beings are able ...


4

Not a formally rigid answer, but here it goes: The problem in determining if it halts or loops forever. Looping on finite collections one element at a time or between an interval of numbers is ok. EDIT: Obviously, this will only work if the iterated collection or interval are prohibited to change (e.g., by immutability) when it is being iterated (or at ...


4

See Terminator and AProVe. They tend to rely on heuristics, and I'm not sure if they clearly describe the class of programs for which they work. Still, they are regarded as state-of-the art, so they should be good starting points for you.


4

Yes, it can be possible. One common way of solving such problems is considering an extra (monotone) uncomputable parameter depending of the code as a part of input. The complexity of the problem having that parameter can be severely reduced. We cannot compute the parameter, but if you know that the input instances you are dealing with have small parameter ...


4

There was a presentation on ICSE 2011, at the New Ideas and Emerging Results track, entitled "How do programmers ask and answer questions on the web?". They only had initial results, but they sounded very interesting and promising. Maybe you could contact the authors if you need more info (they're from the Dept. of Comput. Science, University of Victoria, ...


4

The arrows mean distinct things. This is a UML (unified modeling language) diagram. Rules for reading and writing these diagrams are pretty well-established, and you should be able to look up some references. In that diagram, the hollow arrow means generalization (i.e., inheritance, IS_A), and the hollow diamond means aggregation (i.e., a kind of ...


4

Your best bet is to go with major open source projects (Apache, Open Office, Mozilla, MySql, perhaps Linux). Since these are done by large online communities all communication occurs online through bug databases and forums or mailing lists (which are usually archived). If they do code reviews they may be archived with a tool like Review Board or will be ...


4

No, not all safety-critical software is real-time. Suppose you have an industrial batch process that generates acidic waste, which must be neutralized by being mixed with an appropriate amount of alkali before being poured down the drain. It's important to use the right amount of alkali: if you use too little, your waste is still acidic; if you use too ...


4

Your question seems to be based on the misunderstanding that software development = computer science. They are not the same thing. Your questions starts out asking about software development, but then ends by asking about the roots and scientific aspects thereof, which brings you to computer science, so it is not entirely clear what you want. If you want ...


4

There is no universal objective answer to the question of how to tell what counts as theory and what counts as practice, or what counts as science vs engineering; the precise dividing line between theory and practice, or science and engineering, is subjective and a matter of opinion. Those terms are not precisely defined -- they are fuzzy, subjective terms. ...


Only top voted, non community-wiki answers of a minimum length are eligible