Sono un ingegnere compilatore. Questo significa che ho una specializzazione. So alcune cose che la maggior parte degli altri ingegneri del software non sa. E, probabilmente conosco alcuni angoli oscuri del linguaggio, che non potete nemmeno immaginare. Posso anche immaginare casi angolari per linguaggi che non conosco, perché conosco la tecnologia sottostante e ciò che gli implementatori hanno probabilmente fatto.
Tuttavia, questo comporta un compromesso. Ci sono cose che conosco meno del vostro ingegnere medio. Non so molto su come scrivere un'interfaccia utente, specialmente non una grafica. Potrei non sapere molto sul web o sul networking o sui database o soprattutto sulla logica di business. Queste sono tutte cose che non ho fatto molto.
Questo si è rivelato essere un problema a Google.
Non è che volevano che programmassi prima in Python, poi in Java, due lingue che non avevo usato prima di lavorare lì. Molti ingegneri competenti possono imparare un linguaggio nel tempo necessario per capire l'applicazione, specialmente se ci sono esempi esistenti di applicazioni correlate da guardare. Questo è il motivo per cui la gente ti dice che il linguaggio di programmazione non ha importanza, non fissarti su di esso.
No, è stato che mi hanno chiesto di progettare un algoritmo per la condivisione del carico dopo che avevo lavorato alla Intel dove avevamo clienti di telecomunicazioni con requisiti di condivisione del carico in tempo reale. E alla Intel, volevamo dimostrare che si potevano risolvere con computer COTS (commodity off-the-shelf), cioè qualsiasi chip Intel stesse spingendo per il loro segmento di mercato. Questo richiedeva alcuni algoritmi molto intelligenti. Così, mi sono seduto a progettare uno di quei sistemi.
Non era affatto quello che il team della sorella voleva costruire. Volevano solo un semplice database da usare come coda per i lavori in attesa e che si agganciasse al loro sistema di contabilità. Tuttavia, non si sono resi conto (né io all'inizio) che stavo seriamente progettando troppo la soluzione. Penso che abbiano visto tutte le cose che mi preoccupavo di far fare al sistema come "campanelli e fischietti" e hanno dato per scontato che sotto tutto questo ci fosse il loro semplice database. Così, non mi hanno lasciato costruire quello che avevo progettato, e ci sono voluti 9 mesi per superare quel gap di comunicazione. A quel punto, il progetto era in ritardo.
Quindi, se volete un ingegnere compilatore, probabilmente lo volete davvero. Potete anche dire al vostro capo di cercarmi e se non sono disponibile potrei conoscere qualcuno che lo è.
Ma se non volete un ingegnere compilatore, probabilmente non sono la persona che dovreste assumere. Volete qualcuno che conosca il settore in cui state lavorando. Ecco perché molti annunci di lavoro elencano così tanti requisiti. Una persona che fa il giusto tipo di lavoro, spesso soddisfa la maggior parte di questi requisiti perché è quello che ha fatto nel suo ultimo lavoro e in quello precedente e così via.
E mentre posso progettare un semplice sistema di database, dovete essere certi che io sappia che è quello di cui avete bisogno. Non date per scontato che io capisca le vostre esigenze di database solo perché ho costruito parser per SQL. Quello che so di SQL ha poco a che fare con la progettazione di tabelle in forma normalizzata.