Der richtige Start mit dem Programmieren!!!

Fang mit Python an. Dort musst du dich nicht um Typendeklarationen kuemmern sondern kannst dich ganz auf die Grundlagen konzentrieren. Python ist die perfekte Anfaengersprache.
 
Also ich würde dir Python als Programmiersprache empfehlen. Ich schreibe hauptsächlich in C und diversen Assemblern Software für eingebettete Systeme wo es auf sehr effizienten Code ankommt. Da ich hin und wieder auch Tools für mein host Betriebssystem schreiben muss um mir die Arbeit zu erleichtern :) habe ich diverse Sprachen ausprobiert und muss sagen so viel Spaß wie mit Python hatte ich noch nie.

Python ist eine Programmiersprache in der man objektorientiert, prozedural und auch funktional programmieren kann. Das hat den Vorteil das man sich immer das Beste Paradigma für ein bestimmtes Problem raussuchen kann, so ist es manchmal für kleine Sachen der absolute Overkill das objektorientiert zu realisieren und prozedural führt zu "schönerem" code. Mit python hast du die Wahl und kannst auch mixen. Auch ist das Vorteilhaft beim lernen einer Programmiersprache da man damit sehr gut sehen kann was die Unterschiede zwischen den oben genannten Paradigmen sind.

Ich habe objektorientierte Programmierung mit Java gelernt und könnte dir jetzt ohne in die API nachzuschauen nicht sagen wie ich eine Datei öffne und Zeilenweise einlese, mit Python ist das einfach

Datei = open("Pfad zur Datei")
for Zeile in Datei:
# mache etwas mit dem String "Zeile"

Sowas vergisst man einfach nie :)

Python ist eine Skript Sprache, was aber nicht bedeutet das die weniger Leistungsfähiger als eine nicht Skript Sprache ist sondern eigentlich sind Skript Sprachen viel dynamischer. So ist in Python eine Klasse schon ein Objekt und nicht erst eine Instanz. Du kannst während der Laufzeit einer Klasse neue Attribute geben und alle Instanzen bekommen damit das Attribut. Python verwendet wie Java Bytecode der auf einer Virtuellen Maschine ausgeführt wird.

Mit Python ist es möglich auf in C geschriebene Routinenen zuzugreifen als ob dies einfach Python Module sind, damit kannst du z.B. von Python aus auf die Hardware zugreifen und Routinen die sehr schnell sein müssen kannst du somit auch in C und Assembler schreiben und dann von Python aus zugreifen.

Für Mac User ist das hier interessant: http://pyobjc.sourceforge.net/ Damit kannst du von Python aus auf Cocoa usw zugreifen und "native" OS X Applikationen schreiben. Auch wenn du Platformübergreifend Guis erstellen möchtest kein Problem, du kannst mit wxPython http://www.wxpython.org von Python aus auf wxWidgets www.wxwidgets.org zugreifen. Das ist ein GUI Toolkit das ein Wrapper um native GUI Bibliotheken legt, damit benutzt dein Programm abhängig von der Plattform GTK, Win32, Cocoa, Carbon

Was auch wichtig ist sind die Entwickler Tools. Python wird mit OSX ausgeliefert, es gibt eine xCode Integration: http://pythonmac.org/wiki/XcodeIntegration oder du kannst diese Cocoa Applikation verwenden: http://projects.gandreas.com/pyoxide/download.php oder Eclipse mit diesem Plugin: http://pydev.sourceforge.net/ (Beschreibung von IBM http://www-106.ibm.com/developerworks/library/os-ecant/?ca=drs-tp2604#resources ) und noch eine IDE kannst du dir anschauen die ich eine Zeitlang verwendet habe: http://spe.pycs.net/

Es gibt dazu noch einige Module die Leute geschrieben haben. Für Scientific Computing kann ich dir: http://www.scipy.org/ empfehlen. http://matplotlib.sourceforge.net/ bietet Matlab like Funktionen für python an und mit http://www.pygame.org kannst du Spiele programmieren. Es gibt unzählig viele Module (hier eine Liste: http://python.org/pypi?:action=index) und Python wird auch immer beliebter besonders im Wissenschaftsbereich.

Hier gibts noch einige "Success Stories": http://python.oreilly.com/news/python_success_stories.pdf

Das nächste Interessante sind Jython und IronPython (www.jython.org und www.ironpython.org) Das erste ist eine Python Implementierung für Java, das bedeutet du schreibst deinen Code in Python und kannst auf die Java API zugreifen und dein ByteCode läuft dann mit der SUN JVM. Iron Python ist das gleiche nur für .NET / Mono.

Ich gebe dir hier mal einige Links die man sich anschauen sollte:

www.python.org (hier gibts links zu Tutorial, Dokumentation und vielem mehr)
www.diveintopython.org (damit hab ich python gelernt, gefällt mir sehr gut da Beispiel Code Zeile für Zeile erklärt wird)
http://www.ibiblio.org/obp/pyBiblio/pythonvideo.php (Python Video und zusätzlich interessante Dokumente)

Das oben waren alles Englischsprachige Ressourcen, hier mal einige deutsche:
http://www.python-forum.de/
http://www.python.org/doc/NonEnglish.html#german (Tutorials, Bücher)

So, zum Schluss möchte ich noch zwei Beispiele zeigen:

1.) Du hast drei Variablen a,b,c und willst die so vertauschen das a =
b, b = c und c =a ist

Java/C:
int temp = a;
a = b;
b = c;
c = temp;

Python:
(a,b,c) = (b,c,a)

2.) Du erzeugst eine Klasse die mit 4 verschiedenen Argumenten
instantieret werden kann, 1 - 4 int (die int anzahl ist variabel)

Java:
class MyClass
{
int tile;
int x = 10;
int y = 50;
int z = 100;
public MyClass(int nTile) {
tile = nTile;
}

public MyClass(int nTile, int nX) {
tile = nTile;
x = nX;
}

public MyClass(int nTile, int nX, int nY) {
tile = nTile;
x = nX;
y = nY;
}

public MyClass(int nTile, int nX, int nY, int nZ) {
tile = nTile;
x = nX;
y = nY;
z = nZ;
}

}

Python:

class MyClass:
def __init__(self, nTile, nX = 10, nY = 50, nZ = 100):
(self.tile, self.x, self.y, self.z) = (nTile, nX, nY, nZ)

Die Python Version kann sogar viel mehr. Da du den Datentyp nicht angibst ist das automatisch sowas wie ein Template/Generic d.h es ist nicht nur auf Objekte vom Typ int beschränkt.

Python hat noch viele andere Features die ich noch nicht in anderen Programmiersprachen gefunden haben, was hauptsächlich daran liegt das es total transparent ist und kaum etwas "unsichtbar" vonstatten geht.
 
Zuletzt bearbeitet von einem Moderator:
Hi
Genau lern Python.
Vergiss den anderen unnötigen Kram wie C, C++, Java, PHP, Perl, Ada, Javascript, Applescript, ... und wie sie alle heissen.
echte Kerle Programmieren entweder Python oder lernen Assembler. Und wenn du trotzdem wider erwarten ObjC lernen willst dann nur über C und Zeiger-Programmierung.
;)
 
Lern Smalltalk. Die ganzen Objektorienterten Sprachen sind sowieso alle nur ein billiger Smalltalk Abklatsch !

Also weg mit dem ganzen Quatsch: Java, C++, ObjC, C# und wie Sie alle heissen.

WIR WOLLEN KEINE COPY WATCHES.

http://www.smalltalk.org


:D
 
Ohhh man, soviel kompetente Antworten auf meine Frage, bin beeindruckt :D

Gerade für mich, ist das Thema Programmierung absolutes Neuland. Hatte bisher noch nix mit dem Programmieren am Hut. Hatte auch keine richtige Vorstellung, welche Sprachen üblich bzw. im Gebrauch sind und welche Tools man für die Realisierung braucht.

Auf jeden Fall, ein herzlichen Dank euch allen :)
 
das wichtigste ist, dass du - wie bereits gesagt - eine "idee" hast, WAS du programmieren willst?!
 
java! das ist die perfekte einsteigersprache und bietet nebenbei alle möglichen modernen konzepte. auch werden neue konzepte oft zuerst in java realisiert, da die forschung sehr oft mit java arbeitet, auf grund der einfachheit.
 
Ach, hab doch gleich zwei wichtige Sachen vergessen, einmal ein Python / Java Vergleich: http://www.ferg.org/projects/python_java_side-by-side.html auch wenn man sich den ganzen Text nicht durchlesen möchte sollte man sich zumindest die Beispiele anschauen um zu sehen wieviel schöner die Beispiele mit Python realisierbar sind :)

Das andere ist Starkiller. Dabei handelt es sich um einen so genannten "Static Type Inferencer". Die geringere Geschwindigkeit von Python zu C oder C++ liegt nicht hauptsächlich daran das es interpretierten Bytecode erzeugt (es gab einen Python -> C compiler der kaum performance gebracht hat) sondern da Python extrem dynamisch ist und während der Laufzeit einige type checks gemacht werden müssen. Ein Static Type Inferencer versucht diese dynamik zu entfernen (bzw. die checks) und Datentypen statisch zu machen. Das Projekt wird momentan am MIT entwickelt und es gibt hier eine (amüsante) Präsentation: http://www.python.org/pycon/dc2004/papers/1/presentation.pdf und hier eine Arbeit dazu: http://www.python.org/pycon/dc2004/papers/1/paper.pdf

Leider ist Starkiller bisher noch nicht erschienen obwohl das schon lange angekündigt.

Soo, wenn jetzt nicht mindestens einer mit Python zumindest anfängt werde ich sauer :mad: oder muss noch mehr Überzeugungsarbeit leisten :D

Wer zu faul zu lesen ist kann sich dieses Python Video anschauen: http://www.ibiblio.org/pub/multimedia/video/obp/IntroducingPython.mpg
 
mrpac schrieb:
Ach, hab doch gleich zwei wichtige Sachen vergessen, einmal ein Python / Java Vergleich: http://www.ferg.org/projects/python_java_side-by-side.html auch wenn man sich den ganzen Text nicht durchlesen möchte sollte man sich zumindest die Beispiele anschauen um zu sehen wieviel schöner die Beispiele mit Python realisierbar sind :)

Naja, es ist schon eine Dreistigkeit die strikte Typisierung von Java als "Nachteil" gegenüber Python darzustellen.

Strikte Typisierung ist ein Gewinn. Dass man dadurch evtl. mehr Tippen muss und mehr Nachdenken (und aufs Design achten) ist durchaus erwünscht.

Viele Grüße
NyenVanTok
 
NyenVanTok schrieb:
Naja, es ist schon eine Dreistigkeit die strikte Typisierung von Java als "Nachteil" gegenüber Python darzustellen.

Strikte Typisierung ist ein Gewinn. Dass man dadurch evtl. mehr Tippen muss und mehr Nachdenken (und aufs Design achten) ist durchaus erwünscht.

Static typing hat seine Vor- und Nachteile. Genauso wie dynamischere Typisierung seine Vor- und Nachteile hat. Recht schoen sind Sprachen in denen man die Wahl zwischen beiden Systemen hat. Aber das koennen leider nur wenige Sprachen...
 
Ja, da hast Du Recht. Wenn man eine Wahl hat, ist das, dass Ideal.

Allerdings neigt man ohne strikte Typisierung oft zu schlechtem Design. Und gerade dass ist zum lernen einer Programmiersprache sicher nicht von Vorteil. Wenn man sich erst einmal einen schlechten Stil angewöhnt hat, ist es schwer diesen wieder zu ändern.

Zumal es auch eine Frage der Sicherheit ist, ob man hundertprozentig weiß, um Welchen Typ es sich gerade handelt...

Viele Grüße
NyenVanTok
 
Jetzt streitet euch nicht um Dinge wie statisch oder dynamisch.

Hier habt ihr geballtes Fachwissen über Typisierung

:D

Also, wenn Ihr mal Typisierungs-Probleme habt: immer Freitags !
 
Zuletzt bearbeitet:
Für kleine Heimgebrauchssachen reicht eine Beherrschung von Skriptsprachen allemale... Falls du aber schnelle programme gestallten möchtest, sollte es OOP sein. Ich kann dir sagen java ist sehr easy und reicht in dem Umfang auch. Falls du wirklich etwas mit Zukunft schaffen willst, kommst du um C++ nicht rum. Aber ich persönliche nutze meistens java wegen der Plattformunabhängigkeit. Ob nun meine Windows-, Linux- oder Macrechner damit arbeiten muss, weiß ich ja nicht immer.

Aber falls du echt kein Plan vom prgrammieren bis jetzt hast, empfiehlt sich eine Basicsprachen (Qbasic, Visual basic leider glaub ich nur für WindowsSysteme zugebrauchen.

greetz
MiGO
 
Sorry, bin recht unerfahren, aber funktionieren C/C++ Programme auf dem MAC?
 
Klar kannst du C/C++ Programme für den Mac schreiben. Der gcc ist bei OSX auch dabei und der kann C/C++/Objective C und noch mehr.

Zur Typisierung, Python ist wie Java stark/strikt typisiert, der Unterschied ist das Python dazu noch dynamisch, Java jedoch statisch typisiert ist. Bei Python werden halt die Typen während der Laufzeit getestet was einen Overhead darstellt und natürlich Performance kostet, deswegen auch die Idee mit Starkiller.
 
Zurück
Oben Unten