Esiste un modo non soggettivo per misurare le capacità di programmazione al fine di soddisfare i test di programmazione?

2

Prima di iniziare a leggere:

Non sapevo se avrei dovuto postare questo qui o sul posto di lavoro, ma dato che la mia domanda riguarda più la parte del "linguaggio di programmazione" ho pensato che sarebbe andata meglio qui. Le mie scuse se non è il caso.

Inoltre, sono consapevole che esiste una domanda simile qui , ma il contesto è leggermente diverso e ho pensato che sarebbe stato meglio postare un'altra domanda piuttosto che scavare quella vecchia.

Circa poche ore fa, mi è stato chiesto di completare un test "intermedio C ++" per un'applicazione di lavoro. Sembra che questo test non sembri adatto ai programmatori "intermedi" per me.

Anche se chiaramente non mi considero un abile programmatore C ++, non penso di essere un principiante assoluto. Pratico il C ++ da alcuni anni, insieme ad altri linguaggi di programmazione e cose più concettuali come algoritmi e schemi di progettazione. Se dovessi descrivere me stesso come programmatore, direi che:

  1. Non sono un esperto in nessuna lingua, ma finora ho conosciuto abbastanza cose per gestire tutti i progetti che mi sono stati dati.
  2. Se c'era qualcosa che non sapevo, allora l'ho imparato "al volo" e sono riuscito a portare avanti il progetto su cui stavo lavorando.
  3. Ho un'esperienza lavorativa in C ++.

Eppure questo test intermedio mi ha chiesto domande molto specifiche come l'impatto dell'overloading dell'operatore "nuovo", o manipolazioni di stringhe con strtok , memmove e così via. So che queste cose possono essere utili, ma anche in un contesto lavorativo, non ho mai dovuto fare cose del genere. Dovevo fare altre cose specifiche, ma troppo male, non faceva parte delle domande poste.

(Nel mio contesto, l'applicazione è per lo sviluppo di JavaScript con una dimensione algoritmica molto strong, ma poiché non ho mai usato JavaScript, mi hanno testato su C ++, visto che ho intenzione di lavorare di più sulla parte dell'algoritmo. in realtà non mi prova su un contesto specifico che giustificherebbe le domande specifiche).

Ovviamente la mia idea di ciò che uno sviluppatore C ++ intermedio dovrebbe sapere è sbagliata qui, o questo test non è fatto per misurare le abilità intermedie globali. Voglio dire, pensavo di essere un programmatore intermedio, ma potrebbe essere perché ho preso in considerazione la mia capacità di trovare rapidamente le risposte alle mie domande. Quindi potrei essere più uno "sviluppatore principiante con la capacità di apparire come uno sviluppatore intermedio (dato qualche minuto)" piuttosto che un vero "sviluppatore intermedio".

Quindi considererò la prima ipotesi vera e dirò che questo tipo di test è abbastanza buono per misurare le capacità di programmazione.

In che modo puoi misurare efficacemente le tue capacità di programmazione in una lingua al fine di rispettare questi test? Quali sono in realtà questi test che cercano di misurare e cosa posso migliorare per migliorarli (e potenzialmente essere assunto per un lavoro ...)?

    
posta Sonia Seddiki 18.12.2016 - 19:30
fonte

2 risposte

3

C ++ è gigantesco . Non solo come una lingua o una biblioteca, ma in termini di stili di codifica e comprensione. Sotto l'ombrello di C ++, trovi gli stili OOP, gli stili di programmazione funzionale, la metaprogrammazione, la programmazione di basso livello e molti altri.

Dire che sei "intermedio" è essenzialmente inutile per dire qualcosa su ciò che sai veramente del C ++ come lingua. Qualcuno può essere un esperto della parte OOP del regno C ++, mentre può essere facilmente mistificato da profondi costrutti metaprogrammanti. Qualcuno esperto nell'usare C ++ come C-with-classes può essere confuso dai più semplici idiomi iostream. Alcune persone hanno utilizzato C ++ per decenni senza comprendere le specifiche del modello a oggetti C ++.

Non esiste uno standard obiettivo per ciò che significa essere un programmatore C ++ "intermedio". Sarebbe molto meglio elencare le tue reali competenze in C ++.

Per quanto riguarda il test stesso, è probabilmente utile trovare programmatori C ++ che sono abituati a un C-con-classi o uno stile di basso livello. Ma non lo userei come cartina di tornasole per decidere chi è "intermedio" e chi no.

Non hai postato le domande specifiche, ma chiedere informazioni su memmove suggerisce strongmente contenuti di memoria profondi e di basso livello. La ragione è che in C ++, memmove può essere estremamente pericoloso, e può essere usato solo ragionevolmente su oggetti che si adattano a una classificazione specifica (in C ++ 98/03, che era POD. In C ++ 11, che chiamiamo loro banalmente copiabili ). Questo è il tipo di cose che le persone che si occupano di operazioni di memoria ad alte prestazioni devono sapere.

strtok suggerisce l'approccio C-with-classes. È un'API che C ++ ereditato da C . Ma a differenza di memmove , esistono modi C ++ per tokenizzare le stringhe che sono generalmente superiori a questo. L'utilizzo di stringstream e ripetute chiamate getline sarebbe altrettanto efficace e molto più sicuro.

Utilizzerai strtok solo se gli strumenti C ti sono più familiari, o se hai assolutamente bisogno di ogni grammo di prestazioni nel tuo tokenizzatore di stringhe.

Devo sottolineare il punto di mobileink nei commenti . È molto bizzarro per un'azienda testare la tua conoscenza del C ++, quando stanno pensando di assumerti per scrivere algoritmi piuttosto che codice C ++.

    
risposta data 18.12.2016 - 21:12
fonte
3

Completamente oggettivo (e altrettanto utile della maggior parte dei test):

#include <random>
#include <iostream>

int skill() { 
    static std::mt19937_64 gen{std::random_device()()};
    static std::uniform_int_distribution<int> range(1, 10);

    return range(gen);
}

int main(int argc, char **argv) { 
    if (argc != 2) {
        std::cerr << "Usage: skill_level <candidate name>\n";
        return EXIT_FAILURE;
    }

    std::cout << "On a scale of 1 to 10, " << argv[1] << " rates a: " << skill() << "\n";
}

Se vuoi un risultato che è utile, probabilmente diventerà piuttosto soggettivo. I test oggettivi testano soprattutto la capacità di rigurgitare fatti su richiesta, ma ciò che conta per la programmazione reale è comprendere .

Mentre penso sia giusto affermare che almeno una certa conoscenza dei fatti è necessaria per la comprensione, non riesco a immaginare che qualcuno pensi che sia (anche vicino) sufficiente. In quanto tale, sei praticamente bloccato a indovinare il loro livello di comprensione basato su indicatori che combinano indirezione e soggettività in vari gradi.

    
risposta data 19.12.2016 - 18:04
fonte

Leggi altre domande sui tag