Programming languages that everyone should learn | George Hotz and Lex Fridman

Lex Clips
25 Oct 202004:01

Summary

TLDRDans cette discussion, l'orateur recommande d'apprendre plusieurs langages de programmation pour mieux comprendre les différents niveaux d'abstraction dans le développement logiciel. Il suggère d'abord d'apprendre l'assembleur et le C pour saisir comment fonctionne l'ordinateur, puis Python pour sa simplicité. Ensuite, il propose Haskell pour les paradigmes de programmation fonctionnelle, Verilog ou VHDL pour comprendre le matériel, et enfin PyTorch pour le machine learning, qu'il décrit comme une nouvelle approche « data-driven ». Cette combinaison permettrait d'acquérir une vision complète des différentes facettes de la programmation.

Takeaways

  • 💻 **Apprendre les bases**: Il est important d'apprendre les langages de programmation C et Assembly pour comprendre les opérations de base de l'ordinateur.
  • 🔍 **Comprendre l'assemblage**: coder en assembly permet de saisir les niveaux d'abstraction en programmation moderne.
  • 🧩 **L'allocation de mémoire en C**: il est essentiel de comprendre comment C gère l'allocation de mémoire.
  • 🐍 **Python pour la facilité**: Python est un langage puissant qui offre une abstraction plus élevée, simplifiant la programmation.
  • 🎯 **Programmation fonctionnelle**: Apprendre Haskell pour comprendre la programmation fonctionnelle et les concepts avancés tels que la théorie des types dépendants.
  • 🌐 **Programmation logique**: Verilog ou VHDL sont importants pour comprendre la programmation en parallèle, typique du fonctionnement du matériel.
  • 🔩 **Hardware et logiciel**: L'assemblage aide à comprendre la compilation, tandis que Verilog donne une vision du matériel.
  • 🌟 **Les paradigmes de programmation**: Il est utile de connaître les paradigmes de programmation impératif, fonctionnel, matériel et d'apprentissage machine.
  • 🤖 **L'apprentissage machine**: Les langages comme PyTorch et TensorFlow représentent un nouveau paradigme, l'apprentissage machine, nécessitant une approche de programmation axée sur les données.
  • 📈 **Évolution du paradigme**: L'évolution des paradigmes de programmation indique que nous sommes en train de découvrir de nouvelles façons de concevoir des programmes, comme le suggère Programming 2.0.

Q & A

  • Quelles sont les premières langues de programmation que tout le monde devrait apprendre selon l'orateur ?

    -Tout le monde devrait apprendre le C et l'assembleur, car cela permet de comprendre comment fonctionne l'ordinateur à un niveau fondamental.

  • Pourquoi l'assembleur est-il important à apprendre, même si on ne l'utilise pas souvent ?

    -L'assembleur permet de comprendre ce que fait réellement l'ordinateur. Il donne une perspective plus profonde des niveaux d'abstraction en programmation moderne.

  • Comment le langage C aide-t-il à apprécier la programmation moderne ?

    -Le C permet de comprendre la gestion de la mémoire et les avantages des langages plus abstraits comme Python. Il aide à développer une intuition sur la compilation et l'allocation de ressources.

  • Quel est le lien entre l'assembleur, le C et Python selon l'orateur ?

    -L'assembleur permet de comprendre la base matérielle des ordinateurs, le C construit sur cette base avec une gestion de mémoire plus élevée, et Python ajoute encore plus d'abstraction tout en étant construit sur le C.

  • Pourquoi l'orateur recommande-t-il d'apprendre un langage fonctionnel comme Haskell ?

    -Les langages fonctionnels comme Haskell introduisent un nouveau paradigme de programmation qui est très différent des langages impératifs comme le C et Python. Ils aident à comprendre des concepts avancés comme les types dépendants.

  • Quelle est l'importance d'apprendre Verilog ou VHDL selon l'orateur ?

    -Apprendre Verilog ou VHDL permet de comprendre comment le matériel fonctionne réellement, avec des instructions exécutées simultanément, ce qui est une approche totalement différente de la programmation logicielle séquentielle.

  • Quel est le lien entre la programmation en Verilog et le matériel informatique ?

    -Verilog permet de simuler le comportement du matériel, où toutes les instructions d'un bloc sont exécutées en même temps, reflétant ainsi la nature parallèle des circuits matériels.

  • Quel est le quatrième paradigme de programmation mentionné par l'orateur ?

    -Le quatrième paradigme est lié à la programmation orientée machine learning. Il s'agit d'un nouveau modèle de programmation appelé par certains 'programming 2.0', centré sur les données.

  • Pourquoi l'orateur préfère-t-il PyTorch à TensorFlow pour la programmation en machine learning ?

    -PyTorch est préféré parce qu'il est plus intuitif et plus adapté au paradigme moderne de la programmation orientée données et apprentissage automatique.

  • Pourquoi l'orateur considère-t-il la programmation en machine learning comme un paradigme différent ?

    -Parce que la programmation en machine learning repose sur un ensemble de compétences et de concepts très différents des autres paradigmes de programmation traditionnels, tels que l'impératif, le fonctionnel ou le matériel.

Outlines

00:00

💻 L'importance de l'assembly et du C

L'intervenant commence par souligner que tout le monde devrait apprendre l'assembly et le C. L'assembly permet de comprendre le fonctionnement interne de l'ordinateur, même si l'on ne maîtrise pas parfaitement ce langage. Il souligne que coder en C aide à apprécier la gestion de la mémoire et la complexité réduite offerte par des langages de plus haut niveau comme Python. Apprendre ces deux langages permet de mieux comprendre la chaîne d'abstractions qui existe dans les systèmes modernes.

🧠 L'intuition de compilation et l'allocation de registres

L'intervenant approfondit le rôle du C en expliquant qu'il aide à développer une intuition sur la compilation, notamment avec des concepts comme l'allocation de registres. Il explique que l'ordinateur dispose d'un nombre limité de registres, ce qui oblige à mieux comprendre la manière dont les variables sont gérées dans une fonction C. Cela renforce l'appréciation des capacités des compilateurs modernes.

🔧 La programmation fonctionnelle et Haskell

L'intervenant introduit ensuite deux autres paradigmes de programmation. Il recommande d'apprendre Haskell, un langage fonctionnel, qui fait partie des langages à théorie très développée, notamment avec des types dépendants. Cela permet d'explorer des concepts de programmation très abstraits et puissants, même s'il admet ne pas être un expert en Haskell malgré avoir écrit un compilateur avec ce langage.

⚙️ La programmation hardware avec Verilog ou VHDL

Le quatrième paradigme abordé est celui de la programmation matérielle, représentée par Verilog ou VHDL. Ces langages fonctionnent différemment des langages impératifs, où toutes les instructions dans un bloc sont exécutées simultanément. Il insiste sur l'importance de comprendre le fonctionnement matériel de cette manière pour développer une compréhension plus profonde des systèmes informatiques.

🤖 La programmation de l'apprentissage automatique avec PyTorch

Enfin, l'intervenant évoque ce qu'il appelle le 'quatrième paradigme', ou la 'programmation 2.0', qui concerne l'apprentissage automatique (ML). Il conseille d'apprendre PyTorch plutôt que TensorFlow, tout en discutant du fait que la programmation pilotée par les données représente un paradigme fondamentalement différent des autres. Il estime que ce domaine est encore en évolution et nécessitera probablement une formalisation plus poussée à l'avenir.

Mindmap

Keywords

💡Assembly

L'assembleur est un langage de programmation de bas niveau qui permet aux programmeurs de communiquer directement avec le matériel de l'ordinateur. Dans la vidéo, il est décrit comme un langage crucial à apprendre pour comprendre comment fonctionne un ordinateur à un niveau fondamental, avant d'apprécier les avantages des langages plus abstraits comme C ou Python. L'assembleur aide à développer une compréhension des niveaux d'abstraction.

💡C

Le langage C est un langage de programmation impératif de bas niveau souvent utilisé pour le développement de systèmes d'exploitation et de logiciels embarqués. Dans la vidéo, il est présenté comme une étape essentielle pour comprendre la gestion de la mémoire et le fonctionnement interne d'un ordinateur, constituant un pont entre l'assembleur et les langages de haut niveau comme Python.

💡Python

Python est un langage de programmation de haut niveau connu pour sa simplicité et sa lisibilité. Dans la vidéo, il est évoqué comme la troisième étape après l'apprentissage de l'assembleur et du C. Python permet aux programmeurs de bénéficier des abstractions offertes par ces langages plus bas niveau tout en restant plus facile à utiliser et à comprendre.

💡Programmation impérative

La programmation impérative est un paradigme de programmation où les instructions sont exécutées dans un ordre spécifique pour changer l'état du programme. C, Python et l'assembleur en sont des exemples. Dans la vidéo, ce paradigme est discuté comme étant l'un des plus fondamentaux pour comprendre la manière dont un programme contrôle le matériel.

💡Programmation fonctionnelle

La programmation fonctionnelle est un paradigme de programmation qui se concentre sur l'utilisation de fonctions pures et l'évitement des états mutables. Haskell est mentionné dans la vidéo comme un exemple de langage de programmation fonctionnelle, et l'orateur recommande de s'y plonger pour explorer des concepts avancés comme les types dépendants et la théorie des langages de programmation.

💡Haskell

Haskell est un langage de programmation fonctionnelle pure qui met l'accent sur l'utilisation des fonctions et des types immuables. Il est cité dans la vidéo comme un excellent outil pour apprendre la programmation fonctionnelle et découvrir des concepts complexes comme les types dépendants, ce qui permet une meilleure compréhension des paradigmes de programmation non impératifs.

💡Verilog

Verilog est un langage de description matérielle utilisé pour modéliser les circuits électroniques. Dans la vidéo, l'orateur parle de l'importance d'apprendre Verilog pour comprendre comment fonctionne le matériel, notamment comment les instructions sont exécutées simultanément dans le matériel, contrairement à la séquentialité des programmes logiciels.

💡VHDL

VHDL est un autre langage de description matérielle, similaire à Verilog, utilisé pour décrire et simuler le comportement des circuits électroniques. Il est évoqué dans la vidéo pour illustrer l'importance de comprendre le fonctionnement parallèle du matériel, par opposition au déroulement séquentiel de la plupart des langages de programmation.

💡Pytorch

Pytorch est une bibliothèque de machine learning en Python. Dans la vidéo, il est mentionné dans le contexte de ce que l'orateur appelle la 'programmation 2.0', une nouvelle forme de programmation basée sur des données et sur l'apprentissage automatique. Pytorch est recommandé par rapport à TensorFlow pour ceux qui s'intéressent à ce domaine.

💡Programmation basée sur les données

La programmation basée sur les données est un paradigme mentionné dans la vidéo comme étant fondamentalement différent des paradigmes traditionnels. Il fait référence à l'utilisation de grands ensembles de données pour entraîner des modèles d'apprentissage automatique, et est considéré comme la prochaine étape après la programmation impérative, fonctionnelle et matérielle.

Highlights

Everyone should learn C and Assembly as foundational programming languages.

Understanding Assembly is key to appreciating what the computer is doing.

Learning Assembly helps to understand the abstraction levels in modern programming.

C language is essential for appreciating the memory allocation and other features.

Python should be learned for its high-level abstractions and ease of use.

Assembly, C, and Python are recommended as the starting trio of programming languages.

Functional programming paradigm should be explored with languages like Haskell.

Learning Haskell can provide insights into programming language theory.

Understanding dependent types is important in the functional programming paradigm.

Verilog or VHDL should be learned to grasp the concept of hardware programming.

Verilog provides a sense of how hardware executes instructions differently from software.

C is foundational and was initially coded in Assembly, with Python coded in C.

Machine Learning as a programming paradigm is distinct and requires different skills.

PyTorch is suggested over TensorFlow for learning Machine Learning.

There are four recognized programming paradigms: imperative, functional, hardware, and ML.

The concept of 'Programming 2.0' is introduced, referring to data-driven programming.

The field of Machine Learning is in its early days and evolving.

Transcripts

play00:02

let me let me drag you back

play00:04

to programming for a sec what three

play00:06

maybe three to five programming

play00:08

languages should people learn

play00:09

do you think like if you look at

play00:10

yourself what did you get the most out

play00:13

of

play00:14

from learning uh well so everybody

play00:17

should learn

play00:18

c and assembly we'll start with those

play00:19

two right assembly

play00:21

yeah if you can't code an assembly you

play00:23

don't know what the computer's doing

play00:24

you don't understand like you don't have

play00:27

to be great in assembly but you have to

play00:28

code in it and then like you have to

play00:31

appreciate assembly in order to

play00:32

appreciate all the great things c

play00:34

gets you and then you have to code and

play00:36

see in order to appreciate all the great

play00:37

things python gets you

play00:39

so i'll just say assembly c and python

play00:41

we'll start with those three

play00:43

the memory allocation of c and the

play00:46

the the fact that so assemblies give you

play00:49

a sense of just how many levels of

play00:50

abstraction

play00:51

you get to work on in modern day

play00:53

programs yeah yeah graph coloring for

play00:55

assignment register assignment and

play00:57

compilers yeah like you know you gotta

play00:59

do you know the compiler your computer

play01:00

only has a certain number of registers

play01:01

yeah you can have all the variables you

play01:02

want a c

play01:03

function you know so you get to start

play01:05

your build intuition about

play01:06

compilation like what a compiler gets

play01:08

you

play01:10

what else um well then there is then

play01:12

there's kind of uh

play01:14

so those are all very imperative

play01:16

programming languages um

play01:19

then there's two other paradigms for

play01:20

programming that everybody should be

play01:21

familiar with

play01:22

i'm one of them is functional uh you

play01:24

should learn haskell and take that all

play01:26

the way through

play01:27

learn a language with dependent types

play01:28

like um

play01:30

learn that whole space like the very pl

play01:33

theory

play01:34

heavy languages and haskell is your

play01:36

favorite functional

play01:37

what is that the go-to you'd say yeah

play01:40

i'm not a great haskell programmer i

play01:42

wrote a compiler and haskell once

play01:43

there's another paradigm and actually

play01:45

there's one more paradigm that i'll even

play01:46

talk about

play01:47

after that that i never used to talk

play01:48

about when i would think about this but

play01:49

the next paradigm is learn verilog or

play01:51

vhdl

play01:52

um understand this idea of all of the

play01:55

instructions executed once

play01:58

if i have a block in verilog and i write

play02:01

stuff in it

play02:02

it's not sequential they all execute it

play02:04

once

play02:06

and then like think like that that's how

play02:08

hardware works

play02:10

to be so i guess assembly doesn't quite

play02:12

get you that uh something's more about

play02:14

compilation

play02:15

and verilog is more about the hardware

play02:17

like get giving a sense of what actually

play02:19

is the hardware is doing assembly c

play02:22

python are straight like they sit right

play02:24

on top of each other in fact

play02:26

c is well let's see it's kind of coded

play02:28

in c but you could imagine the first c

play02:30

was coded in assembly and python is

play02:31

actually coded in c

play02:32

um so you know you can straight up go on

play02:35

that

play02:36

got it and then verilog gives you that's

play02:38

that's brilliant

play02:40

okay and then i think there's another

play02:42

one now everyone

play02:43

carpathy calls it programming 2.0 which

play02:46

is learn

play02:47

a i'm not even gonna don't learn

play02:50

tensorflow learn pytorch

play02:51

so machine learning we've got to come up

play02:54

with a better term than programming 2.0

play02:56

or

play02:56

um but yeah it's a programming language

play03:03

i wonder if it can be formalized a

play03:04

little bit better which we feels like

play03:06

we're in the early days

play03:08

of what that actually entails

play03:10

data-driven programming

play03:12

data-driven programming yeah but it's so

play03:15

fundamentally different as a paradigm

play03:17

than the others uh like it almost

play03:20

requires a different skill set

play03:23

but you think it's still yeah

play03:26

apply torch versus tensorflow pytorch

play03:28

wins it's the fourth paradigm it's the

play03:30

fourth paradigm that i've kind of seen

play03:32

there's like this you know imperative

play03:35

functional hardware i don't know a

play03:38

better word for it

play03:39

and then ml

play04:00

you

Rate This

5.0 / 5 (0 votes)

Étiquettes Connexes
Langages programmationsC et assemblyPythonVerilogHaskellParadigmesMachine learningPytorchTypes dépendantsProgrammation matérielle