# Programmieren lernen, welche Sprache?



## Tim1974 (15. Mai 2019)

Hallo,

ich überlege, ob ich wieder mit dem Programmieren anfangen soll.
Früher hab ich in Turbo-Pascal programmiert und schon relativ lange Programme geschrieben gehabt, simpelste Spiele und Datenbanken usw.. 

Was mich jetzt interessiert ist, welche Sprache am leistungsfähigsten ist und mit welcher man am meisten machen kann?
Ich dachte zuerst an C, aber wo ist der Unterschied zu C++ und C# und welche Derivate es da noch so gibt?
Oder wäre es sinnvoller eine weborientierte Sprache wie Java oder JavaScript zu lernen?

Wie ihr seht, hab ich wenig Ahnung von den Unterschieden der einzelnen Sprachen und wüßte einfach gerne, wo ich als Umsteiger von Pascal mich am besten zurecht finde und zudem wesentlich mehr Möglichkeiten bekomme.

Gruß
Tim


----------



## Olstyle (15. Mai 2019)

Eine Sprache ist immer nur so gut wie man sie auf ein bestimmtes Problem anwenden kann.
Keine Webapplikationen läuft in C, dafür jeder Microcontroller. Was willst du denn gerne programmieren?


----------



## gaussmath (15. Mai 2019)

Sprachen, die modern sind, sind Java, JavaScript, C#, Scala.

Suche dir 2 aus und starte eine kleines Projekt, wo du beide Sprachen kombinierst. Oder starte mit einer Sprache deiner Wahl. Man sollte erstmal wenig Theorie machen und an praktischen Beispielen wachsen. Mit steigender Komplexität steigen die Anforderungen an die Konzepte und dann eignest du dir die entsprechende Theorie an. 

Man lernt auch immer an fertigen Beispielen. GitHub ist eine unerschöpfliche Quelle.


----------



## Laudian (15. Mai 2019)

Tim1974 schrieb:


> Was mich jetzt interessiert ist, welche Sprache am leistungsfähigsten ist und mit welcher man am meisten machen kann?



Du kannst mit vielen Sprachen praktisch alles machen. Aber Sprachen sind Werkzeuge, und das Werkzeug sollte entsprechend der anfallenden Arbeit gewählt werden. Du gehst ja nicht in deine Werkstatt und überlegst, was du jetzt mit deinem Hammer anstellen könntest...



Tim1974 schrieb:


> Oder wäre es sinnvoller eine weborientierte Sprache wie Java oder JavaScript zu lernen?



Java und Javascript haben nichts miteinander zu tun. Der ähnliche Name hat nur etwas mit Marketing zu tun.  Javascript wird vor allem genutzt, um Websites dynamisch zu machen, der Code wird also zusammen mit dem HTML-Dokument ausgeliefert und kann dieses dann nach der Auslieferung noch verändern. Java dagegen ist eine "normale" Programmiersprache, ist also darauf ausgerichtet, vollwertige Anwendungen darin zu schreiben. 


Sag uns doch einfach, was du gerne programmieren würdest, dann können wir dir mit Sicherheit bessere Ratschläge geben. Generell gibt es hier eine Menge Beiträge zum Thema "Programmieren Lernen", aber da du ja nicht ganz neu in dem Thema bist, ist das alles vielleicht nicht das richtige für dich.


----------



## wuselsurfer (15. Mai 2019)

Tim1974 schrieb:


> Was mich jetzt interessiert ist, welche Sprache am leistungsfähigsten ist und mit welcher man am meisten machen kann?


Man kann in fast jeder Programmiersprache alles machen.

Jede Sprache hat ihre Vor- und Nachteile.

Am leichtesten erlernt man Visual Basic und deren Nachfolger.
Das
Sub Main()
    MsgBox "Hallo PCGH!"
End Sub

gibt ein Meldungsfenster mit dem Inhalt 

Hallo PCGH!
aus.

Mit der leicht erlernbaren Syntax und der übersichtlichen Programmierumgebung kann man ganze Windows-Programme schreiben.
Durch die gute Kommentierbarkeit weiß man auch noch nach zehn Jahren, was man gemacht hat.

Ein Kompiler erstellt dann eine .exe, die man unter Windows oder anderen Systemen starten kann.
Damit ist das Programm auch hinreichend schnell.

Durch die aktive Syntaxkontrolle sieht man schon beim Quelltexterstellen, welche Möglichkeiten man hat (Variablen, Eigenschaften, Werte, ... ).

Einen Befehlsdurchlauf geht z.B. mit F8 zeilenweise mit Anzeige der zur Zeit gültigen jeweiligen Variablenwerte im Entwicklungsfenster.



Tim1974 schrieb:


> Ich dachte zuerst an C,


C ist halt sperrig und nicht selbsterklärend.
Man muß lange und sehr konzentriert arbeiten, damit man es beherrscht.



Tim1974 schrieb:


> aber wo ist der Unterschied zu C++ und C# und welche Derivate es da noch so gibt?


Das steht hier:
C++ – Wikipedia .



Tim1974 schrieb:


> Oder wäre es sinnvoller eine weborientierte Sprache wie Java oder JavaScript zu lernen?


 Kommt auf die Anwendung an.



Tim1974 schrieb:


> Wie ihr seht, hab ich wenig Ahnung von den Unterschieden der einzelnen Sprachen und wüßte einfach gerne, wo ich als Umsteiger von Pascal mich am besten zurecht finde und zudem wesentlich mehr Möglichkeiten bekomme.


Ich würde mit Visual Basic oder VB.net anfangen, das ist Pascal am ähnlichsten.


----------



## Tim1974 (16. Mai 2019)

Ich hab kein genaues Ziel, also es ist nicht so, daß ich jetzt ein bestimmtes Programm brauche und mir selbst schreiben will. Es geht mir erstmal nur darum was neues zu lernen, zu schauen wie weit ich komme, mit dem PC was sinnvolles zu machen, mein Gedächtnis und meine Konzentration dabei zu trainieren und natürlich auch um Spaß an der Sache.
Wenn ich wüßte, daß ich damit bestenfalls auch mal noch etwas Geld verdienen kann, wäre das ein zusätzlicher Ansporn, egal wie hypothetisch das am Anfang auch ist.
Darum würde ich schon gerne eine Sprache zu lernen versuchen, die sehr gefragt ist und das auch künftig bleibt.

Was mich an Programmen am meisten reizen würden, wäre alles was mit KI zu tun hat, aber schwerer gehts vermutlich auch kaum, oder?


----------



## Olstyle (16. Mai 2019)

KI im Sinne von Neuronalen Netzen ist in der Algorithmik und mit den richtigen Tools auch der Programmierung eigentlich ziemlich einfach. 
Keras mit Tensorflow wäre da eine übliche Adresse. Das ist eine Umgebung welche auf Python aufbaut.


----------



## efdev (16. Mai 2019)

Tim1974 schrieb:


> Was mich an Programmen am meisten reizen würden, wäre alles was mit KI zu tun hat, aber schwerer gehts vermutlich auch kaum, oder?



Da würde ich vielleicht erstmal nen Buch zu lesen ob KI überhaupt das ist was du dir darunter vorstellst  
Empfehlen kann ich das Buch von Oliver Kramer "Computational Intelligence eine Einführung", hat mir gut geholfen um zu entscheiden ob ich KI also Modul im Studium wähle oder nicht.


----------



## Tim1974 (16. Mai 2019)

Danke für die Hinweise.

Richtig ist, daß ich da wirklich keine Ahnung von habe, aber es würde mich halt reizen zu erfahren, wie gut eine KI heutzutage bestenfalls sein kann, was in naher Zukunft denkbar wird usw.. 
Davon unabhängig würde ich aber gerne Programmieren lernen, egal ob ich später nun mal an KIs tüffteln werde oder was ganz anderes programmiere, der Hauptaspekt für mich ist einfach der etwas sinnvolles am PC zu lernen und mein Gedächtnis und abstrakte Denkfähigkeit zu trainieren, was dann letztendlich dabei raus kommt ist völlig offen. 

Mit Python ist nun wieder ein neuer Name gefallen, von der Sprache hab ich noch nie gelesen.
Meine Frage nach der leistungsfähigsten Programmiersprache bringt mich zu der Annahme, daß dieses die Sprache sein wird, in der z.B. Windows oder Unix/Linux programmiert ist, richtig?


----------



## Teacup (16. Mai 2019)

Tim1974 schrieb:


> Danke für die Hinweise.
> 
> Richtig ist, daß ich da wirklich keine Ahnung von habe, aber es würde mich halt reizen zu erfahren, wie gut eine KI heutzutage bestenfalls sein kann, was in naher Zukunft denkbar wird usw..
> Davon unabhängig würde ich aber gerne Programmieren lernen, egal ob ich später nun mal an KIs tüffteln werde oder was ganz anderes programmiere, der Hauptaspekt für mich ist einfach der etwas sinnvolles am PC zu lernen und mein Gedächtnis und abstrakte Denkfähigkeit zu trainieren, was dann letztendlich dabei raus kommt ist völlig offen.
> ...



Das ist alles so unspezifisch, dass Du Dich erst mal entscheiden solltest, ob Du möglichst einfach Ergebnisse erzielen willst, oder ob Du im Detail etwas lernen möchtest.

Für mich klingen Deine Posts nach ersterem.
Das bedeutet, Du brauchst eine Sprache, für die es möglichst viele fertige Frameworks/Bibliotheken gibt, die bereits Lösungen für deine Aufgaben bieten und dann nur noch von Dir angesprochen werden.

-> Java, .NET-Sprachen, Python


> Meine Frage nach der leistungsfähigsten Programmiersprache bringt mich zu der Annahme, daß dieses die Sprache sein wird, in der z.B. Windows oder Unix/Linux programmiert ist, richtig?



Nein.
Vergiss die Frage nach "Leistungsfähigkeit" und fang an zu Programmieren. Die meisten Fragen haben sich dann nach wenigen Wochen von selbst erledigt.


----------



## gaussmath (16. Mai 2019)

.NET Core kann unter Windows und Linux genutzt werden.


----------



## Venom89 (16. Mai 2019)

Tim1974 schrieb:


> Meine Frage nach der leistungsfähigsten Programmiersprache bringt mich zu der Annahme, daß dieses die Sprache sein wird, in der z.B. Windows oder Unix/Linux programmiert ist, richtig?



Was denn von Windows? 

Den Kernel? (Verwaltung und Kontrolle der Ressourcen) 

Die Shell? (die grafische Oberfläche, Desktop, Window Manager) 

Da muss man ein wenig differenzieren. Denn dort können verschiedene Programmiersprachen zur Anwendung kommen.


----------



## Laudian (16. Mai 2019)

Tim1974 schrieb:


> Mit Python ist nun wieder ein neuer Name gefallen, von der Sprache hab ich noch nie gelesen.



Python ist meiner Meinung nach ein super Einstieg in die Welt des Programmierens. Solange du nicht vorhast, ein Betriebssystem oder 3D-Software zu entwickeln, kannst du in Python praktisch alles machen. Nur um ein Beispiel zu nennen, das Backend von Youtube ist in Python programmiert.

Die klassischen Anwendungsfelder von Python sind wohl Webentwicklung (Backend), Datenanalyse (Machine Learning, Deep Learning, AI und whatever) und Scripte, die bestimmte Aufgaben einmalig erledigen sollen.
Wenn man 2D-Anwendungen entwickeln möchte, ist wohl eher Java angebracht, denn die JavaFX Library ist dafür wirklich extrem gut, aber auch in Python kann man einfache 2D Anwendungen programmieren. Ich habe z.B. mal ein Kartenspiel geschrieben, dass ich dann übers Internet mit Freunden spielen konnte. Allerdings sind die Grafikschnittstellen für Python eher weniger entwickelt als für andere Sprachen.
Was in Python nicht geht, sind Apps für Handys etc.

Python ist eine extrem ausdrucksstarke Sprache, man kann also in der Regel ein Programm in Python mit weniger Code schreiben, als in vielen anderen Programmiersprachen. Außerdem hat Python eine sehr angenehme Lernkurve.

Ich würde mir an deiner Stelle einfach mal die aktuelle Python Version installieren und mit diesem Tutorial hier anfangen. Selbst wenn du dich am Ende entscheidest, dass Python nicht die richtige Sprache für dich ist, ist die Zeit nicht vergeudet. Viele Konzepte sind in Python und anderen objektorientierten Sprachen gleich oder zumindest sehr ähnlich. Falls du Fragen hast, immer her damit 

Edit: Außerdem ist Python sehr schön dokumentiert. 3.7.3 Documentation


----------



## Gamer090 (17. Mai 2019)

Ich habe vor Jahren mal versucht mit C zu programmieren und irgendwie war das für einen Anfänger wie mich zu kompliziert und habe nie wirklich verstanden was ich da gemacht habe. Es vergingen Jahre ohne das ich mich wirklich mit dem Thema beschäftigte, bis letztes Jahr ich jemanden getroffen habe, die beruflich viel programmieren muss. Als ich fragte was das einfachste sei, sagte sie mir Python. 

Vor kurzem bin ich auch endlich dazu gekommen es mal zu testen und so schwer ist es wirklich nicht, man versteht vieles gleich von Beginn an wenn man Englisch versteht  Spass beiseite, geht auch ohne Englischkenntnisse, Deutschsprachige Tutorials gibt es sicher genug im Netz.

EDIT: Gerade passend zum Thema: Humble Book Bundle: Artificial Intelligence & Deep Learning by Packt (pay what you want and help charity)


----------



## taks (17. Mai 2019)

Gamer090 schrieb:


> EDIT: Gerade passend zum Thema: Humble Book Bundle: Artificial Intelligence & Deep Learning by Packt (pay what you want and help charity)



Danke für den Tipp, habs grad gekauft


----------



## Zeiss (17. Mai 2019)

Gamer090 schrieb:


> Ich habe vor Jahren mal versucht mit C zu programmieren und irgendwie war das für einen Anfänger wie mich zu kompliziert und habe nie wirklich verstanden was ich da gemacht habe.



Was aber nicht an der Sprache lag... Die Sprache ist nur ein Werkzeug, nicht mehr und auch nicht weniger. In jeder Sprache gibt es Variablen, Schleifen, Verzweigungen, etc. In einer Sprache werden die Variablen deklariert, in den anderen nicht. Die Lernkurve in C ist halt sehr steil, wenn man es wirklich lernen will, kommt man an zum Beispiel Pointer und Referenzen nicht vorbei. Aber wenn man es verstanden hat, ist man in der Lage extrem performanten Code zu schreiben. Dazu kommt noch, dass C (C++ ebenso) eben maschinennah ist und keinen Interpreter braucht, aber einen Compiler.

@TE: Wenn Du frustresistent und nicht auf schnelle Erfolge aus bist, lerne C/C++. Von C/C++ kann man so ziemlich alles erlernen, okay, Cobol vielleicht nicht


----------



## Tim1974 (17. Mai 2019)

Ich möchte mich aber nicht gleich zu Beginn festlegen und eventuelle Möglichkeiten verbauen, denn es ist gut möglich, daß ich irgendwann 2D- oder 3D-Grafik programmieren möchte. Was ich jedenfalls erstmal nicht möchte sind Webanwendungen schreiben, oder Webseiten bauen, das hat mich noch nie so sehr gereizt, weil man ja auch einen Server braucht um diese erreichbar zu halten.

Primär gehts mir also darum performante Codes verstehen zu wollen und vielleicht selbst mal welche zu schreiben, vielleicht übernehme ich mich damit, vielleicht auch nicht.
Wenn ich jetzt mit C oder C++ einen Versuch mache, helfen mir dann meine Pascal-Kenntnisse von früher ein wenig, oder ist alles komplett anders und viel schwieriger?

Bekommt man eigentlich die Compiler und die Entwicklungsebenen für die genannten Programmiersprachen umsonst als Download (zumindest für Linux)?


----------



## Olstyle (17. Mai 2019)

Auf dem PC gibt es für jede Sprache freie Compiler. IDEs dagegen sind nicht immer Gratis, auch da gibt es aber z.B. mit Eclipse eine die schon ziemlich viel erschlägt.
Auch wenn ich selbst C-Mensch bin würde ich mich hier eher den Python Empfehlungen anschließen. Da man oft C-Backends bedient ist die Performance mehr als ausreichend für alle Spielereien. 3D ohne Engine zu machen ist eigentlich nur Selbstkasteiung und die Engines wiederum arbeiten eh mit eigenen Skriptsprachen für die jede Erfahrung in einer vollwertigen Sprache hilft.


----------



## Laudian (17. Mai 2019)

Zeiss schrieb:


> Die Lernkurve in C ist halt sehr steil, wenn man es wirklich lernen will, kommt man an zum Beispiel Pointer und Referenzen nicht vorbei.



In C gibt es keine Referenzen. Und die Lernkurve ist wirklich extrem steil...



Zeiss schrieb:


> Aber wenn man es verstanden hat, ist man in der Lage extrem performanten Code zu schreiben.



Das stimmt, aber Performance ist in den allermeisten Fällen völlig uninteressant, vor allem für Anfänger. Rechenzeit ist im Vergleich zur Entwicklerzeit einfach so billig geworden, dass der Fokus eher darauf liegt, Programmieraufwand einzusparen. Lieber 10 Server mehr kaufen, als einen teuren Entwickler einzustellen...
Wenn man wirklich jedes bisschen Performance braucht, kommt man um C/C++ aber wohl eher nicht herum.

Ich würde einem Anfänger nicht nahelegen, mit C Programmieren zu lernen. C ist dann angebracht, wenn man wirklich auf jedes bisschen Performance angewiesen ist. Aber dann reicht es auch nicht, vernünftig in C zu programmieren, sondern man muss wirklich verstehen, wie Computer und Betriebssysteme funktionieren.

Versteh mich nicht falsch, ich halte C für eine sehr elegante Sprache (und C++ für eine Ausgeburt des Teufels, ähnlich wie PHP), aber als Anfänger kann man mit C einfach keine besonders spannenden Sachen machen, sondern beschäftigt sich noch damit zu verstehen, was du wie als Funktionsargument übergeben kannst. In Python machst du sowas eben einfach, ohne groß darüber nachzudenken und sendest schon deine ersten Nachrichten über das Internet. Python ist meiner Meinung nach einfach schöner, um damit rumzuspielen und Dinge auszuprobieren.

C bietet dagegen einfach keine große Abstraktion. Um irgendetwas in C zu machen, musst du in der Regel erst einmal das dahinterliegende System (wtf ist ein Filedescriptor?) verstehen.



Tim1974 schrieb:


> Bekommt man eigentlich die Compiler und die Entwicklungsebenen für die genannten Programmiersprachen umsonst als Download (zumindest für Linux)?



Irgendeine IDE und irgendeinen Compiler bekommst du mit Sicherheit umsonst. 
Ich kann persönlich die Jetbrains IDEs empfehlen, die gibt es für beinahe alle Programmiersprachen und sind dabei vom Aufbau mehr oder weniger identisch.
Pycharm für Python, IntelliJ für Java und CLion für C/C++. Zumindest von PyCharm und IntelliJ gibt es kostenlose Communityversionen, die für dich als Anfänger alles nötige mitbringen.

Ob dir deine Pascalkenntnisse etwas bringen kann ich dir leider nicht sagen, da ich Pascal nicht kenne


----------



## Zeiss (17. Mai 2019)

Ähm... genau, keine Referenzen... was übergebe ich denn bitte bei einem "call by reference" Aufruf? Bananen? Das Kommentieren vom Rest spare ich mir, vor allem die Passage "Performance ist in den allermeisten Fällen völlig uninteressant, vor allem für Anfänger."

Und wenn Du C++ für "Ausgeburt des Teufels" hältst, dann hast Du es nicht verstanden, klar, ist kein Java, da muss man die grauen Zellen echt anstrengen.


----------



## gaussmath (17. Mai 2019)

C, da kann man auch gleich Lochkarten verwenden. ^^ Und natürlich ist C++ eine Ausgeburt der Hölle. Programmieren = Abstraktionen schaffen. Das geht am besten mit Scala oder C#/F#.


----------



## Teacup (17. Mai 2019)

Es soll auch Leute geben, die, vor lauter Suchen nach der perfekten Sprache, nie angefangen haben zu programmieren.


----------



## gaussmath (17. Mai 2019)

Tim wird eh für die Suche nach der optimalen Sprache so lange brauchen wie für den Kauf seiner CPU. 

Tim, fang einfach an mit Python. Das passt schon. ^^


----------



## Plasmadampfer (17. Mai 2019)

Ich habe damals auf SInclair ZX-81 und Commodore VC-20 in BASIC angefangen. Solch ein Commodore VC-20 hat sage und schreibe 2KB RAM. Da kommt man an Assembler nicht vorbei bei dem geringen RAM und der Supergeschwindigkeit der damaligen BASIC Interpreter, um mal was schnelles auf den Schirm zu zaubern. C-64 habe ich nur in Assembler programmiert. Commodore Amiga erst auch in Assembler, später dann Lattice->SAS-C. In einer Hochsprache kommste halt 10 mal schneller vorwärts, als in schierem Assembler.

Ich bin dann über Brian W. Kernighan und Dennis M. Ritchie C, Buch -> The C Programming Language heutzutage bei C++ und C# gelandet mit MS Visual Studio.

C insgesamt ist plattformunabhängig. Wenn Du das wirklich drauf hast, dann kannste alle anderen Sprachen wegen Codesize und Performance voll in die Tonne hauen.

Ich habe 1991 mal die Krätze gekriegt mit Dave von Junglecommand. Dr. Pflaume hatte einen 8085 Assembler Emulator in Turbo Pascal mit Segment:Offset Adressierung auf 80286 programmiert und wir Schüler sollten ein paar mal daran teilnehmen.

Ich so Dave, warum ist der Kack Emulator so furchtbar langsam, da pennt man ja bei ein. Wir einfach nicht mehr zum Unterricht gegangen, X86 Assembler und C den 8085 Emulgator neu geschrieben. Der Pauker immer zu den anderen gesagt, die bestehen die Prüfung nicht. Wir voll abgeräumt, den Emulator hochperformant abgeliefert. Deswegen hasse ich solche Begriffe wie Turbo Pascal und Phyton und irgendwelche Sprachen wie Kaffeetasse, die so oder so gegen C keine Schnitte haben.


----------



## Laudian (17. Mai 2019)

Zeiss schrieb:


> Ähm... genau, keine Referenzen... was übergebe ich denn bitte bei einem "call by reference" Aufruf? Bananen?



C hat keine Pass by Reference Syntax, sondern ausschließlich Pass by Value.
Man kann Pass by Reference lediglich durch die Verwendung von Pointern emulieren.


Aber gut, BTT:
Generell ist es so, dass Anfänger eher einfache Dinge lernen. Beim Skateboarden probiert man sich eben zuerst an einem Kickflip und nicht direkt an einer 900° Drehung auf der Halfpipe.
Und C ist eben nicht besonders einfach: Es gibt sehr viele Dinge, die man als Anfänger falsch machen kann (und wird).
Python dagegen ist explizit dahin entwickelt worden, einfach zu sein. Dafür ist die Sprache dann eben ~200 Mal langsamer als C, aber für Anfänger ist die Performance eben ziemlich unwichtig.
Ich möchte hier auf keinen Fall sagen, dass C schlecht ist. Ich mag C. Aber es ist nach heutigen Maßstäben keine anfängerfreundliche Programmiersprache, weil man einfach relativ lange braucht, um Ergebnisse zu erzielen.


----------



## Tim1974 (17. Mai 2019)

Dann wäre es in meinem Fall wohl am sinnvollsten mir ein dickes Buch für die gewählte Programmiersprache zu kaufen, gibt es da Empfehlungen, welches Buch für Anfänger gut geeignet ist und auf für Fortgeschrittene noch ausreicht und vielleicht gleich eine CD mit den nötigen Programmen (Compiler und Entwicklungseben) mit dabei hat?


----------



## Plasmadampfer (17. Mai 2019)

Du kannst, wenn Du C Sharp lernen willst unter dotNET der ww.mycsharp.de community beitreten, visual studio haste im nu runtergeladen. schreibste deine erste eigene windows applikation im schutz des dotNET frameworks.
C# ist sehr helpschool und einfach geil, visual studio kannste aber auch im c++ starten, dann wirds etwas mehr richtung assembler.

In Assembler kann man Alles machen, in C fast alles, in C++ fast fast Alles und in C# schreibt man moderne Applikationen im dotNET.


Bücher brauchst DU heutzutage nicht mehr. WIN32 API von Charles Petzold habe ich. Ich habe aber auch viel mit NoBugz, ein Microsoft MVP geschrieben.

Das ist ein gutes Online Buch: C# - Rheinwerk openbook

Schieres C unter WIN32API  RS232 Communications, unter DOS kriegste das sehr schlank hin, in einem Multitasking Multiusersystem so:

http://www.tetraedre.com/advanced/serial/msdn_serial.htm

Ich habe ein Outlook Addin geschrieben in 10 Minuten


```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;

namespace Nirvana
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            Outlook.Application application = this.Application;

            application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(ItemSend_BeforeSend);
        }
        void ItemSend_BeforeSend(object Item, ref bool Cancel)
        {
            if (Item is Outlook.MailItem)
            {
                Outlook.MailItem mailItem = (Outlook.MailItem)Item;
                if (mailItem != null)
                {
                    string s = mailItem.To.ToLower();
                    if (s.Contains("ilona"));
                    {
                        //System.Windows.Forms.MessageBox.Show("Keine Mails an Weiber schicken !!!", "Frankie!");
                        Cancel = true;
                        Outlook.Inspector insp = mailItem.GetInspector;
                        ((Outlook._Inspector)insp).Close(Outlook.OlInspectorClose.olDiscard);
                    }
                }
            }
        }
        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
            Application.ItemSend -= ItemSend_BeforeSend;
        }      
        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
        
        #endregion
    }
}
```


----------



## Laudian (17. Mai 2019)

Tim1974 schrieb:


> ...  für die gewählte Programmiersprache zu kaufen, gibt es da Empfehlungen,



Welche Sprache hast du denn jetzt gewählt? 



Tim1974 schrieb:


> Dann wäre es in meinem Fall wohl am sinnvollsten mir ein dickes Buch für die gewählte Programmiersprache zu kaufen, gibt es da Empfehlungen, welches Buch für Anfänger gut geeignet ist und auf für Fortgeschrittene noch ausreicht und vielleicht gleich eine CD mit den nötigen Programmen (Compiler und Entwicklungseben) mit dabei hat?



Ich würde ehrlich kein Buch kaufen. Im Internet gibt es genug Tutorials mit Links, unter denen du dir die nötige Software runterladen kannst. Bei Problemen können wir dir auch Schritt für Schritt sagen, was du machen musst. Wenn dir ein Tutorial im Internet nicht gefällt, kannst du immer noch zu einem anderen wechseln, bei einem Buch hast du dann eine Menge Geld verschenkt. Bücher würde ich dann eher für spezifische Themen wie Betriebssysteme oder Netzwerke kaufen (die Bücher von Tanenbaum sind zu empfehlen).
Eine Ausnahme würde ich da bei C++ machen. C++ ist einfach so unglaublich umfangreich...

Die meiste Zeit wirst du dann eh in der Dokumentation spezifischer Bibliotheken oder auf stackoverflow.com verbringen.


Falls du Python ausprobieren möchtest:
Lade dir https://www.python.org/ftp/python/3.7.3/python-3.7.3-amd64.exe herunter, das beinhaltet den CPython Interpreter, IDLE (eine sehr sehr grundlegende IDE, die speziell zum Lernen entworfen wurde) und einige andere nützliche Tools, die du später vielleicht benutzen wirst.

Dann kannst du IDLE einmal starten und

```
print("Hallo")
```
oder

```
3 + 3
```
 eingeben. Schwups, das war das erste Programm.

Als Tutorial würde ich 3. An Informal Introduction to Python — Python 3.7.3 documentation angucken.


----------



## Teacup (18. Mai 2019)

Laudian schrieb:


> Aber gut, BTT:
> Generell ist es so, dass Anfänger eher einfache Dinge lernen. Beim Skateboarden probiert man sich eben zuerst an einem Kickflip und nicht direkt an einer 900° Drehung auf der Halfpipe.
> Und C ist eben nicht besonders einfach: Es gibt sehr viele Dinge, die man als Anfänger falsch machen kann (und wird).
> Python dagegen ist explizit dahin entwickelt worden, einfach zu sein. Dafür ist die Sprache dann eben ~200 Mal langsamer als C, aber für Anfänger ist die Performance eben ziemlich unwichtig.
> Ich möchte hier auf keinen Fall sagen, dass C schlecht ist. Ich mag C. Aber es ist nach heutigen Maßstäben keine anfängerfreundliche Programmiersprache, weil man einfach relativ lange braucht, um Ergebnisse zu erzielen.



Kommt auch darauf an welches Lernziel man verfolgt. 
Ich finde es angenehm mit C#/VB.Net zu arbeiten und möchte es nicht mehr missen, genauso aber auch den Einstieg an der Uni mit C - immer noch.


----------



## Tim1974 (18. Mai 2019)

Ich hab zwar damals Turbo-Pascal sicher auch noch lange nicht auf allen Gebieten ausgereizt, bin aber bei einer selbst programmierten Datenbank an die Grenzen des Speichers gestoßen, nicht das RAMs oder der HDD, die Sprache konnte anscheinend nicht so viele Daten ablegen, wie ich das gerne gehabt hätte, ist aber auch möglich, daß ich ungeschickt programmiert hatte und es bessere Lösungen dafür gegeben hätte.
Damals hab ich mir dann geschworen, nie wieder eine Sprache, die mir so früh schon Grenzen zeigt und ich wollte zu C wechseln, hab das Programmieren dann aber ganz an den Nagel gehängt.

Das ist zwar objektiv betrachtet jetzt nicht mehr wichtig für mich, aber es ist irgendwie eine Kopfsache, wenn ich anfange was zu lernen, möchte ich wissen, daß ich da auch nach vielen Jahren und vielleicht großen Fortschritten nicht an die Grenzen stoßen werde und mit der Sprache quasi alles machen kann und alle Möglichkeiten habe.


----------



## Teacup (18. Mai 2019)

Tim1974 schrieb:


> Das ist zwar objektiv betrachtet jetzt nicht mehr wichtig für mich, aber es ist irgendwie eine Kopfsache, wenn ich anfange was zu lernen, möchte ich wissen, daß ich da auch nach vielen Jahren und vielleicht großen Fortschritten nicht an die Grenzen stoßen werde und mit der Sprache quasi alles machen kann und alle Möglichkeiten habe.



Ich bin mir nicht sicher, ob die Fragestellung so überhaupt Sinn ergibt.
Wenn Du in der Windows-Welt bleiben willst nimm C#, VB.NET und fang einfach mal.


----------



## Tetrahydrocannabinol (19. Mai 2019)

Das mit dem einfach Anfangen ist bei Tim ein großes  Problem, denn bevor er aktiv wird muss erst über Wochen das Thema diskutiert werden ...


----------



## Tim1974 (19. Mai 2019)

Nur ne Woche, das wäre aber außergewöhnlich wenig! 

Nein, Spaß beiseite, es drängt mich da ja nichts, ich habe kein Projekt, was ich machen muß, es ist einfach das Interesse daran, zu versuchen was schwieriges neues zu lernen und sinnvoll Zeit am PC zu verbringen.

Wichtig für mich zu wissen wäre vorher noch folgendes:

a) Falls ich mich wirklich für ein C-Derivat entscheide, was unterscheidet C von Pascal?
b) Was macht C so schwierig, ist es sehr mathematisch, so daß man dort ein fundiertes Grundwissen braucht um in der Sprache was reißen zu können?
Falls ja, ist es in der Tat ein Problem für mich, denn ich war in Mathematik nicht so gut und mein Schulwissen liegt ja auch ewig zurück.
c) Welche Hilfestellungen kann ich bekommen?
Es wurden ja schon ein paar Links genannt, jedoch finde ich manchmal ein gedrucktes dickes Buch besser, als wenn man alles auf dem Bildschirm auf irgendwelchen Webseiten lesen muß.
Gut wären auch kleine Programme zum Veranschaulichen verschiedener Befehle und deren Möglichkeiten und genauen Erklärungen, wofür die einzelnen Zeilen notwendig sind und wie man sie variieren kann.


----------



## Laudian (20. Mai 2019)

a) Ich kenne Pascal leider nicht, deswegen kann ich dazu nichts sagen. zwischen C, C++ und C# liegen allerdings Welten.
b) C ist eine sehr simple Programmiersprache. Das heißt aber nicht, dass C einfach wäre. Ganz im Gegenteil:
C ist eine sehr kleine Programmiersprache, komplexere Funktionen muss man aus wenigen, einfachen Grundbausteinen zusammensetzen. Das ist für viele Dinge wichtig, weil du damit sehr präzise steuern kannst, *wie* genau dein Programm funktioniert. Allerdings führt das auch dazu, dass Programme sehr schnell sehr viel größer werden als in anderen Sprachen. Und größere Programme führen fast automatisch zu mehr Fehlern.
Dadurch, dass du sehr präzise steuern kannst, wie das Programm abläuft, kannst du aber auch einige Fehler einbauen, die in anderen Sprachen so nicht möglich sind. In C kannst du Befehle wie "Schreibe 13 in Speicheradresse 24" ausführen. Direkte Zugriffe über Speicheradressen können sehr performant sein, haben aber auch das hohe Risiko, dass man falsche Adressen beschreibt, wenn man Rechen- oder Logikfehler im Code hat. Das ist nur ein Beispiel für die Fallstricke in C...

Moderne Hochsprachen wie Python und Java dagegen abstrahieren von der Speicherebene - du kannst nur mit Variablen arbeiten, also a = 13. Die richtige Speicheradresse suchen Compiler oder Laufzeitumgebung dann automatisch. Du konzentrierst dich also darauf, *was* dein Programm machen soll, nicht wie es das macht. Das ist sicherer, aber auch langsamer. Dafür bieten diese Sprachen aber viele viele Funktionen, durch die du dir eine Menge Code sparen kannst.

C++ ist irgendwo in der Mitte... C++ kann im Prinzip alles, was C kann, hat aber zusätzlich die ganzen Funktionen der modernen Hochsprachen und noch viele viele eigene Features. C++ ist ohne Zweifel eine der am schwersten zu erlernenden Sprachen (weil sehr umfangreich UND viele Fallstricke), aber auch eine der mächtigsten. C++ ist aber sehr kompatibel zu C, wenn du mit C anfängst kannst du also beinahe alles Gelernte zu C++ mitnehmen.

Praktisch ist es heute so:
C wird für sehr hardwarenahe Anwendungen genutzt, z.B. Betriebssysteme und Embedded Software (Also Programme, die oft ohne Betriebssystem auf einem Prozessor laufen, Steuersysteme für Autos und Flugzeuge und dergleichen).
C++ für Anwendungen, die ebenso auf hohe Performance angewiesen sind aber nicht so hardwarenah arbeiten: Adobe Photoshop, Spieleengines, Datenbanksysteme etc.
Python wird hauptsächlich für Skripte, Webserver und als "Steuerung" für andere Programme verwendet: Jemand könnte also ein schnelles Programm in C schreiben und dann über Python mit Daten füttern. Python ist sehr beliebt bei Aufgaben, die vielleicht 2-3 mal täglich anfallen, weil die Performance dort oft völlig egal ist.
Java und C# dann praktisch für alles andere (Android Apps, Büroanwendungen...).

c) Von Büchern zu Grundlagen kann ich dir nur abraten. Es gibt viele gute Bücher zu speziellen Themen oder um eine Sprache wirklich zu vertiefen, aber für die Grundlagen empfehle ich dir online Tutorials und z.B. adventofcode.com - auf der Seite gibt es einige kleine Aufgaben. Du bekommst immer irgendwelche Daten und kannst auf der Seite dann überprüfen, ob dein Ergebnis richtig ist.


----------



## Tim1974 (20. Mai 2019)

Gut danke, das bringt schon etwas mehr Licht ins Dunkel. 

Also C und Python verwerfe ich dann mal und entscheide mich entweder für C++ oder für Java oder C#.

Das C++ sozusagen mehr bietet als C ist ja eigentlich auch klar, sonst wären die ++ ja irreführend. Aber was bedeutet C#, ist das auch sozusagen eine Modernisierung von C oder eine andere Variante für bestimmte Fälle, die an mancher Stelle mehr und an andere wieder weniger bietet als C?
Kann man denn z.B. in C# oder Java auch performante 3D-Spiele programmieren oder eine gute KI?


----------



## taks (20. Mai 2019)

Tim1974 schrieb:


> Kann man denn z.B. in C# oder Java auch performante 3D-Spiele programmieren oder eine gute KI?



Z.B. können in Unity die Scripts mit C# geschrieben werden und z.B. Minecraft wurde in Java programmiert.


----------



## Tim1974 (20. Mai 2019)

Mit Unity meinst du die GUI von Ubuntu-Linux? 

Minecraft sieht grafisch nun nicht gerade so aus, als wollte ich sowas programmieren oder die Sprache lernen, in der das geschrieben wurde...


----------



## taks (20. Mai 2019)

Unity


----------



## -Shorty- (20. Mai 2019)

Tim1974 schrieb:


> Mit Unity meinst du die GUI von Ubuntu-Linux?
> 
> Minecraft sieht grafisch nun nicht gerade so aus, als wollte ich sowas programmieren oder die Sprache lernen, in der das geschrieben wurde...



Eben, der arme Erfinder hat auch kaum mehr als ein Kaugummi und n halbes Glas Apfelsaft dafür bekommen. Mit solchem Geklecker wird sich der Tim wohl kaum befassen, da geht es um so viel mehr, obwohl ... um was ging es nochmal Tim? Was wolltest du nochmal Programmieren? 

PS: Bevor ich einkaufen gehe schreibe ich auch immer einen Zettel vorher, mit Dingen die ich *absolut nicht* brauche, so vermeide ich unnütze Einkäufe, dauert eben immer etwas Zeit bis man von A-Z alles durch hat aber es ist den Aufwand wert, jede Woche aufs Neue.


----------



## Olstyle (20. Mai 2019)

C# und C sind nur in der Syntax verwandt. In der Umsetzung auf dem Rechner ist C# Java deutlich ähnlicher als C.
Zu KI hab ich schonmal was geschrieben: Da ist Tensorflow Standard. Das ist zwar in C++ geschrieben, bedient man in der Regel aber aus Python heraus.


----------



## Teacup (20. Mai 2019)

Tim1974 schrieb:


> b) Was macht C so schwierig, ist es sehr mathematisch, so daß man dort ein fundiertes Grundwissen braucht um in der Sprache was reißen zu können?
> Falls ja, ist es in der Tat ein Problem für mich, denn ich war in Mathematik nicht so gut und mein Schulwissen liegt ja auch ewig zurück.





Tim1974 schrieb:


> Kann man denn z.B. in C# oder Java auch performante 3D-Spiele programmieren oder eine gute KI?





			
				Tim1974 schrieb:
			
		

> Minecraft sieht grafisch nun nicht gerade so aus, als wollte ich sowas programmieren oder die Sprache lernen, in der das geschrieben wurde...



"Ich bin nicht gut in Mathe, aber welches Werkzeug brauche ich zum Bauen einer Rakete? Aber keine Ariane, schon eine wie von Space-X, die selber landen kann." :p

Wenn das alles im Rahmen eines "Hobbys für nebenher" bleiben soll, würde ich stark dazu raten eine fertige Engine, wie die erwähnte Unity-Engine, zu nehmen und entsprechend zu nutzen. 



Tim1974 schrieb:


> c) Welche Hilfestellungen kann ich bekommen?
> Es wurden ja schon ein paar Links genannt, jedoch finde ich manchmal ein gedrucktes dickes Buch besser, als wenn man alles auf dem Bildschirm auf irgendwelchen Webseiten lesen muß.
> Gut wären auch kleine Programme zum Veranschaulichen verschiedener Befehle und deren Möglichkeiten und genauen Erklärungen, wofür die einzelnen Zeilen notwendig sind und wie man sie variieren kann.



Die Unity + C# Kombination ist wohl sehr gut dokumentiert.


----------



## cann0nf0dder (20. Mai 2019)

Tim1974 schrieb:


> Es wurden ja schon ein paar Links genannt, jedoch finde ich manchmal ein gedrucktes dickes Buch besser, als wenn man alles auf dem Bildschirm auf irgendwelchen Webseiten lesen muß.



die von O'Reilly sind da eine gute Lektüre


----------



## HardwareHighlander (20. Mai 2019)

Tim1974 schrieb:


> ... wo ich als Umsteiger von Pascal...



Umsteiger? Vielleicht einfach mal ein wenig Eigeninitiative zeigen und mal erklären welches Projekt dir vorschwebt und welchen Nutzen es haben soll. 

Für den schnellen Einstieg ohne Kenntnisse empfehle ich Visual Basic, erste kleine Anwendungen mit Windows Forms erstellen. 
Ansonsten wenns um Spiele geht dann Unity. 

Hört sich nicht so an als ob du damit überhaupt irgendeine Erfahrung gemacht hättest.


----------



## efdev (20. Mai 2019)

PolyOnePolymer schrieb:


> Ansonsten wenns um Spiele geht dann Unity.



Godot kann ich da auch empfehlen vorallem was 2D angeht


----------



## Tim1974 (20. Mai 2019)

PolyOnePolymer schrieb:


> Umsteiger? Vielleicht einfach mal ein wenig Eigeninitiative zeigen und mal erklären welches Projekt dir vorschwebt und welchen Nutzen es haben soll.



Da ich keinen Bedarf an Anwendungen habe, würde es mich tatsächlich erstmal reizen mehr in Hinsicht Spiele zu machen, das waren so auch meine letzten Projekte damals bei Turbo-Pascal, allerdings ist das rund 25 Jahre her. 
Unity scheint ja echt interessant zu sein, das muß ich mir mal näher anschauen.


----------



## Zeiss (28. Mai 2019)

Tim1974 schrieb:


> b) Was macht C so schwierig, ist es sehr mathematisch, so daß man dort ein fundiertes Grundwissen braucht um in der Sprache was reißen zu können?



Das hat mit Mathematik wenig zu tun. C nimmt einem nichts ab, gar nichts. Man muss sich um alles selber kümmern, wie Speicherverwaltung, allozieren und freigeben. Da muss man wissen, was man tut. Ein krasser Gegenteil dazu sind die Java-Jünglinge, die einfach nur irgendwelche Frameworks zusammen tackern und sich dann wundern, warum der Haufen keine Performance hat, Stichwort Hibernate...



Laudian schrieb:


> Praktisch ist es heute so:
> C wird für sehr hardwarenahe Anwendungen genutzt, z.B. Betriebssysteme und Embedded Software (Also Programme, die oft ohne Betriebssystem auf einem Prozessor laufen, Steuersysteme für Autos und Flugzeuge und dergleichen).



Auch auf einem Mikrocontroller läuft ein Betriebsystem, das ist die Firmware, die man dafür geschrieben hat... es gibt ein Startcode, den der Compiler reinpackt (also das, was nach dem Reset-Vector ausgeführt wird) und dann der Anwendercode... Auch Steuergeräte haben ein Betriebsystem, OSEK wäre eins davon.

Ansonsten:
C: rein prozedural, maschinennah und muss für die jeweilige Plattform (ARM, x64, Itanium, Sparc, ...) compiliert werden
C++: kann sowohl prozedural als auch objektorientiert verwendet werden, maschinennah und muss für die jeweilige Plattform (ARM, x64, Itanium, Sparc, ...) compiliert werden
C#: rein objektorientiert, ein Abklatsch von Java, braucht einen Interpreter (.net Laufzeitumgebung)


----------



## Tim1974 (28. Mai 2019)

Ist also doch alles viel komplizierter als ich dachte.

Nochmal kurz wie ich es von Pascal kenne, ich Reihe die Befehle in der Entwicklungsebene aneinander und kompiliere das Programm am Schluss, bevor ich es starten kann, alles mit einer Software und dann läuft es oder eben nicht (so wie gedacht), oder bringt einen Error.
Was ich nicht möchte ist mehrere Programme nutzen müssen und mich um jeden Mist selbst kümmern, mein Ziel ist es, mit wenig Aufwand viel auf die Beine stellen zu können, also z.B. ein einfaches Spiel, oder eine KI, die aber trotzdem nicht mangels Leistungsfähigkeit der Programmiersprache gleich enge Grenzen gesetzt bekommt.
Vielleicht gibt es das was ich suche nicht, dann muß ich halt das wählen, was dem am nähesten kommt.


----------



## wuselsurfer (28. Mai 2019)

Tim1974 schrieb:


> mein Ziel ist es, mit wenig Aufwand viel auf die Beine stellen zu können,


 Dann nimm Visual Basic.
Das nimmt Dir beim Entwurf schon die Hälfte der Arbeit ab in der Entwicklungsumgebung.



Tim1974 schrieb:


> also z.B. ein einfaches Spiel,


Ein Spiel ist mit das komplizierteste, was es zu programmieren gibt.



Tim1974 schrieb:


> oder eine KI,


 Das lassen wir lieber.
Das ist noch komplizierter.


----------



## Teacup (29. Mai 2019)

Tim1974 schrieb:


> Was ich nicht möchte ist mehrere Programme nutzen müssen und mich um jeden Mist selbst kümmern, mein Ziel ist es, mit wenig Aufwand viel auf die Beine stellen zu können, also z.B. ein einfaches Spiel, oder eine KI, die aber trotzdem nicht mangels Leistungsfähigkeit der Programmiersprache gleich enge Grenzen gesetzt bekommt.
> Vielleicht gibt es das was ich suche nicht, dann muß ich halt das wählen, was dem am nähesten kommt.



Für mich klingt es immer noch so, dass Du eigentlich im Detail nichts selber schreiben möchtest / solltest sondern, dass Du Frameworks/Bibliotheken brauchst, die deine Ansprüche erfüllen. Gerade im Bereich Spiele zeigt weiterhin jeder Finger auf Unity. Da hast Du einen guten Editor, gute Visual Studio Integration, kannst in C# programmieren und musst Dich aber nicht um die wirklich komplizierten Dinge kümmern.


----------



## XT1024 (29. Mai 2019)

Zwei Wochen später und noch nicht weiter? Schockierend!
Durch dieses ewige hätte, könnte, würde oder "was ist, wenn in fernster Zukunft..." wird es offenbar nicht besser.

Bei den hohen und wechselnden Zielen hätte ich ja auf C++ getippt. Wenn dich das einschränkt, hast du es wohl geschafft.
Erst gab es keine Ziele, dann KI, dann ging es plötzlich um performance und jetzt um alles mit möglichst wenig Aufwand.



Tim1974 schrieb:


> es ist einfach das Interesse daran, zu versuchen  was schwieriges neues zu lernen und sinnvoll Zeit am PC zu  verbringen.


Also doch C++?


Nimm einen Würfel. Bei 1, 3 oder 5 wird es C++, bei 2, 4 oder 6 wird es C#, bei 7 Fortran.


----
Ziele zu setzen ist ja ganz nett aber wie oft führen die unzähligen Themen, die mit "Ich will Spiele programmieren" anfangen, wohl wirklich zum Ziel?


----------



## taks (29. Mai 2019)

Da du Pascal anscheinend kennst, würd ich dir das hier für den Anfang empfehlen:
Create a Pong game for yourself | LazPlanet


----------



## The_Zodiak (2. Juni 2019)

Wenn Du möglichst schnell Prototypen schreiben möchtest dann ist meiner Meinung nach Python die erste Wahl. Möchtest Du im Webumfeld entwickeln bzw. für Android/iOS auf mobilen Endgeräten dann ist Java Script zu empfehlen. Ich selbst habe mit C/C++/Java angefangen, dann Python gelernt und nun seit einem Jahr .Net Core/Java Script. Keine der Sprachen ist perfekt aber alle machen Spaß.


----------

