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. ...


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

(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 ...


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.


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

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

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

"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

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

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. ...


4

Generally speaking, if you want to present some applications of the theory, it's more effective to start with applications first and teach the theory that's needed for that application, rather than select a collection of theory and then search around for some application of it. So, one way to approach your question is to ask why the department wants ...


4

The areas of set theory you refer to are generally rather abstract and don't seem to have a lot of applications. Also, the concept of "application" is different in math than in CS. Anyway, though applied CS is so vast now that even very abstract concepts can find applications somewhere. Here is one possible link. This paper Tree Automata Make Ordinal ...


4

Tests can be written based on either a formal spec or an informal spec. Verification always requires a formal specification. Formal verification might be manual or automated, or some combination of the two; it depends what techniques you use. Typically, it's hard to do completely automatic verification -- it's more usual that verification systems automate ...


4

What is a high level language? What is an embedded system? Once upon a time C was a high level language and a Raspberry Pi would have changed the outcome of major wars, now almost every microcontroller can be programmed with C and we use Pis that run a full-blown desktop OS to turn servo motors. Let's say a high level language is a language that has strong ...


4

There are many pieces of software involved in rendering an "A" when you type it in to a program like a text editor. First, the key press is handled by the hardware of the keyboard, which sends a signal to the OS's keyboard driver. This is where stuff like the state of the shift key and caps lock get noted (though the information about which modifier keys ...


3

See the Voice transformation project from the The Center for Speech Technology Research at the University of Edinburgh. Thesis: Transforming Voice Quality and Intonation by Ben Gillet. It doesn't do exactly what you are asking, but something similar; it tries to change the voice of a recording to another voice. Abstract: Voice transformation is the process ...


3

The conference paper "StackOverflow and GitHub: associations between software development and crowdsourced knowledge" looked at the correlation between activity on StackOverflow and GitHub for users who have accounts on both. From the abstract: In this paper we investigate the interplay between StackOverflow activities and the development process, ...


3

Expanding Pradhyuman's answer. From Wikipedia: Software Engineering can be divided into ten subdisciplines that correspond to distinct phases of the software development process. They are: Software requirements: The elicitation, analysis, specification, and validation of requirements for software. Software design: The process of defining the architecture, ...


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