Programming languages that everyone should learn | George Hotz and Lex Fridman
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
💻 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
💡C
💡Python
💡Programmation impérative
💡Programmation fonctionnelle
💡Haskell
💡Verilog
💡VHDL
💡Pytorch
💡Programmation basée sur les données
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
let me let me drag you back
to programming for a sec what three
maybe three to five programming
languages should people learn
do you think like if you look at
yourself what did you get the most out
of
from learning uh well so everybody
should learn
c and assembly we'll start with those
two right assembly
yeah if you can't code an assembly you
don't know what the computer's doing
you don't understand like you don't have
to be great in assembly but you have to
code in it and then like you have to
appreciate assembly in order to
appreciate all the great things c
gets you and then you have to code and
see in order to appreciate all the great
things python gets you
so i'll just say assembly c and python
we'll start with those three
the memory allocation of c and the
the the fact that so assemblies give you
a sense of just how many levels of
abstraction
you get to work on in modern day
programs yeah yeah graph coloring for
assignment register assignment and
compilers yeah like you know you gotta
do you know the compiler your computer
only has a certain number of registers
yeah you can have all the variables you
want a c
function you know so you get to start
your build intuition about
compilation like what a compiler gets
you
what else um well then there is then
there's kind of uh
so those are all very imperative
programming languages um
then there's two other paradigms for
programming that everybody should be
familiar with
i'm one of them is functional uh you
should learn haskell and take that all
the way through
learn a language with dependent types
like um
learn that whole space like the very pl
theory
heavy languages and haskell is your
favorite functional
what is that the go-to you'd say yeah
i'm not a great haskell programmer i
wrote a compiler and haskell once
there's another paradigm and actually
there's one more paradigm that i'll even
talk about
after that that i never used to talk
about when i would think about this but
the next paradigm is learn verilog or
vhdl
um understand this idea of all of the
instructions executed once
if i have a block in verilog and i write
stuff in it
it's not sequential they all execute it
once
and then like think like that that's how
hardware works
to be so i guess assembly doesn't quite
get you that uh something's more about
compilation
and verilog is more about the hardware
like get giving a sense of what actually
is the hardware is doing assembly c
python are straight like they sit right
on top of each other in fact
c is well let's see it's kind of coded
in c but you could imagine the first c
was coded in assembly and python is
actually coded in c
um so you know you can straight up go on
that
got it and then verilog gives you that's
that's brilliant
okay and then i think there's another
one now everyone
carpathy calls it programming 2.0 which
is learn
a i'm not even gonna don't learn
tensorflow learn pytorch
so machine learning we've got to come up
with a better term than programming 2.0
or
um but yeah it's a programming language
i wonder if it can be formalized a
little bit better which we feels like
we're in the early days
of what that actually entails
data-driven programming
data-driven programming yeah but it's so
fundamentally different as a paradigm
than the others uh like it almost
requires a different skill set
but you think it's still yeah
apply torch versus tensorflow pytorch
wins it's the fourth paradigm it's the
fourth paradigm that i've kind of seen
there's like this you know imperative
functional hardware i don't know a
better word for it
and then ml
you
5.0 / 5 (0 votes)