Quels langages de programmation tout ingénieur logiciel devrait-il connaître ?


Evidemment pas pratique, mais si seulement pour être "utile", la plupart des Universités devraient enseigner les deux : le langage d'assemblage et Java ... voici pourquoi.

Assemblage - Vous seriez obligé d'apprendre et de comprendre l'architecture matérielle sous-jacente. Cela permettrait à la plupart des programmeurs d'apprécier à quel point la mémoire est précieuse (oui, même aujourd'hui), le coût des opérations d'E/S, les IRQ, l'IPC, les tâches et les threads, le changement de contexte, les piles, les registres et la façon de penser et d'organiser votre code.


Je vois de nos jours des développeurs juniors sortir de l'école et faire des choses stupides ... en voici quelques-unes:

  1. Il spawn un thread à la demande pour les tâches. Sans être conscient de l'overhead et des complexités qu'ils introduisent en faisant de l'IPC. Quand je les interroge sur les pools de threads (et la réutilisation des threads), j'obtiens un regard vide du genre "Je connais le concept, mais où, comment, pourquoi ????".
  2. Fait constamment des E/S en mode bloquant (sync). Pas de réelle compréhension des E/S non bloquées (async) et de la façon de les gérer ainsi que des événements futurs.
  3. Essayer de lire un fichier en mémoire en une fois plutôt que progressivement. J'ai même vu quelqu'un essayer de lire/manipuler un fichier de 1 Go en mémoire. Quand je les interroge sur les fichiers en mémoire mappée, ils n'ont AUCUNE idée de ce dont je parlais.

Avec un cours de langage assembleur et une pratique sur le terrain, ils apprendraient à peu près tout ce qui précède et bien plus encore. Plus précisément, j'essaierais de leur faire apprendre l'assemblage pour un noyau/OS, ce qui couvrirait les sujets que j'ai énumérés ci-dessus.

Java - Alors pourquoi Java ? Voici mon point de vue sur Java (et j'ai des données pour étayer cela, mais je ne m'y attarderai pas car ce n'est pas le but ici).

Si vous lisez l'histoire de Java, il a été dit en gros que ses créateurs/concepteurs (qui étaient extrêmement compétents dans d'autres langages OO) voulaient créer un langage OO avec toutes les meilleures fonctionnalités et les avantages d'autres langages de programmation OO (certains obsolètes), tout en supprimant (ou du moins en essayant, par d'autres moyens) toutes les choses qui créent habituellement des questions et des problèmes majeurs.

Par exemple, je pense que C++ est un langage incroyable... MAIS, il est BEAUCOUP trop puissant. Maintes et maintes fois, j'ai vu des gens se tirer dans le pied à cause de cela. Donc, étant donné qu'il est étonnant, lorsque je l'utilisais dans mes projets, je ne permettais PAS à mes programmeurs de faire beaucoup de choses qui créaient des ravages, de la confusion ou des problèmes en aval. Pour moi, cela s'est avéré fructueux.

Java a été conçu avec exactement cela en tête. Supprimez un grand nombre de conneries que les autres langages vous permettent de faire. Par exemple, Java sera critiqué pour être seulement autorisé à avoir un seul héritage. C'est pour vous obliger à réfléchir à votre architecture. Je dois admettre que la plupart du temps, c'est difficile. Mais si vous faisiez le même projet en C++, vos programmeurs hériteraient d'une douzaine d'autres classes (c'est simple, le problème est résolu). Mais c'est un ÉNORME problème. Sur le plan architectural, il est plus que probable que vous ne devriez PAS hériter de ces 12 autres classes, mais plutôt de quelques-unes seulement. Donc Java vous oblige réellement à réfléchir.

Plusieurs des choses que Java n'a pas sont par conception. Certaines des limitations sont également à dessein. Je crois que les créateurs de Java ont en fait très bien réussi dans leur intention. Certaines personnes se plaindront, mais c'est généralement parce qu'elles veulent juste la voie facile et ne pas réellement " penser " de la bonne façon.

C'est pourquoi je pense que Java est l'un des meilleurs langages de programmation qui existent et n'a pas d'équivalent. Et pour cette raison, les programmeurs devraient l'apprendre. En l'utilisant, ils seront généralement forcés de programmer de la bonne façon. Pas juste avoir le pouvoir de faire absolument n'importe quoi comme le C++ vous le permet.