Python vs. C

Hallo, ich nochmal!

Habe zwar schon einmal die Frage, nach der besten Wahl der ersten Programmiersprache gestellt, allerdings habe ich mich jetzt mal etwas intensiver in die Materie eingearbeitet und kann mich schlussendlich nicht so richtig zwischen C und Python entscheiden - nachdem ich in beide mal etwas "rein geschnuppert habe".

An Python reizt mich, dass es durch seine einfache Art schnell erlernbar sein soll und ausserdem durch seinen zwingend ordentlichen Syntax gerade Einsteiger zur Disziplin bringen soll.
Allerdings argumentieren andere, dass dies eine unnoetige Einschraenkung des Programmierers sei.

Fuer C hingegen habe ich ein (meiner Meinung nach) relativ gutes Buch fuer Einsteiger gefunden. Ich finde es interessant, toll zu lesen und ich "versinke" foermlich darein (es fesselt mich geradezu).
Viele sagen: Wenn man erstmal C beherrscht, faellt der Einstieg in andere Programmiersprachen leicht (wgn. der Aehnlichkeit zu C++, C# und Java).
Zudem kommt der Aspekt, dass sollte man eine 'komplexere Sprache' wie C beherrschen, der Einstieg in andere Sprachen leichter fallen soll, als umgekehrt.
Ich hoerte beispielsweise, dass man, sollte man mit Python beginnen, spaeter den Eindruck haben koennte, andere Sprachen seien schwieriger und damit auch unkomfortabler zu lernen, was u.U. frusten kann.
Wieder andere sagen mir, C sei anfangs zu viel "gefrickel" fuer einen Einsteiger.

Gibt es eurerseits irgendeinen brauchbaren Tipp oder ist das alles mehr Geschmackssache? Momentan wuerde ich fast eher zu C tendieren. Danach sollte es bezueglich Python eigentlich "bergab" gehen (bezogen auf den Schwierigskeitsgrad).

Vielen Dank!

P.S.: Es tut mir leid, ihr werdet diese Frage wohl allmaehlich nicht mehr hoeren/lesen koennen.... ;/
 
Es ist sicherlich Geschmacksache, welche Sprache man verwenden möchte. Gerade beim Lernen bringt C aber noch einen entscheidenden Vorteil. Man wird gezwungen sich mit Dingen wie Speichermanagement auseinanderzusetzen, wodurch man erfahrungsgemäss auch ein etwas besseres Verständnis für die Abläufe in einem Computer aufbaut.
 
Gibt es eurerseits irgendeinen brauchbaren Tipp oder ist das alles mehr Geschmackssache? Momentan wuerde ich fast eher zu C tendieren. Danach sollte es bezueglich Python eigentlich "bergab" gehen (bezogen auf den Schwierigskeitsgrad).
Porque no los dos? Man muss sich unbedingt nicht auf eine Sprache fixieren. Es ist durchaus möglich in C und Python parallel Sachen zu basteln. Insbesondere sieht man dann Gemeinsamkeiten und Unterschiede besser. So könnte man, wenn man in Python Array-Slicing der Form nicht vesteht das in C nachvolziehen. Andersherum kann man Ideen die man hat und realisieren möchte (Website, Spiel, ...) sicherlich angenehmer on Python lösen als in den Details von C steckenzubleiben und die Motivation zu verlieren.
 
Beide Sprachen haben ihre Vorteile und dadurch entsteht eine nützliche Symbiose.

Du kannst entweder direkt Python-Module in C programmieren, oder per FFI auf native C-Bibliotheken zugreifen, damit eine Bibliothek nicht abhängig von einer Programmiersprache und ihrer Versionen wird (jedoch wird das FFI-Interface dann abhängig von der Version einer Bibliothek).

Python-Module: https://docs.python.org/2.6/extending/extending.html

Python-FFI: https://cffi.readthedocs.org/en/release-0.8/#real-example-api-level
 
An Python reizt mich, dass es durch seine einfache Art schnell erlernbar sein soll und ausserdem durch seinen zwingend ordentlichen Syntax gerade Einsteiger zur Disziplin bringen soll.
Allerdings argumentieren andere, dass dies eine unnoetige Einschraenkung des Programmierers sei.
Man sollte "schnell erlernbar" und "schnell ausreizbar" nicht verwechseln ;). Python _IST_ in einigen Bereichen sehr mächtig/expressiv. Und wer Komplexität haben möchte:
*alten Code rauskram*
Code:
[color=#AA22FF][b]def[/b][/color] [color=#00A000]unique3[/color](_, __ [color=#666666]=[/color] [color=#AA22FF]type[/color]({( )})):
    __ [color=#666666]=[/color] [color=#AA22FF]type[/color]([color=#BB4444]"""
                      .-=-.          .--.
          __        .'     '.       /  " )
  _     .'  '.     /   .-.   \     /  .-'[/color][color=#BB6622][b]\
[/b][/color][color=#BB4444] ( \   / .-.  \   /   /   \   \   /  /    ^
  \ `-` /   \  `-'   /     \   `-`  /
jgs`-.-`     '.____.'       `.____.'"""[/color], (__,),
 {[color=#BB4444]'_'[/color] : __[color=#666666].[/color]__dict__[[color=#AA22FF]filter[/color]([color=#AA22FF][b]lambda[/b][/color] _: [color=#BB4444]'_'[/color] [color=#AA22FF][b]not[/b][/color] [color=#AA22FF][b]in[/b][/color] _,
                    [color=#AA22FF]sorted[/color](__[color=#666666].[/color]__dict__))[::[color=#666666]-[/color][color=#666666]1[/color]][color=#666666].[/color]pop()]})( {( )} )
    [color=#AA22FF][b]return[/b][/color] [_ [color=#AA22FF][b]for[/b][/color] _ [color=#AA22FF][b]in[/b][/color] _ [color=#AA22FF][b]if[/b][/color] _ [color=#AA22FF][b]not[/b][/color] [color=#AA22FF][b]in[/b][/color] __ [color=#AA22FF][b]and[/b][/color] [color=#AA22FF][b]not[/b][/color] __[color=#666666].[/color]_(_)]

(das sollte nicht als Musterlösung betrachtet werden - der "Sinn der Übung" war mal zu zeigen, dass man auch in Python ziemlich obskures Zeug schreiben kann :) )

spaeter den Eindruck haben koennte, andere Sprachen seien schwieriger
Nicht schwieriger, sondern "fummeliger". Vor allem das Arbeiten mit Dateien, Strings (und Kodierungen), Netzwerkkram ist in Python sehr oft in wenigen Zeilen implementiert.
Bsp. für eine "Webapp":
Code:
from bottle import route, run, template

@route('/')
@route('/hello/<name>')
def greet(name='Stranger'):
    return template('Hello {{name}}, how are you?', name=name)
run(host='localhost', port=8080)
Damit eignet es sich wunderar zum prototypen - allerdings gewöhnt man sich schnell daran und ärgert sich dann bei C über unnötig viel Codetipperei, z.B nur um ein paar Zeilen aus einer Datei zu lesen :)

Danach sollte es bezueglich Python eigentlich "bergab" gehen (bezogen auf den Schwierigskeitsgrad).
Man sollte, wie gesagt, auch Python nicht unterschätzen - zum einen, wird man nach C mit OOP an sich konfrontiert. Zum anderen gibt es Python-Idiome, die eben nur in Python Sinn machen (bzw. allgemein dynamische Programmiersprachen). Einfach von C/Java auf Python "umsteigen" resultiert meist erstmal in "weiterhin C/Java/Foo, nur in Python-Syntax" Programmierung ;)
 
Fuer C hingegen habe ich ein (meiner Meinung nach) relativ gutes Buch fuer Einsteiger gefunden. Ich finde es interessant, toll zu lesen und ich "versinke" foermlich darein (es fesselt mich geradezu).
Viele sagen: Wenn man erstmal C beherrscht, faellt der Einstieg in andere Programmiersprachen leicht (wgn. der Aehnlichkeit zu C++, C# und Java).

C zwingt dich idR ueber grundlegende Programmierkonzepte nachzudenken. Und - so ist es bei C auch - zu verstehen. Denn wer C nicht versteht, wird in C nicht weit kommen, während man zB. relativ schnell eine brauchbare Windows-Form-Application in c# (zb. im sharpDelevop oder Visual Studio) zusammendengeln kann, wenn man gerade mal ein Minimum an Programmierverständnis hat. Ab diesem Punkt wird es schon fast eine ethische Diskussion weil es einerseits Leute gibt, die einfach Applikationen zum laufen bringen wollen und auf der anderen Seite diejenigen, die umfangreiches Maschinen/Speicherwissen für grundlegend halten (was auch berechtigt ist, bringt man Sicherheit mit ins Spiel).


Viele sagen: Wenn man erstmal C beherrscht, faellt der Einstieg in andere Programmiersprachen leicht (wgn. der Aehnlichkeit zu C++, C# und Java).

Zunächst mal sind die Sprachen C-ähnlich, nicht umgekehrt ;) Zweitens stimmt es nicht. Drittens rührt die vorhandene Ähnlichkeit daher, dass C einer der "Abrahams" der Programmiersprachen ist.

Die Leichtigkeit, von der alle sprechen, ist zum einen die schlichte Erleichterung durch Funktionen in vielen anderen Sprachen. Als Beispiel Textverarbeitung: In C eine mühsame Angelegenheit - in Perl Anfängersache.

Das zweite ist eben das Programmierkonzept: Ein C Coder weiss relativ gut Bescheid was da unter der Haube passiert. Egal was du machst - du _musst_ wissen was du tust. Mit der Zeit weisst du zb. wie ein Sortieralgorithmus tatsaechlich funktioniert, waehrend jemand, der mit c# anfaengt, lediglich weiss, wie die Funktion heisst, mit der man irgendwas sortieren kann (was nicht schlechter ist, denn dafür ist die Abstraktion der Sprachen ja da).

Ich finde immer dass es sich lohnt, die alten Meister zu studieren. In jedem Bereich!
 
Zurück
Oben