Cos’é il Software

Legge per i programmatori del software dei computer.
“1. Qualsiasi programma, quando funziona, è obsoleto.
2. Qualsiasi programma costa di più e ci mette di più.
3. Se un programma è utile, dovrà essere cambiato.
4. Se un programma è inutile, dovrà essere documentato.
5. Ogni programma si espanderà fino a occupare tutta la memoria disponibile.
6. Il valore di un programma è proporzionale all’ingombro del suo output.
7. La complessità di un programma si arresta solo dopo aver oltrepassato le capacità del programmatore.”
“1. L’errore che produce il danno maggiore sarà scoperto soltanto dopo che il programma è stato usato per almeno sei mesi.
2. Se il programma è stato concepito in modo tale che i dati incorretti siano rifiutati, ci sarà sempre un idiota abbastanza ingegnoso per trovare il metodo per farli passare.”
Arthur Bloch
Law for computer software programmers.
“1. Any program, when it works, is obsolete.
2. Any program costs more and takes longer.
3. If a program is useful, it must be changed.
4. If a program is useless, it must be documented.
5. Each program will expand to fill all available memory.
6. The value of a program is proportional to the size of its output.
7. The complexity of a program stops only after having exceeded the programmer’s capabilities. “
“1. The error that produces the greatest damage will only be discovered after the program has been used for at least six months.
2. If the program has been designed in such a way that incorrect data is rejected, there will always be a clever enough idiot to find the method to get them through. “
Arthur Bloch

 

Il software, in informatica e in elettronica, è l’insieme delle componenti immateriali (strato logico/intangibile) di un sistema elettronico, in contrapposizione all’hardware, cioè la parte materiale (strato fisico/tangibile) dello stesso sistema; in informatica si intendono le istruzioni memorizzate su uno o più supporti fisici che possono essere rappresentate da uno o più programmi, o più impropriamente al semplice dato o informazione. Genericamente si intende l’insieme dei programmi impiegati in un sistema di elaborazione dati[1] che gestisce il funzionamento di un elaboratore; si distingue fra:
software di sistema: quello relativo al sistema operativodell’elaboratore elettronico;
software di base: insieme dei programmi e delle procedure di utilità generale impiegabili da altri programmi;
software applicativo: relativo ai programmi applicativi progettati per particolari funzioni che possono essere a esempio la scrittura, l’elaborazione di immagini, la gestione dei dati e altro.
Il termine si contrappone tradizionalmente ad hardware (la componente fisica di un sistema di calcolo), che rende possibile l’esecuzione del software (la componente logica dello stesso). Nel tempo sono entrati nell’uso altri termini che descrivono elementi di un computer, come il firmware. Il suffisso -ware (il cui significato è «componente») viene usato anche in altri termini che indicano particolari tipi di programmi: in funzione del ruolo che hanno in un sistema di calcolo (per esempio middleware), del tipo di licenza con cui sono distribuiti (freeware, shareware), dell’edizione e altro ancora.
Software di tipo speciale si trovano sui più disparati dispositivi (p.es. un televisore, un’automobile, un cronotermostato, una lavatrice ma anche applicazioni produttive).
Software, in computer science and electronics, is the set of intangible components (logical / intangible layer) of an electronic system, as opposed to hardware, ie the material part (physical / tangible layer) of the same system; computer science refers to instructions stored on one or more physical media that can be represented by one or more programs, or more improperly by simple data or information. Generally we mean the set of programs used in a data processing system [1] that manages the operation of a computer; a distinction is made between: system software: that relating to the operating system of the electronic processor: basic software: set of general utility programs and procedures that can be used by other programs, application software: relating to application programs designed for particular functions that may be eg writing, image processing, data management and more. The term traditionally contrasts with hardware (the physical component of a computing system), which makes it possible to run the software (the logical component of the same) . Over time, other terms have come into use that describe elements of a computer, such as firmware. The suffix -ware (whose meaning is “component”) is also used in other terms that indicate particular types of programs: depending on the role they have in a calculation system (for example middleware), of the type of license with which they are distributed (freeware, shareware), of the edition and more. Special-type software can be found on many different devices (eg a TV, a car, a chronothermostat, a washing machine but also productive applications).
Il termine software ha origine durante la seconda guerra mondiale. I tecnici dell’esercito inglese erano impegnati nella decrittazione dei codici tedeschi di Enigma, di cui già conoscevano la meccanica interna (detta hardware, componente dura, nel senso di ferraglia) grazie ai servizi segreti polacchi. La prima versione di Enigma sfruttava tre rotori per mescolare le lettere.
Dopo il 1941, ad Enigma venne aggiunto un rotore, e il team di criptoanalisti inglesi, capitanati da Alan Turing, si dovette interessare non più alla sua struttura fisica, ma alle posizioni in cui venivano utilizzati i rotori della nuova Enigma.
Dato che queste istruzioni erano scritte su pagine solubili nell’acqua (per poter essere più facilmente distrutte, evitando in tal modo che cadessero nelle mani del nemico) furono chiamate software (componente tenera), in contrapposizione all’hardware.
Il senso moderno del termine deriva dalle istruzioni date ai computer, ed è stato utilizzato per la prima volta nel 1957 da John Wilder Tukey, noto statistico statunitense.
Dal 1950 l’analogia tra l’hardware ed il corpo umano e quella tra il software e la mente umana si è fatta molto forte, dal momento che Turing ha sostenuto che il progresso tecnologico sarebbe riuscito a creare, entro il 2000, delle macchine intelligenti (in grado cioè di «pensare» autonomamente) atte alla risoluzione dei problemi.
The term software originated during the Second World War. The technicians of the British army were engaged in the decryption of the German codes of Enigma, of which they already knew the internal mechanics (called hardware, hard component, in the sense of scrap metal) thanks to the Polish secret services. The first version of Enigma used three rotors to mix the letters. After 1941, a rotor was added to Enigma, and the team of English cryptoanalysts, led by Alan Turing, had to be interested not in its physical structure, but in the positions in which were used the rotors of the new Enigma. Given that these instructions were written on soluble pages in water (to be more easily destroyed, thus preventing them from falling into the hands of the enemy) they were called software (soft component), in contrast. to the hardware. The modern sense of the term derives from the instructions given to computers, and was used for the first time in 1957 by John Wilder Tukey, a well-known American statistician. From 1950 the analogy between hardware and the human body and that between software and the human mind it has become very strong, since Turing has argued that technological progress would have succeeded in creating intelligent machines by the year 2000 (able to “think” autonomously) suitable for solving problems.
Un software viene normalmente realizzato attraverso un processo di programmazione utilizzando uno o più linguaggi di programmazione ad opera di un programmatore. Se il progetto diventa complesso, è opportuno dividere il programma in uno o più moduli, che possono essere così affidati a diversi programmatori, modificati più semplicemente e riutilizzati in altri progetti.
La fase detta di compilazione, traduce ogni file del codice sorgente, scritto nel o nei linguaggi di programmazione, in un file oggetto contenente il programma in linguaggio macchina adeguato all’architettura hardware di destinazione. In seguito tutti i file oggetto attraversano una fase di linking per giungere al prodotto finale: il file eseguibile.
Alcuni software non vengono compilati in quanto le istruzioni contenute nel codice sorgente vengono eseguite utilizzando un software detto interprete.
La gestione del processo di sviluppo è caratterizzato dalla scelta di un modello di sviluppo del software codificato nell’ambito dell’ingegneria del software (Software Engineering), esistono:
Il modello classico o a cascata (water-fall)
Il modello a spirale (object oriented)
La realizzazione del software è un’attività complessa articolata in più fasi, per questo motivo spesso il software è associato ad un prodotto ingegneristico, ma se ne differenzia soprattutto per alcune caratteristiche:
è molto «malleabile»;
è un prodotto human intensive (e cioè un prodotto che richiede un considerevole sforzo in risorse umane perché si concentra soprattutto sulla progettazione e sull’implementazione).
A software is normally implemented through a programming process using one or more programming languages ​​by a programmer. If the project becomes complex, it is advisable to divide the program into one or more modules, which can thus be entrusted to different programmers, modified more simply and reused in other projects.
The so-called compilation phase translates each source code file, written in the programming language (s), into an object file containing the machine language program appropriate to the target hardware architecture. Later all the object files go through a linking phase to reach the final product: the executable file.
Some software are not compiled because the instructions contained in the source code are executed using a software called interpreter.
The management of the development process is characterized by the choice of a software development model codified in software engineering (Software Engineering), there are:
The classic or cascade model (water-fall)
The spiral model (object oriented)
The realization of the software is a complex activity articulated in several phases, for this reason often the software is associated with an engineering product, but it differs above all for some characteristics:
it is very “malleable”;
it is a human intensive product (that is, a product that requires considerable effort in human resources because it focuses above all on design and implementation).
La progettazione rimane comunque una fase distinta dalla programmazione o codifica, che corrisponde alla traduzione in un particolare linguaggio di programmazione delle decisioni prese in sede di progettazione, cioè dunque la fase implementativa.
Le distinzioni fra le attività fin qui menzionate non sono sempre chiare come vorrebbero le teorie classiche dell’ingegneria del software. La progettazione, in particolare, può descrivere il funzionamento interno di un sistema a diversi livelli di dettaglio, ciascuno dei quali si colloca in una posizione intermedia fra analisi e codifica.
Normalmente si intende con progettazione dell’architettura (o progettazione architetturale) la progettazione “ad altissimo livello”, in cui si definisce solo la struttura complessiva del sistema in termini dei principali moduli di cui esso è composto e delle relazioni macroscopiche fra di essi. A questo livello di progettazione appartengono formule come client-server o three-tier, o più in generale decisioni sull’uso di particolari architetture hardware, sistemi operativi, DBMS, protocolli di rete, e così via.
Una livello intermedio di dettaglio definisce ancora la scomposizione del sistema in moduli, ma questa volta con riferimento più o meno esplicito alle modalità di scomposizione offerte dal particolare linguaggio di programmazione con cui avverrà lo sviluppo; per esempio, in una progettazione condotta con tecnologie a oggetti, il progetto potrebbe descrivere il sistema in termini delle principali classi e delle loro interrelazioni.
Il progetto di dettaglio, infine, rappresenta una descrizione del sistema molto vicina alla codifica, ovvero che la vincola in maniera sostanziale (per esempio, descrivendo non solo le classi in astratto ma anche i loro attributi e metodi, con relativi tipi e “firma“).
A causa della natura “impalpabile” del software, e a seconda degli strumenti che si utilizzano nel processo, il confine fra progettazione e codifica può essere anche praticamente impossibile da identificare. Per esempio, alcuni strumenti CASE sono in grado di generare codice a partire da diagrammi UML che descrivano graficamente la struttura di un sistema software.
The design remains a phase distinct from the programming or coding, which corresponds to the translation into a particular programming language of the decisions taken at the design stage, ie the implementation phase. The distinctions between the activities mentioned so far are not always as clear as they would like. the classical theories of software engineering. The design, in particular, can describe the internal functioning of a system at different levels of detail, each of which is placed in an intermediate position between analysis and coding. Normally we mean by designing the architecture (or architectural design) the design ” at a very high level “, which defines only the overall structure of the system in terms of the main modules of which it is composed and the macroscopic relations between them. At this level of design belong formulas such as client-server or three-tier, or more generally decisions on the use of particular hardware architectures, operating systems, DBMS, network protocols, and so on. An intermediate level of detail still defines the breakdown of the system into modules, but this time with more or less explicit reference to the methods of decomposition offered by the particular programming language with which the development will take place; for example, in a design carried out with object-based technologies, the project could describe the system in terms of the main classes and their interrelations. The detailed project, finally, represents a description of the system that is very close to the coding, that is that it binds it to substantially (for example, describing not only the classes in the abstract but also their attributes and methods, with relative types and “signature”). Because of the “impalpable” nature of the software, and depending on the tools used in the process, the boundary between design and coding can also be practically impossible to identify. For example, some CASE tools are able to generate code from UML diagrams that graphically describe the structure of a software system.

 

Concludendo, i software di base sono quelli essenziali alle macchine o sistemi mentre quelli applicativi non sono essenziali, ma migliorano il modo di lavorare con essi.
In conclusion, basic software is essential to machines or systems, while application software is not essential, but it does improve the way we work with it.

 

Unico

 

 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *