Was muss ein guter Programmierer können?
-
Mir fehlt hier was. Nämlich die Antwort auf die Frage:
Was ist ein guter Programmierer?
Ist man gut, wenn man effizienten Code schreibt? Oder ist es wichtiger, dass der Code gut pflegbar ist und von anderen schnell verstanden wird? (Eine Kombination wäre natürlich optimal.)
Ist jemand ein guter Programmierer, wenn er sich auf das Programmieren beschränkt? Oder ist jemand besser, der sich auch intensiv mit den Problemen beschäftigt, die sein Programm lösen soll.
Ist es wichtiger andere Programmierer in Erstaunen zu versetzen, oder Programme zu schreiben, mit welchen die Anwender gut zurechtkommen?IMHO ist eine Beurteilung der Qualität eines Programmierers nur möglich, wenn man die Zielsetzung seiner Arbeit kennt.
-
Gregor schrieb:
public static int addFirstNNumbers(int n)
Gibt es in Java mittlerweile schon eine brauchbare Möglichkeit 'unsigned' zu sagen?
-
Lustig.
dreaddy ist offensichtlich nicht gut in Mathe. Dennoch möchte er natürlich ein "guter Programmierer" sein und kann somit nicht zugeben, dass gute Mathematik-Kenntnisse wichtig sind dafür
Wie einfach doch die menschliche Psyche manchmal zu durchschauen ist...
-
Da muß ich uneingeschränkt zustimmen. Optimal wäre sicher beides, da es sich auch nicht unbedingt ausschließt. Die meisten "guten" Entwickler sind so Algorithmenverliebt, das sie mit der Zeit eine gewisse Abneigung gegen GUI - Programmierungen entwickeln. Der Anwender ist aber nach meiner Erfahrung eher bereit ein paar Sekunden länger zu warten, als sich mit einer unverständlichen GUI anzufreunden.
Das Leben könnte so schön sein, wenn wir nicht Anwendungen für die ganzen DAUs da draußen, sondern nur für ITler schreiben müßten. Aus Sicht einer Firma ist sicher der Programmierer der Beste, der die wenigsten Kosten verursacht und das heißt geringe Entwicklungszeit, gute Wartbarkeit und das Eingehen auf Kundenwünsche (Kenntnis der Zielgruppe).
-
TheBigW schrieb:
Der Anwender ist aber nach meiner Erfahrung eher bereit ein paar Sekunden länger zu warten, als sich mit einer unverständlichen GUI anzufreunden.
Und wie erklärst Du den Erfolg vieler GUI-Anwendungen. Wer will schon Tastaturkürzel auswendig lernen, bevor er produktiv arbeiten kann (siehe: vim, emacs, etc.).
-
lesen, denken, posten
-
Bashar schrieb:
lesen, denken, posten
Umgekehrt funktioniert manchmal auch
-
Nö, sieht man ja an deinem Posting.
-
deswegen das "manchmal"
-
- ein problem logisch erfassen und strukturieren
- das problem durch gut auskommentierten code lösen
- das problem billig lösen
- den benutzer zufrieden stellen damit er mehr von dieser firma kauft
-
@Floh:
Das aber sind Eigenschaften eines guten Softwareentwicklers, der auch gut programmieren kann. Ein Programmierer hat nur nach Anweisung zu arbeitenBlackbird
-
Er sollte ggfalls dem Kunden (intern oder extern) erklären können, was er wann warum tut, und zwar in solchen Worten, daß der andere nicht sofort anfängt zu schielen.
Gerade in kleineren Softwareabteilungen sind die Entwickler nicht völlig vom Kunden getrennt, sondern haben immer wieder Kontakte zu ihm. Eine normale Kommunikationsmöglichkeit wie "sprechen ohne zu stottern" ist manchmal hilfreich.
-
etechniker schrieb:
Lustig.
dreaddy ist offensichtlich nicht gut in Mathe. Dennoch möchte er natürlich ein "guter Programmierer" sein und kann somit nicht zugeben, dass gute Mathematik-Kenntnisse wichtig sind dafür
Wie einfach doch die menschliche Psyche manchmal zu durchschauen ist...Naja entweder bin ich kein Mensch oder du musst das mit der Psyche nochmal überdenken :o
Ich war in Mathe immer zischen 1 und 2(und das auch bei Lehrern wo 90% eine 4 oder schlimmer bekommen haben), das Ding ist nur das ich in den 2 Jahren die ich ejtzt arbeite diese mathematischen Kentnisse oder zumidnest alles was nach der 7ten Klasse kam noch nie ernsthaft gebraucht habe...
Ich mein ob ich jetzt eben in 2 minuten ohne nachzudenken
unsigned long addFirstNNumbers(unsigned long endwert) { unsinged long retval = 0; for(int i = 1; i<= endwert; i++) { retval+=i; } return retval; }
tippe oder mich an Mathezeiten zurückversetze und irgendwelche schnelleren Algorythmen zusmamenbastel macht sogut wie nie einen Unterschied, ausser das letzteres meist wesentlich länger dauert bis es funktioniert(und meist nicht auf Anhieb läuft
).
Wenn das ganze schneller sein muss klar, aber wann ist das denn?Wir hatten aufer Arbeit auch mal ne nette Diskussion vonwegen "die meisten Info-Studenten fliegen wegen Mathe raus" ... letztendlich kam raus das mein Kollege auch noch nie wirklich Mathekentnisse gebraucht hat.
Und der arbeitet hier jetzt 12 Jahre oder so :o
-
@dreaddy: *hüstel* Ich hoffe es ist Dir wenigstens bewußt, auf welches Beispiel Du hier reingefallen bist... ist ein echter Klassiker. Du solltest vielleicht diesen speziellen Punkt wegen akuter Blamagegefahr nicht vertiefen.
Ich denke, daß man die Mathematik nicht auf Rechnen reduzieren sollte. Die wenigstens Softwareentwickler (gerade die Informatiker) lösen später rechnerische Probleme (das begegnet sogar noch eher Leuten im Maschinenbaubereich oder Statik, oder Etechnik - also Ingenieuren). Trotzdem ist ein gewisses mathematisches Verständnis notwendig, mehr im Sinne von "Abläufe verstehen, ordnen, lösen". Das ist das, was man unter Mathematik einordnet. Die Schule unterrichtet keine Mathematik (war übrigens ja auch ein Kritikpunkt bei PISA), sondern das Schulfach ist nur falsch benannt - es müßte eher "Rechnen" heißen.
-
ich weiss nich... mir ist schon klar das (zahl*(zahl+1))/2 genau dasselbe Ergebnis zurückgibt und das hatte ich auch in der Schule irgendwann mal... nur wann ist die peinliche Funktion denn mal zu langsam? :o
Also ich sags mal so:
Wenn ich die Funktion ein paar mal mit Zahlen von 1-50 aufrufe würd ich sie bedenkenlos so nehmen und wenn nicht dann nehm ich mir mal Stift und Papier und schreib die Zahlenreihen auf.
Dann schau ich mir die Zusammenhänge an, bau dadraus was schnelleres und gut... wenn ich sehe1 1 2 3 3 6 4 10 5 15 6 21 7 28 8 36
Dann erkenn ich auf Anhieb das das auch irgnedwie anders gehen muss... bissl probieren und der Kram funktioniert.
-
dreaddy schrieb:
ich weiss nich... mir ist schon klar das (zahl*(zahl+1))/2 genau dasselbe Ergebnis zurückgibt und das hatte ich auch in der Schule irgendwann mal... nur wann ist die peinliche Funktion denn mal zu langsam? :o
Also ich sags mal so:
Wenn ich die Funktion ein paar mal mit Zahlen von 1-50 aufrufe würd ich sie bedenkenlos so nehmenaha.
bedenkenlos also.
mal messen.#include <iostream> #include <ctime> using namespace std; #define for if(false);else for int dreieckszahl(int endwert) { int retval = 0; for(int i = 1; i<= endwert; i++) { retval+=i; } return retval; } /*int dreieckszahl(int n) { return n*(n+1)/2; }*/ int main() { clock_t start=clock(); int s=0; for(int i=0;i<1000000;++i) { for(int n=1;n<=50;++n) { s+=dreieckszahl(n); } } clock_t stop=clock(); cout<<s<<endl; cout<<double(stop-start)/CLOCKS_PER_SEC<<endl; return 0; }
zeit der normalen version:
625163520 1.392
zeit deiner version:
625163520 12.528
deine version ist für zahlen 1-50 schon um faktor 9 lahmer! also mein lieber schwan, du gehts mit rechenzeit recht locker um.
und der faktor 9 ist nichtmal das schlimme. das wirklich wirklich schlimme ist der faktor 1000, der kommt, wenn der kunde ein paar mehr daten hat, als du in den testläufen. oder die unregelmäßigen aussetzer des programms, wenn ein paar große werte mal berechnet werden müssen. wenn du sowas oft machst, biste schlicht nicht allein arbeitsfähig.und im übrigen ist für den nicht völlig ungeübten entwickler die normale version besser lesbar als die mit der schleife. und schneller getippt ist sie auch. also warum in gottes namen soll man auf mathe verzichten?
-
dreaddy schrieb:
das Ding ist nur das ich in den 2 Jahren die ich ejtzt arbeite diese mathematischen Kentnisse oder zumidnest alles was nach der 7ten Klasse kam noch nie ernsthaft gebraucht habe...
Was arbeitest du bzw. was programmierst du?
-
Ich finde es ist gar nicht mal so wichtig, das man eine Sprache top beherrscht und der super-Mathematiker ist.
Ein Programmierer muss eigentlich nur wissen, wie
a) Computer und OS im Detail funktionieren
b) Programmiersprachen funktionieren
c) Wie man Problemstellungen und Anforderungen analysiertDer Programmierer muss die verschiedensten Werkzeuge (Programmiersprachen, Script-Sprachen, Datenbanken etc) je nach Problemstellung, nach kürzester Zeit instiktiv erlenen können.
Und er muss die Problemstellung verstehen und mit den benötigten Werkzeugen schnell und kompentent lösen.
-
Cpp_Junky schrieb:
Ich finde es ist gar nicht mal so wichtig, das man eine Sprache top beherrscht und der super-Mathematiker ist.
find ich auch. ich meine, die schwächste fähigkeit bestimmt, wie gut man ist.
Cpp_Junky schrieb:
Ein Programmierer muss eigentlich nur wissen, wie
reingefallen!
das "nur" war falsch. also ganz ohne die anderen fähigkeiten gehts doch nicht.
-
Ein "paar mal" ist sicher nicht 50000000 mal so schnell wies geht läuft sondern ich sag mal bei irgendeiner Berechnung die alle 5 Minuten einmal läuft wird das ganze jedesmal 20 mal benutzt...
Das kommt bei mir wesentlich öfter vor als das ich eine Funktion baue die 90% der Zeit braucht...Aber vorallem geht es ja nicht ums tippen sondern ums ausdenken...
Wenn ich es spontan weiss werde ich natürlich die schnellere Version gleich benutzen, aber hast du alle mathematischen Formeln die irgendwann mal Sinn machen können beim programmieren abrufbar im Kopf?
Wenn ich aber erst 20 Minuten eine Rückblende in Mathezeiten machen muss und eventuell auch nochmal google bemühen muss um eine Version die 1 statt 10 Millisekunden braucht zu bauen mache ich das nur wenn ich was lernen will oder es Sinn macht.. und das ist halt nicht der Fall wenn ganz oben genannter Fall auftritt, was er in 90% aller Fälle macht.Es ist ja auch nicht meistens sowas einfaches wie oben sondern eine Kombination aus der obigen Funktion mit "jedes 100rte mal +10, wenn n durch 10 teilbar dann noch aktuelle Zeit dazurechnen uswusw" also etwas wo man länger für braucht bis man es mathematisch ausgealygorythmust und damit um einiges beschleunigt hat.
Aber eigentlich meinte ich mit mathematischen Kentnissen auch garnicht sowas(auch wenn man es nur bei 1% seiner Funktionen braucht ist es nicht unwichtig, ob man seine Funktionen jetzt immer optimieren sollte oder nur wenn es sinnvoll erscheint ist eine andere Frage die auch was mit Terminen zu tun hat) sondern vielmehr das was einem die meiste Zeit in der Schule beigebracht wurde.
Davon hab ich nämlich noch nicht mehr als den 3 Satz gebraucht.
In der Berufsschule war das schon intressanter, aber bis auf die Zahlensysteme und wie man damit rechnet sowie ein paar Kleinigkeiten hab ich da auch noch nicht viel von gebraucht...Und was ich arbeite:
Neben einem umfangreichen Borland C++ Builder Projekt das ich grad entwickel daddel ich meist auf einer 25 mhz selbstgebauten embedded Kiste via GNU Compiler rum... und die macht wirklich sehr komplizierte Berechnungen... und da merkt man im Vergleich zum PC auch wenn eine Funktion mal zu langsam ist.