2009-02-12 15 views
6

Ich bin interessant in den rohen (oder zusammengesetzten) Metriken, die verwendet werden, um herauszufinden, wie gut eine Person in einer bestimmten Sprache programmieren kann.Welche Metriken könnten verwendet werden, um das Fachwissen in einer bestimmten Programmiersprache zu bestimmen

Szenario: George kennt ein paar Programmiersprachen und möchte "foobar" lernen, aber er würde gerne wissen, wann er eine angemessene Menge an Erfahrung in "foobar" hat.

Ich bin wirklich interessant in etwas breiter als nur die LOC (Zeilen des Codes) Metrik.

Meine Hoffnung für diese Frage ist zu verstehen, wie Ingenieure die Programmiersprache Erfahrungen anderer quantifizieren und ob dies mechanisch gemessen werden kann.

Vielen Dank im Voraus!

Antwort

3

Als Antwort auf die vorherigen zwei Poster würde ich vermuten, dass ein Weg ist, um zu verstehen, wie gut eine Person in einer bestimmten Sprache programmieren kann: Sie können testen, wie gut jemand Englisch oder Mathematik kann oder Musik oder Medizin oder Fine Art, also was ist das Besondere an einer Programmiersprache?

In Antwort auf die OP, ich denke, die Tests beurteilen müssen:

  • Wie gut können Sie
  • programmieren Wie gut können Sie die Sprache Programmierung verwenden

Daher könnten die Metriken sein :

  1. Was ist die Güte der Programmierung der Person (und es gibt vario uns Dimensionen der Güte wie fehlerfrei, wartbar, schnell/günstig zu schreiben, läuft schnell, erfüllt Benutzeranforderungen, etc.)?

  2. Verwendet die Person geeignete/idiomatische Merkmale der betreffenden Programmiersprache, um eine gute Programmierung zu ermöglichen?

Es wäre schwierig, den Test ‚mechanischen‘ zu machen, aber: die meisten Prüfungen, die ich kenne durch einen menschlichen Prüfer benotet werden. Im Falle der Programmierung könnte ein Teil des Tests mechanisch bewertet werden (dh "läuft er?"), Aber ein Teil davon ("ist es verständlich und idiomatisch?") Soll anderen Menschen zugute kommen und besser beurteilt werden Programmierer.

+0

Ja, wir alle denken gerne, Programmierung ist irgendwie "speziell", nicht wir! :) Ich stimme zu, dass (1) die Programmierfähigkeit mit einem gut durchdachten Test gut gemessen werden kann, und dass (2) es wahrscheinlich keine zufriedenstellende "mechanische" Möglichkeit gibt, diese Prüfung durchzuführen. –

+0

... aber das Problem mit vielen "Testfragen", die im Netz verfügbar sind, ist, dass sie schlechte Fragen sind (z. B. "Wie tauscht man zwei Werte ohne eine temporäre aus"). Idealerweise möchten Sie offene Fragen, die von jemandem bewertet werden, dem Sie in dieser Sprache vertrauen. –

0

Ich kenne keine solche Sache. Ich glaube nicht, dass es einen Konsens gibt, wie man Erfahrung quantifizieren kann oder was "vernünftig" bedeutet. Vielleicht werde ich auch etwas lernen, aber wenn ich es tue, wird es eine große Überraschung sein.

This kann relevant sein.

2

Ich glaube nicht, dass dies "mechanisch gemessen" werden kann. Ich habe thought darüber viel aber.

1

Es ist eine eher qualitative Sache, die selten mit großer Genauigkeit gemessen wird. Es ist, als ob man fragt "Wie schlau war Einstein?". Die Zertifizierung ist ein (und ein einigermaßen gründlicher) quantitativer Indikator, aber selbst wenn viele Personalbeschaffer feststellen, dass sie "gute Programmierer" sind, werden sie kaum erreicht.

Was versuchen Sie letztlich zu erreichen? Allgemeine Programmierfähigkeit kann in manchen Situationen wichtiger sein als Sprachkenntnisse.

Wenn Sie sprachorientiert sind, können Sie eine Herausforderung wie Project Euler mit dieser Sprache annehmen, um den Fortschritt zu verfolgen.

3

Der beste Indikator für Ihr Fachwissen in einer bestimmten Sprache ist meiner Meinung nach, wie produktiv Sie darin sind.

Produktivität ist nicht nur, wie schnell Sie arbeiten können, sondern vor allem, wie wenig Bugs Sie erstellen und wie wenig Refactoring/Rework später benötigt wird.

Zum Beispiel, wenn Sie zwei Sprachen, die Sie haben ähnliche Erfahrung mit, und waren (parallel Universen), das gleiche System mit beiden zu bauen, würde ich sagen, die Sprache bauen Sie das System mit schneller und mit weniger Mängeln/Designfehler, ist die Sprache, die Sie mehr Know-how haben.

Sorry, es ist keine "harte" Metrik für Sie, es ist ein praktischer Ansatz.

+0

Ich stimme zu, dass das die * wichtigste * Maßnahme ist, aber leider ist es eine der unpraktischsten zu messen. –

+0

Es kann durch Beobachtung gemessen werden, nehme ich an. z.B. Jemand, der sich zum Beispiel für eine Position als "Experte C# -Programmierer" anmeldet, sollte in der Lage sein, mehr relaible Code schneller als die meisten anderen C# -Programmierer zu produzieren. – Ash

+0

Hier liegt ein wichtiger Unterschied zwischen Natur- und Computersprachen. Ich habe in C++ für fünf Jahre programmiert und in Python für 2-3 Monate kaum, aber ich bin mir sicher, dass ich alles andere als Treiber entwickeln kann, viel schneller in Python als in C++. So funktioniert das nicht mit Französisch oder Russisch. – mannicken

0

Ich finde, dass Testen der Fähigkeit zu debuggen ist ein genaueres Maß an Programmierkenntnissen als jeder Test auf direkte Programmierprobleme ausgerichtet, die ich angetroffen habe. Wenn die Quelle für eine angemessen große Klasse oder Funktion mit einem angegebenen (oder unausgesprochenen, in einigen Fällen) Fehlverhalten gegeben ist, kann die Testperson das Problem lokalisieren?

0

Nun, sie versuchen das in Vorstellungsgesprächen. Es gibt keine Metrik, aber Sie können die Fähigkeiten einer Person durch Fragen und Fragen beurteilen.

2

Hang auf ...

Auch die "LOC" eines Programms ist ein stark umstritten Thema! (Sprechen wir über die Ausgabe von cat * {h, c} |.???? Wc -l oder einer anderen mechnanism zum Beispiel Was Leerzeilen Kommentare sind Kommentare wichtig ist guter Code dokumentiert?)

Bis Sie erkannt haben, wie sinnlos ein LOC-Vergleich ist, haben Sie keine Hoffnung zu erkennen, wie sinnlos andere Metriken sind.

0

WTF/s * LOC, kleiner ist am besten.

0

gibt es keine; Know-how kann nur subjektiv relativ zu anderen beurteilt werden, oder auf Besonderheiten getestet (die ihr eigenes Niveau der Ungenauigkeit hat)

siehe what is the fascination with code metrics für weitere Informationen

1

Wie beherrschen sie in Debuggen komplexer Probleme in dieser Sprache sind.

Fragen Sie sie nach Projekten, an denen sie in der Vergangenheit gearbeitet haben, nach schwierigen Problemen, die sie angetroffen haben und wie sie sie gelöst haben. Bitten Sie sie über Debugging-Techniken, die sie verwendet haben - Sie werden überrascht sein, was Sie hören, und Sie könnten sogar etwas Neues lernen ;-)

Viele Orte haben eine Person oder zwei, die ein Superstar in ihrem ist Feld - die Person, zu der alle anderen gehen, wenn sie nicht herausfinden können, was mit ihrem Programm nicht stimmt. Ich vermute, das ist die Person, die Sie suchen :-)

1

Einrichtung mit einer Programmiersprache ist nicht genug.Gefordert ist Anlage mit einer Programmiersprache im Rahmen eines partiular Suite von Bibliotheken auf einer bestimmten Plattform

  • C++ auf winapi auf Windows 32bit
  • C++ auf KDE auf Linux
  • C++ auf Symbian auf ein Nokia S60 Telefon
  • C# auf MS .NET unter Windows
  • C# auf Mono auf Linux

In einem solchen Zusammenhang die Maßnahmen von c ompetenz verwenden, sind in der Zielsprache auf der Zielplattform, wie folgt:

  • Die Fähigkeit gemeinsame Muster kurz und bündig und robust auszudrücken.
  • Die Fähigkeit, allgemeine, aber subtile Fehler wie Race-Bedingungen zu debuggen.

Es wäre möglich, eine Reihe von Benchmark-Übungen für einen Programmierer zu entwickeln. Man könnte auch, sobald signifikante Proben verfügbar waren, die Glockenkurve für die Fähigkeit bestimmen. Die Vorbereitung dieser Dinge würde buchstäblich Jahre dauern und sie würden schnell veraltet sein. Dies (und die allgemeine Enge) ist der Grund, warum Organisationen sich nicht darum kümmern.

Es wäre auch notwendig, Personen in den Modi "Werkzeugmacher" und "Werkzeugbenutzer" zu benoten. Werkzeugmacher sind sehr unterschiedliche Leute mit einer viel höheren Kompetenz, aber sie sind oft ungeeignet für Affenarbeit, für die Sie wirklich einen Werkzeugbenutzer wollen.

1

John

Es gibt ein paar Möglichkeiten, um Ihre Frage zu nähern:

1) Wenn Sie Kandidaten für eine bestimmte Position interviewen eine bestimmte Sprache benötigen, dann ist die einzige Maßnahme Kandidaten zu vergleichen ist ‚, wie Lange hat diese Person in dieser Sprache geschrieben. Es ist nicht perfekt - es ist nicht einmal sehr gut - aber es ist Realität. Wenn Sie dem Kandidaten kein Problem, einen Computer und einen Compiler zum Testen vor Ort geben wollen, gibt es keine andere Maßnahme. Und dann tun die meisten Programmierer-Typen nicht gut in "jemand beobachtet dich" -Szenarien.

2) Ich interpretiere deine Frage als "Wann kann ich mich in einer Sprache als profizient bezeichnen?" Ich beziehe mich dabei auf das Niveau des Lernens einer nicht-muttersprachlichen Sprache: Auf der ersten Ebene müssen Wörter/Sätze in einem Wörterbuch (Buch) nachgeschlagen werden, um etwas zu sagen oder zu verstehen; zweite Ebene wäre, dass Sie verstehen können, die Sprache zu hören (oder Code zu lesen), mit nur gelegentlichen Nachschlagen in Ihrem vertrauten und jetzt abgenutzten Wörterbuch; auf der dritten Ebene können Sie nun mit nur gelegentlichem Nachschlagen sprechen (oder Code schreiben); vierte Ebene ist, wo du in der Sprache träumst; und auf den letzten Leveln werden die Muttersprachler dazu gebracht zu glauben, dass Sie Muttersprachler sind (bei der Programmierung würden andere Experten denken, dass Sie vielleicht geholfen haben, die Sprachsyntax zu entwickeln).

Beachten Sie, dass dies nicht hilft zu bestimmen, wie gut ein Programmierer Sie sind - genau wie Englisch zu wissen, ohne Worte im Wörterbuch nachschlagen zu müssen, zeigt nicht, "wie gut Sie beim Schreiben sind" - das ist subjektiv und hat nichts mit einer bestimmten Sprache zu tun, da Menschen, die gut programmieren können, in jeder Sprache, die man ihnen gibt, gut sind.

+0

Les, ich mag Ihre Antwort! Du hast verstanden, dass ich nach Maß für mich selbst ("George") suche. Ich denke, die Metrik, die Sie vorschlagen könnten, ist, wie oft Sie in einem Programmierhandbuch pro Programm nach etwas suchen müssen, um entweder Code zu lesen oder zu schreiben. Dies könnte im Laufe der Zeit (Programme) tendiert werden. –

+0

In diesem Kontext der natürlichen Sprache würde ich eine Ebene zwischen dem Träumen und der Verwechslung mit einem Muttersprachler setzen: 4.5: Sie mögen es nicht, andere Sprachen zu verwenden, weil die Form ihrer Konstrukte und die Art, wie Ihre Gedanken organisiert sind, nicht übereinstimmen. –

1

Der Ausdruck "eine angemessene Menge an Erfahrung" hängt von der Sprache ab, die in Betracht gezogen wird und wofür diese Sprache verwendet werden kann.

Eine Metrik ist das Ergebnis einer Messung. Stevens (siehe Wikipedia: Level of Measurement) schlug vor, dass bei Messungen vier verschiedene Skalenarten verwendet werden: nominal (Zuweisung einer Markierung), ordinal (Zuweisung einer Rangfolge), Intervall (Reihenfolge der Messungen) und Verhältnis (mit einem nicht willkürlichen Nullstartpunkt) . LOC ist eine Verhältnismessung. Obwohl alles andere als perfekt ist, denke ich, dass LOC eine relevante, objektive Zahl ist, die angibt, wie viel Erfahrung man in einer Sprache hat und die mit quantifizierbaren Werten in der Softwareindustrie verglichen werden kann. Aber das wirft die Frage auf: Woher kommen diese Industriewerte? Ich persönlich würde sagen, dass "George" wissen wird, dass er eine angemessene Menge an Erfahrung hat, wenn er ein Projekt entworfen, implementiert und getestet hat, vielleicht von seiner eigenen Wahl zu seiner persönlichen Zeit auf seinem Heimcomputer, wenn es sein muss . Zum Beispiel: Datenbank, Business-Anwendung, Webseite, GUI-Test-Tool, etc.

Von der Einstellung Manager Sichtweise, würde ich beginnen, indem Sie den Programmierer fragen, wie gut er/sie ist in der Sprache, aber das ist keine Metrik. Ich habe immer gedacht, dass der beste Weg, die Fähigkeit eines Menschen zum Schreiben von Programmen zu messen, darin besteht, dem Programmierer mehrere kleine Programmierprobleme zu geben, die im Voraus durchdacht und in einer bestimmten Zeit, z. B. 5 Minuten, gelöst werden. Ich habe nie Einwände dagegen erhoben, dass mir das in Vorstellungsgesprächen gemacht wurde. Mehrere Metriken sind verfügbar: Konnte der Programmierer das Problem lösen (ja oder nein - nominal)? Wie viel Zeit hat es gebraucht (Anzahl der Minuten - Verhältnis)? Wie effektiv war ihr Ansatz zur Lösung des Problems (gut, fair, ordinär)? Sie lernen nicht nur die Fähigkeit der Person, Code zu schreiben, sondern können auch verschiedene subjektive Dinge beobachten, wie ihr Verhalten bei der Lösung des Problems, die Fragen, die sie beim Lösen des Problems stellen, die Fähigkeit, unter Druck zu arbeiten, usw., aus einer "Qualität" Perspektive jedoch, denken Sie daran, dass Menschen nicht gerne gemessen werden.

1

Dennoch glaube ich, gibt es einige gute Metriken wie die McCabe Cyclomatic Metric für zyklomatische Komplexität oder die Menge an nützlichen Kommentaren pro Block von Code oder sogar die durchschnittliche Menge an Code zwischen zwei aufeinanderfolgenden Tests geschrieben.