Beaucoup d'entre nous, y compris moi, ont commencé leur vie de programmation avec des programmes écrits sur ordinateurs personnels , quelque chose comme
10 PRINT "ENTER RADIUS"
20 INPUT R
30 PRINT "CIRCUMFERENCE="; 2 * R * PI
40 PRINT "AGAIN?"
50 INPUT A$
60 IF A$="Y" THEN GOTO 10
70 END
Bien sûr, le BASIC basé sur le numéro de ligne était susceptible de créer du code spagetti, également parce que la plupart des dialectes BASIC manquaient des instructions structurelles comme WHILE
, faisant tout sauf la boucle FOR
- avec IF
, GOTO
et GOSUB
. Je parle des dialectes BASIC avant 1991, lorsque QBASIC et Visual Basic sont apparus.
Bien que les dialectes BASIC aient pu promouvoir un mauvais style parmi les programmeurs en herbe, des projets commerciaux plus importants ont-ils été créés dans un tel dialecte BASIC? Si oui, comment ont-ils réussi à vivre avec et à contourner les lacunes évidentes?
Par "sérieux", je veux dire:
Sûr. Avant les événements Altair/MITS/SWTPC/Kim/Sinclair/Pet/RadioScrap/OSI/Apple, il y avait une charmante petite machine connue sous le nom de IBM 51 . Il y avait BASIC dans ROM , un gros lecteur de cassettes (ou deux), 8 Ko de mémoire. un écran de 24 lignes et une imprimante, le tout pour la modique somme de 10 000 USD - un ordre de grandeur moins cher que votre mini classique. Initialement conçu pour les scientifiques ( APL in ROM était également une option), mais quelques types comptables l'ont découvert, et a commencé un engouement: chaque petite entreprise en voulait un. Avec un logiciel personnalisé, bien sûr. Le 5110 a suivi, avec les lecteurs de bande remplacés par des disquettes 8 ".
Un logiciel commercial? Galoons.
Pouvez-vous dire le grand livre général, la paie, les comptes créditeurs, les comptes débiteurs, le contrôle des stocks et la facturation? J'y suis allé, je l'ai fait - en BASIC. Factures de services publics, inventaire de voitures neuves et d'occasion, ramassage des camions à ordures et calendrier de livraison des boissons? Ouaip - BASIC. Vous voulez suivre minerai de fer des mines aux trains sur les navires ... BASIC. Tout ce qui n'était pas surélevé se faisait probablement en BASIC. Commercialement, je veux dire. (Parce que RPG II ne compte pas ;-).
Comment contourner les limitations?
Eh bien, la première chose que vous avez faite a été de renvoyer le client à IBM pour plus de mémoire, car qui pourrait écrire quoi que ce soit de sérieux en 8 Ko? Vous avez simplement eu pour en avoir 16. Et deux lecteurs de bande, si possible, parce que la théorie des automates mise à part, le tri par fusion sur une seule bande est, enfin, un peu lent.
Oh, désolé - vous vouliez dire les limites de BASIC.
Eh bien, vous deviez gérer vos ressources assez soigneusement - des choses comme numéros de ligne - parce que vous ne vouliez pas en manquer; une vraie douleur à l'arrière pour avoir à renuméroter une section entière, et tout taper à nouveau, sans perdre accidentellement une ligne ou deux de code.
Non - je plaisante. Nous n'avons pas eu ce problème jusqu'à ce que des micro-ordinateurs, des ordinateurs personnels soient apparus, avec un interprète BASIC qui ne pouvait pas faire de renumérotation par lui-même.
Nous avons également utilisé la modularité - où vous avez appelé un nouveau programme, l'avez exécuté jusqu'à ce qu'il se ferme et revenez au programme appelant. Un gosub sur les stéroïdes (parce que vous avez plus de mémoire à utiliser), mais beaucoup plus lent (car il a fallu un certain temps à la machine pour trouver le programme sur la bande, et le charger, puis rembobiner et trouver le programme d'origine et charger ce retour...). Un peu comme un fork et un exec, mais sans le fork, seulement mieux car tout l'espace mémoire a été partagé.
Une utilisation rigoureuse des conventions a également aidé - vous savez, comme "vous DEVEZ toujours cibler un GOSUB sur une ligne de commentaire qui dit ce que fait cette routine, et vous DEVRIEZ faire la même chose pour un GOTO lorsque cela est possible. Des trucs comme ça. Oh, et - programmation structurée , un peu plus tard - "par convention" à nouveau.
Certains sont même allés un peu à l'extrême: OAOO , YAGNI , TSTTCPW , couplage, refactor sans pitié, ce genre de choses. Pas par ces noms, bien sûr. (Voir aussi: Ecclesiastes ;-)
Les jours de gloire.
Le premier logiciel sur lequel j'ai jamais travaillé était un programme GW-BASIC de ligne 8k que la société a écrit dans les années 80 pour utiliser le calcul de transfert de chaleur pour le dimensionnement et la tarification des équipements de chaudière. Bien que le code soit complètement incompréhensible, il a si bien fonctionné qu'ils l'ont utilisé pendant plus de 20 ans.
C'était la force de BASIC qu'un ingénieur en mécanique avec un manuel de référence pouvait réellement écrire des logiciels utilisables de qualité (à l'époque). Avant BASIC et la prévalence du PC, une telle chose aurait été inouïe. Vous auriez besoin d'embaucher une équipe d'ingénieurs informaticiens et éventuellement d'opérateurs informatiques pour programmer et travailler à partir d'un ordinateur central partagé. Tout cela aurait été beaucoup trop complexe pour que l'ingénieur mécanicien typique puisse le saisir en peu de temps.
Donc, certainement BASIC était très utile au-delà des amateurs d'ordinateur à domicile, c'était la première introduction de nombreuses entreprises dans le domaine de l'écriture de logiciels personnalisés en interne pour un prix abordable sans équipes d'experts.
Oui, de nombreux produits commerciaux et autres développements "sérieux" ont été réalisés en BASIC. Pour comprendre pourquoi, vous devez comprendre le contexte des années 1970 et 1980, lorsque BASIC s'est développé sur des mini-et micro-ordinateurs.
À l'époque, la machinerie était franchement maigre par rapport aux normes d'aujourd'hui. Les processeurs étaient cadencés à quelques MHz (souvent beaucoup moins pour les micro-ordinateurs) et avaient moins de mémoire que le HTML qu'il faudrait pour afficher cette page. Si vous alliez déployer un produit, vous deviez utiliser les outils disponibles, qui étaient soit l'assemblage nu-nu, soit, sur les micro-ordinateurs, l'interpréteur BASIC livré avec ROM (souvent 16K dans un espace d'adressage de 64 Ko) avec le système. Il y avait d'autres langues disponibles, mais beaucoup n'avaient pas toutes les fonctionnalités structurées que nous tenons pour acquises. Cela avait beaucoup à voir avec le fait que la mémoire était rare, * aucune était virtuel sauf sur les systèmes très haut de gamme et il n'y en avait généralement pas assez pour contenir un compilateur pour un langage plus sophistiqué. Avec des ressources si limitées, "sérieux" était un terme relatif, et nous ne lançions simplement pas les types de travaux sur les ordinateurs que nous faisons maintenant avec un traitement, une mémoire et un stockage abondants.
Votre argument selon lequel les créateurs d'ordinateurs personnels débutants auraient dû mieux connaître et fournir un langage structuré ne fonctionne tout simplement pas dans ce contexte. Cela n'allait tout simplement pas se produire avec la technologie disponible à un prix que les gens pouvaient supporter.
La façon dont nous avons surmonté les lacunes linguistiques était simple: nous ne les voyions pas de cette façon et nous avons fait le travail avec ce qui était disponible. ANSI Minimal BASIC est structuré un peu comme le langage d'assemblage en ce sens que vous obtenez la plupart des mêmes saveurs d'appels de branchement et de sous-programme simples, mais c'est à vous de vous assurer que les étoiles sont correctement alignées. La seule exception est le FOR..NEXT
construction utilisée pour fournir une boucle. Essentiellement, si vous vouliez développer quelque chose en BASIC et en faire du bon travail, vous deviez planifier et comprendre la structure de vos programmes aussi soigneusement que si vous les écriviez dans Assembly. Les outils de débogage disponibles étaient très primitifs, donc, en substance, vous deviez agir ensemble si vous vouliez que vos programmes fonctionnent et soient maintenables.
Oui, il y avait beaucoup de spaghettis à l'époque, mais je n'ai pas encore vu un langage où il est impossible d'écrire du mauvais code.
* La mémoire fonctionnait entre 750 et 1 000 USD par Mo au début des années 80. Corrigé de l'inflation, cela représente entre 1 600 et 2 200 $ US en dollars de 2010. Cette même année, le coût par mégaoctet était d'environ 0,03 $ US.
Mon premier travail de programmation à 100%, dans les années 1980, travaillait sur un progiciel de comptabilité de marché vertical qui était à l'origine écrit en GW-BASIC . Il avait été porté sur QuickBASIC 3.0, mais il conservait presque tous les défauts associés aux premiers dialectes BASIC. Il y avait des tonnes de GOTO et beaucoup de mauvaise structure. Il y avait environ une douzaine de modules (inventaire, grand livre, etc.) et le programme s'est vendu pour environ 1000 à 2500 USD par module, plus les contrats de support annuels. Les revenus de la société se situaient entre 15 et 25 millions de dollars US par an.
Quant à la façon de vivre avec des lacunes, de nombreuses limitations ont été contournées en utilisant le langage machine ou MASM . Il était courant d'utiliser les commandes PEEK et POKE pour insérer le langage machine dans les programmes BASIC. J'ai écrit des programmes MASM (et plus tard C) pour étendre le programme pour ajouter des choses comme le support de base de données rudimentaire, les communications et les "graphiques" de texte.
L'intégralité de la ligne comptable de Peachtree Software (comptes débiteurs, créditeurs, etc.) a été écrite (et pourrait l'être, pour autant que je sache) en BASIC. Lorsque le PC IBM a été déployé pour la première fois, j'ai passé beaucoup de longues soirées à déboguer et à corriger leur code pour les clients qui ont acheté un ordinateur personnel IBM et les packages Peachtree pour faire les livres pour leur petite entreprise.
Mon premier emploi a été en 1981 de programmation Apple IIs en Basic dans un bureau de Price Waterhouse (Pre Coopers) dans leur cabinet de conseil en gestion à Belfast, Irlande du Nord. Une équipe de deux/trois d'entre nous a développé et installé des systèmes chez des clients, dont une librairie et un abattoir. C'était un système de modélisation financière, en fait une feuille de calcul Visicalc très complexe (50 feuilles, 3 000 variables) transformée en un grand programme de base. Il a fallu deux jours de travail sur un Apple II avec 4 unités de disque pour traiter le débit d'une semaine à l'abattoir. Un peu plus rapide que leur système manuel qui avait pris deux semaines par semaine.
Nous sommes ensuite passés aux machines Act Sirius, programmant à nouveau en Basic (le Microsoft 8KB Basic) qui ont été installées dans les clients.
Le Basic avait des numéros de ligne mais il y avait une boîte à outils qui pouvait renuméroter les programmes. Comme je venais de quitter Uni où j'avais appris Pascal, j'ai essayé d'écrire dans un style aussi structuré que possible (autant que possible en Basic), mais Gotos et Gosubs étaient bien sûr utilisés.
J'ai ensuite programmé en 1983 sur Dec Rainbow qui utilisait CBasic, un basique compilé maladroit.
Il y avait beaucoup de logiciels commerciaux écrits en utilisant BASIC-PLUS sur les systèmes PDP-11 . Je me souviens avoir vu des analyses statistiques et des progiciels comptables, ainsi qu'une bonne quantité de trucs d'automatisation de laboratoire haut de gamme (je ne sais pas à quel point ils étaient "commerciaux". Ils avaient tendance à être inclus dans le cadre d'un ensemble d'instruments, donc je ne sais pas s'ils étaient vendus séparément.). ISTR BASIC était également l'une des langues principales pour le développement d'applications HP 20 , et c'était la langue principale (éventuellement uniquement) prise en charge pour leurs premières stations de travail HP 9800-series .
Les premiers produits de base de données DOS d'Alpha Software (vers 1985) "Database Manager I", "Database Manager II" (DMB2) et "Alpha Three" ont été écrits en BASIC et compilés avec le compilateur IBM BASIC. J'ai travaillé sur "Alpha Three". Toute l'interface utilisateur était en BASIC mais elle avait un composant principal TSR (terminer et rester résident) écrit en C et ASM avec lequel le BASIC a communiqué via des interruptions. Les numéros de ligne et les sauts de ligne occupaient un espace de segment précieux, de sorte que le code était horriblement écrasé et illisible. Nous avons constamment utilisé des variables partagées et échangé des modules. C'était difficile de travailler. Cependant, nous avons toujours essayé d'être logiques au sujet de l'organisation, donc notre bibliothèque de chaînes était composée de 60000 lignes. Une opération courante comme couper une chaîne ressemblerait à ceci:
$ S = $ INS; GOSUB 60210; $ INS = $ S;
Nous nous sommes convertis à tous les C peu de temps après la sortie de "Alpha Three".
Au début des années 1980, l'US Air Force a acheté un tas de ordinateurs de bus Cromemco S1 pour utilisation par les escadrons volants comme outil de planification de vol.
Le logiciel de planification de vol a été développé à l'aide de BASIC par des pilotes et des navigateurs de l'Air Force au Tactical Air Warfare Center, situé à Eglin AFB, Floride .
Pour ce qui est de contourner les "lacunes évidentes" de BASIC, nous ne savions vraiment pas mieux. Le simple fait de donner un accès physique à un ordinateur à un équipage de conduite semblait à l'époque un incroyable saut technologique.
Des projets commerciaux plus importants ont-ils été créés dans un tel dialecte BASIC?
Sur les ordinateurs personnels plus anciens comme le C64 ou ses prédécesseurs, il existait de nombreux programmes BASIC, ainsi que certains programmes commerciaux. Mais "gros" était rarement possible, car avec <64 Ko de RAM écrire de "gros" programmes BASIC n'est pas vraiment facile. Si vous vouliez contourner les limites de la machine, vous deviez généralement quitter le terrain de BASIC, le "langage de haut niveau", et utiliser l'assembleur.
Donc, la réponse à votre question est "probablement pas beaucoup", mais pas pour les raisons que vous avez en tête (comme "trop sujettes aux erreurs/non structurées", etc.).
Soit dit en passant: AFAIK, le célèbre compilateur PETSpeed BASIC a été écrit en BASIC (compilé avec lui-même, bien sûr).
La seule crainte que j'ai eue, en tant que programmeur QuickBasic, il y a 20 ans, était le message "Mémoire insuffisante". Mais cela n'a fait que de moi un meilleur programmeur! J'ai appris à écrire du code compact et sérieux.
J'ai utilisé QuickBasic pour la programmation industrielle. Dans le monde réel (usines), vous ne pouvez pas dire à votre patron "ça va prendre six mois pour être écrit en C"; vous pouvez seulement dire: "oui patron, ce sera prêt la semaine prochaine". Oui, BASIC était la solution pratique et rapide dans le monde réel. Pas C ou Pascal.
L'un des programmes que j'ai écrits dans QuickBasic 4.5, une base de données unique, a été vendu à quelques sociétés et a en fait remplacé la base de données commerciale qu'ils avaient déjà (qui était probablement écrite en C ou Pascal). Cette base de données est en service jusqu'à aujourd'hui.
Un sujet que je veux mentionner:
nous pensons tous que les nouvelles méthodes de programmation sont tellement tiles. Mais dans la vraie vie (industrie), la plupart des machines, de nos jours, sont exploitées par un automate moderne. Les programmes sont généralement écrits en langage Ladder, qui est un million de fois plus primitif que GW-BASIC. En tant que programmeur d'automates, je peux dire clairement: j'aimerais remplacer cette programmation en échelle primitive par un langage de haut niveau comme GW-BASIC ou même QuickBasic. (MEGA-BASIC est un dialecte qui était utilisé à cette fin dans le passé).
Après tout, que font la plupart des machines? interpréter les entrées et régler les sorties. Vous n'avez pas besoin de C/Assembly pour cela, et vous n'avez pas besoin de Java. Vous avez sûrement besoin de QuickBASIC pour créer un code maintenable.
Je crois que l'Ultima d'origine sur le Apple] [a été écrit en Applesoft Basic.
DEC a utilisé sa version de BASIC pour la plupart des RSTS et autres systèmes d'exploitation qu'il a développés.
Absolument oui.
Il y a très longtemps, j'ai travaillé pour une entreprise qui a vendu plusieurs millions de dollars de systèmes, principalement à l'industrie des concessionnaires automobiles. Ces systèmes exécutaient le logiciel BASIC sur des dérivés de mini-ordinateur HP 21MX 16 bits personnalisés (avant l'ère des microprocesseurs 16 bits à succès). Il s'agissait d'une entreprise de taille moyenne avec des dizaines de programmeurs de base. Ils utilisaient un dialecte BASIC à l'ancienne qui nécessitait des numéros de ligne et ne permettait que 286 noms de variables possibles, et pourtant les solutions fournissaient toute la comptabilité et l'inventaire (etc.) aux entreprises de taille moyenne. Le groupe R&D a également écrit des assembleurs, des compilateurs et même des émulateurs de matériel en Basic pour aider bootstrap développement de leur matériel de prochaine génération.
En essayant d'expliquer à un vieux temporisateur ce que je pensais être les avantages de méthodologies de programmation et de conception matérielle plus modernes, il m'a dit que les bons concepteurs ont correctement partitionné, modularisé et structuré les solutions à leurs problèmes, même si leur expression directe n'a pas été construite. dans le langage ou les outils, alors que, a-t-il noté, les mauvais concepteurs peuvent produire des ordures non déboggables, quel que soit le paradigme de développement à la mode "fantaisie" dans lequel ils travaillent.
Le fait est que la plupart des concessionnaires de voitures neuves aux États-Unis utilisent aujourd'hui des programmes BASIC pour vous proposer des options de financement et pour créer les déclarations de règlement longues que vous obtenez lorsque vous achetez une voiture. Les programmes sont écrits dans des versions archaïques de mini-ordinateurs de BASIC fonctionnant sous émulation sur du matériel moderne. Il y a des interfaces utilisateur Web greffées, mais son BASIC parle à un tty en dessous.
Vers 1980, l'assurance-vie universelle est devenue une mode instantanée dans le secteur de l'assurance-vie. Chaque entreprise voulait le vendre immédiatement, et il fallait que les valeurs des comptes soient calculées pour chaque police chaque mois en utilisant une combinaison très compliquée d'intérêts et de mumbo-jumbo actuariel. Étant donné que les grands projets dans les départements informatiques prenaient environ un an à l'époque, de nombreuses entreprises sont entrées en production avec autant de pommes, de PC et/ou de Tandy TRS-80 que nécessaire en faisant la version plus compliquée de ce qui avait été sur les ordinateurs centraux pendant environ 20 ans. Presque tous ces éléments ont été programmés en BASIC. La plupart du temps, le BASIC utilisait des virgules flottantes de courte précision, de sorte que des millions de centimes de clients se sont perdus dans l'arrondi.
JPL avait également une version de BASIC qu'il utilisait largement il y a environ 35 ans. Il s'appelait MBASIC, avec le M pour management, mais il était utilisé, entre autres, pour programmer des engins spatiaux.
Le très populaire système IBM système de point de vente au détail 4680/469 a été écrit dans un dialecte appelé IBM 4680 BASIC . J'ai travaillé sur ce système de 1998 à 2002 pour un grand détaillant britannique.
Ce système était très populaire, selon l'article du wiki, il détenait encore 12% de part de marché en 2005. Le système est toujours aussi solide aujourd'hui, les chances sont bonnes que la plupart des gens dans le monde occidental aient indirectement utilisé ce système alimenté par BASIC dans le dernier la semaine.
Il y avait une société appelée Softek en Inde dans les années 80 qui a créé leurs propres versions de Wordstar, dBase et Lotus 1-2-3. Un autre de leurs produits était un compilateur BASIC.
À l'aide de leur propre CBASIC, ils ont créé un progiciel de comptabilité à double entrée très complet appelé SIMS-FA (Softek Financial Accounting).
Recherchez PICK ou l'une des autres bases de données MultiValue. Ils s'appuient tous sur DataBasic comme langue principale ou unique et ont une utilisation significative sur le marché vertical. Nous avons toujours un système que j'ai écrit pour l'analyse comparative des achats il y a plus de 20 ans. Fonctionne sur environ 50 000 lignes de code.
Tout? Oui. Beaucoup? Non. Logiciel éducatif et tenue de registres.
L'ère BASIC: ~ 1970-199
Jusqu'en 1990 environ, les limitations dépassaient les attentes et évoluaient avec les besoins de l'industrie. Pour la plupart, les besoins des grandes entreprises ont été analysés par des consultants et rencontrés dans la langue qui répondait aux besoins.
Un peu comme aujourd'hui, où les entreprises ont une idée plus ou moins développée de ce dont elles ont besoin et ont une sorte de solution à construire avec VBA, puis en apprendre suffisamment pour découvrir des solutions client-serveur plus compétentes, des applications Web et des interfaces optimisées avec le nettoyage des données .
Dans les années 1970, si une entreprise régulière pouvait équilibrer des comptes ou enregistrer des chiffres de production sur ordinateur sans le budget d'une société, ce serait un grand pas en avant de tenir des livres, et si vous pouviez obtenir un diagramme, c'était fantastique.
Dans les années 1980, si vous pouviez migrer certains dessins de produits vers l'ordinateur pour les rendre modifiables, ce serait également fantastique.
Les deux pourraient être effectués avec un langage basé sur un interprète. Comme les ordinateurs pouvaient contenir plus de données, la complexité nécessitait des compilateurs, car les processeurs étaient en retard sur la loi de Moore en matière de performances de brassage des données brutes entre 1977 et 1987.
Mais jusqu'à la fin des années 1980, lorsque les attentes exigeaient davantage, les langues établies dans les années 1970 (complétées dans de rares cas par des assembleurs et/ou du matériel personnalisé comme les cartes FPU) faisaient tout le travail commercial sérieux dans les entreprises, à quelques exceptions près. Cobol et Fortran étaient toujours le ticket sur les ordinateurs centraux. Seules les entreprises pouvaient se le permettre, et les entreprises sérieuses faisaient le travail sérieux qu'elles pouvaient avec les programmes BASIC internes, et pendant un certain temps, cela a suffi.
Des packages de logiciels autonomes à usage général tels que des traitements de texte ou des traceurs de diagrammes sont apparus à cette époque, lorsque les systèmes d'exploitation étaient devenus des cibles pour les compilateurs et qu'un stockage pouvait contenir des documents et des données de "taille d'entreprise".
Pascal était un concurrent majeur ici. Auparavant, presque tous ces textes avaient été écrits en assembleur. Enfin, C est venu d'Unix et a commencé à être utilisé sur PC.
BBC BASIC est né sur le BBC Micro , sorti au Royaume-Uni en 1981. Au moment où il atteignit la version cinq, tel qu'implémenté sur les ordinateurs RISC OS basés sur ARM d'Acorn, il était considéré comme le BASIC interprété le plus rapide au monde. Sa syntaxe était avancée pour l'époque, y compris les mots-clés structurels comme CASE et WHILE et les fonctions et procédures. (Il comprenait même un assembleur, à l'origine pour 6502 , puis pour ARM dans les versions RISC OS .))
De nombreuses applications de bureau commerciales ont été écrites à l'aide de celui-ci, peut-être en grande partie parce qu'il fournissait un accès pratique aux appels SWI utilisés par la coopérative WIMP système. Il était assez rapide pour qu'il y ait même des jeux d'arcade écrits à l'aide de celui-ci - Nevryon , un clone de type R, est celui dont je me souviens particulièrement avoir regardé la source.
Les anciens xBase langages de script de base de données (comme dans dBase II , dBase III + , Clipper, etc.) étaient assez étroitement liés aux divers BASIC standard de l'époque.
Pas exactement BASIC utilisé pour des travaux commerciaux, mais peut-être assez proche.
À l'époque du Commodore 64 partie du jeu Gunship a été écrit en BASIC. Vous pouvez même modifier le code pour que votre hélicoptère soit équipé à chaque atterrissage.