koks i det i forbindelse med 2 store nedbrud på Eksperten
for mange år siden - først ville jeg ikke slette en af dem af hensyn til
dem som havde "betalt" for artiklen og nu beholder jeg duplikaterne af hensyn til afgivne kommentarer]
Historie:
V1.0 - 10/04/2004 - original
V1.1 - 11/04/2004 - tilføj lidt om kriterier og nogle hello world eksempler
V1.2 - 24/04/2004 - uddybe lidt om sprog karakteristika
V1.3 - 25/07/2004 - lidt diverse tilføjelse som udfra feedback
V1.4 - 05/11/2004 - ændre note om sprog ældre end COBOL
V1.5 - 29/01/2005 - tilføj lidt nyere information
V1.6 - 28/03/2005 - tilføj 1. kvartal 2005 statistik og lidt mere
om hvad sprogene bruges til
V1.7 - 25/03/2006 - opdatering med statistik plus lidt omformuleringer
V1.8 - 06/07/2006 - tilføj 1. halvår 2006 statistik
V1.9 - 13/07/2006 - tilføj en smule om web app sprogene
V1.10 - 17/03/2007 - opdatering statistik
V1.11 - 07/08/2007 - statistik opdatering
V1.12 - 08/03/2008 - statistik opdatering
V1.13 - 03/01/2009 - statistik opdatering og lidt formatering
V1.14 - 12/02/2010 - smårettelser
Indledning
Denne artikel vil kun kigge på generelle programmerings sprog af den
slags som kan bruges til alle slags programmer, ofte bruges til større
programmer og typisk er compilet.
Specialiserede web server side script sprog som ASP/VBScript og PHP
ligger udenfor emnet. Klassiske script sprog som Perl, Python, Ruby og Tcl
ligger også udenfor emnet. Ikke fordi de ikke er vigtige, men det
er svært at sammenligen sprog som er for forskellige. Og min ekspert
viden ligger også mest i de generelle programmerings sprog.
Jeg vil ydeligere indskrænke artiklen til sprogene:
- COBOL
- C
- C++
- VB
- Delphi
- Java
- C#
- VB.NET
Disse sprog er de mest relevante. Andre sprog såsom:
- Fortran
- Ada
- Pascal (non-Delphi)
- Basic (non-VB)
må kaldes niche sprog idag.
COBOL
opfundet i 1960 så det er et meget gammelt sprog (kun Fortran, ALGOL og LISP er fra samme tid)
primært beregnet til business programming (skærm billeder, databaser, rapporter etc.)
karakteristika:
* proceduralt (forsøg med objekt orienteret overbygning men ikke specielt udbredte)
* linie orienteret
* ikke case sensitivt
* mere engelsk end matematik
kan fåes til de fleste platforme (omend det primært bruges på store boxe
såsom IBM mainframe)
meget anderledes end de andre sprog
Hello World eksempel:
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
PROCEDURE DIVISION.
START-MAIN.
DISPLAY "Hello world !".
EXIT PROGRAM.
(forbehold tages for eksemplets velegnethed - jeg er ikke COBOL kyndig)
typiske COBOL programmer er nok regnskabs eller finansielle programmer
udviklet i 1970'erne eller 1980'erne (og tag ikke fejl - der er hundredevis
af millioner linier kode af den slags)
C
opfundet i 1972
oprindeligt beregnet til low level programmering af operativ systemer og editorer,
blev meget udbredt med Unix/Linux til næsten enhver form for applikationer
karakteristika:
* proceduralt
* frit format med sætninger adskilt af ;
* {} til blokke
* case sensitivt
* bruger pointere
kan fåes til de fleste platforme
man kan lave en masse smarte ting i C - og en masse dumme ting som giver
mystiske fejl
Hello World eksempel:
#include <stdio.h>
int main()
{
printf("Hello world !\n");
return 0;
}
typiske C programmer er nok styre systemer (Unix, Linux, Windows etc.),
databaser, spil og embedded applikationer (programmer hvor hastighed,
memory forbrug og interaktion med hardware er altafgørende og hvor
udviklings og vedligeholdelses omkostninger er sekundære)
C++
opfundet i 1983
en objekt orienteret overbygning på C, sproget som har gjordt objekt orienteret
programmering mainstream
karakteristika:
* objekt orienteret (men tillader procedural programmering via C kompaibiliteten)
* frit format med sætninger adskilt af ;
* {} til blokke
* case sensitivt
* bruger pointere
* generisk programmering via templates
* supporterer multipel arv
kan fåes til de fleste platforme
et meget stort, meget fleksibelt og meget svært sprog at lære - har
arvet nogle af fejl mulighederne fra C
Hello World eksempel:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world !" << endl;
return 0;
}
typiske C++ programmer er nok finansielle programmer på
større Unix systemer udviklet i 1990'erne, top professionelle
windows applikatione som f.eks. office pakker og spil
VB
opfundet i 1991
beregnet til at gøre det nemt at lave windows programmer
karakteristika
* lidt proceduralt lidt objekt orienteret
* linie orienteret
* ikke case sensitivt
* forme indbygget
kun til Windows
anses traditionelt for et af de nemmeste sprog at komme igang med
Hello World eksempel:
Sub Main()
MsgBox ("Hello world !")
End Sub
typiske VB programmer er er standalone Windows GUI applikationer
eller Windows GUI frontends til server applikationer (programmer
hvor udviklings og vedligeholdelses omkostninger betyder mere
end de sidste millionte dele sekunder i performance)
Delphi
opfundet i 1995
en windows version af Turbo Pascal som er lige så nem at bruge som VB
karakteristika:
* lidt proceduralt lidt objekt orienteret (sproget er faktisk objekt
orienteret men brugen er sjældent specielt objekt orienteret)
* frit format med sætninger adskilt af ;
* begin end til blokke
* ikke case sensitivt
* bruger pointere i begrænset omfang
* forme indbygget
kun til windows (der er Kylix til Linux men det bruges meget lidt)
et sprog som elskes af entusiasterne
Hello World eksempel:
program Test;
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
writeln('Hello world !');
end.
Delphi bruges til rigtigt meget forskelligt i konkurrence med sprog som C++ og VB
Java
opfundet i 1995
oprindeligt beregnet til brug i embedded software, men slog igennem til internet brug
på client side (applets), er nu primært en server teknologi med J2EE/Java EE etc., gjorde
virtual machine og garbage collection mainstream
karakteristika
* objekt orienteret
* frit format med sætninger adskilt af ;
* {} til blokke
* case sensitivt
* bruger ikke pointere
* bruger garbage collection
* supporterer ikke multipel implementations arv
* generisk programmering
kan fåes til de fleste platforme
nemmere end C++ og det er meget sværere at få mystiske fejl
Hello World eksempel:
public class Test {
public static void main(String[] args) {
System.out.println("Hello world !");
}
}
java programmer er nok typisk e-business eller andre store server side
web applikationer eller finansielle applikationer udviklet de sidste år
C#
opfundet i 2000
Microsofts svar på Java som det ligner rigtigt meget (det har dog nogle
enkelte features fra C++ som ikke er i Java)
karakteristika
* objekt orienteret
* frit format med sætninger adskilt af ;
* {} til blokke
* case sensitivt
* bruger ikke pointere medmindre i sektion markeret som unsafe
* bruger garbage collection
* supporterer ikke multipel implementations arv
* generisk programmering i nyeste version
kun til Windows (der er Mono o.lign. til Linux etc. men de bruges meget lidt)
ligger midt imellem Java og C++
Hello World eksempel:
using System;
public class Test
{
public static void Main(string[] args)
{
Console.WriteLine("Hello world !");
}
}
C# erstatter typisk sprog som C++ og VB
VB.NET
opfundet i 2000
C# med VB syntax
karakteristika:
* objekt orienteret
* linie orienteret
* ikke case sensitivt
* bruger garbage collection
* supporterer ikke multipel implementations arv
kun til Windows
selvom syntaxen ligner VB så er det noget helt andet
Hello World eksempel:
Imports System
Module Main
Sub Main()
Console.WriteLine("Hello world !")
End Sub
End Module
VB.NET erstatter typisk VB
Hvilket sprog er bedst ?
Det findes der ikke noget entydigt svar på.
Alle sprog er bedst til et eller andet.
Intet sprog er bedst til alt.
Derudover så er der meget personlig smag i hvilket sprog man foretrækker. Og
det kan jo ikke diskuteres.
De fleste er enige om at objekt orienterede sprog er kommet for at
blive.
Kriterier du bør overveje er:
- har du brug for platforms uafhængighed eller er du kun
interesseret i windows platform ?
- har du brug for nem integration med operativ system
specifik funktionalitet ?
- har du brug for specielle biblioteker/komponenter som
er nemmest at bruge i et bestemt sprog ?
- hvilket sprog kan du nemmest finde eksempler til indenfor
det relevante område ?
Hvilket sprog er hurtigst ?
Man kan heller ikke sige at et bestemt sprog giver hurtigere programmer
end andre.
Læs artiklen <a href="http://www.eksperten.dk/ (...) sprog er hurtigst</a> om dette emne.
Hvilket sprog er mest brugt i eksisterende kode ?
Det antages almindeligvis at de store sprog er:
COBOL
C/C++
VB
Java
mens:
Delphi
C#
VB.NET
er lidt mindre.
Jeg har engang set følgende statistik over programmører:
3.0 millioner COBOL programmører
1.6 million VB programmører
1.1 million C/C++ programmører
1.0 million Java programmører
og da vedligehold af eksisterende kode er betydeligt større
end udvikling af nyt kode, så underbygger det antagelsen.
Hvilket sprog er mest brugt til ny kode ?
Jeg tillader mig følgende approximation:
andel ny kode ~= andel efterspurgte skills i job opslag
så kan man se følgende (eller kunne de dage jeg prøvede):
www.itjobworld.dk/DK wwww.monster.com/USA
april 2004 april 2004
COBOL 1 648
C/C++ 13 4146
VB 2 2784
Delphi 0 210
Java 16 >5000
C# 10 1457
VB.NET 2 766
www.itjobworld.dk/DK www.dice.com/USA
januar 2005 januar 2005
COBOL 2 1019
C/C++ 12 172
VB 3 1424
Delphi 3 153
Java 20 9573
C# 15 2435
VB.NET 0 1199
www.itjobworld.dk/DK www.dice.com/USA
marts 2006 marts 2006
COBOL 4 1349
C/C++ 13 7846
VB 4 1987
Delphi 3 179
Java 39 15273
C# 16 4817
VB.NET 6 2093
www.itjobswatch.co.uk/UK
july 2006
COBOL 736
C/C++ 23345
VB 12004
Delphi 1453
Java 33992
C# 23474
VB.NET 7796
www.itjobworld.dk/DK www.dice.com/USA
marts 2007 marts 2007
COBOL 12 1230
C/C++ 6 8226
VB 1 2824
Delphi 1 213
Java 35 16518
C# 16 6858
VB.NET 5 2505
Vi ser at efterspørgslen er:
1 - Java
2 & 3 - C/C++ og C#
4 & 5 - VB og VB.NET
Jeg tager et vist forbehold for job sidernes søge maskiner som
ikke altid virker lige professionelle. Bl.a. er det mit indtryk
at der er lige så mange .NET job (C# og VB.NET) som Java job
i Danmark.
Hvilket sprog lærer andre ?
Jeg tillader mig følgende approximation:
andel der lærer et sprog ~= andel af spørgsmål på Eksperten ~= andel af point for top-20
så kan jeg lave en lille statistik:
2000 2001 2002 2003 2004 2005 2006 2007 2008
COBOL 0% 0% 0% 0% 0% 0% 0% 0% 0%
C/C++ 15% 15% 17% 19% 18% 12% 9% 10% 9%
VB 29% 27% 26% 21% 18% 16% 16% 14% 15%
Delphi 38% 35% 29% 17% 16% 13% 14% 14% 14%
Java 18% 23% 26% 30% 27% 26% 19% 19% 21%
C# 0% 0% 2% 10% 17% 26% 33% 34% 32%
VB.NET 0% 0% 0% 3% 5% 8% 9% 9% 9%
Vi ser at:
- C# er i konstant fremgang og hapser fra både C/C++ og Java
- C/C++ lå stabilt i langt tid men er faldet kraftigt de senere år med er ved at flade ud
- Delphi er faldet meget men er nu ved at flade ud
- Java voksede og blev størst men er nu faldet igen og er nu kun næststørst
- VB er svagt faldende
- VB.NET har først fået rigtigt fat i de aller seneste år men ikke nær så meget som C#
(med den nye eksperten.dk V5 er det desværre umuligt at se statistik, så derfor
er der ingen tal for 2009)
Hvilket sprog vil blive mest brugt i fremtiden ?
En klog mand (Storm P) har engang sagt at det er svært at spå især om fremtiden,
så nedenstående skal læses med stor skepsis.
På kort sigt (1-3 år) vil det se ud nogenlunde som idag.
På mellem sigt (3-10 år) er jeg overbevist om at Java og C# vil være de
store sprog mens COBOL, C/C++, Delphi og VB alle vil have faldende
anvendelse (jeg er meget usikker på VB.NET - indtil videre synes .NET
programmører at foretrække C# fremfor VB.NET, men der er stadig store
mængder af VB og ASP/VBScript programmører som ikke er skiftet og de kan
ændre billedet).
På langt sigt (10-30 år) vil der komme nye sprog til som vil erstatte
de sprog vi kender idag. Der vil stadig blive vedligeholdt eksisternde
kode i nogle af de sprog vi kender, men nyudvikling vil være skiftet til
nye sprog. Hvilken slags sprog vil tiden vise.
Konklusion
Så mine råd vil være:
- lær de sprog som du bedst kan lide
- lær mere end et sprog
- hvis du har fokus på dine job muligheder så sats på Java eller C# eller begge
================================================================================
For sjovs skyld har jeg lige prøvet at lave nogle af de samme
statistikker for web app sprogene.
Det er ikke relevant for artiklen og dens konklusioner, men derfor
kan det da være interessant alligevel.
Eksperten:
2000 2001 2002 2003 2004 2005 2006 2007 2008
ASP 65% 64% 62% 52% 45% 40% 36% 31% 29%
PHP 34% 33% 28% 39% 39% 43% 42% 41% 52%
J2EE/JSP 1% 3% 4% 4% 4% 3% 2% 3% 3%
ASP.NET 0% 0% 6% 6% 12% 15% 20% 25% 16%
Konklusion:
- ASP falder
- PHP stiger svagt
- J2EE/JSP er niche
- ASP.NET stiger kraftigt (jeg kan ikke helt forklare faldet i 2008 - det er
formentligt mere relateret til Eksperten end til virkeligheden)
Job annoncer:
www.itjobswatch.co.uk/UK
juli 2006
ASP 2163
PHP 3599
J2EE/JSP 14830
ASP.NET 12635
www.dice.com/USA
marts 2007
ASP 3639
PHP 1625
J2EE/JSP 8144
ASP.NET 4735
Konklusion:
- der ansættes ASP.NET folk fremfor ASP folk
- J2EE/JSP er faktisk størst
- PHP er der efterhånden en del af
(og der er faktisk lidt sammenhæng med den egentlige artikel her
J2EE/JSP kodes i Java og ASP.NET vil ofte blive kodet i C#)


