Roland Weigelt
Born to Code
-
Folien für "Visual Studio anpassen und erweitern" online
Am Montag waren Jens Schaller und ich bei der .NET User Group Paderborn zu Gast, um einen Vortrag über Anpassung und Erweiterung von Visual Studio 2005 zu halten. Wir hatten ingesamt 15 Zuhörer, angesichts des tollen Wetters eine durchaus erfreuliche Zahl.
Die Folien für die Vorträge liegen nun zum Download bereit (PowerPoint 2007, PowerPoint 2003).
-
Visual Studio anpassen und erweitern - in Paderborn
Mein Kollege Jens Schaller und ich sind am 2. April 2007 bei der .NET User Group Paderborn zu Besuch, wo wir ab 18:00 einen Vortrag mit dem Titel “Visual Studio anpassen und erweitern” halten werden.
Auf der Agenda stehen:
- Code Snippets
- Project und Item Templates
- Makros
- Add-ins
- Packages
Das ist natürlich eine Menge Stoff für einen Vortrag, deshalb werden wir flexibel auf die Interessenslage der anwesenden Zuhörer reagieren. Einen gewissen Schwerpunkt wird es beim Thema “Add-ins” geben, wo wir beide auf unsere Erfahrungen aus der Entwicklung unserer jeweiligen Hobbyprojekte SonicFileFinder (Jens) bzw. GhostDoc zurückgreifen können.
-
Microsoft Community GetTogether auf der CeBIT (non-english post)
Gestern trafen sich MVPs, CLIP-Mitglieder und Leiter von INETA .NET User Groups auf der CeBIT zum “Microsoft Community GetTogether”. Die Veranstaltung bot eine Reihe von Vorträgen zu den Themen User Experience, IIS 7.0 und UI Technologien (an dieser Stelle vielen Dank an Oliver Scheer dafür, dass er für seinen Vortrag die Schriftart im Editor auf Verdana umgestellt hat
), aber ganz klar im Vordergrund stand das Knüpfen und Pflegen von Kontakten. Dafür hatten die Veranstalter auch genügend Raum eingeräumt, so z.B. durch eine zweistündige Mittagspause, die trotzdem irgendwie viel zu schnell vorbei war. Es war schön, so manchen nach endloser “Emailerei” endlich auch mal in Person zu treffen. Für mich persönlich war es auch erfreulich zu erfahren, wie viele Entwickler GhostDoc einsetzen. Und die eine oder andere Support-Anfrage konnte dann auch gleich direkt vor Ort beantwortet werden…
Nach dem offiziellen Teil der GetTogether-Veranstaltung versammelten sich schließlich die Leiter der INETA User Groups zu einem eigenen Treffen. Einer Vorstellungsrunde, in der die Gruppenleiter jeweils ein paar Worte zu ihrer Gruppe sagten, folgte ein Rückblick auf das vergangene Jahr durch Hardy Erlinger (Leiter der INETA Deutschland). Die große Zahl von neugegründeten Gruppen ist ein eindeutiges Zeichen für das stetig wachsende Interesse an .NET und den damit verbundenen Technologien.
Anschließend ging es um die weitere Entwicklung. Ohne auf die einzelnen Punkte eingehen zu wollen (vieles davon ist zum jetzigen Zeitpunkt noch nicht spruchreif), so kann man doch sagen, das es in Zukunft einen verstärkten Austausch von Know-How und Sprechern zwischen den einzelnen Gruppen geben wird. Die Bonner User Group “Bonn-to-Code.Net” wird in den nächsten Monaten Besuch aus Frankfurt erhalten, im Gegenzug wird der Vortrag von Jens Schaller und mir über “Visual Studio Extensibility” (nach Paderborn) auch in Frankfurt zu hören sein.
Alles in allem war das Microsoft Community GetTogether eine sehr gelungene Veranstaltung und ich freue mich – nicht zuletzt wegen der vielen netten Leute, die ich dort getroffen habe – schon auf zukünftige Treffen.
-
Wie gründe ich eine .NET User Group?
Eine .NET User Group ist nicht zuletzt deshalb eine tolle Sache, weil man auf den regelmäßigen Gruppentreffen tatsächlich mal "echte Menschen" trifft. Da diese Treffen üblicherweise an Wochentagen stattfinden, sollte die Gruppe allerdings einigermaßen in der Nähe gelegen sein, schließlich will man nach einem normalen Arbeitstag nicht auch noch Stunden auf der Autobahn verbringen. Nur: was ist, wenn sich partout nichts in der Umgebung finden lässt?
Nachdem ich einige Zeit lang erfolglos nach einer .NET User Group in der Nähe von Bonn Ausschau gehalten hatte, gründete ich im Januar 2006 eine eigene Gruppe mit dem Namen Bonn-to-Code.Net (die Ehre für das grandiose Wortspiel gebührt übrigens einzig und alleine meinem Kollegen Jens Schaller ;-). Ich habe den Entschluss nie bereut, denn die Gruppe läuft sehr erfolgreich und macht jede Menge Spaß. Natürlich muss man schon ein wenig Arbeit in die Organisation investieren, aber das wird durch viele neue interessante und nette Kontakte mehr als aufgewogen.
Aus den persönlichen Erfahrung heraus habe ich einmal diverse Tipps zusammengestellt, die die erfolgreiche Gründung einer User Group erleichtern können.
Empfehlung: Zuerst einen Veranstaltungsort suchen
Man kann sicherlich erst die Gruppe gründen und sich dann nach einem geeigneten Ort für die Treffen umsehen - evtl. in der Hoffnung, dass ein anderer Interessent einen Raum anbieten kann. Die Ausgangssituation für das Anwerben von Mitgliedern ist jedoch eine ganz andere, wenn dieses Thema von Anfang an geklärt ist.
Ich persönlich hatte das Glück, die hervorragend ausgerüsteten Konferenzräume meines Arbeitgebers nützen zu können, der davon allerdings auch zunächst einmal überzeugt werden wollte.
Mal probieren: Den Arbeitgeber überzeugen
Wer darüber nachdenkt, ebenfalls beim Arbeitgeber nachzufragen, sollte gut vorbereitet sein. Zunächst empfiehlt es sich, eine Liste mit Risiken und Chancen zu erstellen:
- Was sind die Risiken?
- Öffentliche Veranstaltungen in Firmenräumen stellen grundsätzlich ein potentielles Sicherheitsrisiko dar.
- Externe Entwickler könnten von firmeninternem und evtl. sehr speziellem Know-How profitieren
- Gute Mitarbeiter haben nach außen eine erhöhte Sichtbarkeit (z.B. durch Vorträge) und könnten evtl. abgeworben werden.
- usw.
- Öffentliche Veranstaltungen in Firmenräumen stellen grundsätzlich ein potentielles Sicherheitsrisiko dar.
- Was sind die Chancen für die Firma?
- Die Fortbildung der eigenen Mitarbeiter wird gefördert, ohne dass die Firma dafür Zeit oder Geld bereit stellen müsste.
- Frische Konzepte und Ideen können von außen in die Firma hinein getragen werden.
- Die Firma erhält Gelegenheit zu demonstrieren, dass sie ein attraktiver Arbeitgeber ist. Dabei wird der Bekanntheitsgrad gerade bei den Entwicklern erhöht, die dadurch interessant sind, dass sie eine gewisse "Energie" haben und sich nach einem Arbeitstag auch noch Abends um ihre Fortbildung kümmern.
- usw.
- Die Fortbildung der eigenen Mitarbeiter wird gefördert, ohne dass die Firma dafür Zeit oder Geld bereit stellen müsste.
Darüber hinaus sollte man sich auf mögliche Fragen vorbereiten, und diese auch ruhig von sich aus vorwegnehmen:
- Was sind die Kriterien, nach denen Mitarbeiter entscheiden können, über welche Themen sie auf einem Treffen sprechen können? Klar ist: wenn man etwas in fünf Minuten über Google findet, kann es kein Geschäftsgeheimnis sein - aber wo liegen evtl. Grenzfälle?
- Wie wird sichergestellt, dass kein Besucher unbeaufsichtigt im Firmengebäude umherwandern kann? Im Zweifelsfall müssen Besucher bis zu den Toiletten begleitet werden (z.B. gängige Praxis bei Bonn-to-Code.Net, auch weil einige Flurtüren Abends abgeschlossen sind).
- Wie wird sichergestellt, dass sich kein Besucher in's Netzwerk einklinkt?
- usw.
Eine gute Vorbereitung vor einer Anfrage beim Arbeitgeber demonstriert auch, dass man verantwortungsvoll und im Interesse der Firma handelt.
Bloß nicht übertreiben: Die Website aufbauen - aber richtig!
Das ist ein Punkt, bei dem man vieles falsch machen kann. Deshalb einige wichtige Punkte:
- Zunächst klein und einfach anfangen.
Es bringt nichts davon zu träumen, was man mit Foren, Wikis etc. anfangen könnte. Damit so etwas auf Dauer funktioniert, ist eine gewisse "kritische Masse" notwendig, und die ist schon im Internet schwer zu erreichen, geschweige denn im Kontext einer lokalen User Group. - Im Endeffekt zählen die Inhalte.
Vollkommen egal, ob man mit einem CMS oder einer einzelnen HTML-Seite anfängt: das Wichtigste ist, dass sich regelmäßig etwas auf der Website tut. Man kann z.B. in der Art eines Weblogs die Schritte bei der Gründung der User-Group beschreiben. Auch hier gilt wieder: beim Stichwort Weblog nicht zuerst an die Technik denken (Kommentare, Trackbacks, Pings), sondern an die Inhalte - und die kann man am Anfang auch einfach auf eine statische HTML-Seite schreiben. - Die menschliche Seite nicht vergessen
Bei meiner Suche nach einer Gruppe fielen mir eine Reihe von User Group Websites auf, die einen recht anonymen Eindruck machten. Dabei spielte es keine Rolle, ob sie sich auf das absolute Minimum beschränkten oder technisch aufwändig gemacht waren. Das Problem war, dass Sie nicht durch Wort und Bild das Gefühl vermittelten, dass dahinter eine Gruppe netter und interessanter Menschen steht. Insbesondere dann, wenn man als Besucher noch überlegt "ob so eine User Group überhaupt etwas für mich ist", sind es kleine Details die entscheiden, ob man sich den entscheidenen Ruck zur Kontaktaufnahme gibt. Und wenn man als Gründer am Anfang ganz alleine da steht: Warum nicht einfach auf die Website schreiben: "Hallo, ich bin X, interessiere mich für Y und Z und möchte eine User Group gründen". Ganz einfach, menschlich und sympathisch. - Nichts "verkaufen".
Sicherlich gibt es Vorteile für die Mitglieder einer in der INETA organisierten User Group (z.B. Rabatte beim Kauf von Software und Büchern), aber das sollte nicht im Vordergrund stehen. Es geht ja nicht darum, Kunden zu suchen und zu überzeugen, es geht einfach nur darum dass sich ein Haufen von netten Leuten zusammenfindet und Spass hat. - Narrensichere Anfahrtsbeschreibung
Jedes Bisschen Zeit, das darin investiert wird, kann im Zweifelsfall einen Besucher mehr oder weniger bedeuten ;-)
Alles ist erlaubt: Werbung machen
Für die Werbung sollte alles genutzt werden, was möglich ist. Manchmal reicht es schon, wenn mit einer Werbeaktion eine einzige Person angesprochen wird, weil die wiederum jemanden kennt, der jemanden kennt, usw. Also: Werbung im eigenen Weblog (soweit vorhanden), auf Community-Sites wie z.B. Codezone.de oder auch Netzwerken wie XING. Flyer, Poster, Aushänge - an der Uni, im Baumarkt, in Computerläden, alles ist erlaubt.
Jetzt wird es ernst: Das erste Treffen planenWie man an das erste Treffen herangeht, dafür gibt es sicherlich eine ganze Reihe Möglichkeiten. Zwei sehr unterschiedliche Ansätze, die ich persönlich erlebt habe (mit Bonn-to-Code.Net und in der Kölner Gruppe DNUG Köln) haben beide zum Erfolg geführt:
- Die Teilnehmer stellen sich zunächst einmal vor.
In Bonn bestand das erste Treffen alleine aus kurzen "Mini-Vorträgen" auf jeweils zwei bis drei PowerPoint-Folien, in denen jeder Teilnehmer sich und seine Interessen vorstellte. Dieser Ansatz skaliert natürlich nicht sonderlich gut (ab etwa 15 Personen wird es kritisch), aber rückblickend hat dies die Gruppe sehr schnell vorangebracht. Die Teilnehmer haben sich schnell kennengelernt und viele der ersten Teilnehmer gehören bis heute zum harten Kern. Dieses Treffen hatte keinerlei technischen Inhalte, es ging alleine um zukünftige Themen und einen Termin für das nächste Treffen. - Start mit einem "großen Knall"
In Köln wurde für das erste Treffen ein relativ bekannter Sprecher für einen Vortrag gewonnen. Es blieb wenig Zeit für Organisatorisches, und nach dem Vortrag war der Sprecher sehr stark im Fokus des Interesses. Trotzdem läuft die Kölner Gruppe mittlerweile auch erfolgreich. Der Vorteil des "großen" Auftakts war dabei, dass dadurch Teilnehmer angelockt wurden, die nach eigenen Aussagen sonst nicht gekommen wären - viele davon sind heute noch regelmäßige Besucher.
Es wäre auch ein gemischter Ansatz denkbar, d.h. ein kurzer technischer Vortrag kombiniert mit einer kurzen mündlichen Vorstellungsrunde. Allerdings ist bei der Vorstellung die Kombination von Text, Bildern und Sprache weitaus effektiver, auch deshalb, weil sich die Leute zu Hause in Ruhe Gedanken machen können, wie sie sich präsentieren wollen.
Es kommt schneller als man denkt: Das zweite Treffen
Natürlich wäre es ideal, wenn sich bereits beim ersten Treffen herauskristallisiert, dass man einen ganzen Pool von potentiellen Vortragenden zur Verfügung hat. Da dies in der Praxis nicht unbedingt der Fall sein muss, sollte man für das zweite Treffen einen "Plan B" haben - im Notfall indem man als Gruppenleiter selbst einen Vortrag hält. Wichtig dabei: Auch wenn man eine ganze Reihe von Themen hat, über die man sehr gerne einen Vortrag halten würde, sollte es zunächst höchste Priorität haben, möglichst schnell andere in das Halten von Vorträgen einzubinden. Dies führt uns auch gleich zum nächsten Punkt.
Einstiegshürden senken: Schnell neue Sprecher gewinnen
Die Vorbereitung eines Vortrags ist harte Arbeit. Dies kombiniert mit einer gewissen Scheu, vor Publikum zu sprechen, sorgt dafür dass einige, die eigentlich dafür qualifiziert wären, keinen Vortrag halten. Eine User Group lebt aber davon, dass sich möglichst viele Personen einbringen. Es gibt diverse Möglichkeiten, potentiellen Sprechern entgegen zu kommen, in dem man einige der typischen Einstiegshürden senkt:
- Angebot einer fertigen PowerPoint-Vorlage
Nicht jeder ist ein Könner im Umgang mit PowerPoint. Eine bereits vorbereitete Vorlage hilft Nicht-Designern, sich auf die Inhalte zu konzentrieren und trotzdem attraktive und lesbare Vorträge zu gestalten. Gleichzeitig sorgt man für ein gewisses "Branding", wenn die Folien ein einheitliches Aussehen im Design der User Group haben. Selbstverständlich sollte die Verwendung der Vorlagen freiwillig sein.
- Einführung des Konzepts eines "QuickTips"
Nicht jeder Vortrag muss unbedingt ein stundenlanges Epos sein. Manchmal ist es vielleicht nur ein Hinweis auf einen Hotkey, eine kleines Tool oder eine Website, die dafür sorgt, dass die Teilnehmer eines Treffens mit dem guten Gefühl nach Hause fahren, dass sich der Besuch gelohnt hat. In der Bonner Gruppe besteht ein QuickTip nur aus wenigen Folien: Was ist das Problem, was ist die Lösung, vielleicht eine kurze Demo (die man z.T. aber auch mit Screenshots simulieren kann, was den Aufwand drastisch reduziert) - fertig.
Es gibt viel mehr talentierte Sprecher in den Reihen einer User Group, als man vermuten mag, man muss sie nur finden. Das Wichtigste ist, jemanden zu einem ersten Vortrag zu bewegen. Wenn der gut gelaufen ist, ist der nächste Vortrag ein viel geringeres Problem.
Also: Auf geht's!User Groups machen Spass, bringen viele neue Kontakte und man lernt eine ganze Menge dabei. Und wenn in der näheren Umgebung keine zu finden ist, dann wird es höchste Zeit, durch Gründung einer eigenen Gruppe Abhilfe zu schaffen...
- Was sind die Risiken?
-
SonicFileFinder 1.8 Released
My colleague Jens Schaller has released a new version of SonicFileFinder, a free add-in for Visual Studio 2005. SonicFileFinder adds a fast search for files in the current solution, just by entering parts of the file name. This is definitely one of those tools I install on every development machine I work on.
The new version has a long list of additions and fixes, my personal highlights are (in no particular order):
- Opening the Windows Explorer for the selected file will now not only open the containing folder, it will also select the file.
- The feature “Search by Initials” now works with partial matches. For example typing the uppercase letters “PB” will find “PrefetchBuffer.cs” as in earlier versions, but also “PrefetchBufferManager.cs”, “PrefetchBufferException.cs” etc.
- Fixed support for multi-monitor systems (nice if you have multiple copies of Visual Studio opened on different monitors)
Jens has also added Vista compatibility for the installer – before anyone is asking: yes, I’ll add that to GhostDoc in the next minor release (no idea regarding a release date yet, I’m currently busy finishing an important part of another hobby project). In the meantime, there’s a workaround, see the GhostDoc website for more information.
Update 2007–02–23: Jens just put up a bugfix release (SonicFileFinder 1.8.1)
-
Custom Editing Behavior for DataGridView TextBox Columns
I’m currently working on a hobby project where I’m displaying a list of files in a way similar to the “details” view of Windows Explorer. For various reasons I’m using a DataGridView instead of a ListView, and while configuring the DataGridView to look like a ListView wasn’t much of a problem, there’s one thing that got on my nerves, which is the behavior of textbox cells in edit mode: It is much too easy to leave the edit mode accidentally, simply by pressing the cursor keys at the wrong time. For example when the text caret is positioned behind the last character of the textbox cell content, and you press the right arrow key: the focus then moves to the next cell. There are certainly use cases for this behavior, but for my purposes I wanted the text caret to be “captured” inside the textbox in edit mode until you press Enter, Tab or Escape (or use the mouse to click another cell).
The nice thing about the DataGridView is that you can tweak it a lot by deriving from existing classes for cells, columns and editing controls, overriding certain methods. In my case I suspected that the DataGridViewTextBoxEditingControl (derived from TextBox) would contain special code to determine when the cell should leave edit mode. As I didn’t know what to search the documentation for (and I was too impatient to read it completely, to be honest), I fired up Lutz Roeder’s Reflector and took a look at the decompiled code of the class members. With the option “Show Inherited Members” switched off it took me only a couple of seconds to come across the code of the EditingControlWantsInputKey method which looked exactly like what I was expecting (lucky me: it was the 4th member in the list ;-).
So here are the steps to change the behavior of the editing control:
First derive a class from DataGridViewTextBoxEditingControl and override the EditingControlWantsInputKey method:
public class CustomDataGridViewTextBoxEditingControl
: DataGridViewTextBoxEditingControl
{
public override bool EditingControlWantsInputKey( Keys keyData, bool dataGridViewWantsInputKey )
{
switch (keyData & Keys.KeyCode)
{
case Keys.Prior:
case Keys.Next:
case Keys.End:
case Keys.Home:
case Keys.Left:
case Keys.Up:
case Keys.Right:
case Keys.Down:
case Keys.Delete:
return true;
}
return base.EditingControlWantsInputKey( keyData, dataGridViewWantsInputKey );
}
}Then derive a class from DataGridViewTextBoxCell and override the EditType property to use the customized editing control:
public class CustomDataGridViewTextBoxCell
: DataGridViewTextBoxCell
{
public override Type EditType
{
get { return typeof( CustomDataGridViewTextBoxEditingControl ); }
}
}Finally derive a class from DataGridViewTextBoxColumn to be able to use the new cell type.
public class CustomDataGridViewTextBoxColumn
: DataGridViewColumn
{
public CustomDataGridViewTextBoxColumn()
: base( new CustomDataGridViewTextBoxCell() )
{
}
}You can now use the new column type in your code as a replacement of the stock DataGridViewTextBoxColumn (the new type appears in the drop down lists for column types in the designer dialogs of the DataGridView control).
A demo project is available here, showing a DataGridView with a normal DataGridViewTextBoxColumn and the CustomDataGridViewTextBoxColumn next to each other, so you can compare the different behaviors.
-
GhostDoc in "Windows Developer Power Tools"
Today I received my copy of “Windows Developer Power Tools” by James Avery and Jim Holmes, to which I contributed a chapter about my Visual Studio add-in GhostDoc, comparable in scope to what I wrote for “Visual Studio Hacks”. For the chapter in “Tools” (which grew to 7 pages compared to 5 in “Hacks”), I took the opportunity to be more clear about what GhostDoc can do, and what it cannot achieve, and what to look out for e.g. when re-using inherited documentation.
A small error was introduced in editing of my original text (which by the way turned out surprisingly tame considering the fact that English is not my native language): Unlike suggested by the text on page 314 “when you want to document a method or class”, GhostDoc does not generate documentation for classes. On a sidenote: While this is a feature that has been requested a couple of times, it hasn’t been implemented yet. And honestly, I’m not quite sure of the value of such a feature, let alone what exactly it is supposed to do (most of the examples I have received so far show a certain ELIZA effect concerning the belief in GhostDoc’s abilities, but I’m still open to suggestions).
To bring the topic back to the book: at more than 1300 pages, it contains a lot of stuff, covering more than 170 free and open source tools for developers. The concept of the book is to describe each tool on roughly 3 to 10 pages, helping you to decide whether or not to give it a shot, and if so, how and where to start. If “Windows Developer Power Tools” saves you from either missing a really good tool, or installing some crud software in the process of finding one, the book has reached its goal and saved you a lot of time (and maybe even trouble). As one reviewer puts it “You could spend your time tracking down these applications, but why?”. From what I can tell by a first quick glance at the table of contents and skimming the pages, definitely an interesting book.
-
Five Things about Me
The game of blog-tag has finally reached me: i got tagged by Albert. While this is obviously a pyramid scheme which at some point will collapse, I must admit that I have enjoyed reading the “five things” entries of other bloggers so far. So here we go, five things you probably don’t know about me:
- As a child back in the 70s, the children’s TV series “Wickie der Wikinger” (Vicky the Viking) and “Sendung mit der Maus” have played a big role in getting me interested in science and technology.
- At primary school, I was the first in my class to borrow a book from the public lending library in our school building. I went to the library on the day we received the ID cards, right after school, even though I knew that I would miss the school bus (that was before I was allowed to ride the bike to school); fortunately the walk home was only 20 minutes. The first book I borrowed was a children’s book about the exploration of space.
- I have a long list of failed hobby projects in the time between 1983 and 1986. Overambitous designs, fragile architectures collapsing after minor changes, lack of documentation causing incomprehensible code, loss of interest after a few weeks – all the things you can expect from a typical teenager. Looking back I learned some of the most valuable lessons in that time.
- I once wrote a Sidekick clone called SideWorx for the 8bit computer CPC 464 (by Amstrad, sold by Schneider in Germany). Even though the program worked very well with other programs, its reliance on a rarely-used third-party memory expansion kit prevented any success. Computer magazines I sent the program to ignored it, presumably because the editors weren’t able to try it out. This was before the Internet and access to a BBS was out of reach for me at that time, so without any chance to spread the word, SideWorx had in total the impressive number of four users (my father, two of his colleagues, and myself).
- As a student at university, I got hired more or less immediately after using a self-written tool in a programming class. Students had to develop a program in Turbo Pascal, teaming up in pairs. I ended up with some other guy I didn’t know and we started coding. After some time we ran into a situation where we needed to modify the source code in a very repetitive way. I left the IDE, grabbed a disk out of my backpack and started up a text editor with a macro recorder. The other guy asked where I got the editor from and I told him that I wrote it myself. What I didn’t know was that he – at age 19 – had his own software company and a fat BMW standing in front of the university building…
-
Ten Years at Comma Soft
Today, exactly ten years ago, I started working at Comma Soft here in Bonn, Germany, coming straight out of university. Just amazing how fast time has gone by. Ten years at the same company is even more amazing considering the fact that I originally had planned to stay maybe one or two years, just enough to gain some professional experience, and then move on.
But towards the end of 1997 I joined what would later become the infonea product team. Working in a team of nice and intelligent people (neither nice bozos nor intelligent back-stabbers are helpful in the long run), using a wide array of different technologies over the years, made me stay. And I'm pretty sure that I may stay just a bit longer, because there must be really good reasons to leave a workplace where I have these two very nice TFT monitors (24” @ 1920x1200 + 20” @ 1650x1080) on my desk ;-)
(Photo published with kind permission of Comma Soft AG)Update: The story "How I got Hired Straight out of University" is now online.
-
Part 6: How I got Hired Straight out of University
How I got Hired Straight out of University
Monday, January 6th, 1997: This was the first day of the new year back at the Institute of Physics at Bonn University, and at the same time I knew it was about to be one of my last days. The past 14 months I had worked on my diploma thesis, which involved developing a C++ library for accessing data acquisition and motor controller modules for various bus systems. I had already turned in the thesis paper and given a talk about the project back in December, but had to wait for the results. In the meantime I was wrapping up loose ends in the code base, getting ready to move out the office, and surfing the web for a job as a software developer.
While I did have a (somewhat vague) job offer at a company I had worked for as a student, the actual job interview (more or less pro forma I was assured) had been delayed over and over again as an important meeting deciding on how many people should be added to the company hadn’t taken place. It was now scheduled for end of January ("this time for sure").
After some time in my office I thought a hot chocolate would be nice. I went to the vending machine in the hallway, where I ran into one of the two professors who had read and evaluated my thesis paper. The professor told me he liked my work and asked me about my plans after university. When I answered that I was looking for a job as a software developer, he said he knew some people at a local company and could make a contact. Of course I accepted his offer, but having been promised many things in my life before (with only a fraction actually coming true) I remained a bit sceptical. It was quite a surprise when only 15 minutes later I received an email from a person at Comma Soft, asking me to call him on the phone. I called and we talked a bit about my work. After about 10 or 15 minutes he asked me if I’d like to come over for a job interview – the next day!
Tuesday, January 7th: The job interview. I was nervous, my heart pounding. After all, it was my very first job interview, ever. The interview wasn’t done by the person I had talked to on the phone, but two developers. The interview started with some questions about my diploma thesis which went pretty well. After that came questions about how I would approach future projects, how I would design class hierarchies, what I thought about multiple inheritance, and so on - nothing too technical. Then one of the interviewer changed the topic:
- Interviewer: "Ok, let's see... Well, we could ask you about X…"
- Me: "..." (hmm, I hope he won’t go too deep)
- Interviewer: "…or we could ask you about Y"
- Me: "…" (ouch, I’d have to look that up)
- Interviewer: "But these are things that we assume you either know…"
- Me: "…" (hmm…)
- Interviewer: "…and if you don’t, you could look them up."
- Me: "…" (phew)
- Interviewer: "So here’s a question that may be a bit unfair, I’m not sure, just to get a picture of you, not necessarily a problem if you can’t answer that…"
- Me: "…" (uh uh, this doesn’t sound good…)
- Interviewer: "Do you have a rough idea what a C++ compiler does with virtual methods behind the scenes, i.e. how they are translated?"
Tons of rocks dropped from my heart. What a coincidence.
When I started my diploma thesis, I had to debunk the myth that C++ was automatically much slower than C, otherwise I wouldn’t have been allowed to use something so "advanced" as C++. Among other things, I had to do perform some benchmarks on the various possible types of C++ function calls (standalone functions, class member methods, and of course virtual methods), compared to C functions calls (standard call, via a function pointer, via a pointer to a function pointer). I included the benchmark for the call via a pointer to a function pointer reasoning that if I had to reproduce in C what I could do with a virtual function call in C++, pointers to function pointers would be something I'd use. Not surprisingly, the times measured were comparable.
When I started mentioning that fact, the interviewer cut my answer short and said "yeah, there’s this vtable thing, and then these function pointers and stuff, … I guess we stop here, thank you". The two devs left the room, a couple of minutes later the door opened and somebody else came in, turning out to be the person I had talked to on the phone. When he started a monologue about what a great company Comma Soft is, I knew they wanted me. But we didn’t close a deal yet, instead we agreed that I would send them my final results as soon as I got them from university and that I would hear from them.
Wednesday, January, 8th: In the morning I received my final results (sooner than expected), and faxed them over to Comma Soft. A couple of hours later I received a call from Comma Soft and was asked how much money I wanted. I told the person what the other company was offering, he said that it sounded reasonable and asked me if I would like to come over the following Monday to sign a contract.
Monday, January, 13th: With the contract ready to be signed, one final question remained: When would be my first day at Comma Soft? I told them I would like to start as quick as possible. At that time I didn’t have money for a journey and my idea of fun was spending my spare time learning Windows programming (prior to that, I had developed in private mostly DOS, and the diploma thesis was for *ix systems). They said "well, we don’t have a computer ready for you by tomorrow, but what about Wednesday?". I agreed and signed the contract.
Wednesday, January, 15th 1997: My first day of work at Comma Soft. Funny, originally I had planned to choose my first company very carefully - and here I was sitting at a desk just nine days after my first contact with an unknown company! On the other hand, the people I met and my overall impression of the company seemed nice enough to convince me. I reckoned that I could start looking for another company if things wouldn't work out, making some money and gaining some experience in the mean time.
Well, things worked out better than expected. An important step was that in fall 1997 I joined what would later become the infonea team that I’m still a part of. But that's another story...
P.S. I received an email from the other company at the end of January. Now they were ready for a job interview - but I wasn't anymore.