Programmieren lernen für Dummies - Daniel Lorig - E-Book

Programmieren lernen für Dummies E-Book

Daniel Lorig

0,0
17,99 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.

Mehr erfahren.
Beschreibung

Haben Sie auch schon mal den Wunsch verspürt, programmieren zu können? Oder wenigstens zu verstehen, wie Computer ticken, die unser Leben bestimmen? Dieses Buch führt in die Denkweise von Programmierern und die Funktionsweise von Programmen ein und zeigt Ihnen, worauf Sie beim Programmieren achten müssen: Geben Sie eindeutige Anweisungen, sichern Sie sich immer gegen alle Eventualitäten ab und kommen Sie mit den gegebenen, beschränkten Mitteln aus. Gut, dass der Computer wenigstens nicht murrt, wenn er monotone Tätigkeiten ausführen muss! Am Ende des Buches angelangt, haben Sie einen wichtigen Ausschnitt unserer Welt besser kennen gelernt und Einblicke in allgemeine Programmierkonzepte und zwei Programmiersprachen erhalten. Dann sind Sie in der Lage, fundiert zu entscheiden, ob und wie Sie Ihr Wissen weiter vertiefen wollen.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 588

Veröffentlichungsjahr: 2021

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Programmieren lernen für Dummies

Bibliografische Information der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

2. Auflage 2021

© 2021 WILEY-VCH GmbH, Weinheim

Wiley, die Bezeichnung »Für Dummies«, das Dummies-Mann-Logo und darauf bezogene Gestaltungen sind Marken oder eingetragene Marken von John Wiley & Sons, Inc., USA, Deutschland und in anderen Ländern.

Das vorliegende Werk wurde sorgfältig erarbeitet. Dennoch übernehmen Autoren und Verlag für die Richtigkeit von Angaben, Hinweisen und Ratschlägen sowie eventuelle Druckfehler keine Haftung.

Coverfoto: © Nadya Ustuzhantceva – stock.adobe.comKorrektur: Petra Heubach-Erdmann, Düsseldorf

Print ISBN: 978-3-527-71851-1ePub ISBN: 978-3-527-83356-6

Über den Autor

Daniel Lorig programmiert bereits seit dem Ende seiner Schulzeit. Da er schnell Gefallen an der Programmierung fand, nahm er ein Informatik-Studium an der Universität des Saarlandes auf. 2010 schloss er dieses mit einem Mastertitel ab.

Nach einem knapp zweijährigen Intermezzo als Entwickler bei einem Software-Unternehmen wagte er den Schritt in die Selbstständigkeit, um fortan eigene Ideen umzusetzen. Hauptsächlich programmiert er nun eigene Webseiten, zudem hat er einige Programmierbücher geschrieben.

In seiner Freizeit reist er seitdem durch die Welt – begünstigt durch die neu gewonnene berufliche Freiheit und die Überwindung seiner jahrelangen Flugangst.

Inhaltsverzeichnis

Cover

Titelblatt

Impressum

Über den Autor

Einleitung

Über dieses Buch

Konventionen in diesem Buch

Was Sie nicht lesen müssen

Törichte Annahmen über die Leser

Wie dieses Buch aufgebaut ist

Symbole, die in diesem Buch verwendet werden

Wie es weitergeht

Teil I: Grundlagen der Programmierung

Kapitel 1: Von der Idee zum Programm

Mensch vs. Maschine

Einen Algorithmus entwickeln

Mit dem Rechner kommunizieren

Das Wichtigste in Kürze

Übungen

Kapitel 2: Programmiersprachen: Ein Überblick

Variabel sollst du sein!

Die Evolution der Programmiersprachen

Populäre Programmiersprachen und ihre Unterschiede

Die perfekte Sprache für Programmieranfänger

Das Wichtigste in Kürze

Übung

Kapitel 3: So lernen Sie programmieren

Schritte beim Lernen einer Programmiersprache

Angebote zum Erlernen einer Programmiersprache

Das Wichtigste in Kürze

Kapitel 4: Was sich alles programmieren lässt

Anwendungsentwicklung für Desktop-Computer

Mobile Apps

Programmierung für das Internet

Hardware-Programmierung

Das Wichtigste in Kürze

Übungen

Kapitel 5: Algorithmen erstellen

Spaß mit Zahlen

Mathematische Probleme lösen

Probleme aus dem wahren Leben lösen

Das Wichtigste in Kürze

Übungen

Kapitel 6: Wichtige Konzepte in Programmiersprachen

Datentypen, Variablen und Zuweisungen

Arrays

Operatoren und Ausdrücke

Kontrollfluss

Das Wichtigste in Kürze

Übungen

Kapitel 7: Fortgeschrittene Programmiertechniken

Funktionen und Prozeduren

Objektorientierte Programmierung

Zeigerarithmetik und manuelle Speicherverwaltung

Das Wichtigste in Kürze

Übungen

Teil II: Programmieren mit Java

Kapitel 8: Compiler und Entwicklungsumgebung

Compiler

Entwicklungsumgebungen

Das Wichtigste in Kürze

Kapitel 9: Die ersten Schritte in der Java-Programmierung

Compiler und Entwicklungsumgebung installieren

Das »Hallo Welt«-Programm

Das Wichtigste in Kürze

Kapitel 10: Variablen und Datentypen in Java

Neue Variablen anlegen

Primitive Datentypen

Mit Variablen rechnen

Stolperfallen vermeiden

Werte konvertieren

Zeichen konvertieren

Abkürzungen beim Programmieren nehmen

Arrays

Das Wichtigste in Kürze

Übungen

Kapitel 11: Ablaufsteuerung in Java

Bedingte Ausführung

Schleifen

Mathematische Berechnungen

Das Wichtigste in Kürze

Übungen

Kapitel 12: Objektorientierte Programmierung in Java

Idee der objektorientierten Programmierung

Umsetzung in Java

Methoden und logische Operatoren

Statische Attribute und Methoden

Besonderheiten der Objektorientierung in Java

Zeichenketten als Objekte

Packages

Referenzen und Parameter

Interagierende Objekte

Das Wichtigste in Kürze

Übungen

Projekt

Kapitel 13: Weitere Features von Java

Aufzählungen

Vererbung

Die Basisklasse Object

Objekte vergleichen

Fehler abfangen

Generische Klassen

Anonyme Funktionen

Das Wichtigste in Kürze

Übungen

Kapitel 14: Die Klassenbibliothek von Java

Collections

Mit Streams arbeiten

Nebenläufige Programmierung

Das Wichtigste in Kürze

Übung

Kapitel 15: Grafische Benutzeroberflächen

Benutzeroberflächen für Java-Programme

Ablauf eines GUI-Programms

Eclipse für JavaFX fit machen

Das erste JavaFX-Programm

Eine Benutzeroberfläche erstellen

Die Benutzeroberfläche zum Leben erwecken

Weitere Möglichkeiten zur Erstellung von GUIs

Eine ausführbare Datei erstellen

Das Wichtigste in Kürze

Übungen

Teil III: Programmierung für das Web mit PHP

Kapitel 16: Einführung in HTML

Funktionsweise des World Wide Web

HTML als Dateiformat

Grundlagen von XML

Einfache HTML-Dokumente erstellen

Dynamische Webseiten erstellen

Das Wichtigste in Kürze

Übungen

Kapitel 17: Werkzeuge für die Webprogrammierung

Einen Webserver installieren

Eine Entwicklungsumgebung verwenden

Das Wichtigste in Kürze

Kapitel 18: Einstieg in die PHP-Programmierung

PHP als Skriptsprache

Die Struktur eines PHP-Programms

Unterschiede zu und Gemeinsamkeiten mit Java und Co.

Integrierte Funktionen

Eine Webseite mit PHP programmieren

Das Wichtigste in Kürze

Übungen

Kapitel 19: Datenbankprogrammierung

Was ist eine Datenbank?

Umsetzung mithilfe von SQL

Das Wichtigste in Kürze

Übungen

Kapitel 20: Dynamische Webseiten programmieren

SQL-Befehle in PHP-Skripten verwenden

Eine komplette Webseite erstellen

Dynamische Webseiten in der Praxis

Das Wichtigste in Kürze

Übungen

Teil IV: Werkzeuge für Programmierer

Kapitel 21: Fehler finden und beseitigen

Was ist ein Fehler?

Häufigkeit und Relevanz von Fehlern und Defekten

Fehlerhafte Programmläufe finden

Vom Fehler zum Defekt

Das Wichtigste in Kürze

Kapitel 22: Die Macht des Internets nutzen

Dokumentationen

Im Internet Hilfe finden

Das Wichtigste in Kürze

Kapitel 23: Versionskontrolle

Versionskontrolle – was ist das überhaupt?

Subversion

Das Wichtigste in Kürze

Teil V: Der Top-Ten-Teil

Kapitel 24: (Ungefähr) 10 externe Zusatzbibliotheken für Java

Apache Commons

Google Guava

JFreeChart

Apache Log4j

jsoup

Jackson-Databind

Apache POI

Kapitel 25: (Mehr als) 10 nützliche Webseiten für Programmierer

Die vollständige Referenz der Java-Klassenbibliothek

Die vollständige Referenz der Programmiersprache PHP

Eine vollständige Referenz aller HTML-Elemente

Referenz aller CSS-Befehle

Scene Builder

Die vermutlich größte Online-Community für Programmierfragen

Online-Java-Compiler

Online-PHP-Interpreter

Online-HTML-Editor

Maven hilft

Wenn Sie mal eine Pause brauchen

Stichwortverzeichnis

End User License Agreement

Tabellenverzeichnis

Kapitel 6

Tabelle 6.1: Die logischen Operatoren

Kapitel 19

Tabelle 19.1: Auflistung von Gebrauchtwagen

Tabelle 19.2: Erweiterte Tabelle

Tabelle 19.3: Die überarbeitete Tabelle »gebrauchtwagen«

Tabelle 19.4: Die neue Tabelle »anbieter«

Tabelle 19.5: Bedingungen mithilfe von SQL formulieren

Tabelle 19.6: Einige SQL-Abfragen

Tabelle 19.7: Ergebnisse der Abfragen aus Tabelle 19.6

Tabelle 19.8: Die Datenbanktabelle »auto«

Tabelle 19.9: Die Datenbanktabelle »person«

Tabelle 19.10: Das Ergebnis der Verknüpfung

Illustrationsverzeichnis

Kapitel 1

Abbildung 1.1: Mensch vs. Maschine

Kapitel 6

Abbildung 6.1: Flussdiagramm des Fakultät-Algorithmus

Abbildung 6.2: Flussdiagramm einer while-Schleife

Kapitel 7

Abbildung 7.1: Folge von Anweisungen mit Dopplung

Abbildung 7.2: Folge von Anweisungen mit Prozedur

Abbildung 7.3: Flussdiagramm eines Programms mit einer Funktion

Abbildung 7.4: Variablen mit Zeigerarithmetik

Abbildung 7.5: Über einen Zeiger auf Feldinhalte zugreifen

Kapitel 8

Abbildung 8.1: Automatisches Vervollständigen in Eclipse

Abbildung 8.2: Vervollständigen mit Methoden einer Klasse

Abbildung 8.3: Eclipse erkennt fehlerhaften Code

Kapitel 9

Abbildung 9.1: Version auswählen

Abbildung 9.2: Download-Link anklicken

Abbildung 9.3: Installation von Amazon Corretto

Abbildung 9.4: Die Arbeitsoberfläche von Eclipse

Abbildung 9.5: Formatierungen festlegen

Abbildung 9.6: Die Eingabeaufforderung

Abbildung 9.7: Die automatisch generierte Quelltextdatei

Abbildung 9.8: Ausgabe des »Hallo Welt«-Programms

Kapitel 10

Abbildung 10.1: Konsolenausgabe des IntMaxTest-Programms

Abbildung 10.2: Gescheiterte Zuweisung

Kapitel 12

Abbildung 12.1: Paket beim Anlegen einer Klasse festlegen

Abbildung 12.2: Das Spielfeld

Kapitel 13

Abbildung 13.1: Information über eine Ausnahme im Eclipse-Tooltip

Kapitel 14

Abbildung 14.1: Methoden und Attribute einer Klasse erkunden

Abbildung 14.2: Ein Programm mit drei Threads

Kapitel 15

Abbildung 15.1: e(fx)clipse-Plug-in installieren

Abbildung 15.2: »Hallo Welt« als JavaFX-Anwendung

Abbildung 15.4: Die komplette Benutzeroberfläche

Abbildung 15.3: Entwurf der Benutzeroberfläche

Kapitel 16

Abbildung 16.1: Ein formatiertes HTML-Dokument

Kapitel 17

Abbildung 17.1: Das Kontrollzentrum

Abbildung 17.2: Die Startseite des XAMPP-Pakets

Abbildung 17.3: Das »Hallo Welt«-Programm im Webbrowser

Kapitel 18

Abbildung 18.1: Die aktuelle Uhrzeit im Webbrowser

Abbildung 18.2: Webseite mit Formular

Abbildung 18.3: Die fertige Webseite

Kapitel 19

Abbildung 19.1: Die Administrationsoberfläche des Datenbanksystems

Kapitel 20

Abbildung 20.1: Entwurf einer Nachrichten-Webseite

Kapitel 21

Abbildung 21.1: Ansicht der Ergebnisse einer Testklasse

Abbildung 21.2: Ganz links erkennbar: Haltepunkt in Eclipse gesetzt

Abbildung 21.3: Die Debug-Perspektive in Eclipse

Kapitel 23

Abbildung 23.1: Kontextmenü mit neuen Optionen

Abbildung 23.2: Datei ist für die Übertragung vorbereitet.

Abbildung 23.3: Übersicht aller Änderungen im SVN

Abbildung 23.4: SVN Update im Kontextmenü

Kapitel 24

Abbildung 24.1: Ein Beispiel-Diagramm

Orientierungspunkte

Cover

Inhaltsverzeichnis

Fangen Sie an zu lesen

Seitenliste

1

2

5

6

7

21

22

23

24

25

26

27

29

30

31

32

33

34

35

36

37

38

39

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

399

400

401

402

403

404

405

406

407

408

409

410

411

412

413

414

415

416

417

418

419

420

421

422

423

424

425

427

428

429

430

431

432

433

434

435

436

437

438

439

440

441

442

443

444

445

447

448

449

450

453

454

455

456

457

458

459

Teil I

Grundlagen der Programmierung

IN DIESEM TEIL …

Erfahren Sie, wie Computer funktionieren, was Programmierung ist und welche Möglichkeiten es gibt, programmieren zu lernenErhalten Sie einen Überblick über verschiedene Programmiersprachen sowie grundlegende Konzepte, die in vielen Sprachen vorhanden sindErfahren Sie, was sich heutzutage überhaupt alles (abgesehen von gewöhnlichen Computern) programmieren lässt

Kapitel 2

Programmiersprachen: Ein Überblick

IN DIESEM KAPITEL

Variablen als zentrales Element von ProgrammiersprachenBytecode und MaschinencodeAutomatische und manuelle Speicherverwaltung

In diesem Kapitel werden Sie ein bisschen mehr über Programmiersprachen erfahren. Ich werde Ihnen die grundsätzliche Funktionsweise von Programmiersprachen vorstellen. Danach werde ich Unterschiede zwischen einigen oft verwendeten Programmiersprachen zeigen und Vor- und Nachteile herausarbeiten.

Variabel sollst du sein!

Natürliche Sprachen sind solche wie Deutsch, Englisch, Spanisch oder Klingonisch, die im Laufe der Zeit auf natürlichem Wege entstanden sind und sich immer wieder den veränderten Lebenswelten anpassen. Sie verfügen über einen bestimmten Wortschatz und folgen in den meisten Fällen festgelegten Regeln, mit deren Hilfe einzelne Wörter zu Sätzen kombiniert werden können. Diese Regeln werden Grammatik genannt.

Natürliche Sprachen sind, sowohl was Wortschatz als auch Grammatik angeht, derart umfangreich, dass sie zur Beschreibung von beliebigen, sehr unterschiedlichen Arten von Sachverhalten geeignet sind.

Programmiersprachen sind dagegen künstlich erzeugte Sprachen, die meist nur eine kleine Anzahl an sogenannten Schlüsselwörtern als Wortschatz besitzen. Es gibt eine relativ überschaubare Anzahl an Regeln, wie man diese Schlüsselwörter miteinander zu Code-Konstrukten kombinieren kann. Bei Programmiersprachen spricht man in diesem Zusammenhang für gewöhnlich nicht von Grammatik, sondern von der Syntax.

Ein einzelnes Code-Konstrukt nennt man eine Instruktion (oder auch Anweisung). Durch die Aneinanderreihung von Instruktionen erhält man den sogenannten Quellcode. Anders als bei natürlichen Sprachen kann man den Quellcode nicht zur Beschreibung von beliebigen Sachverhalten verwenden. Er wird in der Regel zur formalen Beschreibung von Algorithmen genutzt. Die Instruktionen des Quellcodes repräsentieren dabei die einzelnen Schritte des Algorithmus.

Programmiersprachen besitzen zusätzliche Elemente, die es in dieser Form in natürlichen Sprachen nicht gibt: Variablen. Variablen sind Platzhalter für beliebige Elemente, zum Beispiel Zahlen, Buchstaben oder Wörter. Beim Anlegen einer Variablen muss man dieser lediglich einen Namen geben. Der Name kann (mit bestimmten Einschränkungen) beliebig gewählt werden, insbesondere muss (und darf) der Name einer Variablen nicht dem gewöhnlichen Wortschatz der Sprache (den Schlüsselwörtern) entstammen.

Sie können sich eine Variable als leere Kiste vorstellen. Diese kann zu jeder Zeit mit einem bestimmten Element gefüllt werden. Bei Bedarf kann das Element später wieder aus dem Platzhalter herausgeholt werden. Außerdem kann es durch ein anderes ersetzt werden.

Variablen sind damit die zentralen Bestandteile von Programmen. Durch sie wird der Quellcode erst lebendig, vielfältig und leistungsstark. Durch unterschiedliche Belegungen der Variablen können verschiedene Durchläufe desselben Programms deutlich voneinander abweichen.

Variablen werden in Programmen ähnlich wie bei Algorithmen dazu verwendet, um zum Beispiel Zwischenergebnisse abzuspeichern. Auch Endergebnisse von Berechnungen werden letztendlich in Variablen ausgeliefert.

Es dreht sich beim Programmieren also alles darum, Variablen anzulegen, zu ändern und wieder auszulesen. Im Programmierer-Jargon sagt man, Variablen werden manipuliert. Jeder einzelne Programmlauf wird durch eine bestimmte Anzahl von Variablen-Manipulationen charakterisiert.

Man spricht deshalb bei vielen Programmiersprachen von imperativer Programmierung. Das bezieht sich auf den grundlegenden Programmierstil: Ein Programm besteht aus einer Reihe von Anweisungen, die dem Computer »befehlen«, was er in welcher Reihenfolge tun soll.

Die weiteren Bestandteile einer Programmiersprache sind Werkzeuge, mit deren Hilfe die Variablen manipuliert werden können. Ganz grob lassen sich diese Werkzeuge in drei Gruppen einteilen:

Konstrukte, mit denen Variablen direkt manipuliert werden können.

Das können zum Beispiel mathematische Funktionen sein, die den Computer veranlassen, (Zahlen-)Variablen zu addieren oder zu subtrahieren.

Aber auch beliebige andere Manipulationen sind möglich. Insbesondere sind die Manipulationen nicht nur auf Zahlen-Variablen beschränkt. Auch Variablen, in denen Zeichen oder Wörter gespeichert werden, sind weit verbreitet und können auf verschiedene Weisen manipuliert werden – zum Beispiel indem zwei Variablen mit Wörtern darin zu einer einzigen zusammengefügt werden.

Konstrukte, mit denen sich Manipulationen von Variablen gruppieren und organisieren lassen.

Durch die Gruppierung von mehreren Manipulationen können diese beispielsweise sehr einfach mehrfach ausgeführt werden. Außerdem ist es mit diesen Konstrukten möglich, eine Liste von Manipulationen beim wiederholten Ausführen zu variieren oder dieselbe Gruppe von Manipulationen auf andere Variablen anzuwenden.

Man spricht dann von strukturierter Programmierung. Diese stellt gewissermaßen eine Erweiterung der imperativen Programmierung dar: Es werden zwar weiterhin Anweisungen angegeben, die der Computer der Reihe nach ausführen soll. Nun kann man aber zum Beispiel zusätzlich festlegen, dass ein Programmabschnitt 50-mal durchlaufen wird. Oder aber, dass ein Programmabschnitt nur dann überhaupt durchlaufen wird, wenn eine bestimmte Bedingung erfüllt ist.

Zu den Konstrukten, die dies in den Programmiersprachen ermöglichen, zählen die sogenannten Kontrollstrukturenund die Funktionen.

Konstrukte, mit denen Programmierer eigene Arten von Variablen anlegen und manipulieren können.

Variablen sind nicht darauf beschränkt, »gewöhnliche« Elemente wie Zahlen, Buchstaben oder Wörter zu speichern. Einige Programmiersprachen bieten Möglichkeiten, mit deren Hilfe Informationen über beliebige Arten von Elementen in Variablen gespeichert werden können. Variablen können dann vom Typ »Buch« oder vom Typ »Tier« sein.

Das nennt man objektorientierte Programmierung: Auf diese Weise können eigene Objekte erschaffen werden, die beliebige, vom Programmierer festgelegte Eigenschaften haben.

Für »Buch«-Objekte könnten diese Eigenschaften zum Beispiel Seitenanzahl und Erscheinungsjahr sein, für »Tier«-Objekte wären die Eigenschaften Größe, Gewicht und Tragezeit denkbar.

Innerhalb von Programmiersprachen wird diese Technik mithilfe der sogenannten Klassen umgesetzt.

Nimmt man all dies zusammen, so lassen sich mit modernen Programmiersprachen Algorithmen auf recht komfortable Weise realisieren.

Die Evolution der Programmiersprachen

Ist Ihnen aufgefallen, dass ich zuvor von Programmiersprachen meist im Plural geschrieben habe? Tatsächlich gibt es nicht die eine, universelle Programmiersprache, sondern ziemlich viele. Wie viele genau, weiß vermutlich niemand. Man munkelt, dass es mindestens 1500 sind, aber nichts Genaues weiß man nicht.

Doch warum gibt es überhaupt so viele Programmiersprachen? Zunächst einmal hat dies historische Gründe. Als im 20. Jahrhundert die ersten einfachen Computer entwickelt wurden, konnten diese zunächst nur über den primitiven, umständlichen Maschinencode instruiert werden. Natürlich war schnell klar, dass man komfortablere Möglichkeiten zur Programmierung brauchte. Mehr als eine Forschergruppe machte sich daran, Ideen für erste höhere Programmiersprachen zu finden und umzusetzen.

So geschah es, dass in der zweiten Hälfte des vorigen Jahrhunderts mehrere unabhängig voneinander geschaffene Programmiersprachen das Licht der Welt erblickten. Die Sprache Fortran, die im Jahr 1957 die Marktreife erlangte, gilt als erste höhere Programmiersprache, die von einem größeren Anwenderkreis genutzt wurde.

Dabei blieb es nicht. Zum einen wurden die vorhandenen Programmiersprachen immer weiterentwickelt. Außerdem wurden neue Programmiersprachen geschaffen, die teilweise von den vorhandenen Sprachen inspiriert wurden.

So entstand im Laufe der Zeit eine Vielzahl an unterschiedlichen Programmiersprachen. Neben öffentlich verfügbaren Sprachen entstanden auch private, die zum Beispiel von Firmen entwickelt und extra auf deren Bedürfnisse zugeschnitten wurden. Ein Beispiel für eine solche proprietäre Programmiersprache ist das von SAP entwickelte ABAP.

Die heute populären Programmiersprachen sind teilweise recht jung, Microsofts C# beispielsweise wurde erst im Jahr 2001 veröffentlicht. Im Vergleich zu den frühen Programmiersprachen sind die heute am häufigsten verwendeten sehr komfortabel und nehmen dem Programmierer viele Aufgaben ab.

Auch heute noch sind die Sprachen einem lebhaften Wandel unterworfen. Oft werden neue Funktionalitäten in vorhandene Sprachen eingefügt, die das Programmieren noch komfortabler machen sollen oder gänzlich neue Möglichkeiten eröffnen.

So haben sich die populären Programmiersprachen teilweise schon recht deutlich aneinander angeglichen. Wurde eine Sprache mit einem neuen, nützlichen Feature erweitert, wird dieses nicht selten auch in andere Sprachen übernommen. Für Sie als Programmieranfänger birgt dies einen gewaltigen Vorteil: Kennen Sie erst einmal eine Programmiersprache, wird es Ihnen sehr viel leichter fallen, weitere zu erlernen. Bestimmte Grundkonzepte sind in den meisten Sprachen enthalten.

Populäre Programmiersprachen und ihre Unterschiede

In diesem Buch soll es weder um (vergleichsweise) uralte Programmiersprachen gehen, die heute kaum mehr eingesetzt werden, noch um Randgruppen-Sprachen, die keine weite Verbreitung gefunden haben. Stattdessen möchten Sie sicher mehr über aktuelle Programmiersprachen lernen, die auch tatsächlich im großen Stil verwendet werden. Dadurch schrumpft die Liste der wirklich relevanten Sprachen sehr, sodass gerade einmal eine zweistellige Anzahl übrig bleibt.

Für die Entwicklung von gewöhnlichen Anwendungen für Desktop-Computer werden die Sprachen C, C++, Java, Python und C# am häufigsten verwendet. Die Syntax dieser Sprachen ist recht ähnlich. Das heißt, viele Konzepte und Befehle sind in diesen Sprachen komplett deckungsgleich enthalten. Ich werde mich daher darauf konzentrieren, einige wichtige Unterschiede zwischen diesen Sprachen darzulegen.

Übersetzung und Ausführung von Code

In Kapitel 1 habe ich den groben Ablauf der Kommunikation mit dem Rechner skizziert: Der vom Programmierer geschriebene Quellcode wird mittels eines Compilers in den Maschinencode übersetzt, der vom Rechner ausgeführt werden kann. Das gilt so aber nicht für alle Programmiersprachen, in der Realität existieren einige Variationen davon.

Das Problem bei dieser Vorgehensweise ist nämlich, dass es den universellen Maschinencode gar nicht gibt, sondern dass unterschiedliche Rechner unterschiedliche Arten von Maschinencode verarbeiten. Der Maschinencode eines Windows-Rechners kann zum Beispiel nicht auf einem Linux-Rechner ausgeführt werden und umgekehrt. Man sagt deshalb, dass der Maschinencode plattformspezifisch ist.

Bei manchen Sprachen wird der Quelltext daher nicht direkt in den plattformspezifischen Maschinencode übersetzt, sondern es wird eine zusätzliche Zwischenstufe geschaffen. Diese wird meist als Bytecode bezeichnet. Ein vom Programmierer geschriebener Quelltext wird dann für gewöhnlich zunächst mal in den Bytecode übersetzt.

Der Bytecode ist plattformunabhängig. Daher kann man den Bytecode, den man auf einem Windows-Rechner erzeugt hat, auch auf anderen Plattformen nutzen, also zum Beispiel unter Linux oder Macintosh.

Um den Bytecode auszuführen, benötigt man dann aber noch ein zusätzliches Werkzeug: Jeder Rechner kann ja nur den plattformspezifischen Maschinencode ausführen und der Bytecode liegt in einer plattformunabhängigen Form vor. Daher muss der Bytecode je nach Plattform, auf der er ausgeführt werden soll, in den entsprechenden Maschinencode transformiert werden.

Meist wird dafür ein sogenannter Interpreter genutzt. Der Interpreter wandelt den Bytecode in den Maschinencode um und führt ihn in der Regel auch direkt aus. Das Programm wird also nicht im Maschinencode gespeichert, sondern der Transformationsschritt vom Bytecode zum Maschinencode wird jedes Mal bei der Ausführung des Programms erneut ausgeführt.

Der gesamte Ablauf der Kommunikation mit dem Rechner gestaltet sich in diesem Fall also wie folgt:

Der Programmierer verfasst den Quelltext in einer Programmiersprache.

Der Quelltext wird mithilfe eines Compilers in einen plattformunabhängigen Bytecode transformiert.

Der Bytecode kann auf unterschiedliche Plattformen verteilt werden.

Es wird ein plattformspezifischer Interpreter genutzt, um den Bytecode in den plattformspezifischen Maschinencode umzuwandeln und ihn dann direkt auszuführen.

Bei dieser Art der Programmerzeugung wird also neben dem Compiler noch ein zusätzliches Werkzeug benötigt: der Interpreter. Da auch der Interpreter (ebenso wie der Compiler) für gewöhnlich vom Herausgeber der Programmiersprache bereitgestellt wird, ändert sich für den Programmierer zunächst einmal nicht viel. Dennoch hat diese abgewandelte Art der Übersetzung sowohl Vorteile als auch Nachteile gegenüber dem traditionellen Verfahren. Zunächst die Vorteile:

Die Erstellung von plattformunabhängigen Programmen wird erleichtert.

Leider gibt es keine hundertprozentige Sicherheit, dass das Programm auf allen Plattformen fehlerfrei ausgeführt wird. In der Realität sollte man dies immer gründlich testen und wenn nötig Anpassungen vornehmen.

Komponenten, die in verschiedenen Programmiersprachen geschrieben wurden, können zu einem einzigen Programm zusammengefügt werden.

Das ist insbesondere ein Vorteil auf Microsofts Software- und Programmierplattform .NET.

Die wichtigsten .NET-Sprachen sind C# und Visual Basic. Da der Bytecode, in den der Quellcode beider Sprachen umgewandelt wird, für beide Sprachen identisch ist, können Programme dieser Sprachen beliebig miteinander kombiniert werden.

Es gibt aber auch Nachteile, die die Bytecode-Kompilierung mit sich bringt:

Programme, die direkt in Maschinencode übersetzt wurden, werden potenziell schneller ausgeführt als Programme, die nur als Bytecode vorliegen.

Der Rechner selbst kann nur Maschinencode ausführen. Wenn ein Programm nur als Bytecode vorliegt und von einem Interpreter ausgeführt wird, muss dieser während der Ausführung jede Bytecode-Instruktion in Maschinencode-Instruktionen umwandeln. Daher ist die Zwischenschaltung eines Interpreters grundsätzlich etwas langsamer als die direkte Maschinencode-Ausführung.

Als Abwandlung davon werden Bytecode-Programme manchmal auch gleich nach dem Start komplett in Maschinencode übersetzt. In diesem Fall dauert dann lediglich der Programmstart etwas länger, danach besteht aber kein Geschwindigkeitsnachteil mehr.

Die Interpreter für die populären Programmiersprachen wurden im Laufe der Zeit immer weiter optimiert, sodass der Geschwindigkeitsnachteil heute bei vielen Programmen nur noch sehr klein ist.

Programme, die im Bytecode vorliegen, können leichter dekompiliert werden als Maschinencode-Programme.

Spätestens wenn Sie mit Ihren selbst geschriebenen Programmen Geld verdienen möchten, werden Sie daran interessiert sein, Mechanismen in die Programme einzubauen, die sicherstellen, dass nur diejenigen, die auch dafür zahlen, die Programme nutzen und weiterentwickeln können.