PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ab wann "kann" man eine Programmiersprache?


The_Invisible
2007-03-21, 15:38:17
Hallo,

mir ist gerade in den sinn gekommen, wann man von sich behaupten kann, das man eine programmiersprache "kann". dazu ist mir folgendes eingefallen:

- prinzipiell ist ja die logik bei jeder programmiersprache die selbe, kann also ein erfahrener programmierer (>5jahre erfahrung) von sich aus sagen das er jede programmiersprache "kann"?
- sind höhere mathematische kenntnisse nötig das man eine programmiersprache wirklich "kann"?
- "kann" man programmieren, auch wenn man manche aufgaben nicht selber lösen kann sondern sich wo code "ausborgt", aber man genau immer weiß wo man welchen code finden kann?

und jetzt würde mich eure meinung interessieren, was sagt ihr dazu? das "kann" kann man quasi auch als Jokerwort sehen, je nachdem wie man es auslegt.

mfg

mithrandir
2007-03-21, 16:02:00
ad1) Jein
Softwareentwicklung ist jetzt schon seit sieben Jahren das, womit ich meinen Lebensunterhalt bestreite. Dass ich deshalb alle Sprachen "kann", würde ich nicht sagen. Es ist sicher immer eine gewisse Einarbeitungszeit in neue Sprachen nötig. Wenn man dabei bei relativ ähnlichen Ansätzen bleibt (ich sag mal objektorientiert, z.B. von C++ nach C# oder Java) ist das sicher ein Klacks. Aber wenn man jahrelang mit Cobol zu tun hatte, dann z.B. auf etwas relativ neues und syntaktisch komplett anderes (Ruby?) umsteigen möchte, ist der Aufwand sicher größer.

ad2) Nein. Bei mir war das jedenfalls nicht der Fall. In vielen modernen Sprachen nehmen dir Bibliothekssammlungen auch viel in der Richtung ab. Simplizität ist ein Schlagwort, mit dem man in der Softwareentwicklung seit Jahren um sich wirft (v.a. in Verbindung mit zahllosen Frameworks für wasweißichalles).

ad3) Bevor ich mich jetzt zwei Stunden mit einem Problem beschäftige, das ich auch unter zuhilfenahme von Internet-Quellen in wenigen Minuten lösen kann, dann mache ich das auch so. Sofern man denn versteht, wie die Lösung zustande kommt, ist das kein Problem. Bei echt komplexen Sachen ist es ohnehin angenehm, in fertigen Implementierungen nachzusehen, um seine eigenen Fehler überhaupt erst zu bemerken. Es gibt auch so genug Code, der so speziell ist, dass ihn vorher eh noch keiner geschrieben hat ; - )

Fazit: Ich "kenne" etliche Programmiersprachen, habe mit ihnen schon das eine oder andere Projekt realisiert. Ich kann programmieren. Ich bin vielleicht nicht der Guru, aber bislang habe ich noch fast alles hinbekommen (wenn nicht unbedingt immer die hübscheste Lösung). Aber "kann" ich die Programmiersprachen auch alle? Nein. Da würde ich mich ganz bescheiden auf die beiden beschränken, mit denen ich in den letzten fünf Jahren fast ausschließlich zu tun hatte (bei mir ist das Java und PHP).

Andererseits "wirbt" Ruby ja damit, dass es quasi jeder in einer Stunde oder so lernen kann. Das würde ich allerdings auch fast unterschreiben. Wenn man schon die eine oder andere Skriptsprache kennt, auch schon mit objektorientierten Ansätzen zu tun hatte, dann beschränkt sich das "Lernen" von Ruby eh auf das Akzeptieren der "fremden" Syntax und das Einlesen in die Bereiche, die von Rails schon abgedeckt werden.

Railer
2007-03-21, 16:36:21
Zum können einer Programmierschprache gehört IMHO erstmal das Verstehen des Ansatzes. Im Falle von Objektorientierter Programmierung (OOP) müsste man erstmal grundsätzlich mit der Ideologie des OOP umgehen können. Dies erfordet viel Übung und Erfahrung.
Im Prinzip ist eine Programmiersprache nur eine Sammlung von Syntaxregeln, die meistens innerhalb von wenigen Minuten gelernt werden können. Unter der Voraussetzung, dass man OOP programmieren kann, würde ich sagen, dass das Können einer bestimmten Programmiersprache sich auf das Auskennen in der API reduziert. Sprich, wenn du die für deinen Aufgabenkomplex relevanten Bereiche der mitgelieferten Bibliotheken beherschst, kannst du diese Programmiersprache produktiv einsetzen, also programmieren. Das ist das was ich vom Programmieren verstehe.

Ein Erfahrener Programmierer kann sich relativ schnell eine neue Programmiersprache eineignen, dazu gehört im wesentlichen nur das lernen der API, solange es sich um eine gleichartige Sprache handelt.
Im Übrigen gehört zum "Programmieren können" in meinen Augen auch das schnelle finden von geeigneten Lösungen bzw. Algorithmen. Man muss nicht immer das Rad neu erfinden und manchmal ist man darauf angewiesen eine Lösung im I-Net oder in den Büchern zu suchen. Dieses Suchen gehört in meinen Augen ebenfalls zum Programmieren. Wenn ein Programmierer weiss wo er schnell eine geeignete Lösung für ein Problem findet, kann für ein Unternehmen produktiver, also "besser" sein, als jemand, der aus Dummheit sich beim Schreiben eines Algorithmus, den es seit 2000 Jahren gibt, kostbare Zeit verschwendet. Im Endeffekt zählt nur, dass man eine Lösung findet, wie und wo ist irrelevant.

Ob mathematische Kenntnisse notwendig sind hängt stark davon ab in welchem Bereich man tätig ist. Von Vorteil sind sie auf jeden Fall, aber ich kenne genug Leute, die keine Ahnung von Mathe haben und trotzdem tolle Programme im Bereich der Warenwirtschaft schreiben. Als Grafikprogrammierer wird man ohne Mathekenntnisse nicht weit kommen denke ich.

Trap
2007-03-21, 16:45:14
Es kommt drauf an welches "kann" du meinst. Da gibt es eine riesige Bandbreite zwischen "man kommt irgendwie auf eine Lösung, die das macht was man will" und "es gibt niemand der irgendwas dran verbessern könnte".

Meiner Meinung nach kann man eine Programmiersprache, wenn man in Foren zur Programmiersprache selten Dinge sieht, die man nicht kennt und zu eigenen Vorschlägen selten eindeutig bessere andere Lösungen gepostet werden. Mit diesem Verständnis von "kann" gibt es das Problem mit dem "mehrere Programmiersprachen können obwohl man nur eine gelernt hat" nicht.

Programmieren können, Probleme lösen können und eine Programmiersprache zu können sind 3 unterschiedliche Dinge und wie gut man in einem davon ist, hat wenig mit dem anderen zu tun. Um vom Problem zum fertigen Programm zu kommen braucht man alle 3 Fähigkeiten, das heißt aber nicht, dass man automatisch alles gleich gut kann. Nichtmal, dass man alles gleich gut können sollte, 3 Leute die jeweils nur in einem Bereich sehr gut sind können besser sein als 3 die überall gut sind.

Monger
2007-03-21, 16:48:28
Naja... "kannst" du deutsch?

Im Grunde ist das eine ganz ähnliche Frage. Ein Germanist wird vermutlich bei vielen deiner Sprachkonstrukten die Nase rümpfen, aber auch ein Experte wird vor manchen Texten wie der Ochs vorm Berg stehen, und völlig ratlos sein. Wenn ich Goethe wiedererwecken würde und ihm bestimmte Bücher aus meinem Regal zeigen würde, würde er sich vermutlich nur verwundert den Kopf kratzen - und das müssen nichtmal Sachbücher sein.
Deshalb bin ich der Ansicht, keiner "kann" wirklich programmieren.

Aber um auf deine drei Punkte einzugehen:

1) Alter ist keine Garantie für gar nix. Nur echte Unfähigkeit ist offensichtlich, alles andere sind Grauzustände.
2) Was zur Hölle hat Mathematik mit programmieren zu tun? Wohl auch nicht mehr als mit allen anderen Lebensbereichen.
3) Wer weiß wo er sich für jedes Problem seinen Code zusammenkopieren kann, ist wesentlich klüger als der, der sich seinen Code selber schreibt.

Der_Donnervogel
2007-03-21, 16:54:07
mir ist gerade in den sinn gekommen, wann man von sich behaupten kann, das man eine programmiersprache "kann". dazu ist mir folgendes eingefallen:Also da stellt sich mir die Frage was heißt "kann"? Können ist ein so schwammiger Begriff, daß man das erst mal definieren müßte. Im Prinzip reicht es eine Hand voll Befehle zu beherrschen, den Rest kann man jederzeit selber nachprogrammieren. Kann ich dann schon eine Sprache? Oder aber heißt das, daß man wirklich alle Feinheiten der Sprache beherrscht? Tut das bei der Größe der Frameworks die heutzutage mitgeliefert werden überhaupt jemand noch, oder zählen die Frameworks gar nicht zur Sprache, sondern wirklich nur die grundlegende Kommandos wie zB if oder while? :confused:

- prinzipiell ist ja die logik bei jeder programmiersprache die selbe, kann also ein erfahrener programmierer (>5jahre erfahrung) von sich aus sagen das er jede programmiersprache "kann"?Nein das sicher nicht. Es gibt verschiedene Typen von Programmiersprachen die sich schon vom Ansatz (http://de.wikipedia.org/wiki/Programmierparadigma) her grundlegend unterscheiden. Bleibt man aber innerhalb einer bestimmten Art von Programmiersprache, wechselt also zB von einer objektorientierten zur anderen, dann kann auch ein erfahrener Programmierer die neue Sprache zwar nicht automatisch, aber er wird sich sehr schnell einarbeiten können.

- sind höhere mathematische kenntnisse nötig das man eine programmiersprache wirklich "kann"?Da ist die Frage eher falsch gestellt, die müßte dann heißen: "Braucht man mathematische Kenntnisse um programmieren zu können". Hierbei kommt es stark darauf an, was denn noch als Programmieren durchgeht, bzw. was man macht. Wer z.B. im Webdesignbereich irgendwelchen JavaScript oder PHP Code zusammenhackt braucht vermutlich überhaupt nie Mathe. Auch bei vielen anderen Anwendungen braucht man normalerweise kein Mathe und falls man doch ein bißchen was braucht, nimmt man eben eine Library (siehe nächste Antwort). Insofern würde ich sagen man braucht es nicht umbedingt zum Progammieren. Angenehm ist es allerdings in der Designphase, wenn es zB darum geht was für Datenstrukturen, Algorithmen etc. verwendet werden, wenn man etwas davon versteht. Aber das hat nichts mit der Programmierung direkt zu tun. Im Zweifelsfall muß man einen Algorithmus ja nicht einmal umbedingt immer verstehen um ihn implementieren zu können.

- "kann" man programmieren, auch wenn man manche aufgaben nicht selber lösen kann sondern sich wo code "ausborgt", aber man genau immer weiß wo man welchen code finden kann?
Ich interpretiere das mal nicht so, daß man irgendwo über Google Codeteile sucht und die dann planlos per Copy&Paste ins Programm setzt, da man es selber nicht gebacken bekommt. Das wäre natürlich schlecht. Etwas anderes ist es meiner Meinung nach, wenn man zwar grundsätzlich weiß was man will, aber z.B. die Details der Implementierung nicht weiß (z.B welche Klassen aus dem Framework könnten mir helfen). In diesem Fall wäre es hirnverbrannt nicht nach bereits existierendem Code zu suchen (auch z.B Tutorials) und diesen dann anzupassen, anstatt alles auf Teufel komm raus selber zu machen. Genau aus diesem Grund gibt es ja auch Bibliotheken und Frameworks.

Gast
2007-03-21, 17:01:13
Hallo,

mir ist gerade in den sinn gekommen, wann man von sich behaupten kann, das man eine programmiersprache "kann". wenn man sich bei einer Firma bewirbt, die das verlangt X-D


dazu ist mir folgendes eingefallen:

- prinzipiell ist ja die logik bei jeder programmiersprache die selbe,das würde ich so nicht bestätigen. Als ich von C++ nach Java kam, hat mich schon so einiges überrascht, z.B. daß man Klassen nur dynamische instanziieren kann. OK, das ist weniger eine Frage der Sprache als des Paradigmas...

Allerdings ist mir im Gespräch mit Leuten, die nur Java kannten, aufgefallen, daß Java eine ganz eigene Logik zu haben scheint. Z.B. hatte mal jemand das Bedürfnis, mir ausführlichst zu erläutern, daß null in Java eine völlig andere Bedeutung habe als ein NULL-Pointer in C/C++, weil nämlich null in Java mitnichten ein Pointer sei, der nirgendwo draufzeigt, sondern einfach "nichts".

kann also ein erfahrener programmierer (>5jahre erfahrung) von sich aus sagen das er jede programmiersprache "kann"?vielleicht wenn er sich ein bißchen in die Sprache eingearbeitet hat (größenordnungsmäßig eine Woche) und ihm das in der Sprache umgesetzte Paradigma (siehe: C++ vs. Java) vertraut ist. Sonst eher nicht.

- sind höhere mathematische kenntnisse nötig das man eine programmiersprache wirklich "kann"?mathematische Kenntnisse sind zum programmieren an sich eigentlich nicht erforderlich. Es gibt natürlich Spezialfälle, daß man Software für mathematische Zwecke schreibt, da ist natürlich nützlich auch was von Mathematik zu verstehen.

- "kann" man programmieren, auch wenn man manche aufgaben nicht selber lösen kann sondern sich wo code "ausborgt", aber man genau immer weiß wo man welchen code finden kann?das hängt davon ab, wo der Schwerpunkt des Problems liegt, genauer: ob das Problem überwiegend programmiertechnischer Natur ist, oder lediglich die Lösung mit den Mitteln der Programmierung umgesetzt wird.
Z.B. habe ich mal ein numerisches Lösungsverfahren für lineare Gleichungssysteme von Basic nach C++ portiert. Das Verfahren selber habe ich nicht wirklich verstanden, sondern nur kopiert. Da aber das Problem - die Lösung linearer Gleichungssysteme - nicht direkt was mit Programmierung zu tun hat und daher in die Kategorie programmiererische Umsetzung der Lösung fällt, war das für die Frage, ob ich selbst programmieren kann, unerheblich ;)

Gauron Kampeck
2007-03-21, 18:05:20
Ich denk mal können bezieht sich nicht auf das Kennen und Anwenden sämtlicher Sprachsyntax, sondern eher darauf, dass man weiß wie sich eine Sprache semantisch verhält. Sprich: Man sieht ein Stück Code mit Syntax die einem längere Zeit oder noch nie über den Weg gelaufen ist (soll z.B. bei C++ ja manchmal vorkommen;)), und versteht trotzdem was dieses Programm macht und was die unbekannten Konstrukte bedeuten.

T4ch0n4d3l
2007-03-21, 18:18:16
Eine Programmiersprache zu beherrschen ist das eine, programmieren können das andere. Ein durchschnittlicher Programmierer schafft es übrigens, 10 Zeilen Code pro Tag zu verfassen (dies beinhaltet alle Arbeiten drumherum). Sieger ist der, dessen Code unter anderem am besten dokumentiert ist, die wenigsten Fehler aufweist und dessen Funktion am schnellsten ersichtlich ist. Desswegen lernt man in einem Informatikstudium auch nicht irgendwelche Programmiersprachen, sondern Prinzipien.
Ein Softwareprojekt ist übrigens schneller fertig, wenn es fähige Programmierer schreiben, welche von der Programmiersprache noch nie was gehört haben, als wenn unfähige Programmierer am Werk sind, die die Programmiersprache in und auswendig kennen (COCOMO II glaub ich).

medi
2007-03-21, 19:10:50
Ein durchschnittlicher Programmierer schafft es übrigens, 10 Zeilen Code pro Tag zu verfassen (dies beinhaltet alle Arbeiten drumherum).

10 Zeilen Code? :| Ist das jetzt keine Irrtum deinerseits? Weil 10 Zeilen Code + Kommentare schreib ich dir in null komma nix. Du meinst wohl eher 100 und selbst das ist arg wenig.

Demirug
2007-03-21, 19:35:40
10 Zeilen Code? :| Ist das jetzt keine Irrtum deinerseits? Weil 10 Zeilen Code + Kommentare schreib ich dir in null komma nix. Du meinst wohl eher 100 und selbst das ist arg wenig.

Erreicht ein Projekt eine bestimmte Größe kommt das durchaus hin. Bei diesen Verfahren werden ja nur die Codezeilen gezählt die am Ende im Programm verbleiben. Und bei der Zeit zählen auch die ganzen Besprechungen usw mit.

T4ch0n4d3l
2007-03-21, 19:44:43
Hat schon alles seine Richtigkeit. Demirug hat es ähnlich begründet wie mein Prof. Hier mal noch der Link aus der Vorlesung: http://www.imn.htwk-leipzig.de/~waldmann/edu/ss07/case/folien/main/node4.html
Achso, nochwas: Guter Code sollte kommentarlos lesbar sein (möglichst wenig bis garkeine Kommentare sollten für Verständnis notwendig sein) und Kommentare sind kein Ersatz für die Dokumentation und den Test. Ich würde dir zwar in dem Punkt recht geben, dass die 10 Zeilen schnell geschrieben sind. Diese sind dann aber noch lange nicht dokumentiert und getestet! Eine ordentliche Dokumentation und Test bedarf schon ordentlich Aufwand.
Der Wert kann noch weiter gedrückt werden, wenn man zum Beispiel in Bereiche kritischer Anwendungen schaut. Programmverifikation, also der Beweis der Richtigkeit von Programmcode ist extremst aufwendig. Ich würde schon fast behaupten, dass die Verifikation etwa 10 mal mehr Zeit bedarf, wie der Code.

COCOMO sieht übrigens für ein Programm mittlerer Komplexität mit 20.000 Zeilen Quelltext in der Finalen Version (KDSI) einen Zeitaufwand von 86 Personenmonaten vor. Bei 20 Tagen pro Monat wären das 1720 Tage (11.6 Zeilen pro Tag). Kommt also in etwa hin. Der Zeitaufwand steigt überlinear zur Programmgröße an! Wäre das Programm 200.000 Zeilen lang, wären es schon 22660 Tage (8.8 Zeilen pro Tag).

Das interessante daran ist, dass sich durch eine "bessere" Programmiersprache produktiver arbeiten lässt. Im Schnitt sind 128 Zeilen C so effektiv wie 51 Zeilen C++ oder 29 Zeilen Java, beweisen kann ich es leider nicht, ich glaube das hat Sommerville geschrieben.

Monger
2007-03-21, 21:19:24
Erreicht ein Projekt eine bestimmte Größe kommt das durchaus hin. Bei diesen Verfahren werden ja nur die Codezeilen gezählt die am Ende im Programm verbleiben. Und bei der Zeit zählen auch die ganzen Besprechungen usw mit.

Mein Dozent hat damals sogar mit 5 Zeilen pro Tag gerechnet - und zwar für einen wirklich routinierten Programmierer.

Und ich glaube, das ist realistisch. Code wird so häufig während seiner Lebenszeit hin- und hergeschmissen... und die Lebenszeit geht ja weit über die Produktveröffentlichung hinaus.
Und wenn es die richtigen 5 Zeilen sind, ist das ja auch nicht wenig. So manche Algorithmen bestehen nur aus ein paar dutzend Zeilen, brauchen aber vorneweg viel Denkarbeit.

Andersrum könnte man auch sagen: wer seinen Code runterschreiben kann ohne nachzudenken, macht irgendwas falsch. Denn dann wurde irgendwo das Rad zweimal erfunden.

darph
2007-03-21, 21:34:58
Guter Code sollte kommentarlos lesbar sein (möglichst wenig bis garkeine Kommentare sollten für Verständnis notwendig sein) und Kommentare sind kein Ersatz für die Dokumentation und den Test.
Völlig richtig, aber das ist kein Grund, nicht trotzdem sinnvolle Kommentare hinzuschreiben. So das Teufelszeug, wie manche tun, sind sie nun auch nicht.

mapel110
2007-03-21, 21:53:44
Völlig richtig, aber das ist kein Grund, nicht trotzdem sinnvolle Kommentare hinzuschreiben. So das Teufelszeug, wie manche tun, sind sie nun auch nicht.
Na Kommentare zu häufig eingesetzt, macht aus einem Quellcode auch einen Roman. Sinnvoller ists da, doch mal den ein oder anderen aussagekräftigen Variablennamen zu vergeben, auch wenn er mal länger als i ist.
Ist natürlich immer die Frage dabei, wie frei man in der Vergabe der Namen ist. Die werden ja häufig schon vorher in einer Besprechung festgelegt, sofern denn mehrere an einem Projekt arbeiten.

weiß nicht, obs hier schon gesagt wurde, aber man sollte zwischen "Coden können" und die "Syntax einer Programmiersprache beherrschen" unterscheiden.

/edit
okay, Railer hats schon gesagt.

Gasti
2007-03-22, 00:21:19
10 Zeilen/Tag; 2000/Jahr! So ein Quatsch! Wäre das so, würde in unserem Laden nie ein Programm fertig werden. Und wenn man alle anderen Zeiten (Besprechungen, Rumsitzen, Urlaub, Krankheit, Essen usw.) mit reinrechnet, ist es auch Blödsinn. Ich sage ja auch nicht, ein Marathonläufer läuft im Schnitt mit 0,1km/h, weil er eben die meiste Zeit des Tages gar nicht läuft.
Tolle Weisheiten. Am Ende kommt hier noch jemand mit dem "Pragmatischen Programmierer" um die Ecke geschossen. Dann lache ich mich aber endgültig tot.

T4ch0n4d3l
2007-03-22, 00:51:25
Tja, dann tut ihr euch ganz ERHEBLICH vom Durchschnitt absetzen. COCOMO wird seit nunmehr 26 Jahren so in der Lehre vermittelt, entspricht dem allgemeinen Durchschnitt (basiert auf Studie) und wird in der Industrie so angewandt. Unwahrscheinlich, dass dies totaler Quatsch ist.

Das man 10 Zeilen in unter einer Minute eingeben kann, ist auch jedem klar, bloß darum gehts nicht. 10 DSI (darum gehts eigentlich) sind auch nicht zwangsläufig 10 eingegebene Zeilen.

Gast
2007-03-22, 08:42:05
Gemeint ist das man die meisten Zeilen wieder löschen die man mal geschreibt hat.

The_Invisible
2007-03-22, 13:11:23
danke schon mal für die antworten, interessante diskussion ;)

aber wie definiert man 10 zeilen code?


if(a == b)
{
dothis1();
}
else if(a < b)
{
dothis2();
}
else if(a > b)
{
dothis3();
}


so kanns ja wohl nicht sein oder? außerdem würde man hier kaum doku brauchen bzw könnten sich kaum fehler einschleichen.

mfg

Wuzel
2007-03-22, 14:28:20
Hmmm, da müssten wir erst einmal die definition von 'Programmierer' angehen.
Sind damit 'Lego-Bastler' - die nur irgendwelche fertigen 'Bausteine' zusammenstecken, oder eben die, die diese Bausteine entwickeln gemeint?

Letzteres ist nähmlich der 'echte' Informatikbereich, da wird eher weniger Code reingehackt, vielmehr wird das Design, die eigentliche Problemlösung/Analyse usw. bearbeitet, den Code letzendes zu schreiben ist der kleinste Teil - ungefähr die Gewichtung wie den Zucker in den Kaffe zu kippen ;)

Übrigens wird verstärkt die Lego-Bastlerei in den Osten (z.B. Russland) verlagert, diese Arbeit ist primitiv/leicht und die Einsparungen bei den Lohnkosten etc. ist immens. Wie gesagt, viel muss man nicht können, den Syntax der Sprache eventuell - aber das meiste nehmen einem in dem Bereich die feature reichen IDE's ab. Hier haut man die meisten Elemente der Applikation per D&D zusammen, in den leeren Funktionsblöcken setzt man ein kleines bischen Logik - fertig. Selbst DB Endanwendungen sind in ein paar h fix und fertig zusammengeklickt.

Ein Informatiker, der a) einen sicheren Hafen und b) es zu etwas bringen willl, hat es um einiegs schwerer. Zum einem ist Mathe - bzw. das Verständniss der höheren Mathematik unabdingbar, er braucht fundamentales Wissen über den Planungsablauf - Design und noch einiges obendrauf. Das kann man definitiv nicht einfach so lernen, ein gutes Studium ist glaube ich nicht umgehbar.

Dies Programmiersprache ansich ist wie ein Wekzeug - z.B Akkuschrauber. Der Bauarbeiter geht jeden Tag damit um, kennt die Knöpfe und Einstellung auswendig. Wie genau das Gerät funktioniert interresiert hier weniger. Der Ingenieur kennt einen Akkuschrauber, kann damit ein wenig arbeiten - er nutzt ihn aber sehr selten. Er weiss dagegen wie der Motor und das Getriebe darin genau funktioniert ;)
Daher ist es quatsch irgendwo 'Programmieren können' anhand der Kenntnisse einer oder mehrerer Sprachen festzumachen.

The_Invisible
2007-03-22, 15:24:16
naja, gehört das nicht eher zu einem mathematiker als zu einem programmierer?

oder anders gesagt: gibt es programmierer die keine mathematik können bzw mathematiker die nicht programmieren können, oder liegt die wahrheit irgendwo dazwischen?

zumindest kenne ich persönlich keinen programmierer der in mathe ne völlige null war.

mfg

Monger
2007-03-22, 16:42:45
zumindest kenne ich persönlich keinen programmierer der in mathe ne völlige null war.

*Hand heb*

Ich frag nochmal: was hat Programmieren mit hoher Mathematik zu tun?

T4ch0n4d3l
2007-03-22, 16:43:41
Sagen wir mal so: sobald irgendwie mit Gleitkommazahlen angefangen wird zu rechnen (ich meine jetzt nicht sowas wie nen Taschenrechner), bedarf es intensivste Kenntnisse in numerischer Mathematik und die baut auf Analysis und Algebra auf. Allgemein kann man sagen, dass die Umsetzung einfachster Mathematik auf einem Prozessor sehr kompliziert sein kann (Gauß als Beispiel). Nun kommt es auf die Anwendung drauf an, ob Mathematik benötigt wird. Aber Programmierer sollten ja universell sein und sowas auch meistern können. Anwendungsgebiete gibt es mehr als man denkt.

Weiterhin, wie schonmal erwähnt, sind Mathematikkenntnisse bei der Programmverifikation unabdingbar (Programmierung kritischer Anwendungen: ABS, Airbagsysteme, Raketen, Flugzeug etc.)

Monger
2007-03-22, 16:52:36
Wenn ich als Architekt ein Haus plane, ziehe ich mir einen Statiker zur Seite der für mich das Ding ausrechnet, und mich darauf hinweist wenn ich bestimmte Dinge nicht tun kann. So sollte es bei einem Entwickler eigentlich auch sein.

Dass Programmierer oftmals ne Menge Zeug machen sollen von dem sie überhaupt keine Ahnung haben können, ist ein anderes Thema. Ich hab hier in der Firma auch schon für Sachen den Kopf hingehalten, wo ich doch sehr erstaunt war mit was ich mich dafür plötzlich qualifiziert habe...

Aber pauschal zu behaupten, dass ein Programmierer detaillierte Mathematikkenntnisse braucht, halte ich für gewagt.

T4ch0n4d3l
2007-03-22, 17:00:37
Nagut, dann bezieht sich meine Aussage eben auf den Software-Ingenieur ;) .

Es gibt eben den Unterschied zwischen den reinen Programmierern, die ein Programmablaufplan/Pseudocode etc. in einen Code umwandeln oder den Ingenieuren, die eine Problemstellung in ein Programm umwandeln können. Letzteres wird in einem Informatikstudium versucht, zu erreichen. Es hat auch seine Vorteile, wenn der Programmierer seinen eigenen Code beweisen kann! Viele Problemstellungen lassen sich auch durch erweiterte Mathematikkenntnisse einfacher, performanter und vor allem kürzer lösen, als ohne.

Monger
2007-03-22, 17:23:21
...Letzteres wird in einem Informatikstudium versucht, zu erreichen. Es hat auch seine Vorteile, wenn der Programmierer seinen eigenen Code beweisen kann! Viele Problemstellungen lassen sich auch durch erweiterte Mathematikkenntnisse einfacher, performanter und vor allem kürzer lösen, als ohne.

Ah, du willst auf Algorithmentheorie und sowas hinaus, oder?
Okay: ganz formal betrachtet ist die Informatik ein Nebenzweig der Mathematik. Aber - wird das was man dort lernt, in irgendeinem anderen Zweig der Mathematik verwendet?
Aufwandsabschätzungen z.B. sind nunmal auf Computer zugeschneidert, und für nichts anderes zu gebrauchen. Die meisten Bereiche der Mathematik sind für den Computer ohnehin kaum zu gebrauchen, weil der PC sich mit allem anderen als mit digitalen Werten extrem schwer tut. Deshalb würde ich - auch wenn es nicht ganz korrekt ist - die Informatik als eigenständigen Zweig sehen, und nicht der Mathematik zuordnen.

T4ch0n4d3l
2007-03-22, 17:33:15
Algorithmentheorie, Programmverifikation, Numerik :)
Man kann auch sagen, dass die Informatik die Mathematik als Mittel zur Problemlösung verwendet. Selbstverständlich ist das, was der Informatiker gelehrt bekommt auch wirklich nur im Bereich der Informatik anwendbar.

Monger
2007-03-22, 17:39:22
Als Fazit können wir also festhalten, dass es Sinn macht (wenn auch nicht unbedingt notwendig ist), wenn ein Programmierer fit in Informatik ist.

Okay, dem kann ich völlig vorbehaltslos zustimmen! :D

Coda
2007-03-22, 21:10:02
Ohne Mathematik hast du spätestens bei Problemen die über die übliche GUI-Logik-Datenschieber-Baustelle hinausreichen (Numerische Simulation, 3D-Zeug, Video, Audio, etc.) absolut keine Chance mehr, bzw. wirst suboptimale Resultate bringen.

Ob man das machen will bleibt ja jedem selber überlassen.

Gast
2007-04-11, 18:31:09
Sagen wir mal so: sobald irgendwie mit Gleitkommazahlen angefangen wird zu rechnen (ich meine jetzt nicht sowas wie nen Taschenrechner), bedarf es intensivste Kenntnisse in numerischer Mathematik und die baut auf Analysis und Algebra auf. Allgemein kann man sagen, dass die Umsetzung einfachster Mathematik auf einem Prozessor sehr kompliziert sein kann (Gauß als Beispiel).also um sich der Probleme bewußt zu sein, die durch die bloße Verwendung von Gleitkommazahlen entstehen, reicht es wenn man was von Rundungsfehlern und Mantissenlänge versteht. Dazu bedarf es bei weitem keiner intensiven Mathematikkenntnisse.

Weiterhin, wie schonmal erwähnt, sind Mathematikkenntnisse bei der Programmverifikation unabdingbar (Programmierung kritischer Anwendungen: ABS, Airbagsysteme, Raketen, Flugzeug etc.)nuja, die Fähigkeit, seinen Programmcode auch streng verifizieren zu können - nicht experimentell durch Testen, sondern streng logisch wie bei einem mathematischen Beweis - würde ich aber nicht als Bestandteil von programmieren können ansehen, sondern als Zusatzqualifikation einstufen.

Gast
2007-04-11, 18:57:47
Nagut, dann bezieht sich meine Aussage eben auf den Software-Ingenieur ;) .du mußt du aber erstmal erklären, was du unter einem Software-Ingenieur verstehst.

Die Definitionen für diesen Begriff reichen vom Programmierer, der Software für ingenieurmäßige Zwecke schreibt - Beispiel: ein Luftfahrtingenieur entwickelt an einem Flügelkonzept und schreibt sich ein Programm zur Aerodynamiksimulation - bis zur ingenieursmäßigen Behandlung der Software selbst.
Von daher ein sehr schwammiger Begriff, etwa so wie "Wissenschaftliches Rechnen".

Es hat auch seine Vorteile, wenn der Programmierer seinen eigenen Code beweisen kann! ich bezweifle, daß es möglich ist, jeden x-beliebigen Programmcode zu beweisen. Bei Software für mathematisch-naturwissenschaftliche Zwecke mag das noch recht einfach möglich sein, aber für x-beliebige Anwendungszwecke müßte erstmal eine hinreichend formale Sprache her, um die Anforderungsliste an den Programmcode zu formulieren.

HellHorse
2007-04-11, 22:07:09
Andererseits "wirbt" Ruby ja damit, dass es quasi jeder in einer Stunde oder so lernen kann. Das würde ich allerdings auch fast unterschreiben. Wenn man schon die eine oder andere Skriptsprache kennt, auch schon mit objektorientierten Ansätzen zu tun hatte, dann beschränkt sich das "Lernen" von Ruby eh auf das Akzeptieren der "fremden" Syntax und das Einlesen in die Bereiche, die von Rails schon abgedeckt werden.
Dann erklär mir doch bitte mal die Semantik von Mixins insbesondere in Bezug auf Methodenlookup bei Anwesenheit von Vererbung und overriding. Und dann erklär mir das Metaklassensystem inkl. singelton class. Und bitte jeweils für Klassen und Instanzmethoden. Brauchst nicht bei Adam und Eva anzufangen, reicht wenn du es in Vergleich zum Smalltalk Metaklassenmodel stellst. Und dann vielleicht noch Konstantenlookup.

Gast
2008-08-11, 16:31:15
wie sagte es mal der gute alte larry wall, der coder der sich überall seine code-schnipsel zusammensucht und sie zu einer funktion verbindet ist der wahre coder, macht auch irgendwie sinn, denn es ist ja gar nicht so einfach sich in andere denkstrukturen reinzudenken, diese zu verstehen, anzuwenden und zu modifizieren, dies erfordert mehr skill als das nachbauen einer funktion in seinen eingenen denke und vorgehensweise...


btw. der echte guru bleibt ein n00b für die ewigkeit!

Ectoplasma
2008-08-11, 17:44:42
wie sagte es mal der gute alte larry wall, der coder der sich überall seine code-schnipsel zusammensucht und sie zu einer funktion verbindet ist der wahre coder, macht auch irgendwie sinn, denn es ist ja gar nicht so einfach sich in andere denkstrukturen reinzudenken, diese zu verstehen, anzuwenden und zu modifizieren, dies erfordert mehr skill als das nachbauen einer funktion in seinen eingenen denke und vorgehensweise...


btw. der echte guru bleibt ein n00b für die ewigkeit!

Ich glaube du hast den Larry Wall komplett missverstanden. Dieses Zusammenstellen von Code-Fragmenten ist zunächst einmal nicht so einfach, wie man denkt. Zu diesem Thema gehört auch der Begriff Wiederverwendbarkeit. Und zur Fähigeit dieses auch anwenden zu können, gehört ein hohes Maß an Erfahrung. Den Gewinn den man erzielen kann ist Zeit- und Kostenersparnis. Das ist alles andere als Noobhaftigkeit, sondern im höchsten Maße professionell. Wenn du den Weg des hineindenkens in fremde Strukturen nie gegangen bist, dann bleibst du in der Tat für immer ein Noob. Dann wirst du auch nie in der Lage sein, ein vernünftiges Produkt nur aus Codefragmenten zusammenstellen zu können.

Lass es dir einfach von jemanden sagen, der nun schon seit 15 Jahren Software im Projektumfeld entwickelt.

Woher zieht ihr bloß immer eure Schlüsse beim Lesen eines Zitates? Du scheinst jedenfalls mit Softwareentwicklung, nicht allzuviel zu tun haben.

an.zgep
2008-08-11, 19:25:35
wer mittels libraries, frameworks usw. ein programm für einen enduser zusammenstellt, muss sicher nicht viel ahnung von mathematik haben.

wer middleware herstellt (grafik/physik/ki-engines, die eben genannten frameworks, software für industrie/embedded systems) muss höhere mathematik zumindest im ansatz verstehen um brauchbare lösungen zustande zu bringen.

wer neue algorithmen, low-level-libraries & co entwickelt sollte absolut top sein. so dinge wie AES oder die C++ STL bringt man mit abi-niveau-mathe keinesfalls zustande. selbst mit der mathematik, die man in einem informatik-studium lernt wirds da schwierig, selbstständiges darüber hinausgehendes lernen ist angesagt.

programmierer sind alle drei, der level auf dem sie arbeiten unterscheidet sich aber gewaltig und daher auch die anforderungen

Tiamat
2008-08-12, 11:20:57
Ich würde behaupten, dass man dann eine Programmiersprache beherrscht, wenn man sämtliche Konstrukte und Datentypen sicher einsetzen kann, ohne ständig in den Techdocs zu wühlen.
Doch auch da muss man unterscheiden. Is ja schön und gut eine Sprache zu können, doch kann er damit dann auch was anfangen, das ist wieder ne andere Frage.

Also nach einem Semester Informatik kenne ich grad mal die Grundgerüste in Java. Vererbung, Exceptions, Event-Handling, Listeners, Junits, Interface, GUI und wer weiß noch alles folgt jetzt alles intensiv im 2. Semester.

Zur Mathematik : Da fallen mir schon ein paar Sachen ein.
Verschlüsslung und Entschlüsslung ( Kryptographie )
Wenn man mit komplexen Zahlen rechnen muss.
Programme die Mathematiker, Physiker, Informatiker und Ingenieure bei ihrer Alltäglichen Arbeit benötigen, Programme für die chemische Industrie..
DirectX / OpenGl
keine Ahnung was noch alles..

Shink
2008-08-12, 11:35:10
Ich würde behaupten, dass man eine Programmiersprache "kann", wenn man:
- bei beliebigem fremdem Code nach einiger Zeit sagen kann was er anstellt (warum ist ja nicht immer so einfach...)
- einen komplexen Algorithmus, den man begreift (dessen Funktion man also z.B. am Zettel imitieren kann wie z.B. Wurzelziehen, einfache Gleichungen lösen) mit Methoden der Programmiersprache nachbilden kann.

Ich denke damit ist alles abgedeckt: Punkt 1 stellt sicher dass man selbst Dinge kennt die man nicht unbedingt verwenden muss und Punkt 2 dass man grundsätzlich programmieren kann.
Wenn man diese beiden Punkte beherrscht kann man eine Programmiersprache einsetzen. Wie schnell, sauber, wiederverwendbar, nachvollziehbar, "unpöse" und testbar man programmiert ist natürlich nicht so einfach festzustellen. Dinge wie Libraries (GUI, Datenbanken, Netzwerk) und Patterns (Listeners etc.) sind nicht (nur) programmiersprachenabhängig.

PHuV
2008-08-12, 18:49:46
Ein Informatiker, der a) einen sicheren Hafen und b) es zu etwas bringen willl, hat es um einiegs schwerer. Zum einem ist Mathe - bzw. das Verständniss der höheren Mathematik unabdingbar, er braucht fundamentales Wissen über den Planungsablauf - Design und noch einiges obendrauf. Das kann man definitiv nicht einfach so lernen, ein gutes Studium ist glaube ich nicht umgehbar.


Blödsinn, das ist der Unsinn, den die Matheprofs und Mathelehrer immer gerne verkaufen, und ja, ich habe ca. 11 Jahre in der Entwicklung gearbeitet, ohne jemals das ganze Mathezeugs aus der Uni zu benötigen. Es kommt immer darauf an, was man entwickelt. Wie hier schon erwähnt, die Welt braucht nicht nur 3D-Anwendungen und mathematische Simulationen, gefragt ist konkretes Anwendungswissen, betriebswirtschaftlicher Hintergrund etc. Ein Projekt gut zu gestalten, vernünftig zu planen, koordinieren, Studien durchführen etc. hat rein gar nichts mit Mathe zu tun.

Zum Topic:

Aus meiner Sicht kann man eine Programmiersprache, wenn man diverse Probleme in Form vom Programmcode gestalten und lösen kann. Dabei muß man aber nicht die ganzen Schlüsselworte und Funktionen im Kopf haben. Ebenso bin ich der Meinung, wer einmal das Prinzip einer Programmiersprache erfaßt hat, sei es prozedural oder OO, kann so ziemlich mit jeder Sprache auf diesem Gebiet Anwendungen entwickeln, pflegen oder programmieren. Es ist wichtig, einmal das Prinzip richtig zu erfassen, und man kann, mehr oder minder, in allen Programmiersprachen eines Typs (eben beispielsweise OO, prozedural etc.) programmieren.

RMC
2008-08-12, 19:21:52
Blödsinn, das ist der Unsinn, den die Matheprofs und Mathelehrer immer gerne verkaufen, und ja, ich habe ca. 11 Jahre in der Entwicklung gearbeitet, ohne jemals das ganze Mathezeugs aus der Uni zu benötigen. Es kommt immer darauf an, was man entwickelt. Wie hier schon erwähnt, die Welt braucht nicht nur 3D-Anwendungen und mathematische Simulationen, gefragt ist konkretes Anwendungswissen, betriebswirtschaftlicher Hintergrund etc. Ein Projekt gut zu gestalten, vernünftig zu planen, koordinieren, Studien durchführen etc. hat rein gar nichts mit Mathe zu tun.

Korrekt. Es sind nicht immer 3D Programme, physikalische Berechnungen oder komplexe mathematische Algorithmen.

Ein Großteil der Programme die heute existieren haben ihren hauptsächlichen Background ganz wo anders: Verwaltung, Warenwirtschaft und Buchhaltung ;)

Gast
2008-08-14, 09:33:04
Ich glaube du hast den Larry Wall komplett missverstanden.

genau, denn glauben !=wissen.


Dieses Zusammenstellen von Code-Fragmenten ist zunächst einmal nicht so einfach, wie man denkt.


so ist es.


Zu diesem Thema gehört auch der Begriff Wiederverwendbarkeit. Und zur Fähigeit dieses auch anwenden zu können, gehört ein hohes Maß an Erfahrung. Den Gewinn den man erzielen kann ist Zeit- und Kostenersparnis. Das ist alles andere als Noobhaftigkeit, sondern im höchsten Maße professionell.


genau das wurde doch ausgesagt



Wenn du den Weg des hineindenkens in fremde Strukturen nie gegangen bist, dann bleibst du in der Tat für immer ein Noob.


auch dies wurde so gesagt


Dann wirst du auch nie in der Lage sein, ein vernünftiges Produkt nur aus Codefragmenten zusammenstellen zu können.


bezweifle ich mal deine pauschal aussage.


Lass es dir einfach von jemanden sagen, der nun schon seit 15 Jahren Software im Projektumfeld entwickelt.


so engstirnig und des lesens mächtig aber am verstehen happert es noch, hast ja noch ein paar jährchen bis zur rente ;)
kannst ja nicht besonders erfolgreich sein wenn du schon bei so einfachen
dingen dich nicht reindenken kannst -.-


Woher zieht ihr bloß immer eure Schlüsse beim Lesen eines Zitates? Du scheinst jedenfalls mit Softwareentwicklung, nicht allzuviel zu tun haben.


allerdings, das frag ich mich bei deiner antwort auch. lesen, denken, denken
und dann mayb posten

Baalzamon
2008-08-14, 16:49:10
ich bezweifle, daß es möglich ist, jeden x-beliebigen Programmcode zu beweisen. Bei Software für mathematisch-naturwissenschaftliche Zwecke mag das noch recht einfach möglich sein, aber für x-beliebige Anwendungszwecke müßte erstmal eine hinreichend formale Sprache her, um die Anforderungsliste an den Programmcode zu formulieren.
Da muss ich dich leider enttäuschen, es ist möglich jeden x-beliebigen Programmcode zu beweisen. ;(

Das dies bei Code, der länger als 5 Zeilen ist schon schwierig wird, ist eine andere Geschichte.... Formal aber durchaus möglich (und das lässt sich sogar beweisen. ;) )

Oder andersrum: Wenn du nicht jeden Code beweisen könntest, hättest du an irgendeiner Stelle in deinem Programm (egal welchem) eine nicht definierte Verhaltensweise. :|

catamaran
2008-08-14, 17:32:29
Oder andersrum: Wenn du nicht jeden Code beweisen könntest, hättest du an irgendeiner Stelle in deinem Programm (egal welchem) eine nicht definierte Verhaltensweise. :|

Nicht definierte Zustände können auch in CPUs auftreten und Software bildet da keine Ausnahme. Da kommt in der Softwareentwicklung viel zu häufig vor. :frown:

an.zgep
2008-08-14, 20:14:16
korrekt, das nennt sich dann "Bug" :D

Baalzamon
2008-08-14, 20:48:55
Nicht definierte Zustände können auch in CPUs auftreten und Software bildet da keine Ausnahme. Da kommt in der Softwareentwicklung viel zu häufig vor. :frown:
Wenn es ein Hardware-Bug ist (FP-Bug, überspringende Elektronen, whatever) so hat das recht wenig mit dem Algorithmus zu tun.

Und wenn der Algorithmus nicht das tut was du möchtest, dann wirst du das bei deinem Beweis feststellen. Wenn der Algorithmus etwas anderes tut als er soll, ist das kein undefinierter Zustand, sondern ein definierter Zustand, der nicht erwünscht ist. ;)

Mal abgesehen davon, dass das kein Schwein macht, da es, wie ich oben geschrieben habe, für Programme die länger als ein paar Zeilen sind viel zu lange dauert. Da fährt man mit Testverfahren besser.

RattuS
2008-08-14, 22:15:56
Können ist ja relativ. Wer eine leicht überdurchschnittliche logische Auffassungsgabe besitzt, kann jegliche Programmiersprachen binnen weniger Stunden/Tage lernen. Es ist völlig egal, ob man Maschinensprache, strukturierte Sprachen oder objektorientierte Sprachen lernen muss - alle Sprachen erfordern die selbe logische Strukturierung.

Ich würde dieses "Können" anbringen, sobald man fähig ist, die Sprache umfangreich anzuwenden. D.h. ich kenne die bedeutensten Befehle (damit meine ich nicht nur logische/iterative Anweisungen), finde Problemlösung auch ohne Hilfestellung/Beratung und ich verstehe den Hintergrund meiner eigenen Arbeit. Es gibt bekanntlich immer eine Menge an möglichen Lösungswegen. Mein Können wird mir hierbei die effektivere Menge aussuchen.

Zwecks Mathematik: Mehr als elementare Algebra, Geometrie, Trigonometrie und lineare Algebra braucht man wohl kaum - ein sehr guter Realschulabschluss oder Oberstufe reicht als Qualifikation, denke ich. Programmierung würde ich prinzipiell aber eher der Logik zuteilen, denn am Ende entscheidet die Strukturierung über die Qualität des Programmes, nicht nur die mögliche (mathematische) Funktionalität.