Was berechnet dieser Code? Wie geht es besser?
Bewerben Sie sich mit der richtigen Lösung
Praktika, Werkstudenten, Abschlussarbeiten, Festanstellung
[Website zensiert]"
So, nun zeigt mal was ihr könnt!
http://mobile.itestra.de/
Habe ich erst vor 2 Tagen dort gelesen und von nem Informatiker kann man
erwarten, dass er Mergesort erkennt ohne herausragend zu sein ;)
Habe schon überlegt ob ich zum Spaß auf die Anzeige antworte da man ja
vielschichtig schreiben kann was man besser machen könnte, habs dann
aber gelassen.
Andi $nachname schrieb:> [Website zensiert]">> So, nun zeigt mal was ihr könnt!
Klar, ich löse die Aufgabe für dich damit du das auf der Website abgeben
kannst und DU dann die außergewöhnliche Karriere machen kannst?!
Hoffentlich haben die noch einen Vor-Ort-Einstellungstest.
PS: Nach kurzem draufgucken hab ich ne Idee, aber wär ja bescheuert sie
hier hinzuschreiben...
2. Semester, Algorithmen und Datenstrukturen. Standardstoff.
finde das trotzdem nicht schlecht sowas rein zu schreiben, einfach als
Aufhänger für eine Bewerbung. Es ist ja eine offene Aufgabe, wo man
einfach mal Ideen benennen soll. Wer einfach nur irgendwo abschreibt,
fliegt sicher im VG auf die Nase. Ich denke als Punkt im Gespräch um den
Kandidaten etwas zu testen, ist das sicher nicht schlecht, besser als
teilweise irgendwelche Brainteaser wo gefragt wird, wie viele Smarties
passen in einen Smart usw.
oder die üblichen Personaler Fragen von wegen "wo sehen Sie ihre Stärken
und Schwächen und wo sehen Sie sich in fünf Jahren"
Hans-Peter schrieb:> Andi $nachname schrieb:>> [Website zensiert]">>>> So, nun zeigt mal was ihr könnt!> Klar, ich löse die Aufgabe für dich damit du das auf der Website abgeben> kannst und DU dann die außergewöhnliche Karriere machen kannst?!
ICH soll als Programmierer arbeiten? Das wäre so, als wenn man einen
Feldhasen mit der Reparatur einer Quartzuhr beauftragen würde!
> PS: Nach kurzem draufgucken hab ich ne Idee, aber wär ja bescheuert sie> hier hinzuschreiben...
Das behaupten alle die es nicht wissen!
Markus M. schrieb:> Ich würde es erst mal alles in eine Zeile schreiben und die
genau ! ein richtiger Nerd löst sowas in der Tat in ein - oder zwei
Zeilen PROLOG Code rekursiv ( ist möglich )
egal, man sieht die Aufgabe bietet interessanten Gesprächstoff wo man
erkennt ob jemand was drauf hat oder nicht.
Andi $nachname schrieb:> ICH soll als Programmierer arbeiten? Das wäre so, als wenn man einen> Feldhasen mit der Reparatur einer Quartzuhr beauftragen würde!
Dann hättest du die Website ja nicht zensieren brauchen.
Andi $nachname schrieb:> Das behaupten alle die es nicht wissen!
Stimmt, aber da waren andre ja eh schneller.
Die Firma sucht bestimmt jemanden, der aus diesem schlecht pflegbaren
Code gut pflegbaren Code generieren kann. Mit solchen Leuten würde ich
gerne zusammenarbeiten.
Grüsse
Ja in der Tat gibts interessante Diskussionsaspekte die man anbringen
kann:
- wie ist es zu so einem code gekommen? keine code reviews gemacht?
- CleanCode ein Begriff?
- Funktioniert der Code aktuell? Warum muss der jetzt refaktorisiert
werden?
- Ist der Code zu langsam? Brauche ich einen besseren Ansatz O(n)
Sortierung statt O(nlogn)?
- Warum wurde überhaupt Sortiercode geschrieben und keine fertige
Standardbibliotheksroutine verwendet?
Solche Fragen finde ich 1000mal interessanter als das Personalergedöhns,
aber gibt ja durchaus einige Firmen die herausragende Informatiker
anderweitig testen ;)
Und was tut der Code jetzt? Ich erkenne mit meinen rudimentäremn
Java-Kenntnissen noch, dass ich drei Arrays und zwei Integer-Werte
übergebe und dass sich das Ding wohl rekursiv aufruft. Nur was macht es?
Andi $nachname schrieb:> Und was tut der Code jetzt? Ich erkenne mit meinen rudimentäremn> Java-Kenntnissen noch, dass ich drei Arrays und zwei Integer-Werte> übergebe und dass sich das Ding wohl rekursiv aufruft. Nur was macht es?
Schau in meinen ersten Beitrag.
D. I. schrieb:> Ja in der Tat gibts interessante Diskussionsaspekte die man anbringen> kann:
Du betrachtest das ganze viel zu praxisnah/sinnvoll. Es geht einfach nur
darum Leute zu finden, die "schwierige" Probleme lösen können, die aus
wenigen/kryptischen Informationen etwas herauslesen können. Es wird
dabei praktisch vermutlich weniger um das Dechiffrieren von
Standardalgorithmen wie diesen gehen, sondern eher vielleicht Debuggen
von fiesen Programmen die "undurchsichtige" Datenmengen verarbeiten,
Verstehen/Optimieren von generiertem ASM-Code o.ä. ... Eben nicht der
typische Java-Programmierer der schon verzweifelt wenn er nur eine .java
Datei bekommt und nicht weiß wie er sie ohne den grünen Knopf in Eclipse
kompilieren soll, da er an seiner Hochschule nichts anderes beigebracht
bekommen hat :-)
Im Beispiel wurde eben einfacher C-Code und ein Standardalgorithmus
verwendet, damit die Aufgabe überhaupt lösbar wird ohne Einarbeitung in
die Firmeninterna.
D. I. schrieb:> aber gibt ja durchaus einige Firmen die herausragende Informatiker> anderweitig testen ;)
An der Stelle kann ich euch empfehlen, dass ihr euch mal bei Google
bewerbt. Meine Kollegen, die das mitgemacht haben, schwärmen von dem
Bewerbungsverfahren! Das ist genau für solche Profiinformatiker gemacht.
Kein Gelaber mit einem Personaler über "unser tollstes" Unternehmen, von
Umsätzen, Mitarbeiteranzahl, was man in 5 Jahren sein will, sondern mit
anderen Fachprofis nur über Algorithmen und Programmschnipsel.
D. I. schrieb:> Andi $nachname schrieb:>> Und was tut der Code jetzt? Ich erkenne mit meinen rudimentäremn>> Java-Kenntnissen noch, dass ich drei Arrays und zwei Integer-Werte>> übergebe und dass sich das Ding wohl rekursiv aufruft. Nur was macht es?>> Schau in meinen ersten Beitrag.
Ein Mergesort? Mehr ist das nicht?
Andi $nachname schrieb:> D. I. schrieb:>> Andi $nachname schrieb:>>> Und was tut der Code jetzt? Ich erkenne mit meinen rudimentäremn>>> Java-Kenntnissen noch, dass ich drei Arrays und zwei Integer-Werte>>> übergebe und dass sich das Ding wohl rekursiv aufruft. Nur was macht es?>>>> Schau in meinen ersten Beitrag.>> Ein Mergesort? Mehr ist das nicht?
Nein mehr ist das nicht.
Andi $nachname schrieb:> An der Stelle kann ich euch empfehlen, dass ihr euch mal bei Google> bewerbt. Meine Kollegen, die das mitgemacht haben, schwärmen von dem> Bewerbungsverfahren!
Meine Rede, dabei ists egal welchen US-Topplayer man nimmt, FB, Amazon,
MS, Google, und andere große US Techfirmen setzen auf ähnliche
Verfahren. Für FB habe ich das ja im Forum schonmal lang und breit als
Selbstexperiment dokumentiert. Die größte Hürde dabei ist, dass die
Bewerbung wahrgenommen wird, entweder man hat Reputation oder Vitamin B,
so dass man überhaupt beachtet wird, wenn das geschafft ist liegts aber
an einem selbst und etwas Dusel bei der Aufgabenauswahl. Dafür kann man
bei einem Fehlschlag wenn man nicht total versagt hat nach nem halben
Jahr wieder anklopfen.
Hans-Peter schrieb:> Du betrachtest das ganze viel zu praxisnah/sinnvoll. Es geht einfach nur> darum Leute zu finden, die "schwierige" Probleme lösen können, die aus> wenigen/kryptischen Informationen etwas herauslesen können.
Woher weißt du was der Fragesteller für Intentionen hatte?
> sondern mit anderen Fachprofis nur über Algorithmen und Programmschnipsel.
In vielen Firmen ist dieses noch nicht mal möglich wenn man jahrelang
dort angestellt ist. Als Informatiker sollte man eigentlich einen
natürliche Neugierde für Algorithmen und Programmschnipsel mitbringen.
Grüsse
D. I. schrieb:> Meine Rede, dabei ists egal welchen US-Topplayer man nimmt, FB, Amazon,> MS, Google, und andere große US Techfirmen setzen auf ähnliche> Verfahren.
bei deutschen Konzern habe ich da bisher andere Erfahrungen gemacht. Da
regieren wohl eher die Personalbürokraten mit ihren ACs und
Personalerfragen. Ich wurde von Konzern häufig eher nur oberflächlich zu
fachlichen Themen befragt. Im Mittelstand hatte ich meist sehr fachliche
Gespräche oft auch mit konkreten Aufgaben die zu lösen waren.
D. I. schrieb:> Woher weißt du was der Fragesteller für Intentionen hatte?
Ganz einfach, ich bin ein herausragender Informatiker der aus den
gegebenen Informationen rückwärts den Ausgangspunkt erkennen kann.
Im Ernst, theoretisch könnte der Fragesteller die Intention haben
jemanden gratis für sich das Problem lösen zu lassen, aber meine
Einschätzung erscheint mir doch am realistischsten. Ein bisschen
Erfahrung mit Prüfungssituationen und gesunder Menschenverstand...
Hans-Peter schrieb:> aber meine> Einschätzung erscheint mir doch am realistischsten. Ein bisschen> Erfahrung mit Prüfungssituationen und gesunder Menschenverstand...
selbstverständlich ist das so. Es geht um zu testen was jemand bezüglich
C und Algorithmen so drauf hat. Wenn man obiges Problem optimieren
wollte, würde man entweder eine Standardfunktion aus einer ohnehin schon
optimierten Library nehmen oder man würde in Standardwerken zum Thema
nachschlagen.
wie schon jemand sagt, es ist ein Problem was ein guter Informatiker
ohne Einarbeitungszeit lösen kann, ohne dass man Firmeninterna
veröffentlichen muß.
Hans-Peter schrieb:> Ganz einfach, ich bin ein herausragender Informatiker
Achso na dann, ...
Hans-Peter schrieb:> Im Ernst, theoretisch könnte der Fragesteller die Intention haben> jemanden gratis für sich das Problem lösen zu lassen, aber meine> Einschätzung erscheint mir doch am realistischsten. Ein bisschen> Erfahrung mit Prüfungssituationen und gesunder Menschenverstand...
Er könnte auch einfach nur prüfen wollen wie sehr du über den Tellerrand
des eigentlichen Problems hinausschauen kannst und davon ausgehen, dass
man das als Mergesort erkennt.
laurel schrieb:> bei deutschen Konzern habe ich da bisher andere Erfahrungen gemacht. Da> regieren wohl eher die Personalbürokraten mit ihren ACs und> Personalerfragen. Ich wurde von Konzern häufig eher nur oberflächlich zu> fachlichen Themen befragt.
D != US
D. I. schrieb:> Er könnte auch einfach nur prüfen wollen wie sehr du über den Tellerrand> des eigentlichen Problems hinausschauen kannst und davon ausgehen, dass> man das als Mergesort erkennt.
Ja das meine ich doch, eben das was man nicht im 2. Semester lernt (wo
man sonst nur die "einfache Richtung" Mergesort->Code beigebracht
bekommt).
D. I. schrieb:> Achso na dann, ...
Höhö, Reverse-Engineeren ist eben nicht auf Code entschlüsseln
beschränkt...
Hans-Peter schrieb:> Höhö, Reverse-Engineeren ist eben nicht auf Code entschlüsseln> beschränkt...
Ich meinte eigentlich eher das mit "herausragenden Informatiker" ;) Wo
kann ich deine herausragende Arbeit bestaunen? :)
D. I. schrieb:> Ich meinte eigentlich eher das mit "herausragenden Informatiker" ;) Wo> kann ich deine herausragende Arbeit bestaunen? :)
Na indem du mich einstellst :-P ... Ne momentan gibts online noch nichts
zu bestaunen...
Andi $nachname schrieb:> D. I. schrieb:>> D != US>> Ja, heute. Aber für t -> oo konvergiert die Folge (D)_k gegen (US)_k.
Âber nur was die schlechten Sachen betrifft. Wenn das Gehalt mit
konvergieren würde hätte ich nichts dagegen.
Wie ich schonmal ausführte (weiß nicht ob du zur Zeit des FB-Threads von
mir schon Teilnehmer warst, die übrigen Foristen mögen mir meine
ferkesartige Wiederholung verzeihen).
Einstiegsgehalt FB Softwareentwickler: 120.000$ / anno + 30k$ Sign-on
bonus + 5k$ Relocation expenses, 20 Tage Urlaub.
Roundabout macht das für nen Single in CA, 6k$ netto bei ca. 3k$
Lebenshaltung (2k$ Miete + Versicherung, Auto, etc, ...)
Wobei ich vor über 20 Jahren das letzte mal Sortieralgorithmen selbst
programmiert habe.
Wo bitte macht das heute noch Sinn? Ist genauso exotisch wie Assembler
auf einem PC zu programmieren.
Also kriegen die nur die Jungen unerfahrenen (die ja sowieso so viel
besser sind ;-)) weil die den Merge Sort vom Studium noch präsent haben.
D. I. schrieb:> CleanCode ein Begriff?
Genau daran habe ich auch gedacht als ich den Code gesehen habe :-))
Ach ja die Angaben sind für nen Single. Sobald man Kinder hat wirds da
drüben teuer. Wenn du deine Kinder nich an ne öffentliche Schule geben
willst (und das willst du nicht), bist du mit mind. 1,5k$ im Monat
Schulgebühr dabei, das ist dann uncool.
Aber in den ersten Berufsjahren würde ich sagen ist das mit das Beste
was man haben kann.
Udo Schmitt schrieb:> Wobei ich vor über 20 Jahren das letzte mal Sortieralgorithmen selbst> programmiert habe.
Richtig: Im Berufsleben macht das niemand.
Mark Brandis schrieb:> Udo Schmitt schrieb:>> Wobei ich vor über 20 Jahren das letzte mal Sortieralgorithmen selbst>> programmiert habe.>> Richtig: Im Berufsleben macht das niemand.
Richtiger: Im Berufsleben macht das niemand, wenn es nicht einen
zwingenden Grund gibt :)
D. I. schrieb:> Richtiger: Im Berufsleben macht das niemand, wenn es nicht einen> zwingenden Grund gibt :)
Und den gibt es in 99.9% aller Fälle nicht ;)
Mark Brandis schrieb:> D. I. schrieb:>> Richtiger: Im Berufsleben macht das niemand, wenn es nicht einen>> zwingenden Grund gibt :)>> Und den gibt es in 99.9% aller Fälle nicht ;)
Das bestreite ich auch nicht ;)
Udo Schmitt schrieb:> Wobei ich vor über 20 Jahren das letzte mal Sortieralgorithmen selbst> programmiert habe.> Wo bitte macht das heute noch Sinn? Ist genauso exotisch wie Assembler> auf einem PC zu programmieren.
Weil bspw. die Bibliotheken/Frameworks nur einen Algorithmus
implementiert haben, dessen Laufzeit bei bestimmten Eingabedaten O(n^2)
ist, weil man hin und wieder O(n) braucht, weil hin und wieder In-Place
sortiert werden muss, weil hin und wieder nur ein kleiner Teil der zu
sortierenden Daten in den Hauptspeicher passt (bei großen Datenmengen
hat der Beispielcode einen weit verbreiteten Fehler eingebaut...)
Arc Net schrieb:> weil man hin und wieder O(n) braucht,
Weil man mathematisch beweisen kann, dass man zum sortieren mindestens
O(n*ln(n)) braucht (wenn man nur vergleichen kann, nur bei diskreten
Werten wie Integern geht weniger)
Arc Net schrieb:> Weil bspw. die Bibliotheken/Frameworks nur einen Algorithmus> implementiert haben, dessen Laufzeit bei bestimmten Eingabedaten O(n^2)> ist, weil man hin und wieder O(n) braucht, weil hin und wieder In-Place> sortiert werden muss, weil hin und wieder nur ein kleiner Teil der zu> sortierenden Daten in den Hauptspeicher passt (bei großen Datenmengen> hat der Beispielcode einen weit verbreiteten Fehler eingebaut...)
Weil sich Datenbank- und Betriebssystemhersteller schon seit über 30
Jahren Gedanken über Sortieralgorithmen und deren effiziente
Implementierungen machen, auch bei Problemen, die nicht mehr in den
Hauptspeicher passen.
Ich habe NICHT geschrieben "man muss das niemals tun", ich habe
geschrieben, daß ich mich nicht mehr damit beschäftigen musste, was
übrigens nicht ganz stimmt, vor etwa 12 Jahren haben wir ein
Sort-Toolkit in unsere Software für Windows und OS/2 implementiert, das
mit Datenmengen bis in den GByte Bereich ordentlich funktionierte, für
die Unix Versionen (Sun, AIX, ...) und die Hostbetriebssysteme reichten
die Betriebssystem sorts.
Und du meinst, daß du in ein paar Tagen ein Sort schreibst, das besser
ist als die so verfügbaren?
Gruß
Hans-Peter schrieb:> Arc Net schrieb:>> weil man hin und wieder O(n) braucht,> Weil man mathematisch beweisen kann, dass man zum sortieren mindestens> O(n*ln(n)) braucht (wenn man nur vergleichen kann, nur bei diskreten> Werten wie Integern geht weniger)
Wenn es, wie in einigen Libs/Frameworks, nur möglich ist mit Hilfe eines
Vergleichsoperators zu sortieren, dann ja. Ansonsten ist Sortieren
problemlos in O(n) möglich, bspw. Radix Sort, Count Sort und ähnliches.
Udo Schmitt schrieb:> Und du meinst, daß du in ein paar Tagen ein Sort schreibst, das besser> ist als die so verfügbaren?
Besser als die generischen Implementationen...
Arc Net schrieb:> Besser als die generischen Implementationen...
Wenn man überhaupt einen eigene sort schreiben muss dann behandelt der
Spezialfälle aus der Praxis besser als allgemeine Lösungen. Z.B.
sortiert man für "kleine" n "in place" weil Speicher heute nix mehr
kostet, oder man behandelt unsortierte Daten die aber doch einem immer
gleichen Schema folgen auf diesen Spezialfall angepasst wo die
Standardlösung schlechter abschneidet, ...
Man kann an die Praxis angepasste sorts immer besser machen als wenn man
mit den Standardlösungen drauflosschiesst. Ist halt immer die Frage
lohnt sich der Aufwand oder reicht die 0815-Lösung.
Robert L. schrieb:>> Wie geht es besser?>> eine Programmiersprache verwenden, die Range-Checks macht...
Was hat ein Range-Check, der ja wohl ganz offensichtlich nur zur
Laufzeit geprüft werden kann, mit der Programmiersprache zu tun? (nein,
ich habe keine Ahnung, aber das klingt nicht konsistent)
Andi $nachname schrieb:> Was hat ein Range-Check, der ja wohl ganz offensichtlich nur zur> Laufzeit geprüft werden kann, mit der Programmiersprache zu tun?
Range-Checks sind in C nicht durchgängig möglich, weil allzu oft von
Arrays nur noch Pointer ohne sicher bekannte Schranken übrig bleiben,
beispielsweise bei Parameterübergabe.
Ebenso fehlen Datentypen mit definierten Schranken, also beispielsweise
sowas wie (frei erfunden):
declare Monat as integer range 1..12;
Eine generischere Variante sind Contracts: http://dlang.org/dbc.html
A. K. schrieb:> Andi $nachname schrieb:>> Was hat ein Range-Check, der ja wohl ganz offensichtlich nur zur>> Laufzeit geprüft werden kann, mit der Programmiersprache zu tun?>> Range-Checks sind in C nicht durchgängig möglich, weil allzu oft von> Arrays nur noch Pointer ohne sicher bekannte Schranken übrig bleiben,> beispielsweise bei Parameterübergabe.
Das ist aber doch kein Problem der Programmiersprache, sondern des
Compilers. Oder? Meinem Turbopascalcompiler kann ich doch auch sagen, ob
er Rangecheck machen soll oder nicht, dann wird der Programmcode größer
und langsamer, weil er zur Laufzeit prüft, ob der Range passt. Aber das
hat doch rein GAR NICHTS mit Pascal zu tun!
Andi $nachname schrieb:> Das ist aber doch kein Problem der Programmiersprache, sondern des> Compilers.
Es gibt in C keine Möglichkeit, Arrays als Parameter zu übergeben. Sie
werden implizit als Pointer übergeben, auch wenn man syntaktischen
Zucker drüber streuen darf indem man "int p[]" statt "int *p" schreibt.
Innerhalb der Funktion ist rein aus der Parameterübergabe per
Sprachdefinition keine Information über die Grösse des Arrays vorhanden.
Nur wenn es der Programmierer als separaten Parameter übergibt - aber
davon weiss der Compiler dann nichts.
Das Problem mit Range-Checks in C ist also, dass die paar Stellen, wo
man das real tun kann, die Mühe nicht Wert sind. Es würde zudem eine
Sicherheit vortäuschen, die schlicht nicht vorhanden ist.