Was suchen wir für Entwickler, um die 1C: Enterprise-Plattform zu entwickeln?

Unser Traum ist es, das weltweit beste Toolkit für die Entwicklung von Geschäftsanwendungen zu entwickeln. Wir haben viele großartige Ideen, deren Umsetzung es uns ermöglicht, diesen Traum zu erfüllen und unsere Werkzeuge zu entwickeln, um die Besten zu bleiben. Um diese Ideen auf der richtigen Ebene umzusetzen, brauchen wir coole Programmierer.

Kurz gesagt, wir suchen diejenigen, die:

  • mag (oder ist bereit zu lieben) replizierte Frameworks zu machen
  • möchte ein Produkt herstellen, das Millionen von Menschen verwenden

Um genauer zu zeigen, welche Entwickler wir suchen und wie, haben wir kurze Interviews mit den Personalchefs unseres Unternehmens geführt. Während des Interviews wurden Fragen gestellt:

  • Welche Art von Entwicklern benötigen Sie?
  • Was fragst du nach einem Interview?
  • Welche Fragen bevorzugen Sie im Interview - theoretisch oder praktisch?
  • Sollte ein Programmierer Tests schreiben?
  • Stellen Sie Fragen, die nicht aus dem beruflichen Bereich stammen?
  • Stellen Sie logische Aufgaben für schnelles Denken ein, die nicht direkt mit der Programmierung zusammenhängen? Art der Aufgabe über einen Ball mit Helium in einem Auto :


In welchen Bereichen können Programmierer in unserer Plattformentwicklung arbeiten? Nun, zum Beispiel:


Bild

Internet Development Group


Bild

Die Gruppe schreibt Onlinedienste, die wahrscheinlich von Millionen Endbenutzern von 1C-Produkten verwendet werden. Mit Services können Sie beispielsweise Informationen über eine Gegenpartei per TIN abrufen, die Zuverlässigkeit der Gegenpartei überprüfen usw. Der Tätigkeitsbereich ist sehr verantwortungsbewusst, die Services werden unter hoher Last betrieben, die Ausfallzeiten der Services sind äußerst unerwünscht. Daher versuchen wir, das zuverlässigste Produkt zu entwickeln. Wir stellen auch ein Produkt namens Interaction System her . Dies ist ein Mechanismus, der Informationen zwischen Clientanwendungen und 1C: Enterprise-Servern überträgt. Mit seiner Hilfe wird insbesondere der in die Anwendungen 1C integrierte Messenger implementiert.

Vom Entwickler möchte ich, dass er das Produkt als Ganzes entwickelt - die Bedürfnisse der Benutzer analysiert, über die Architektur nachdenkt, Code schreibt. Da die Leute oft zu Interviews kommen und sagen, dass es für mich nicht interessant ist, den Themenbereich zu analysieren, möchte ich, dass der Analyst mir eine TOR schreibt, nach der ich die Funktionalität programmiere. Das heißt, eine Person interessiert sich nur für technische Aspekte der Programmierung. Wir versuchen, solche Leute nicht einzustellen, weil Wir haben ein kleines Team, wir müssen uns mit einer großen Anzahl verwandter Bereiche befassen. Daher sind die Hauptanforderungen, die nicht mit beruflichen Fähigkeiten zusammenhängen, die Fähigkeit, Produktanforderungen schön und genau zu formulieren, die Implementierung zu überdenken, ein Produkt zu entwickeln und für das Endergebnis verantwortlich zu sein. Das persönliche Interesse der Person an der Qualität des Endprodukts ist wichtig, damit die Person ein Produkt herstellt, auf das sie stolz sein möchte.

In Eric Evans ' Buch "Object-Oriented Design" ist eine der Hauptideen, dass der Entwickler auch ein Analyst sein muss, ein gutes Verständnis für den von ihm automatisierten Themenbereich hat, versteht, was für das Unternehmen wertvoll ist, und wenn er es nicht versteht, dann nicht in der Lage, ein gutes System zu entwickeln, das alle Anforderungen des Benutzers erfüllt. Wenn der Entwickler vom Themenbereich abstrahiert, trifft er keine wichtigen Entscheidungen über die Architektur des Produkts, muss diese Entscheidungen jedoch umsetzen. In diesem Fall besteht das Risiko einer Implementierung von schlechter Qualität. Der gleiche Evans empfiehlt, zwei Teile im Domänenbereich zu unterscheiden - den Teil, der für das Geschäft von grundlegender Bedeutung ist, den Teil, der Ihr Produkt tatsächlich zu Ihrem Produkt macht, und den zweiten Teil, der nicht sehr wichtig ist und der für die Bündelung der Infrastruktur verantwortlich ist. Und die besten Entwickler sollten die Implementierung des ersten wichtigen Teils erhalten.

Wie läuft das Interview? Wir haben einen Fragebogen mit ungefähr 10 Fragen, die wir Bewerbern stellen. Die Fragen im Fragebogen sind nicht theoretisch, sondern beispielsweise praktisch. Der Code hat eine Ausnahme mit einer solchen Stapelverfolgung ausgelöst. Erklären Sie, was Sie tun werden. Oder - Sie haben eine Abfrage an die Datenbank, die langsam ausgeführt wird (der Abfragetext wird angegeben), es gibt einen Abfrageplan, bewerten Sie - dass der Abfrageplan fehlerhaft ist, müssen Sie erklären, wie die Abfrage beschleunigt werden kann. Es macht keinen Sinn, jemanden zu fragen, welche Arten von JOINs es gibt - natürlich kennt er diese Arten, wenn er auch nur ein wenig auf ein Interview vorbereitet ist. Die praktischen Erfahrungen mit diesen JOINs sind interessant. Wenn eine Person Erfahrung in der Analyse von Abfrageplänen hat, wird es für sie nicht schwierig sein, über Möglichkeiten zur Lösung des Problems zu sprechen. Wenn es keine solche Erfahrung gibt, hilft das Buch hier nicht weiter. Hier verläuft die Zeile, die den Entwickler, der gerade über die Funktionalität gelesen hat, von dem Entwickler unterscheidet, der diese Funktionalität wirklich verwendet hat. Wir sind mehr am Umgang mit dem zweiten Entwicklertyp interessiert, wir möchten, dass die Person sofort "in das Spiel involviert wird".

Einige der Fragen auf dem Fragebogen haben bereits aufgehört zu funktionieren, und wir haben diese Fragen durch neue ersetzt. Zum Beispiel haben sie vor einiger Zeit in Interviews oft darum gebeten, das Singleton-Muster zu implementieren, und als der Kandidat dies tat, sagten sie - machen Sie es jetzt faul. Seitdem erschienen auf Habré mehrere Artikel, in denen ausführlich beschrieben wurde, wie man solche Dinge schreibt. Die Leute haben diese Aufgabe nur auswendig gelernt, und es war kein Test mehr für die berufliche Eignung.

Wir möchten auch, dass Entwickler Tests kompetent schreiben. Beispielsweise wird in der Testsignatur beschrieben, welche Vertragssignatur das System erfüllen muss. Dies kann beispielsweise in Java in dem von Roy Osher empfohlenen Stil erfolgen , wenn der Name der Vertragsmethode in drei Teile unterteilt ist: "gegeben", "was wir erwarten", "was ist das Ergebnis". Und Sie können es auf Groovy mit Spock tun. Es ist wichtig, ob der Kandidat versteht, was genau getestet werden muss, ob Grenzwerte getestet werden müssen, ob er über die Testpyramide Bescheid weiß usw.

Wir fragen auch nach den Projekten, an denen die Person beteiligt war, insbesondere wenn sie Technologien verwendet hat, die für uns relevant sind. Zum Beispiel verwenden wir Hazelcast , bisher verwenden es nur wenige Leute in der Produktion (aus jüngsten großen Implementierungen - in Yandex.Money ), und wir sind sehr interessiert an Leuten mit Erfahrung mit Hazelcast. Darüber hinaus kann der Kandidat uns unerwartete und nützliche Aspekte der neuen Technologie offenbaren, über die wir noch nichts wissen.

Ein wichtiges Thema für uns ist das Schreiben von Code für die Arbeit in einer Multithread-Umgebung. Zum Beispiel gibt es mehrere Anwendungsknoten in einer stark ausgelasteten Umgebung, und wir bitten den Kandidaten, Ihnen zu sagen, wie Sie das System funktionsfähig und zuverlässig machen und gleichzeitig seine Blockierung minimieren können.

Sollte ein Programmierer Tests schreiben? Ein Muss, aber nicht alles. Der Programmierer muss unbedingt Unit-Tests schreiben. Übrigens bestehen wir im Team nicht auf der obligatorischen Anwendung von Methoden, zum Beispiel TDD ; Einige Entwickler verwenden TDD aus eigener Initiative, sie mögen es so sehr. Wir schreiben auch Integrationstests. Die Entwickler führen auch Lasttests durch und schreiben Testpläne für JMeter.

Web Client- Entwicklungsteam


Bild

Obwohl wir einen Webclient in JavaScript entwickeln, bevorzugen wir, dass der Kandidat neben seiner Erfahrung in der Webentwicklung in JavaScript auch Erfahrung in der Entwicklung „klassischer“ OOP-Sprachen hat - C ++ oder Java oder C #. Dies ist auf die Besonderheiten des Projekts zurückzuführen. 1C-Webclient, in JavaScript geschrieben, ähnelt jedoch eher einer in OOP-Sprache geschriebenen Anwendung. Wir behandeln JavaScript-Code mit JSDoc- Annotationen, sodass die statische Typprüfung während der Assemblierung erfolgt. Dieser Ansatz wurde gewählt, weil wir den Google Closure Compiler verwenden , der uns insbesondere dabei hilft, die Geschwindigkeit unseres Codes zu erhöhen und den von ihm verbrauchten Speicher zu reduzieren. Daher wird die OOP-Erfahrung dem Kandidaten eine große Hilfe sein.

Im Interview fragen wir, welche Aufgaben der Kandidat und sein Team bei früheren Jobs zu lösen hatten, wir diskutieren die Architektur der von ihm implementierten Lösungen. Wir stellen den Kandidaten Aufgaben, einige davon - mit schnellem Verstand und algorithmischem Denken. Zum Beispiel gibt es Aufgaben, die durch eine ziemlich große Menge an Code "gelöst" werden, und wenn Sie darüber nachdenken, dann in einer Zeile.

In JavaScript gibt es einen Pool von Aufgaben für spezifische Layoutkenntnisse. Zum Beispiel zeichnen wir auf ein Blatt Papier die Struktur einer HTML-Seite (die Struktur kann dynamisch sein, sich in der Zeit gemäß einem bestimmten Algorithmus ändern) und bitten, Code zu schreiben, der eine solche Struktur erstellt und in die Dynamik implementiert.

Wir versuchen auch, die Veranlagung des Kandidaten für analytische Aktivitäten zu bewerten. Wir möchten keinen „sauberen“ Encoder im Team haben, selbst wenn dieser qualitativ hochwertigen Code schreibt, sondern streng nach einer festgelegten technischen Spezifikation arbeitet. Ich möchte, dass der Entwickler in die Aufgaben einbezogen wird, genau versteht, was in dem Produkt getan wird und warum es im Idealfall auch der Treiber der neuen Funktionalität war.

Wenn der Kandidat ein Student oder ein Student von gestern ist, können wir rein theoretische Fragen stellen, zum Beispiel die Grundprinzipien von OOP oder etwas anderes. Wenn eine Person mit Erfahrung solche Fragen bedeutungslos sein kann, der Kandidat diese Prinzipien höchstwahrscheinlich kennt und sie in seiner Arbeit verwendet, kann eine Aufforderung, sie zu formulieren, ihn in eine Sackgasse führen, weil er den Wortlaut aus dem Lehrbuch vergessen hat.

Jedes Interview ist einzigartig. Es ist interessant, mit einer Person über einige Themen zu sprechen, mit einer anderen über andere. Am Ende des Interviews sprechen wir über unser Produkt, über den Umfang seiner Verwendung (und sie sind beeindruckend - unser System hat Millionen von Endbenutzern) und darüber, wie interessiert Menschen sind.

Team für die Skalierbarkeit von Anwendungen


Bild

Wer sind wir


Unser Team ist Experte auf dem Gebiet des Aufbaus hoch ausgelasteter Systeme auf der 1C: Enterprise-Plattform. Diese Ingenieure befassen sich mit den Herausforderungen der Zuverlässigkeit und Skalierbarkeit. Solche Aufgaben stehen häufig am Scheideweg von Verwaltung und Entwicklung. Das Ergebnis der Lösung solcher Probleme ist ein wirklich cooles System. Beispiele für solche Aufgaben:

  • Stellen Sie eine fehlertolerante Infrastruktur in zwei Rechenzentren bereit und simulieren Sie Fehler
  • Stellen Sie eine Verschlechterung der Systemleistung sicher, indem Sie die Anzahl der Benutzer um das Zehnfache erhöhen. Beschleunigen Sie die mehrstündige Berechnung der Kosten um das Dreifache.
  • entstehende Deadlocks zu untersuchen und zu beseitigen,
  • Gewährleistung einer koordinierten Wiederherstellung von mehr als einem Dutzend verteilter Informationsdatenbanken zu einem bestimmten Zeitpunkt unter Berücksichtigung des Austauschs zwischen diesen Datenbanken.

Und dies ist keine vollständige Liste der Aufgaben. Es ist besonders angenehm, dass viele der Aufgaben mit dem Wortlaut zu uns kommen: "Ist das überhaupt möglich?" Das heißt, Leute glauben zuerst nicht. Wir streiten uns nicht und versuchen immer zu überzeugen, in der Praxis zu überprüfen, zu tun. Dazu müssen wir die Bereitschaft hinzufügen, mitten in der Nacht eine Verbindung zu einem großen Client-System herzustellen, da lokale Ingenieure etwas kaputt gemacht haben und niemand weiß, was zu tun ist. Mehr als einmal war es notwendig, die zerstörte Basis ohne Backups wiederherzustellen oder herauszufinden, warum die Belastung des Systems um 5% zunahm. Wenn Sie möchten, können Sie sogar Rezensionen zu unserer Arbeit lesen.

Wen suchen wir?


Wir suchen Ingenieure, die leidenschaftlich das Unmögliche tun wollen. Eine der wichtigsten Voraussetzungen für einen Kandidaten sind brennende Augen, der Wunsch und die Fähigkeit, anhand des vorhandenen Wissens schnell zu verstehen, was er zuvor noch nicht erlebt hat. Dies sind Zuverlässigkeitsingenieure und Entwickler in einem. Stellen Sie sich vor, ein Kunde kontaktiert Sie mit mehreren tausend Benutzern und teilt Ihnen mit, dass er versucht, einen komplexen Mechanismus in Betrieb zu nehmen, den seine Ingenieure im Laufe eines Jahres entwickelt haben. Und übrigens:

  • haben es noch nicht geschafft, die Entwicklung angesichts sich ständig ändernder Anforderungen des Kundengeschäfts abzuschließen;
  • Während die Entwicklung der wichtigsten Mechanismen für die Implementierung in vollem Gange ist, haben die Ingenieure den Testmechanismus bei Tausenden von Benutzern noch nicht erreicht.
  • Selbst jetzt hat niemand eine Ahnung, warum mit zunehmender Anzahl von Benutzern in dieser Implementierung genau in diesem Mechanismus die Produktivität stark sinkt.
  • Die Entwicklung wurde unter Windows mit dem MS SQL Server-DBMS durchgeführt, und in der letzten Phase wurde eine politische Entscheidung getroffen, PostgreSQL in CentOS und das DBMS zu implementieren, um im Zentrum des Importsubstitutionstrends zu stehen.
  • und Sie stellen versehentlich fest, dass es zu Zeitüberschreitungen kommt, wenn sogar 10 Benutzer arbeiten.
  • Sie müssen die Ausrüstung für diesen Mechanismus berechnen, da der Kunde sie letzten Monat kaufen musste.
  • Sie verstehen, dass Sie eine parallele Implementierung der Algorithmen in diesem Mechanismus ausarbeiten, sie mit Ihren Kollegen koordinieren und gemeinsam entscheiden müssen, wie Sie pünktlich sein werden, ohne neue Fehler einzuführen.

Ja, und noch einmal: Nicht jeder ist bereit, Fehler und Anti-Muster bei seinen Entscheidungen zu identifizieren. Daher müssen Sie in der Lage sein, sehr diplomatisch mit Ingenieuren zu kommunizieren, die in den letzten Monaten unter ständigem Stress arbeiten.

Wie sehen wir aus?


Das Interviewen kann für den Kandidaten stressig sein. Aber dieser Stress kann nicht einmal mit dem Stress verglichen werden, den Sie in einer realen Situation bekommen, wenn Sie nicht alle Ihre vorhandenen Erfahrungen denken und nutzen.

Das Problem vieler Kandidaten ist, dass sie nicht wissen, wie sie ihr Wissen anwenden sollen, und ihr sechsjähriges Kind nicht erklären können. Deshalb bitten wir Sie während des Interviews regelmäßig, uns etwas beizubringen, mit dem sich der Kandidat am besten auskennt. Natürlich möchte ich wirklich Leute rekrutieren, von denen wir viel lernen können. In solchen Diskussionen sind die Tiefe des Wissens und ein sehr gutes Verständnis sehr wichtig. Es gab eine Erfahrung, als wir um 7 Uhr morgens den Kandidaten interviewten, zu einer Diskussion über die Speicherverwaltungskomponenten in MS SQL Server kamen und uns schließlich darauf konzentrierten, Seiten und Bereiche zu verstehen. Dann intervenierte HR und sagte: „Womit quälen wir ihn ?! Wer weiß das überhaupt? “, Und wir verließen den Raum, um uns zu unterhalten. Ein schläfriger und gähnender Kollege ging versehentlich den Korridor entlang in Richtung Kaffee. Dem Kollegen wurden die gleichen Fragen gestellt, er beantwortete klar, richtig, im Wesentlichen ohne ein Auge zu öffnen und weiter zu gähnen.

Natürlich versuchen wir, Kenntnisse in Mathematik und Algorithmen zu testen. Sie beziehen sich vielmehr auf Grundkenntnisse. Die Kenntnis verteilter Algorithmen und die Fähigkeit, einen solchen Algorithmus in einer Aufgabe anzuwenden, sind jedoch ein sicheres Plus für den Kandidaten.

Eine andere Möglichkeit besteht darin, den Kandidaten zu bitten, sich anstelle des 1C-Entwicklers vorzustellen und ihn zu bitten, eine angewandte Aufgabe zu implementieren. Unter den Bedingungen des Interviews und dem Stress des Kandidaten können Sie mit einer solchen Aufgabe sehen, wie der Kandidat denkt. Wir schauen uns die Lösung des Kandidaten an, helfen dem Kandidaten, ein bedeutendes technologisches Problem in seiner Lösung zu erkennen, und schauen uns dann an, wie der Kandidat die Lösung ändern wird, ohne ein anderes technologisches Problem zuzulassen. Manchmal führen wir 6-7 Iterationen durch, suchen und bewerten die Schwächen der Lösung. Gleichzeitig wird es sofort möglich, nicht nur zu diskutieren und zu verstehen, was eine Person beispielsweise über Deadlocks weiß, sondern auch zu verstehen, wie sie die Wahrscheinlichkeit ihres Auftretens in ihrem Code auf Null reduzieren kann.

Die Kenntnis einer bestimmten Programmiersprache ist kein besonders wichtiger Faktor. Es ist wichtiger, wenn eine Person in Bezug auf das Programmieren mit einer Sprache denkt und nicht auf Sprachkonstrukte beschränkt ist.

Was wird in der Arbeit verwendet


Das erste und am häufigsten verwendete Tool ist die Technologieplattform 1C: Enterprise. Kenntnisse der Plattform sind auf Administrator- und Entwicklerebene erforderlich. Das heißt, Sie müssen verstehen, wie Sie eine bestimmte Lösung implementieren und für Tausende von Benutzern im System ausführen.

Sehr oft ist es erforderlich, den Betrieb der MS SQL Server- und PostgreSQL-DBMS zu analysieren, sodass die Verwendung von Profiling-Tools, dynamischen Ansichten und Magazinen im Gepäck aktiver Fähigkeiten enthalten ist. Und hier ist die Fähigkeit, mit großen Mengen zu arbeiten, wichtig. Ein Standard-Windows-Notizblock ist nicht sehr praktisch, wenn Sie mit 1 TB Textprotokollen mit maschinengenerierten Abfragen und deren Plänen arbeiten. Ab sofort sind Kenntnisse über reguläre Ausdrücke sowie eine ganze Reihe von Tools und Sprachen erforderlich, die diese unterstützen. Um Abfragepläne zu analysieren, müssen Sie wissen, was Indizes sind und wie sich Merge Join von Hash Join unterscheidet.

Systeme auf dem Unternehmensmarkt laufen häufig unter Linux. Auf den Servern gibt es keine grafische Umgebung. Konsolenkenntnisse sind sehr wichtig.

Stellen Sie sich vor, was Sie brauchen, um herauszufinden, warum die CPU-Auslastung von PostgreSQL-Servern in CentOS by Postgre-Prozessen um 5% gestiegen ist. Versuchen Sie, den Algorithmus Ihrer Untersuchung auf ein Blatt Papier zu schreiben. Und sofort gibt es ein Verständnis dafür, was benötigt wird

  • in der Lage sein, nicht nur Verfügbarkeit , vmstat , sar , atop , perf , anzuwenden
  • wissen, wie man pgbadger , psql verwendet und die Protokollierung in postgresql.conf konfiguriert,
  • in der Lage sein, eine gewünschte Abfrage zu finden,
  • Verwenden Sie analysieren, analysieren Sie seinen Plan,
  • Schreiben Sie die Anforderung neu und stellen Sie sicher, dass die Last abgeklungen ist.

Was ist wichtig für uns


Es ist sehr wichtig, dass eine Person in großem Maßstab denkt und immer versucht, das große Ganze zu sehen. Beispielsweise bieten die meisten Kandidaten, die die Aufgabe des Sortierens einer Textdatei lösen, einen Algorithmus zum Sortieren einer Datei mit 10 MB an. Aber wie sehr sich ihr Verständnis und ihre Sichtweise ändern, wenn sie eine 10-TB-Datei unter Bedingungen mit begrenztem Speicher und begrenztem Speicherplatz sortieren müssen. Und Sie müssen bedenken, dass die Kosten für den Zugriff auf die Festplatte höher sind als die Kosten für den Zugriff auf den Speicher. Ich möchte wirklich, dass der Kandidat bei allen Aufgaben „auf einer Skala“ denkt.

1C: Enterprise Platform Development Group


Bild

Die Hauptsache, die von den Kandidaten von unserem Team verlangt wird, ist die Fähigkeit, analytisch zu denken, das Problem gründlich zu analysieren und Lösungen abzuwägen. Die 1C: Enterprise-Plattform hat einen ziemlich langen Entwicklungszyklus (Monate), daher ist es wie bei der Webentwicklung unmöglich, die Funktionalität schrittweise in Teilen zu implementieren. Dies erfordert die Fähigkeit, tief zu überlegen, wenn Sie die Details der Implementierung berücksichtigen. Sie müssen versuchen, "alles auf einmal" zu tun. Das heißt, Nicht die erste verfügbare Methode zu verwenden, über die ich gestern bei Habr gelesen habe, um das Problem zu lösen, sondern alle Vor- und Nachteile verschiedener Lösungen sorgfältig abzuwägen.

Im Interview zu verstehen, ob der Kandidat solche Eigenschaften hat, ist nicht so einfach. Am relevantesten ist es, über die bisherigen Erfahrungen des Bewerbers zu sprechen. Wenn jemand erzählt, welche coole Lösung er gefunden hat, fragen wir - und welches Problem wurde tatsächlich gelöst? Warum wurde diese spezielle Lösung gewählt und keine andere? Und wenn sich die Bedingungen des Problems ein wenig geändert hätten, wie hätte sich die Lösung geändert? Wenn Sie mehrere ähnliche Fragen stellen, können Sie verstehen, wie tief die Person in das Thema eingetaucht war.

Ein weiterer Aspekt wird durch den Satz veranschaulicht: „Wir stellen diejenigen ein, die wissen, wie man arbeitet, und aus irgendeinem Grund möchten wir, dass sie arbeiten wollen.“ Deshalb möchte ich beim Interview verstehen, was Arbeit für eine Person ist. Wenn dies für ihn ein angenehmer Zeitvertreib ist, mit dem Sie Geld verdienen können, wird mit hoher Wahrscheinlichkeit nichts Gutes mit dem Kandidaten herauskommen.Für die meisten professionellen Entwickler ist ihre Arbeit das Interessanteste, was sie jemals tun mussten, Forschung, Begierde und die Fähigkeit, etwas Neues zu schaffen. Eine Person, die zu uns kommt, muss bereit sein zu studieren, zu studieren und zu studieren. Wir brauchen nicht nur Künstler, wir brauchen Menschen, die nie müde werden zu lernen, wir müssen viel und ständig bei unserer Arbeit lernen.

Was Sie sonst noch mit dem Kandidaten sehen möchten, sind technische Fähigkeiten, dh im übertragenen Sinne die Fähigkeit, eine elegante Lösung aus Würfeln zusammenzusetzen.

Die erforderlichen Kenntnisse der Programmiersprachen hängen vom Plattformentwicklungsbereich ab, für den der Kandidat gesucht wird. Der Kern der Plattform ist C ++ und Java, der Webclient ist JavaScript und es ist wünschenswert, die Grundlagen von C ++ zu kennen. Einige Projekte erfordern Kenntnisse in 1C, aber Kenntnisse in anderen Sprachen und Technologien sind sehr wünschenswert. Wir müssen viele neue Dinge für die 1C-Welt schaffen. Wir möchten, dass die Entwickler die Möglichkeit und Gelehrsamkeit haben, mit Ideen und Konzepten zu arbeiten, die in anderen Sprachen und Technologien erfunden wurden, und zu verstehen, wie sie bei der Entwicklung von 1C-Lösungen an den richtigen Stellen gut und richtig angewendet werden können. Zum Beispiel, um unser Cloud-Produkt 1cFresh zu entwickelnWir schreiben verschiedene Tools, hauptsächlich für die Verwaltung, in 1C (in 1C sind sie schneller zu entwickeln als in traditionellen Sprachen). Wenn ein Entwickler die Muster der von Systemadministratoren verwendeten Technologien und Sprachen (Bash, Python, Perl) versteht, kann er ein benutzerfreundliches Tool erstellen.

Wenn wir einen Schüler interviewen, können wir ihn bitten, sein Integral zu berechnen und zu erklären, warum das Integral so betrachtet wird. Der durchschnittliche ältere Schüler erinnert sich nicht bereits an die Bedeutung des Integrals, und ein gewissenhafter, begeisterter Schüler erinnert sich sehr gut an die Bedeutung und kann sie erklären.

Wenn wir einen Systemadministrator haben, können wir beispielsweise nach den Besonderheiten der Manipulation von RAM unter Linux fragen. Wenn eine Person mit einem DBMS arbeitet, fragen wir beispielsweise, welche Transaktionsisolationsstufen vorhanden sind, welcher Kandidat es bevorzugt und warum. Wenn beispielsweise eine Person an der Synchronisierung mehrerer Datenbanken gearbeitet hat, besprechen wir mit ihr, was zu tun ist, wenn eine der synchronisierten Datenbanken plötzlich aus einer Sicherung wiederhergestellt wurde. Ein typisches Architekturproblem, das auf verschiedene Arten gelöst werden kann.

Ich würde auch gerne den Wunsch sehen, die Welt zum Besseren zu verändern und einen gesunden Anteil des Perfektionismus als Kandidat zu haben. Ohne ein angemessenes Maß an Perfektionismus ist es schwierig, Code zu schreiben, der jahrelang bei sehr unterschiedlichen Implementierungen funktioniert.

Sollte ein Programmierer Tests schreiben? Der Programmierer muss ein Produkt ausgeben, das funktioniert. Wenn er ein erwachsener Programmierer ist, sollte es niemanden interessieren, wie er es macht. Wenn dies ein Anfänger ist, wird ihm empfohlen, Tests zu schreiben. Ein seriöser Entwickler beginnt schließlich zu verstehen, welche Tests für den von ihm erstellten Code geschrieben werden sollten, wenn es schwache Codeabschnitte gibt, die besser durch Tests abgedeckt werden. Wir sind gegen eine sinnlose globale Testabdeckung. Das Programm funktioniert korrekt, nicht weil es vollständig mit Tests abgedeckt war, sondern weil der Entwickler seinen Kopf auf den Kopf gestellt hat. Tests sind ein Hilfsmittel, um sich an den schwierigsten Stellen eines Programms vor Fehlern zu schützen. Und wir müssen uns daran erinnern, dass Tests kein Allheilmittel für architektonische Probleme sind. Am wichtigsten ist, dass eine Person den Kopf dreht.

Bei Nicht-IT-Fragen stellen wir manchmal diese Frage - und von wem sieht sich eine Person in 3-5 Jahren? Wir glauben, dass wir mit einer Person zusammenarbeiten werden, wenn seine Entwicklungsziele mit der Sichtweise des Unternehmens auf seine Entwicklung übereinstimmen.

Es ist von entscheidender Bedeutung, zwei Dinge zu bewerten. Das erste ist, wo der Mensch jetzt ist, welche Erfahrung und welches Wissen er jetzt hat, welche Aufgabenstufe er gerade lösen kann. Das zweite ist, was eine Person in einem günstigen Umfeld bereit ist, in ein paar Jahren zu werden. Und so arbeitete er natürlich einige Jahre in unserer Firma, löste Probleme und wuchs professionell. Wir sind noch mehr daran interessiert, nicht was ein Mensch jetzt ist, sondern wer er in einem, zwei oder drei Jahren sein wird. Die Aussicht ist uns immer wichtiger als der aktuelle Stand der Dinge. Für uns ist ein vielversprechenderer Neuling interessanter als ein Mensch mit großen Leistungen, aber seine Augen sind leer.

1: –


Normalerweise beginnen wir das Interview mit Fragen - was war Ihr interessantestes Projekt, Ihr Lieblingsprojekt? Ich möchte wirklich sofort verstehen, was eine Person bei der Arbeit zum Leuchten bringt und ob sie bei der Arbeit im Allgemeinen zum Leuchten kommt.

Dann fragt er sich, ob jemand die Leistung von Programmen optimieren musste, wie er es tat.

Wir fragen, welche Testmethoden der Kandidat für seine Projekte verwendet hat, wie er eine Strategie zum Testen des Projekts entwickelt. Wir können fragen: Wir haben ein System mit einer solchen deklarierten Funktionalität. Wie werden wir es testen?

Wenn sich das Interview auf einem Java-Entwickler befindet, fragen wir nach der Arbeit des Garbage Collectors. Eine Person, die mehr oder weniger komplexe Programme entwickelt, sollte sich der Nuancen ihrer Arbeit bewusst sein und wissen, wie man Code schreibt, hinter dem der Garbage Collector den Müll effizient entfernt.

Von den Nicht-Programmierer-Themen ist es interessant, nach dem Geschäft zu fragen - welche Aufgabe aus geschäftlicher Sicht durch das Lieblingsprojekt des Bewerbers gelöst wurde, welchen Nutzen es brachte. Das Gesamtbild zu sehen, ist eine sehr wertvolle Eigenschaft für den Entwickler. Als es einen Kandidaten gab, der die Blockchain erstellte, war seine Geschichte sehr informativ.

Wir legen Entwurfsaufgaben fest und bitten den Kandidaten, ein einfaches System zu entwerfen. Dann schauen wir uns das Projekt gemeinsam an, suchen nach Fehlern und diskutieren, wie diese behoben werden können. Es ist sehr wichtig, wie der Kandidat auf Kommentare reagiert.

Sprechen Sie unbedingt darüber, was wir tun, nämlich die 1C: Enterprise-Plattform. Wir sprechen darüber, wie wir an High-Tech-Dingen arbeiten können, beispielsweise auf einem Servercluster oder auf einer mobilen Plattform .

Wir zwingen Kandidaten nicht, Code auf Papier zu schreiben. Aber wir zeichnen während des Interviews viel auf Papier, wir zeichnen die Systemarchitektur, Moduldiagramme, ein Bild ihrer Interaktion.

Kenntnisse in bestimmten Sprachen sind nicht kritisch. Es kommt vor, dass eine Person als C ++ - Entwickler als C # -Entwickler in das Unternehmen kommt und C ++ ziemlich schnell lernt. Und es gibt viele Beispiele für Kollegen, die im Laufe ihrer Arbeit neue Sprachen gelernt haben. Wenn Sie eine der Sprachen wünschen und kennen, ist das Erlernen einer neuen Sprache kein Problem.

Wir bitten eine Person auch zu lesen, ob Habr und Stackoverflow oder sogar Bücher über eine Spezialität und welche. Manchmal finden wir auf diese Weise nützliche Bücher.

Entwicklungsgruppe für Berichtsmechanismen


Bild

Wir brauchen Hardcore-C ++ - Entwickler. Unser Team beschäftigt sich mit Berichtsmechanismen, was bedeutet, dass unser Code viel mit großen Datenmengen arbeitet und wir gute Kenntnisse über Container und Algorithmen benötigen.

Im Interview fragen wir - welche Bibliotheken der Kandidat in seiner Arbeit verwendet hat, welche Algorithmen. Wir verwenden STL häufig , daher fragen wir aktiv nach dieser Bibliothek, welche Container der Entwickler für welche Aufgaben verwendet hat. Wir bitten Sie beispielsweise, Code zu schreiben, der eine bestimmte Klasse in die Map einfügt, sowie einige ähnliche Aufgaben. Bei solchen Aufgaben können Sie sofort sehen, auf welcher Ebene sich der Programmierer vor uns befindet.

Fragen zur Programmiertheorie werden selten gestellt. Wir glauben, dass praktisches Wissen wichtiger ist. Wenn eine Person das Problem gut löst und die Theorie erfolgreich in der Praxis anwendet, ist es nicht so wichtig, dass sie sich nicht an die genaue Formulierung der Grundprinzipien von OOP erinnert.

Übrigens, wenn ein Student zu einem Vorstellungsgespräch kam, das aufgrund mangelnder Erfahrung immer noch schwer mit den vorgeschlagenen Aufgaben fertig zu werden ist, werden wir einen Rabatt darauf gewähren. Es macht schon Sinn, ihn theoretisch anzutreiben, nach seinen beruflichen Interessen zu fragen. Wenn eine Person vielversprechend wie ein Spezialist aussieht, ist es sinnvoll, ihm die Möglichkeit zu geben, sich mit uns als guter Fachmann zu entwickeln.

Ein ziemlich wichtiges Kriterium für uns ist die Bereitschaft, den Code eines anderen zu verstehen. Die 1C: Enterprise-Plattform ist ein großes Produkt mit mehr als 10 Millionen Codezeilen. Eine Kollision mit diesem Code in der täglichen Arbeit ist unvermeidlich, zumindest auf der Ebene der Einbettung Ihres eigenen Codes.

Wir fragen, wie der Kandidat es vorzieht, Aufgaben zu erhalten - in Form einer detaillierten Spezifikation oder einfach in Form eines „solchen und eines solchen Mechanismus“. Wir verstehen und akzeptieren beide Ansätze. Wir werden einen guten Programmierer nicht ablehnen, nur weil er die Problemstellung kauen muss. Für uns ist es einfach wichtig, sofort zu verstehen, wie man mit einer Person arbeitet. Ich möchte aber, dass sich der Mitarbeiter in Zukunft in Richtung größerer Unabhängigkeit entwickelt und Verantwortung für eine separate Richtung übernehmen kann. Ich kann Beispiele für Anweisungen gebendynamische Liste oder Diagramme . Und ich möchte, dass der Mitarbeiter diese Richtung entwickelt - die Bedürfnisse der Benutzer dieses Mechanismus herausfindet, mit den Benutzern in Foren und Konferenzen kommuniziert, Listen mit neuen Funktionen erstellt, Prioritäten setzt, die Probleme des Mechanismus versteht und Lösungen vorschlägt. Wenn eine Person interessiert ist, kann sie sich als Teamleiter entwickeln, indem sie zunächst Praktikanten aus unserem Zentrum für junge Spezialisten betreut und später sein Team leitet. Wenn eine Person von Natur aus ein „sauberer“ Entwickler ist, der die Arbeit an TK bevorzugt und nicht sehr daran interessiert ist, die Bedürfnisse der Benutzer zu verstehen, brauchen wir solche Leute.

Sollte ein Programmierer testen? Natürlich! Ein Programmierer, der keine Tests durchführt, ist wie ein Koch, der nicht versucht, was er vorbereitet hat. Natürlich können Sie nicht verlangen, dass der Programmierer Tests in allen unterstützten Umgebungen (Windows, Linux, MacOS, Web und mobiler Client) durchführt, aber er muss die grundlegenden Funktionen des aktuellen Betriebssystems überprüfen. Noch besser, wenn Sie einen automatischen Test schreiben. Dies ist ein vorgefertigter Regressionstest, der in die Testbibliothek fällt und regelmäßig ausgeführt wird, wenn im entsprechenden Bereich des Codes Änderungen vorgenommen werden.

1C Development Group : Tools für die Unternehmensentwicklung


Bild

1C: Enterprise Development Tools ist in Java geschrieben und wir suchen Entwickler und Tester mit Java-Kenntnissen. Wir suchen Menschen mit brennenden Augen, sowohl Profis als auch Anfänger mit Potenzial. Kenntnisse in Java sind für uns ebenso erforderlich wie Kenntnisse in Algorithmen und Datenstrukturen sowie in der Multithread-Programmierung. Leider können wir es uns in unserem Team nicht leisten, zu warten, bis der neue Entwickler diese Dinge lernt. Die Kenntnis der von uns verwendeten spezifischen Frameworks ( EMF , Xtext , GEF , Lucene , Handly , ...) ist jedoch ein Schnäppchen. Wenn Sie sehen können, dass eine Person sich bewusst ist und sich wohl fühlt, mit ihr zu sprechen, bedeutet dies, dass sie in das Team passt und schnell das erforderliche Wissen erhält.

Im Allgemeinen ist die Passform in das Team neben der Professionalität wahrscheinlich das Hauptkriterium für uns. Unser Team ist ein Team von Enthusiasten, wir möchten es nicht mit Menschen anderer Art verdünnen. Und eine Person mit einem anderen Charakter in unserem Team wird wahrscheinlich unangenehm arbeiten. Die eindeutige rote Fahne ist für uns eine respektlose Art der Kommunikation. Ein Mensch kann ein sehr guter Fachmann sein, aber wenn er nicht respektvoll mit Kollegen kommunizieren kann, passt er nicht zu uns. Wir haben ein Spiel - eine reine Mannschaft.

Die Besonderheit der Institutsausbildung besteht darin, dass die Masse der Institute keine industrielle Programmierung lehrt. Sie unterrichten Syntax, Sprachkonstrukte, Algorithmen. Die Fähigkeit, dokumentierten, begleiteten Code zu schreiben, der die Möglichkeiten der Entwicklung und Erweiterbarkeit enthält, wird jedoch nur sehr wenig vermittelt. Daher sind in einem Interview Entwurfsaufgaben eine sehr wichtige Art von Aufgabe. Zum Beispiel fragen wir, wie der Kandidat Tetris schreiben würde, welche Komponenten das Projekt aufteilen würde, welche Schnittstellen er entwerfen würde, damit die Komponenten miteinander interagieren. Als nächstes erschweren wir die Einführung - zum Beispiel sagen wir, dass das Tetris dreidimensional ist (oder neue Arten von Formen hinzugefügt werden oder die Formen von verschiedenen Seiten fallen) und sehen, wie gut das gewählte Design den sich ändernden Bedingungen entspricht. Im Allgemeinen besteht eine der Hauptaufgaben des Interviews darin, zu verstehenwie flexibel und breit der Kandidat denken kann. Und natürlich sollte der Programmierer Tests schreiben, zumindest Unit-Tests, und Integrationstests wären nett. Die Standardfrage für die Entwurfsaufgabe lautet: Wie werden Sie das entworfene System testen?

Für einen Tester ist die Fähigkeit, weit zu denken, noch wertvoller! Es gibt einen bekannten Witz darüber, wie der Tester die Bar getestet hat: Er bestellte ein Glas Bier, 2 Glas Bier, 0 Glas Bier, 999999999 Glas Bier, –8 Glas Bier, Qwertyuip-Glas Bier, und nachdem das Projekt der Produktion vorgelegt worden war, ging der Kunde zur Bar und fragte, wo die Toilette? Die Hauptfähigkeit des Testers besteht darin, nicht standardisierte (und gleichzeitig realistische) Szenarien zu entwickeln. Standard-Skripte werden in der Regel vom Entwickler selbst entwickelt.

Fazit


Wie man hier keinen Link zu offenen Stellen bereitstellt :)

Und Sie können einfach einen Lebenslauf an job@1c.ru senden .

Source: https://habr.com/ru/post/de432672/


All Articles