C++ Software Engineer/Developer (Middle Level)

C++ Software Engineer/Developer (Middle Level)

Posizione
Sviluppatore/Software Engineer C++ Cross-Platform (Middle Level)

Chi stiamo cercando
Stiamo cercando uno Sviluppatore Software C++ con almeno 3 anni di esperienza professionale da inserire nel nostro team di sviluppo.
La risorsa deve avere comprovata esperienza e forte orientamento alla qualità del codice, per lavorare su applicazioni e componenti software in ambiente embedded, desktop e mobile. Il/la candidato/a sarà coinvolto/a nello sviluppo di moduli software mission-critical complessi, basati su C++, Qt e Android, con particolare attenzione alla programmazione multithreading.
La figura ricercata deve mostrare una buona autonomia tecnica, capacità di analisi funzionale e padronanza delle logiche di integrazione tra componenti distribuiti.

Requisiti tecnici

Il/la candidato/a ideale possiede:
• Solida preparazione accademica. Preferibilmente una laurea in Ingegneria Informatica, Informatica o equivalenti.
• 3–5 anni di esperienza professionale nello sviluppo software, maturati in contesti strutturati e orientati alla produzione di soluzioni complesse, robuste e manutenibili.
• Ottima conoscenza del linguaggio C++ (standard C++11 o successivi), incluse:
o gestione avanzata di memoria (RAII, smart pointers),
o STL e container moderni,
o gestione delle eccezioni,
o compilazione cross-platform.
• Esperienza comprovata nello sviluppo con framework Qt, con particolare familiarità con:
o Qt Widgets
o QML / Qt Quick per interfacce moderne reattive,
o gestione di signal/slot, threading Qt, networking e moduli multimediali.
• Esperienza nello sviluppo software per Android, incluse:
o compilazione cross-compile (NDK),
o utilizzo di toolchain mobile,
o gestione delle risorse e ottimizzazione delle performance su device mobili.
• Ottima conoscenza dell’ambiente Linux, in particolare:
o utilizzo avanzato della shell,
o gestione dei permessi e del filesystem,
o compilazione tramite toolchain GCC/Clang,
o debugging tramite strumenti ad-hoc (es.: gdb, valgrind, strace)
o gestione dei processi e logging a livello OS.
• Competenza nell’uso di almeno un linguaggio di scripting (bash, shell o equivalenti) per automatizzare attività di build, test, manutenzione ambienti o deployment.
• Esperienza nella programmazione multithreading, includendo:
o gestione delle concurrency primitives (mutex, semaphore, condition variable),
o design thread-safe di componenti complessi,
o debugging di race condition e deadlock.
• Esperienza nello sviluppo su sistemi embedded, con competenze su:
o gestione risorse limitate,
o interfacciamento con componenti hardware,
o timing, real-time constraints,
o cross-compilazione e deployment su target dedicati.
• Familiarità con strumenti di software configuration management, come:
o Git (branching strategy, merge, pull request),
o SVN per la gestione di repository legacy,
o utilizzo di workflow collaborativi e best-practice di versioning.

Requisiti preferenziali (nice to have)

• Conoscenza del linguaggio Python, utile per attività di scripting avanzato, automazione di processi, generazione di tool ausiliari e sviluppo di piccoli moduli di supporto all’infrastruttura software.
• Esperienza nell’esecuzione di unit test, con particolare familiarità con framework di testing per C++ quali:
o Google Test (gTest)
o Qt Test inclusi aspetti come mocking, test parametrizzati, coverage e integrazione dei test nelle pipeline di build.
• Familiarità con metodologie Agile (Scrum o Kanban), incluse:
o gestione del flusso di lavoro tramite Jira,
o partecipazione attiva a sprint
o code review
o capacità di collaborare in cicli iterativi orientati alla delivery continua.
• Conoscenza o utilizzo di strumenti basati su Intelligenza Artificiale
• Conoscenza degli strumenti di build e configurazione, quali:
o CMake, per la gestione cross-platform di progetti complessi, modularizzazione e configurazione avanzata,
o qmake, per progetti Qt legacy o specifici del framework.

Responsabilità principali

La risorsa sarà coinvolta nelle seguenti attività tecniche:

• Sviluppo e manutenzione di applicazioni software in C++, includendo:
o progettazione e implementazione di componenti core,
o ottimizzazione delle performance e gestione avanzata della memoria,
o integrazione con librerie di sistema o di terze parti.
• Sviluppo di interfacce e applicazioni cross-platform basate su Qt, comprendendo:
o utilizzo di Qt Widgets
o sviluppo di interfacce reattive tramite QML / Qt Quick,
o integrazione dei componenti UI con logiche applicative complesse.
• Implementazione di componenti software per Android
• Sviluppo e manutenzione di script e strumenti di automazione, includendo:
o realizzazione di script bash/shell per automatizzare build, deployment e toolchain,
o creazione di utility interne per migliorare il flusso di lavoro del team.
• Contributo attivo alla definizione delle specifiche tecniche, con:
o analisi dei requisiti funzionali e non funzionali,
o redazione della documentazione tecnica (diagrammi architetturali, API contract, design document),
o partecipazione a revisioni architetturali e design review.
• Collaborazione strutturata con i team di sviluppo, QA e architettura, comprendendo:
o partecipazione alle attività di code review e pair programming,
o allineamento costante con QA per definizione dei test e validazione delle funzionalità,
o interazione con l’area architettura per garantire coerenza con gli standard progettuali.

Profilo ideale
Il/la candidato/a ideale, oltre alle competenze tecniche richieste, dimostra una solida capacità di operare in contesti strutturati e orientati alla qualità del software. È in grado di analizzare problemi complessi, proporre soluzioni tecniche efficaci e contribuire attivamente al miglioramento continuo dell’architettura applicativa. Mostra un’elevata attitudine al problem-solving, cura per i dettagli e capacità di lavorare in modo autonomo nella gestione delle proprie attività, garantendo affidabilità, precisione e rispetto delle tempistiche.
La risorsa possiede inoltre ottime capacità comunicative, fondamentali per collaborare con analisti, sviluppatori e stakeholder di progetto; sa documentare il proprio lavoro in modo chiaro e strutturato e affronta con flessibilità l’evoluzione dei requisiti funzionali. Ha un mindset orientato alla collaborazione, al confronto costruttivo e alla condivisione delle conoscenze, contribuendo alla crescita complessiva del team.

Candidatura

Candidati