Was soll ich als Programmierer wie meine Westentasche wissen? [geschlossen]

8

Ich spreche von Dingen, die nur mit Programmierung zu tun haben und nicht mit System- oder Netzwerkadministration.

Ich bin kurz davor, das College zu beenden und einen Programmierjob zu bekommen, also bin ich daran interessiert, darüber Bescheid zu wissen. Obwohl dies eine subjektive Frage zu sein scheint, denke ich, dass dies nicht ganz der Fall ist und in die Kategorie der Best Practices fällt.

Ich glaube nicht, dass ein Programmierer alles über das Betriebssystem wissen kann, an dem er arbeitet, alle APIs des Frameworks, an dem er arbeitet, alle Funktionen und Macken der Sprachen, mit denen er arbeitet, alle Datenstrukturen und Algorithmen, alle Einstellungen für sein Compiler, Linker, IDE usw. Ich denke auch nicht, dass es praktisch ist. Oder kann er?

Die übliche Antwort lautet "am meisten". Was ist das am meisten? Wenn Sie einen Programmierer mit ungefähr 5 Jahren Erfahrung interviewen würden, was würden Sie von ihm erwarten? Oder sagen wir, wenn Sie an einem Interview teilnehmen würden und ungefähr 10 Jahre Erfahrung hinter sich haben, was würden Sie auffrischen?

Michael
quelle
2
Es hängt ganz von der Art der Arbeit ab. Was Sie für das Front-End-Web wissen müssen, unterscheidet sich vom Back-End-Web. Was sich von Embedded unterscheidet, was sich von OS-Arbeit unterscheidet ...
Oded
1
Hallo Michael, willkommen bei den Programmierern! Dies ist zwar ein großartiges Diskussionsthema, aber für den Stack Exchange-Stil von Fragen und Antworten ein viel zu weit gefasstes Thema . Wenn Sie etwas Spezielles an der Softwareentwicklung möchten, das Ihnen jemand erklären soll, können Sie stattdessen danach fragen.
2
Sie sollten Ihre Tastatur wie Ihren Handrücken kennen.
2
Ich verstehe nicht, warum solche Fragen immer wieder geschlossen werden. WTF. Der Typ ist frisch vom College. Er ist ein Jr. Deshalb werden seine Fragen offen und unspezifisch sein. Er weiß wahrscheinlich nicht einmal, was er fragen soll, weshalb die Antworten, die er wahrscheinlich will, alles sind, was ihm helfen kann. Er will allgemeine Einsicht. Sie benötigen keinen bestimmten Bereich, um seine Frage zu beantworten. Die Antworten in diesem Thread sind ausgezeichnet. Selbst wenn dies 100 Mal gefragt wurde, wen interessiert das, werden Sie neue und andere und völlig neue Antworten erhalten, die sogar anders sind als in anderen Threads.
WeDoTDD.com
1
Dies ist ein Problem mit dem Stapel. Der springende Punkt des Programmiererforums ist, dass Sie sowohl spezifische als auch subjektive Fragen stellen können, die abfragen, Meinungen, Argumente usw. abgeben. Meinung ist das, was gute Antworten auf eine Frage wie seine antreibt. Jeder hat seine eigenen Erfahrungen in der Softwareindustrie gemacht, daher ist die Meinung genau das, was dieser Typ braucht. Er braucht hier eine Vielzahl von Ideen, Erfahrungen und Einsichten. Was ist, wenn sie nicht spezifisch sind
? Hier

Antworten:

14

Du musst wissen:

  1. Wie man denkt. Wenn Sie nicht denken können, arbeiten Sie in einem anderen Beruf.
  2. Wissen, wo Sie suchen müssen. Sie müssen nicht alles über etwas wissen, Sie müssen genug wissen, um nützlich zu sein, und genug, um zu denken, "hey, es muss einen Weg geben, X zu machen" und dann nachzuschlagen.
  3. Kennen Sie Ihre Grenzen. Dies bedeutet Ihre Fähigkeiten, Ihren Mangel an Wissen, die Tatsache, dass Sie nicht alles wissen (und es niemals tun werden). Ein bisschen Demut reicht weit.
schnell_now
quelle
7
Demut ist in unserem Beruf selten, da stimme ich zu. Wir brauchen bescheidenere Entwickler, die hin und wieder sagen können, hey, ich weiß nicht, wie man x, y oder z macht und habe keine Angst, ihre Wachsamkeit zu verlieren und Fragen zu stellen ... sogar Architektenlecks ... Wir brauchen Entwickler, denen es wirklich wichtig ist, zusammenzuarbeiten, keine egoistischen Entwickler, die sich für Götter halten und sich in ihrer eigenen gottähnlichen Welt bei der Arbeit isolieren.
WeDoTDD.com
@CoffeeAddicat: +1. Und ich würde dir mehr geben, wenn ich könnte.
schnell_now
1
@CoffeeAddict: Demütig zu sein ist meiner bescheidenen Meinung nach überbewertet. Kaffee dagegen ist nicht ... :-)
Fehler
3
@Coffee - Es gibt einen völligen Mangel an Demut in unserem Beruf von dem, was ich gesehen habe. Wenn ich in einer Investmentbank arbeitete, ging ich zu meinem Chef und stellte Fragen zu Dingen, die ich nicht verstand, und sie hob ihre Stimme so laut, dass jeder sie hörte. Das war offensichtlich ein erbärmlicher Versuch, mich beim Stellen von Fragen mies zu machen.
Desolate Planet
1
@Desolate yep, ich höre deinen Schmerz. Wir sollten uns solche Leute in einem Ingenieurberuf nicht gefallen lassen müssen. Es ist ein Einstellungsproblem der Mehrheit der Entwickler da draußen (ich sage nicht alles). Ich verstehe nicht, warum es einen Krieg von "Ich bin schlauer als du" und einen großen Mangel an Respekt für Ihre Kollegen geben muss ... dafür. Wir sollten alle zusammenarbeiten ... lernen und weitermachen.
WeDoTDD.com
8

Die Programmiererkompetenzmatrix ist eine ausreichend gute Checkliste und eine einfache, informative Lektüre aus einer Hand.

Norvigs klassischer Blog über " Lernen, in 21 Tagen zu programmieren " ist ebenfalls eine gute Lektüre.

Fehler
quelle
@Expressions: Ja, kein Problem - zuerst war die Frage zwar so, als würde man ein wenig zu Ende raten, aber ich habe darüber nachgedacht und diese Checkliste ausgegraben, die ich vor ein paar Jahren gefunden hatte.
Fehler
Ja, ich mag dieses auch ... gut.
WeDoTDD.com
3

Ich möchte dies kommentieren, da ich denke, dass diese Frage in diesen Foren wahrscheinlich häufig gestellt wurde, es aber keine Rolle spielt, dass Sie jedes Mal, wenn sie gestellt wird, unterschiedliche Perspektiven erhalten.

Hier ist meine Erfahrung und ich denke, "Weisheit oder Einsicht" in unseren Beruf. Einige davon überschneiden sich mit den Aussagen anderer, aber ich liste meine Erfahrungen und dann meine Philosophie / Meinung / Vorschläge für jeden auf

1) Ja, wie andere bereits gesagt haben, müssen Sie über eine bestimmte Ebene verfügen, auf der Sie komplexe Ideen verarbeiten, verarbeiten und in der Lage sind, Ihre eigenen Lösungen für Probleme zu finden. Auf der anderen Seite: Sie können lernen, im Laufe der Zeit ein besserer Problemlöser zu werden, wenn Sie viel positive Motivation haben, weiter daran festzuhalten, hart zu arbeiten und viele Fragen zu stellen. Die meisten Entwickler, die sagen, dass sie alles wissen oder versuchen, so auszusehen, als ob sie es tun, verbergen einfach die Tatsache, dass sie viele Fragen gestellt, sich im Code den Arsch abgezogen haben usw., um dorthin zu gelangen, wo sie sich gerade befinden, und um so gut wie möglich zu werden sie scheinen zu sein

2) In unserer Branche gibt es meiner Meinung nach wieder viele Egos, mit denen Sie sich leider auseinandersetzen müssen. Ich sehe das nicht als eine gute Sache an und es ist besonders eine Eigenschaft für viele Entwickler da draußen.

Was Sie meiner Erfahrung nach finden werden, ist eine der folgenden Arten von Teams:

  • "Code & Run" -Teams. Dies bedeutet, dass sie sich nur darum kümmern, schnell Mist aus der Tür zu bekommen. Sie könnten sich weniger um die Codequalität (sauberen Code) oder den Code kümmern, der später gewartet werden kann. Halten Sie sich von diesen Geschäften fern, wenn Sie können. Es ist schwierig, denn selbst wenn Sie ein Unternehmen in einem Interview vertiefen, werden Sie erst dann wirklich wissen, wie das Team arbeitet, wenn Sie den Job bekommen und ungefähr 4 bis 6 Monate Zeit haben, um wirklich zu sehen, wie es codiert oder ob es wirklich die Teamarbeit fördert und Förderung der Zusammenarbeit (Ideen usw.)

  • Durchschnittlicher Entwickler-Shop, der "ok" ist. Dies bedeutet, dass ihnen die Codequalität ein wenig am Herzen liegt. Sie haben vielleicht ein paar gute Entwickler im Team, die gut in einem Team arbeiten und eine positive Einstellung haben, und dann eine Mischung aus einigen Entwicklern, die andere Eigenschaften wie egoistisch, faul usw. haben könnten. Ich meine, es ist eine Art Hogposh-Laden aber wo der Code nicht der größte ist, aber erträglich

  • Toller Laden. Dieser Shop versucht sein Bestes, um wirklich guten Designmustern zu folgen. Sie sind vielleicht keine Experten für Entwurfsmuster, aber sie kennen bewährte Verfahren wie DRY, SOLID oder was auch immer. Sie erwarten nicht unbedingt, dass Superstars ihrem Team beitreten, aber sie suchen Entwickler, die zumindest etwas sauberen Code codieren und zuerst über eine gute Erfahrung verfügen. Dies sind die Teams, für die Sie sich einsetzen möchten ... aber Sie müssen möglicherweise ein paar Geschäfte durchgehen, um gute Teams zu finden

  • Superstar Shop. Dies ist ein Shop, der nur die absolut besten Programmierer sucht, aber auch die besten Programmierer, die alles haben. Sie kommunizieren gut und arbeiten gut als Team (positiv mit anderen zum Wohle des Tema). Denken Sie daran, jeder Laden wird Ihnen sagen, ja, wir suchen nur das Beste. Das meiste davon ist Unsinn ... sie haben gute Absichten, aber oft ist es nur Marketinggespräch. Aber es gibt einen Prozentsatz der Geschäfte, die wirklich nach Top-Talenten suchen. Und Sie werden wissen, dass, wenn Sie in das Interview einsteigen und sie Fragen zu Threading, erweiterten Designmustern usw. stellen. Also ... um auf dieses Niveau zu gelangen und wenn Sie in einem Team arbeiten möchten, das diese Art von Erwartung hat Es kann einige Jahre dauern, bis Sie dort ankommen

  • Superstar Shop mit negativen Vibes / Egos. Es gibt Läden da draußen, die Top-Entwickler einstellen, aber in denen der Großteil dieses Ladens eine Menge Stiche haben kann, die Superstars sind. Es gibt also Teams, die keinen schlechten Code tolerieren, aber sie sind echte Schwachköpfe. Es ist keine Teamumgebung und du willst dich von diesem Mist fernhalten. Unsere Branche braucht es nicht und Sie auch nicht

und eine der folgenden Arten von Entwicklern:

a) Riesiges Ego, weiß alles, will immer Abstand zu allem halten, offenbart wenig, hat eine Einstellung ... im Grunde kein Teamplayer und nicht jemand, mit dem man arbeiten oder in seinem Team haben möchte

b) Entwickler, die nur da sind, um einen mittelmäßigen Job zu machen und den Job zu erledigen und nach Hause zu gehen. Persönlich denke ich, dass es von Anfang an nichts Falsches gibt, aber gleichzeitig denke ich, dass unser Beruf Entwickler braucht, die leidenschaftlich sind und bereit sind, ihr Handwerk zu opfern und zu genießen, um letztendlich Wert zu schaffen, aber sich auch als Entwickler langfristig zu verbessern schleppen, weil es ihnen wichtig ist, besser zu werden

c) Entwickler, die es wahrscheinlich schaffen könnten, aber zu faul, negativ oder was auch immer andere Eigenschaften sind, die nur die Hölle für alle verursachen, aber hauptsächlich wegen des Faulheitsfaktors. Ich möchte keine faulen Leute in meinem Team haben ... faule Ingenieure sind nicht das, was wir in unserem Beruf brauchen

d) Entwickler, die gut zu großartigen Entwicklern sind, die sich für Teamarbeit interessieren, die bereit sind, sich selbst zu demütigen, andere zu unterrichten, zu kommunizieren und offen für konstruktive Kritik an Prozessen oder Code (Codeüberprüfungen usw.) zu sein, und das einfach Achten Sie darauf, bei der Arbeit positiv zu sein, während Sie als Entwickler mit allen Kollegen zusammenarbeiten. Sie möchten mit solchen Menschen arbeiten, einer positiven unterstützenden Entwicklungsumgebung. Jetzt sage ich nicht, dass ein Team nach Auslaugern suchen sollte ... Sie müssen in der Lage sein, Ihr eigenes Gewicht zu halten, aber Sie möchten nicht in Teams landen, in denen sie erwarten, dass Sie ein "Star" -Entwickler sind und niemals Fragen stellen ... das ist eine schlechte Umgebung. Halten Sie sich davon fern ... es ist meiner Meinung nach schwierig, dieses Umfeld in unserem Beruf insgesamt in der Erfahrung meiner und anderer Freunde während unserer gesamten Karriere zu finden. Sie können gute Teams finden, aber sie sind schwerer zu finden als in chaotischen Läden mit schlechten Einstellungen zu landen. Wissen Sie also, worauf Sie sich einlassen, das Gras ist nicht immer grüner, nur weil Entwickler sogenannte "Profis" sind. Ich bin mir sicher, dass dies mit jedem Job zu tun haben kann, aber ich denke mehr an unseren Beruf als an die meisten anderen da draußen.

3) Eine Sache, die ich auf die harte Tour gelernt habe, ist, dass wenn Sie ein Perfektionist sind und sich zu sehr für einen guten Prozess und perfekten Code interessieren, Sie eines Tages in Schwierigkeiten geraten werden. Finde das Gleichgewicht. Sie möchten keinen reinen, schlampigen Code und möchten nicht zu viel Zeit damit verschwenden, dass Ihr Arbeitgeber sauer wird, weil Sie 2 Wochen gebraucht haben, um eine relativ mittelgroße Aufgabe zu erledigen, die normalerweise beispielsweise ausgeführt werden sollte 3-4 Tage, weil Sie wollten, dass es zu sauber ist. Ein gutes Buch zum Lesen und ein guter Typ, dem man in unserer Branche folgen kann, ist "Onkel Bob". Ich bin ein großer Fan von ihm, ebenso wie viele Entwickler da draußen. Lesen Sie seine Blog-Beiträge auf Code und kaufen Sie sein Buch. Ich kann nicht sagen, wie viel Weisheit und Erfahrung er Menschen zu bieten hat, einschließlich Ihnen selbst, die gerade das College verlassen, um über unseren Beruf in Bezug auf die besten Praktiken, Einstellungen,

sein Unternehmensblog: http://blog.objectmentor.com/articles/category/clean-code (und siehe http://blog.objectmentor.com/articles/2009/02/03/speed-kills )

Eines seiner vielen guten Bücher, die meiner Meinung nach jeder Entwickler lesen oder gelesen und in Ihrem Regal haben sollte: http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

Sein persönlicher Blog: http://cleancoder.posterous.com/retarded-architecture

Und ein gutes Video von ihm auf einer Konferenz, die er sprach: http://www.viddler.com/explore/oredev/videos/36/

4) Machen Sie sich keine Sorgen darüber, mit all den Entwicklern zu konkurrieren, mit denen Sie arbeiten. Sie müssen sich darüber im Klaren sein, dass Sie einige Jahre brauchen werden, um die Grundlagen unseres Berufs zu beherrschen, selbst wenn Sie sich in CS gut geschlagen haben. Es braucht Zeit, arbeitet hart, stellt Fragen, recherchiert, ist geduldig ... und vor allem, da unsere Branche jetzt in einem solchen Wandel ist, sollten Sie nicht frustriert sein, wenn Sie nicht alles wissen. Konzentrieren Sie sich zuerst auf die Grundlagen ... kennen Sie sie in den ersten Jahren gut. Machen Sie Ihre Sorgen nicht zu kompliziert, Sie sind ein Junior-Entwickler, der versucht, besser zu werden, und das wird passieren, wenn Sie hart arbeiten und zuerst die grundlegende OOP beherrschen. Viele Entwickler in unserer Branche kennen die Grundlagen immer noch nicht, weil sie sich nicht die Mühe gemacht haben, sie zu kennen, und das ist negativ. Sie möchten zunächst die Grundlagen gut kennen (Polymorphismus, Verkapselung, yada yada). Wenn Sie in Ihren ersten Jobs nicht viel Gelegenheit haben, viel OOP zu machen, bemühen Sie sich sehr, es zu Hause zu erforschen und zu üben, indem Sie mit Code herumspielen und ein lustiges Haustierprojekt auf der Seite haben, das Ihnen Spaß macht.

Ich könnte diesen Beitrag verlängern, aber ich werde hier aufhören. Wenn Sie weitere Fragen zu meinem Beitrag haben, antworten Sie einfach in den Kommentaren und wir können weiter diskutieren.

Letztendlich, wenn Sie ein Genie, super klug, klug, mittelmäßig oder scheiße sind, egal wer Sie auf welchem ​​Niveau sind, wenn Sie es in unserem Beruf schaffen wollen, müssen Sie immer super hart arbeiten und ständig versuchen zu lernen und verbessern Sie sich und streben Sie das Beste an, was Sie sein können (Code, Kommunikation usw.). Unser Beruf ist nicht leichtfertig zu nehmen.

WeDoTDD.com
quelle
Ich möchte hinzufügen, dass das Lösen und Partitionieren offensichtlich komplexer Probleme nur der zweite Schritt ist. Das erste ist tatsächlich zu erkennen, dass es ein Problem gibt und was das Problem ist.
John Weisz
1

So finden Sie so schnell wie möglich heraus, was Sie nicht wissen ...


quelle
Meinen Sie, finden Sie, was Sie nicht wissen, oder finden Sie die Antwort auf das, was Sie nicht wissen? Wenn Sie wissen, was Sie wissen, was Sie nicht wissen und was Sie nicht wissen, werden Sie nur so weit kommen. Aus dem Tun lernen, nicht durch Wissen, ist der Weg zum leuchtenden Weg der Zukunft ... :-)
Fehler
Dinge falsch zu machen führt zu Leiden, Dinge zu tun, die jemand anderes schneller und besser tun kann, führt zu Leiden. Zu wissen, an wen und wo man Hilfe holen kann, ist der Weg zum leuchtenden Weg der Zukunft! Viele Junioren sitzen und schmoren auf Dingen, bei denen es viel einfacher wäre, um Hilfe zu bitten, und lernen tatsächlich, wie man fischt, bevor sie ausgehen und ein Boot bauen, wenn sie es nicht brauchen!
Ich weiß es nicht, obwohl ich zustimmen würde, dass es schmerzhaft ist, jemanden dabei zu beobachten, wie er seinen Kopf gedankenlos gegen eine Wand schlägt. Ich glaube auch, dass Menschen anderen Menschen oft die Chance nehmen, einfach zu scheitern, daraus zu lernen und weiterzumachen . Meiner Meinung nach ist das Scheitern ein großer Teil des Lernens.
Fehler
0

Mit ungefähr 10 Jahren Erfahrung würde ich Algorithmen (Sortieren, Datenstrukturen, Diagramme) auffrischen. Das größte Problem für mich ist, dass ich meine letzten Jahre entweder in einer Führungsrolle verbracht habe oder mich mit Architekturproblemen auf höherer Ebene befasst habe, die im Allgemeinen kein Algorithmusdesign und -analyse auf niedrigerer Ebene erfordern, wie fast alles, was Sie jemals dazu benötigen würden Level wurde bereits geschrieben, zur Hölle optimiert und kampferprobt.

Ich würde auch einige Zeit auf projecteuler.com und interviewstreet.com verbringen, um Probleme zu lösen und mir zu helfen, diese neu erlernten Erkenntnisse anzuwenden, um ihnen zu helfen, zu bleiben.

Demian Brecht
quelle
0
  1. Lerne Mathe. Programmieren ist Mathematik, wenn Sie die visuellen Effekte entfernen.
  2. Verwenden Sie die richtige Sprache für Ihr Programm. Dann kennen Sie zumindest die Fähigkeiten der Sprachen.
  3. Nehmen Sie sich vor dem Codieren etwas Zeit für den Algorithmus. Wenn Sie als Mitglied einer Gruppe codieren, studieren Sie den Algorithmus gemeinsam.
  4. Wenn es auf die Laufgeschwindigkeit ankommt und Sie den Code für eine Architektur frei festlegen können, verwenden Sie die für Ihre CPU, GPU usw. spezialisierten Routinen.
  5. Verbringen Sie gute Zeit zum Debuggen und Testen.
  6. Seien Sie neugierig auf fast alles, was mit Programmieren zu tun hat. Sie werden mit der Zeit lernen.
kosmische Saite
quelle
0

Kennen Sie Ihren Algorithmus und Ihre Datenstrukturen genau. Wissen, wie man gemeinsame Aufgaben mit der Sprache / dem Framework erledigt und wie ein Experte dasselbe tun würde. Arbeiten Sie, machen Sie Fehler, verbessern Sie sich und lassen Sie sich von Ihrer Erfahrung mehr beibringen, solange Sie in der Branche sind.

Meine Checkliste für ein Interview wäre

  1. Sortieren, Suchen, Graph-Algorithmen und Grundlagen der dynamischen Programmierung.
  2. Arrays, Matrix, Stapel, Warteschlangen, verknüpfte Listen, Bäume und Hash-Tabellen.
  3. Objektorientierte Programmier- und Testkonzepte

Vergessen Sie nicht, die zeitliche und räumliche Komplexität Ihrer Lösungen zu berücksichtigen, wenn Sie eine dieser großen Firmen anstreben, von denen die Leute träumen, dass sie einsteigen :).


Viel Glück

Priyadarshi Kunal
quelle
1
"Kennen Sie Ihren Algorithmus und Ihre Datenstrukturen gründlich": Das ist eine ziemlich entmutigende Aussage angesichts des schieren Volumens eines jeden ... Vielleicht etwas spezifischer für ein Einstiegsinterview.
Demian Brecht
Danke Damien für den Vorschlag. Um genauer zu sein.
Priyadarshi Kunal
3
@demian und in der Tat ist es nicht wahr. Wenn ich beispielsweise eine Liste sortieren möchte, rufe ich häufig .sort () für das Listenobjekt auf.
@Lee Das Lösen von Problemen für die Anwendung im wirklichen Leben kann / wird / kann sich von denen im Interview unterscheiden. Ein Interviewer möchte wahrscheinlich, dass Sie ein Problem lösen, anstatt es einfach zu beantworten.
Priyadarshi Kunal