Programmieren Lernen

Ich empfehle C++, da es fuer die Anwendungsentwicklung sicherlich die Sprache mit der hoechsten Relevanz ist. Dazu ist C ein gutes Sprungbrett, allerdings wuerde ich mich nicht zu lange mit den Einzelheiten und Details befassen, sondern schnell und zuegig zu Themen wie STL , Boost und generisches Programmieren (bzw. Templates) wechseln.

Java (genauso wie C#) halte ich als Einstiegssprache fuer eine extrem schlechte Wahl! Man wird gleich von Anfang an in ein Gedankenmodell gepresst, das einen dazu zwingt, Code nach Schema X zu produzieren. Finger weg von jeder Sprache, der irgendein Paradigma oder Hype zugrunde liegt!

Was funktionales Programmieren angeht, da finde ich Haskell sehr nett, aber auf dem Sektor bin ich etwas ueberfragt.
 
@nismo:
warum kommst du mit vim nicht klar, mit vi aber schon? *wunder* *staun*
normalerweise isses ja immer umgekehrt ;-)

Code:
a,i                 insert-modus
x                   zeichen loeschen
v                   markieren
p,P                 geloeschtes einfuegen
dd                  eine zeile loeschen
J                   aus zwei zeilen eine machen
:0,$s/bla/blubb/g   ersetze im gesamten file bla durch blubb
:10,20s/bla/blubb/g ersetze in den zeilen 10-20 bla durch blubb.

also ich persoenlich mache echt ALLES mit vim. weils allerdings keine vernuenftige moeglichkeit gibt proggies zu starten hab ichs nicht als login-shell eingerichtet *g*
 
dettus schrieb:
@nismo:
warum kommst du mit vim nicht klar, mit vi aber schon? *wunder* *staun*
normalerweise isses ja immer umgekehrt ;-)
Ich kommen mit dem vi (nvi) beser klar, weil die UNDO-Funktion im vim einfach nur "krank" ist (entschuldigung, aber etwas treffenderes ist mir nicht eingefallen)...
Ich finde es immer schrecklich, wenn ich an einem Linux arbeiten muss, wo ich nix installiern darf (Kundenmaschine)... :D

dettus schrieb:
also ich persoenlich mache echt ALLES mit vim. weils allerdings keine vernuenftige moeglichkeit gibt proggies zu starten hab ichs nicht als login-shell eingerichtet *g*

Man kann die Shell auch in den vi-Mode schalten!

csh : bindkey -vi
bash : set -o vi


Und wenn es dann doch nicht so toll war, auch wieder zurück:

csh : bindkey -emacs
bash : set -o emacs
 
was ist krank an dem undo?
du hast zwei fehler gemacht, drueckst zweimal auf u und weg sind die.
oder bei drei fehlern dreimal.
oder bei vier...

meistens mache ich mehr als einen :-)
 
vielleicht bin ich einfach noch "zu windows" :ugly: wenn ich im vi den cursor steure mit den pfeiltasten, dann erreich ich mein ziel.

bei vim, hoere ich nur beep beep beep :D :D

Und wegen der Sprachauswahl, ich weiss noch weniger als vorher :D jeder sagt was anderes...

Ich denke ich BLEIBE bei C (spaeter dann update zu C++ oder so)
 
MrFixit schrieb:
Bitte nicht! printf-Debugging ist das ineffizienteste was es nur geben kann. Wenn er Programmieren lernen will, dann gehoert der Debugger einfach dazu. Nichts ist frustrierender, als Leute zu sehen, die mit printf auf Fehlersuche gehen ... was ne Zeitverschwendung.
Ja schon, aber wenn er jetzt auch noch sofort gdb lernen muss, dann ist das vielleicht bischen viel auf einmal.
Ich bin der Meinung der Anfänger sollte mit möglichst wenig Balast beladen werden. Deshalb nur ein einfacher Editor, deshalb nur Konsolenprogramme, ja und deshalb für die erste Zeit kein Debugger.
Später dann, ja später kommen diese ganzen Helferlein dann eins nach dem anderen dazu.
 
nismo2000 schrieb:
vielleicht bin ich einfach noch "zu windows" :ugly: wenn ich im vi den cursor steure mit den pfeiltasten, dann erreich ich mein ziel.

bei vim, hoere ich nur beep beep beep :D :D

Nicht unbedingt eine Sache des Editors (nvi, vi, gvim, etc...) sondern der Einstellungen.

Aber wenn man viel tippt, kommt man recht schnell weg von den Pfeiltasten, da es schlicht zu lange dauert die Hand zu den Pfeiltasten zu bewegen, den Cursor bewegen, Hand wieder zurueck bewegen, und dann zu tippen.

IDE wie QBasic???? *kopfkratz* Ich will ja jetzt keinen Vergleich mit "edlin" ziehen, aber als IDE wuerde ich das nicht bezeichnen. (Fuer den Fall, das wir von dem QBasic unter MSDOS reden)

Unter der Konsole wuerden mir neben den ueblichen Verdaechtigen "Vim" und "Emacs" nur noch TIA (http://www.pegasoft.ca/tia.html) einfallen. Wobei ich da keine Ahnung habe. Nie benutzt das Teil.

Und unter X, naja KDevelop, Antjua, JEdit und Eclipse mit CDT.

KDevelop und Antjua sind fuer mich ausgeschieden, da zu sehr KDE bzw. GNOME-Lastig. Portierungen auf anderen Plattformen sind ein Graus und leider wollte ich etwas das ich unter Linux, FreeBSD, HP-UX, AIX, IRIX und Windows einsetzen kann. JEdit ist nett, stehe aber mit der Konfiguration irgendwie auf dem Kriegsfuss, wobei ich hier zugebe mir das Tool nie laenger als eine halbe Stunde am Stueck angesehen zu haben und damals eher einen Ersatz fuer "UltraEdit" gesucht habe. Fuer mich ist das immer noch nichts weiter als ein besserer Editor. Keine wirkliche IDE. (Ja ich weiss nicht unbedingt eine qualifizierte Antwort. Bite me!)

Bleibt Eclipse. Gut hier fand ich das Projekt interessant und es erfuellt die Anforderung unter allen Plattformen zur Verfuegung zu stehen. Aber es erfordert, wie jede IDE einiges an Aufwand das Teil zu konfigurieren. Ich bin zwar der Meinung, das man relativ schnell loslegen kann, aber andere hatten schon mit der Installation von CDT Probleme. Und ohne wird erstmal nur Java unterstuetzt.

Bleibt noch der ganz harte Fall: Visual Studio. :) Nicht kostenlos, nur unter Windows lauffaehig und eigentlich nur fuer Windows-Anwendungen zu gebrauchen. Aber da das Beste was man bekommen kann! :)

Meine Empfehlung? Arbeite erst einmal ohne IDE, sondern nur mit Text-Editor und wenn moeglich Syntax-Highlightning, evtl. noch mit Checker. Also z.B. mit einem einfach konfigurierten vim.

So machst du dich mit den ganzen Konsolentools vertraut, die du zum kompilieren, linken, maken und debuggen brauchst. Eventuell willst du dir ja noch Tools wie (sp)lint oder aehnliches ansehen. Da IDEs auf diese Basis-Werkzeuge zurueckgreifen und meistens auch noch konfiguriert werden wollen, sollte man zumindestens eine grobe Ahnung haben was die Programme eigentlich machen und wofuer der Eine oder Andere Parameter steht.

Greifst du gleich zu einer IDE kaempfst du mit den Tools, der Sprache und der IDE. Und das kann dann doch etwas viel sein.
 
d-ra schrieb:
Ja schon, aber wenn er jetzt auch noch sofort gdb lernen muss, dann ist das vielleicht bischen viel auf einmal.

Ich habe schon viele Leute zuviel Zeit verschwenden sehen, als dass sie einen Debugger "lernen" und den Bug nach 3 Minuten finden, weil halt der Code-Fluss doch anders war, als sie gedacht haben. printf-schreiben, compilen, starten, neues printf, compilen, starten, etc. dauert da einfach zu lange.

Wenn ich mal nen C-Kurs geben muesste, der Debugger kaeme sofort nach dem schreiben und compilen eines Hello World. An dem kann man den Leuten dann naemlich genau zeigen, wie ihr Programm durch die Funktionen springt und welchen Inhalt einzelnen Variablen zu gegebenem Zeitpunkt haben.

Sieh den Debugger nicht als Huerde, sondern als Chance C schneller zu "verstehen".

PS: Ich weiss nicht, ob das so klappen koennte, da ich noch keinen C-Kurs gegeben habe und nicht weiss wie unerfahrene Leute auf diese Vorgehensweise ansprechen wuerden ...
 
nimm mal die .vimrc hier:

Code:
syntax on
hi Comment      ctermfg=Cyan
hi Constant     ctermfg=DarkCyan
hi Special      ctermfg=Gray
hi Identifier   ctermfg=DarkCyan
hi Statement    ctermfg=Blue
hi PreProc      ctermfg=DarkBlue
hi Type         ctermfg=Cyan
hi Ignore       ctermfg=Blue
hi Number       ctermfg=Yellow
hi Keyword      ctermfg=Blue
hi cCharacter   ctermfg=Yellow

set foldmethod=marker
set noautoindent
set nocin
set ignorecase
set ruler
set showmatch
set showmode
set shiftwidth=8
set tabstop=8
map ^[OA  k
map ^[[A  k
map ^[OB  j
map ^[[B  j
map ^[OD  h
map ^[[D  h
map ^?    h
map ^H    h
map ^[OC  l
map ^[[C  l
map ^[[2~ i
map ^[[3~ x
map ^[[1~ 0
map ^[OH  0
map ^[[H  0
map ^[[4~ $
map ^[OF  $
map ^[[F  $
map ^[[5~ ^B
map ^[[6~ ^F
map ^[[E  ""
map ^[[G  ""
map ^[OE  ""
map ^[Oo  :
map ^[Oj  *
map ^[Om  -
map ^[Ok  +
map ^[Ol  +
map ^[OM  ^M
map ^[Ow  7
map ^[Ox  8
map ^[Oy  9
map ^[Ot  4
map ^[Ou  5
map ^[Ov  6
map ^[Oq  1
map ^[Or  2
map ^[Os  3
map ^[Op  0
map ^[On  .

map! ^[Oo  :
map! ^[Oj  *
map! ^[Om  -
map! ^[Ok  +
map! ^[Ol  +
map! ^[OM  ^M
map! ^[Ow  7
map! ^[Ox  8
map! ^[Oy  9
map! ^[Ot  4
map! ^[Ou  5
map! ^[Ov  6
map! ^[Oq  1
map! ^[Or  2
map! ^[Os  3
map! ^[Op  0
map! ^[On  .
set nocin
 
MrFixit schrieb:
Ich habe schon viele Leute zuviel Zeit verschwenden sehen, als dass sie einen Debugger "lernen" und den Bug nach 3 Minuten finden, weil halt der Code-Fluss doch anders war, als sie gedacht haben. printf-schreiben, compilen, starten, neues printf, compilen, starten, etc. dauert da einfach zu lange.

Wenn ich mal nen C-Kurs geben muesste, der Debugger kaeme sofort nach dem schreiben und compilen eines Hello World. An dem kann man den Leuten dann naemlich genau zeigen, wie ihr Programm durch die Funktionen springt und welchen Inhalt einzelnen Variablen zu gegebenem Zeitpunkt haben.

Sieh den Debugger nicht als Huerde, sondern als Chance C schneller zu "verstehen".

PS: Ich weiss nicht, ob das so klappen koennte, da ich noch keinen C-Kurs gegeben habe und nicht weiss wie unerfahrene Leute auf diese Vorgehensweise ansprechen wuerden ...
Moin,

kann ich nur zustimmen. Hatte mich früher nicht an den gdb rangetraut (vorher den IDE-Debugger im Turbo-C benutzt), bis es unumgänglich wurde den gdb anzuschmeissen.

Gibt es kein Toturial für den gdb. Die 10 wichtigsten Funktionen oder so. Gleich mal gucken.

Elwood
 
dettus schrieb:
was ist krank an dem undo?
du hast zwei fehler gemacht, drueckst zweimal auf u und weg sind die.
oder bei drei fehlern dreimal.
oder bei vier...

meistens mache ich mehr als einen :-)

Genau!
Beim "vi/nvi" wird mit "u" zwischen "Undo"-Mode und "Normal"-Mode umgeschaltet;
und "." macht was es immer machen soll, "wiederholen"!

Der "vim" bringt diese Logik bei UNDO durcheinander, und das macht mich wahnsinnig... :ugly:
 
Unabhängig von den vorigen Posts:

Ich hab vor einiger Zeit mit DrScheme angefangen. Erste einfache "Programme" (n-te Wurzel von x und solche Sachen) laufen schon. Ist eigentlich von dem was ich bisher kenn' ne schöne Sprache, alles klar und logisch aufgebaut, allerdings sind es viele Klammern. Das stört manche, aber wer vorher nichts anderes kennengelernt hat, kann auch über nichts meckern :D

Eigentlich wollte ich C lernen, ich hab mir bei meinem Vater mehrere Bücher aus dem Schrank geangelt, aber irgendwie war mir das zu verwirrend :ugly:
 
Ich schreib jetzt auch mal kurz meine Meinung auch ganz unabhängig von den anderen:
Ich hab einige Zeit basic gemacht (nein, ganz sicher nicht visual basic), das ist aber schon länger her und wurde dann auch irgendwann langweilig. Jetzt nach ein bisschen Pause hab ich mich mal an c++ herangewagt, ein Buch gelesen und ein paar ganz kleine textprogramme geschrieben.
Dann hab ich mal Qt angefangen und muss sagen, das macht richtig Spaß! Wirklich gut zu machen, wenn man faul ist mit dem Designer, sonst auch ohne und ist eigentlich recht simpel. Die Signals&Slots sind wirklich praktisch und sonst sind auch ne Menge erleichterungen drin, z.B. qmake. damit hast auf einen Schlag ein Makefile.

Nunja, ist vielleicht nicht jedermanns Sache und auch nicht der perfekte Weg um in Unix Systemprogrammierung einzusteigen ;) aber mir machts Spaß und von daher kann ich das weiterempfehlen, besonders da Qt eben nicht nur für das Grafische zuständig ist, sondern viel mehr kann. Und ne wirklich gute Dokumentation ist auch dabei.
 
Ich persoenlich wuerde Java nicht als Einstiegssprache empfehlen und zwar aus folgendem Grund:

So praktisch der GarbageCollector auch sein mag so sehr verdirbt er IMHO grade Einsteiger. Wenn man mit anderen Sprachen ohne GarbageCollector oder aehnlichem wie den schon oft genannten C bzw. C++ beginnt, lernt man schon von Beginn an, dass nach jedem *alloc() ein free() bzw. nach jedem new ein delete kommt.
Klar, das scheint auf den ersten Blick schwerer zu sein, weil man sorgfaeltiger Arbeiten muss, aber wir wollen ja nicht schon am Anfang beginnen zu pfuschen *g*.



teuk
 
Zuletzt bearbeitet:
Ich finde es ist Pfusch, das man solche Dinke kümmern muss. Bei Java kann man sich darauf konzentrieren sauber zu programmieren statt mit dem Speicher herumzuhantieren.
 
oBdA schrieb:

VHDL ist keine Programmiersprache. Es ist eine Hardware-Beschreibungs-Sprache.

Mein Digitaltechnik Professor würde an dieser Stelle jetzt einen 90 minütigen Monolog darüber halten was der unterschied ist.

Rookie

P.S.Sorry das ich diesen alten Post hier raushol, aber ich musste das schreiben als ich VHDL und Programmiersprache las. Ist mir 2 Semester so eingetrichtert worden.
 
Ich bin ja auch noch kein toller Programmierer, aber ich setze mich schon lange mit dem Thema auseinander und kann dir folgendes vorschlagen:

C um größeres zu Programmieren
und Perl oder Python um kleinere Sachen
zu programmieren. Von Python habe ich den
den Eindruck, dass man ziemlich hübsche grafische
Anwendungen machen kann. Perl kann das auch,
aber ich finde das nicht so ausgereift.
Allerdings ist ein Grundsatz von Perl:
Perl makes easy jobs easy and hard jobs possible.

Im großen und ganzen hab ich mich geärgert, nicht mit C begonnen zu haben.
Liegt aber wohl daran, dass ich noch kein gutes Buch/Tutorial gefunden habe.
(Ich warte auf die weiteren Kapitel im DragonFly-Wiki *gg*).
Falls du dich (irgendwann einmal) dazu entschließen solltest Perl zu lernen kann
ich dir nur Einführung in Perl empfehlen, wobei eigendlich alle Bücher von OREILLY,
die ich kenne sehr zu empfehlen sind.

PS: Iiih, Java *ggg*
 
Zuletzt bearbeitet:
Klar, ein Vorteil von Java ist sicherlich, dass man sich um so etwas nicht kuemmern muss, aber hier im Thread geht es ja u.a. darum welche Programmierspache am besten zum Einstieg in das Handwerk des Progammierens geeignet ist. Unter diesem Aspekt halte ich Java fuer ungeeignet, denn wenn man schon gewillt ist Programmieren zu lernen, dann sollte man mit einer guten allgemeinen Grundlage beginnen und die kann Java IMHO nicht bieten. Das betirfft z.B. den schon angesprochenen GarbageCollector und aus meiner Sicht auch den Umgang mit Pointern.
Worauf ich hinaus will ist, dass es IMHO leichter ist sich "mal eben schnell" Java bei zu bringen wenn man schon C++ beherscht, als umgekert. Denn so hat man schon immer im Hinterkopf, dass man Speicher wieder frei geben sollte und wenn man dann in Java programmiert dann hofft man eben, dass der GarbageCollector das dann auch wirklich irgendwann mal macht, statt ihn wie im C++ selber freizugeben. Wechselt man aber von Java auf C++ (und kannte zuvor nur Java) dann weiss man u.U. gar nicht, dass man Speicher auch wieder freigeben sollte. Natuerlich sollte/darf so etwas nicht passieren wenn man sich ordentlich in eine Sprache einarbeitet, aber dann ist der Zeitaufwand auch deutlich hoeher.
Ich habe es mit bekommen bei Leuten die den Schritt C++ -> Java in (zu) kurzer Zeit vollziehen mussten und die hatten dann Memory Leaks ohne Ende in ihrem Code. Aber da die nur ein API basteln mussten die von einem 3/4 dem gesamten Projektes verwendet werden musste, was das nicht weiter schlimm.

Ob das mir dem GarbageCollector nun ein Segen oder ein Fluch ist, soll jeder fuer sich selbst entscheiden.
Und das "*g*" hinter "pfuschen" heisst sicher nicht, dass es toternst gemeint war.

Also, nichts gegen Java an sich, aber als sinnvollen Einstieg wuerde _ich_ eine andere Sprache empfehlen.



teuk
 
Zuletzt bearbeitet:
[LoN]Kamikaze schrieb:
Ich finde es ist Pfusch, das man solche Dinke kümmern muss. Bei Java kann man sich darauf konzentrieren sauber zu programmieren statt mit dem Speicher herumzuhantieren.

Falsche Denkweise... bei c/c++ gehoert das Speichermanagement mit zum "sauberen" programmieren.

Das hat nichts mit "Pfusch" zu tun auch wenn das diverse Talibane des Programmierens immer behaupten. Bei den meisten Anwendungen ist ein optimiertes Speichermanagement nicht mehr notwendig, da Hardwareleistung teilweise im Uberfluss vorhanden ist. Da macht es nicht wirklich Sinn sich um jedes einzelne Bit zu kuemmern. Leider gibt es auch genuegend Anwendungen wo das nicht der Fall ist. Ein GC kostet halt Leistung, von den zig Abstratktionschichten will ich jetzt nicht reden.

Aber auch daraus zu schliessen, das wer mit c/c++ angefangen hat, deswegen saueberer Programmiert ist ein Irrweg. Zum sauberen Programmieren gehoert mehr als nur den Muell aufzuraeumen, den man produziert hat.

Nach der Logik muesste man ja jemanden gleich ASM emfpehlen und ich glaube nur sehr wenige hier optimieren nochmal, das was der compiler rausgelassen hat per Hand nach.

Auch hier ist der Wandel bereits eingetreten.
 
teuk schrieb:
So praktisch der GarbageCollector auch sein mag so sehr verdirbt er IMHO grade Einsteiger. Wenn man mit anderen Sprachen ohne GarbageCollector oder aehnlichem wie den schon oft genannten C bzw. C++ beginnt, lernt man schon von Beginn an, dass nach jedem *alloc() ein free() bzw. nach jedem new ein delete kommt.

Generell Zustimmung, aber ich wuerde das jetzt gar nicht am GarbageCollector aufhaengen. Auch in Java kann man sich schnell Memory- und Resourceleaks einhandeln, wenn man nicht versteht, was hinter den Kulissen ablaeuft. Und um das zu verstehen, sind IMHO Erfahrungen in C (und ggf. C++) erforderlich.
 
Den Garbage Collector wuerde ich jetzt nicht all zu sehr zur Debatte stellen, schliesslich gibt es auch eine Managed C++ Variante, und mit den zahlreichen Smartpointern wie boost::shared_ptr ist das Thema sowieso fast gegessen. Es ist fuer den Anfaenger auch eher verwirrend, herauszubekommen, warum Code wie dieser

Code:
Big b1* = new Big; 
Big b2* = new Big;

...

delete b1;
delete b2;

einen potentiellen Leak aufweist. Viel schlimmer dagegen wirkt unter Java das aufgezwungene OOP, und fehlende Sprachkonstrukte wie ueberladbare Operatoren! Ich kenne so viele Informatiker, die an der Uni einen Crashkurs in Java gehabt haben, und dem Aberglauben verfallen sind, ausser via OOP und Design Patterns gaebe es keine andere Moeglichkeit ein Programm zu schreiben. Und das wiederrum fuehrt dann zu so sensationellem Code, bei dem ein "Math-Objekt" statisch alle Funktionen wie Sinus und Cosinus anbietet, obwohl das als Objekt ueberhaupt gar keinen Sinn ergibt...
 
Wenn's ums programmieren geht, würde ich auch eher zu C oder C++ tendieren.

Aber viel interessanter ist Softwareenwicklung. Und dafür sind beide keinen Deut geeignet.
Java ist da schon besser.

Man verzeihe mir meine Haarspalterei ;-)

Der Indy
 
indy schrieb:
Wenn's ums programmieren geht, würde ich auch eher zu C oder C++ tendieren.

Aber viel interessanter ist Softwareenwicklung. Und dafür sind beide keinen Deut geeignet.
Java ist da schon besser.

Man verzeihe mir meine Haarspalterei ;-)

Der Indy
Ich finde die Aussage sehr sinnvoll. Sagt alles was ich nicht auszudrücken vermochte ohne irgendwie arrogant zu erscheinen.

Zum Thema ASM... ist sehr nützlich für embeded Systeme, aber die Herangehensweise ist nach meiner Erfahrung ganz anders als bei höheren Programmiersprachen.
 
Mh Hallo,

ohne dich gleich aufs Programmieren los zu lassen moegest du dir doch vielleicht folgenden Text durchlesen/-arbeiten.

http://www.iu.hio.no/~mark/unix/unix_toc.html

Code:
The unix programming environment
Edition 2.2, August 2001
Mark Burgess
Centre of Science and Technology
Faculty of Engineering, Oslo College

Ich denke der Titel sagt einiges.
Einiges, was fuer den Einstieg gerade richtig ist. Ich fande das Dokument sogar so gut, dass ich davon einen Ausdruck habe, es liest sich perfekt. (Jeder muss selbst wissen welches Buch ihm/ihr liegt)
Selbst wenn du schon bissle was weisst von Unix, gerade dann machen die ersten 50 Seiten spass zu lesen um nochmal sich gewisser Dinge klar zu werden und in diesem Skript sind einige hilfereiche Tipps zum "Umgang mit der Programmierumgebung".

Das alles kostenlos.

Adio
 
Zurück
Oben