@@geocam2 rust is not mentioned in george's list. the list is for learning different types of programming paradigms (george's most important paradigms). What paradigm do you learn in rust that is not mentioned in the list?
@@geocam2 parallel programming is available in a lot of programming languages and is closer to a concept rather than a paradigm. rust is imperative programming.
@@mohamadeen Thats actually an interesting "feature" of the Haskell paradigm, is that it's really geared towards "pure-data transformations" that are compilers. I'm not a Haskell user but I've used a parser combinator and a page of code gives you an AST-like structure, if you leverage the hosted environment you're close to done.
Note for anyone wanting to learn programming, it might not be a good idea to learn the languages in that order (though some people might enjoy it). Programming has many layers and concepts, and for a beginner it can be overwhelming. One of the nice things about starting with Python is that you can focus on just the programming aspect (instead of worrying about compiling and other more low level concepts). Then once you get comfortable with that, you can choose to go as deep as you want. I'm just speaking from experience. I spent years trying to learn C++ and it didn't click (I was pretty young at the time). Then later on I got to use Python and it clicked. I definitely see the benefits of learning assembly and C, but I don't think they are always great for a first introduction to programming.
I would argue that one thing which will absolutely help you no matter what language you learn is a good teacher - someone who can teach in a way that you will understand, can explain the concepts simply, visualize the concepts so it clicks (including practical examples). The quality of the teacher makes all the difference in the world, IMO.
If you want to do something with AI, Java is pretty much useless. Java is a web language. If you actually want to build technology, as in actual programs, no need for Java.
I've embarked on this path as of late, after years of being a high level web developer with no formal degree in CS, i'm embarking on a knowledge journey all the way back to assembly and machine code and C and really trying to understand what a computer does and how it works from a mere transistor point upwards. it's a great and long journey but one that i find fascinating and the more i learn the more i feel like i have superpowers. low level programmers who fundamentally understand these. concepts are like computer whisperers
Do you mind pointing out the benefits for a web developer of learning assembly because I also feel the urge inside of me to know what's actually happening under the hood and at the bare metal level. I would really appreciate if you could highlight some of the benefits you've received in your web development journey by learning assembly.
@@randiaz95 I can think of an analog relating to the English language. I studied classical languages in college and those years of studying e.g. Latin has made me hyper aware of English word etymology/word-roots. I don’t read much literature these days because I write code for work, but I have a friend who teaches English at the college level who sometimes asks me if I know the meaning of obscure words and I can deduce their meaning with a high degree of accuracy because I “appreciate” where English words come from having studied an ancestor to this language. An appreciation of English via dead and ancient (perhaps useless) languages makes me able to outperform someone who teaches English to college students. I have a feeling that there might be grammatical errors in my response since I said all that hahaha.
@@alexzander__6334 i can tell you from personal experience, as someone who writes software for a living but studied dead languages (Latin etc) in college, that even a surface study of assembly language has helped me in a “practical” sense. Even one week of studying assembly made me view how a computer functions in a much clearer way. No rabbit holes necessary - merely a couple weeks and good source material.
To be fair, parsing and compiler writing are some of the strong suits of Haskell. It makes things like tokenization and building ASTs relatively easy and intuitive, at least compared to C-like langauges
@@johndoesson I wrote a compiler for some obscure Pascal-like language in C and Assembly for a class, and I learned a lot about regular expressions and state machines, some smaller instruction set Assembly (we used MIPS), abstraction and layering, how a computer actually works, and (very important) how many actual instructions you need for a single C instruction (z = x + 1 is not the same as z = x + y because in the second case you have to additionally load y to a register, maybe use a temp variable etc) and how registers work. Keep in mind I was already employed as a programmer for half a year already at that time, so I wasn't new to the game. Years later I got into microcontrollers and after a while had to use registers again, this time in C. Understanding what's happening underneath probably saved me a fair bit of time I would probably not have invested otherwise.
@@czonios Cool, just finished a course where we learned MIPS assembly and now taking another course in theoretical comp sci where we are learning about state machines and regular expressions. Yes, I agree on the part about assembly giving a greater understanding of how it works. But do you mean that a compiler is basically assembly code using state machines are regular expressions? Because that would make sense. Also dabble with microcontrollers, mostly Arduinos up until now, great stuff.
I dont code to appreciate programming languages. I code to get shit done and solve problems. Most programming advice is like "You should learn this because I had to learn this".
@@wumi2419 it depends on your role, its like the difference between the architect and the worker but translated into software projects, if you are going to design a whole system then yeah probably knowing assembly and C and how they interact with the hardware in such a low level is going to be very useful in order to design a good and efficient system, but if you are just a hired programmer to build that system, you literally dont have to know what even assembly is, the same way an architect can design a complex building structure but the only thing the worker needs to know is how to place bricks properly, he doesnt even care about how bricks are made or why the building has this specific structure. My point is that not every construction worker wants to become an architect, and not every programmer wants to become a George Hotz.
@@wumi2419 but you don’t need to learn assembly to understand what is going on. The whole mission of computer science is to provide abstraction to solve problems faster.
Great choice of programming languages: assembly, C, Python. I think Python could probably be replaced by any number of other languages but the first two would definitely be keepers in any list of mine.
I haven't written a line of assembly language in many years, but it was the first language I learned, and it has been had a huge impact on my programming for over 45 years as a software engineer. I agree with George that if you want to be a really good programmer, learning assembly language will help.
I 100% agree with Hotz’s approach (understanding how a processor actually executes instructions) although I’d start with BASIC, specifically for the reason most people dislike it, the GOTO function (as it’s essentially a jump instruction). Writing your first function in assembly you’ll actually grasp how the processor knows where to go (with the return address being the last variable pushed onto the stack). 1. BASIC 2. ASM x51 (yes, for a micro controller) 3. ASM x86 4. Plain C 5. Java (just as an introduction to VMs and garbage collection) 6. NodeJS (with TypeScript)
It depends on the type of compiler he wrote. If it's a small compiler for a small subset of a language, it wouldn't be that complicated. But I guess he didn't specify, so possibly it could have been something very complex.
there are things that can be "simpler" in haskell than C/C++ etc. like parsing. Dont get me wrong, i struggle with haskells "higher" concepts a lot but you can do a lot of powerfull stuff with just some basics knowledge. my first project was a sloppy brainfuck interpreter. Its not an easy language but you can do really elegant stuff with it in a way thats impossible in imperative languages
Probably wrote a program that solves the halting problem in C (and a python program that solves the travelling salesman problem in polynomial time while we're at it)
I’m learning JavaScript HTML and CSS right now. I studied a little Python and a little GO. When I hear Lex saying he’s up all night programming, I wonder what language he’s using and what exactly he’s working on? Stuff he gets paid for? Stuff he does due to pure interest? Creating AI?
Check out the game Turing Complete. I started with the webdev stuff too, TC is a game that will teach you all the most basic low level programming concepts by guiding you through building a computer circuit by circuit.
TLDR of this video according to Hotz: 4 types of paradigm/discipline of programming. - imperative language (your generic programming language where most of you would be in this category), his top 3: C , Assembly (learning this is important as it helps build intuition on what goes behind the scenes when any code is compiled), and Python. - functional language: Haskell. - hardware description language: Verilog (if you've taken an EE/CE course then you know whats up), builds up intuition on concurrent programming - differentiable language (aka data-driven programming, mainly used for machine learning programs): Pytorch > Tensorflow
Makes sense man. When I took a fundamental course in accounting, we learned to do everything by hand... reconciling books, ledger entries, prepare proper financial statements and once wet had that down, we learned the software that does all of that.
"One step at a time." Very wise! These guys are speaking a foreign language to you now, but at one point they were in the same position as you, also taking it one step at a time for many years. Before you know it, you will have taken enough steps to be where they are right now:)
@@giorgionapoli85Your circumstances and excitements over this or that are not important to others. Don't you realize that? So save them to yourself and don't pollute the internet with even more trash.
Excellent advice. I started out in machine code for the RCA 1802, then graduated to assembler for 8080, and a bit of C. Now I understand what is going on behind the curtain in Python. Building an early machine in wirewrap gave insight into the read internals. I'm very happy with Anaconda and the help it gives - also happy to understand what it is doing. As usual great conversations with guests. You let them answer!
Actually, designing a “sequential circuit” in HDL language is the ART, since they are by nature parallel languages. The beauty is creating FSMD (Finite State Machines) + (Data-flow) in VHDL that accelerates algorithms in Hardware.
I started with arduino/PIC micros, but when I had to do fast stuff (measuring speed of a projectile from 12 photodiodes in a barrel) I tried to do that in assembly. Man, that opened my mind
George for me is like a rockstar in programming world. He is on this high level which I won't never achieve, because of my own limitations. Total respect for him
@@Bratek193 Genuine question, have you tried Adderall? I don't have ADHD so I won't pretend to understand it, but it seems to really help people with ADHD take back some control.
@@Bratek193 Same here but Concerta has worked wonders for me, I can literally code and sift through documentation for hours. Please try to get medicated, it will make a world of difference. It felt like I had just opened my eyes for the first time.
Technically not a computer language. If you treat it as such you will have problems. I know Verilog looks like C and HDML looks like Ada/Pascal, but they are not imperative in any way. You can't think of it as a computer language or programming language. It's a hardware description language - hence the name.
@@ko-Daegu They both have plus and minuses, so it really depends on your needs. In some cases you don't even need to know any HDL and can use RTL instead.
i gotchu: You have to 'wrap' the element that you want to center (div for example) with a div element, put a class on that div then use css to relate to that div to set "display:flex" and "justify-content: center". There are definitely other ways to do it (for just text you can only do "text-align: center" on the child div but this is just to have bases covered. Hope this works lol
@@jazzyniko css is a lot more annoying than anything I've done with c++. I won't say harder, but I've seen many people who'd rather spend 12hours on a single c++ program than on css.
IMO, master the one language that will enable you to create the one thing, or things, that you are most passionate about. Then when you've "made it", however you measure that, learn whatever else you find interesting.
There's learning to code for yourself, and then there's learning to code for someone else. My advice is that learning to code for yourself will guarantee your success. If you need to automate your work, and Python's the simplest way to get that done, then learn Python. Even if companies don't say they need your language skills, you will have built so much on your own that there's bound to be someone who will pay for what you're able to create Learning to code for someone else gives you a clear career goal (get a job with Epic), but the real result of that is that you're fine-tuning yourself for a job competition. One in 350 coders will be selected for the job you're tuning yourself to get. And coding skill probably won't even be what gets the winner their job. It will be the way the candidate made the interviewer feel during the interview. Or the random delightful conversation had in the bar after a conference. Sounds risky.
Dude this is why Maniacs like this should rule the World, everyone wonders why he Knows everything, he simply dos not cut corners, he leaned it all. Dear in head light moment 4 me
I believe the technical term for a software paradigm for machine learning is called Differential Programming. en.m.wikipedia.org/wiki/Differentiable_programming
I learn assembly because of his suggestion, now I can actually visualise how machine code executes in CPU. I loved it. My understanding is broadened. ❤ he is a 10X developer, not a myth anymore
Yet I hate it I just cannot stand Python code,not that I didn't understand it but somehow I prefer Perl and I know ppl will not understand it but there is certain freedom in Perl ... Python is just boring..
This is so true. I went through CS50 which is mostly in C. Now Im learning python and i have to keep myself is check not to go the long way around a problem, because sometime I dont even think theres a simple method or function built in for something thats like 10+ lines of custom code in C.
How is it possible ? Code is transformed into instruction set and it is executed from the begining to the end, if it were at once there everything would work instantaneously. Perhaps he mean that functions do not quite execute in the order thay are written ?
@@RafQ321 The hardware of the FPGA gets "programmed" according to the description thats coded. You basically describe the functionality and the hardware to implement that gets built on the FPGA meaning the circuit structure to have the functionality gets built on the chip physically. Just google FPGA and ASIC for more info.
@@RafQ321 It helps thinking about it this way: when you power on a piece of hardware, all the registers, arithmetic and logic units etc. power on at the same time. This is why all 'blocks' in verilog are executed at the same time. Regarding your point of instructions executing from beginning to the end: there is no concept of 'execution' for a piece of code written in Verilog. Its either simulation or synthesis. when it comes to simulation, all the blocks in verilog start executing at the same 'time step'
0:28 tbh assembly is very high level and barely tells you what is going on with a computer. Assembly isn't going to teach you about TLB misses, cache misses, branch prediction, hardware prefetching, pipelining, branch target prediction, or virtual memory. And those are all more important than being able to read assembly imo. I still think assembly analysis can be useful though for looking for branches and loads in the binary and generally getting a very rough idea of how efficient something is (also for checking if SIMD and FMA instructions are being emitted).
Maybe it's because I do 3d graphics that I find Data Oriented Design to be very important. But I did agree with George Hotz's list and found it interesting. My list would be different, but nothing I really disagreed with him on.
I was thinking in a way to explain Assembly and C to people that dont know what's the different between Source Code and an App and man it was going to be looong conversation.
I still think everybody should learn to make a very basic program in Assembly, C, and Python. A program that computes the area of a rectangle, for example. _Everybody_ should do that at school or something.
@@Guztav1337 I think programming will be mandatory in the west to at least some extent in school, it's creeping in into every field and will probably become more mainstream curriculum, but I think few will actually work with it, will not become mainstream. Most people tend to shy away from pure logic, just look at math.
@@johndoesson Math is an axiomatic system. Requires integration into a scientific discipline to explain objectivity. Math in subjective avenues is a fruitless endeavour
Why is one of the guys lookin like he just got out of a mental hospital and the second one is a secret russian agent? Man, I don't even code, why am I watching this?
Great vid. Used to think Uni was just for the degree. Once I learned data structures, and C, I fell in love with what's behind the code. Not saying you have to go to uni, not at all, just saying that uni opened my eyes to that part of coding.
Data-driven programming already exists though. And it has nothing to do with machine learning. The existing paradigm that is closest to pytorch et al is declarative. en.wikipedia.org/wiki/Data-driven_programming
That is correct. Data-driven means you are not wrapping input data in some artificial models in order to process it and then convert back to data. Also means data structures are exposed in your source code and are generic enough to handle 90% data processing cases. No data hiding. Generic structures. Data-oriented abstractions (for handling sequential, textual, associative, ordered and unique collections of data). No interpretation or very late interpretation. I wouldn't tell that in ML data is exposed. There are a lot of black boxes.
This makes so much sense to me. Been learning to program for the past year and am now realizing that a ton of the things i want to do i can't because i don't have a CS background
Don't focus on having a CS background. If there's one topic that the Internet has an abundance of information on, it's coding and computers. You can learn everything you would've at a university for free online. Can't say the same about other subjects.
@@stompinknowledge3968 It's going well - decided on using 'The C Programming Language'! Got a long way of course, but really enjoying the 'low levelness' of C!
@@bryanurizar Great that you're committing. What are you using for learning resources? And what's this business 'apostrophe ai' all about? I'd like to learn C too, one day - until then, its vicarious living through the comment section.
Dissapointed he didn't mention declarative programming. Understanding how Prolog and SQL (and perhaps Maude) work is definitely a worthy perspective to have!
Wow I actually did learn all of those in this order! I've been envying those people who jump straight to web-dev courses and know usefull stuf, and here I am with all those hardware knowledge But perhaps it is actually good if such god of programming says so
If you dont stand outside with flashlights turning them on and off then writing down wether or not you turned that light on or off to write binary code, you have no idea whats going on
I am a software engineer and I will say "no" and "no" to both of those. If you're learning programming then starting with Assembly or C is only going to slow down your learning. Clearly this man is passionate about tech and wants "noobs" to understand programming deeply however it is just not necessary for most practical applications. Think of this as evolution, yes the concepts of garbage collection and memory allocation are real but not necessarily relevant for most things in tech since the pioneers have helped to automate many of these things with languages like Java and C++ and those are the "difficult" languages of today. Nothing wrong with starting off with Python and some basic web technologies to get your feet wet.
Yes, keep at it. I recommend picking a project where you can use Java, for example you could try building a native Android application. Something like this will give you a well rounded experience using Java in a practical setting alongside other common technologies like an IDE, XML, Git, relational database (SQLite for Android) and so on.
@3:33 "Imperative, functional, hardware... I don't know a better word for it..." The word is "concurrent", it will help you become a good concurrent programmer. As a side note Verilog is not a programming language, so its better to concurrent programming over Verilog if one is constrained by time (or at least that should be the priority).
I had programmed a lot in x86 assembly and also abstracted some classes and functions that generate ASM (I also know C, python and some HDL). However, I do not agree that you need to learn assembly, unless you need to implement complilers, or maybe work in high performance embeded systems. Honestly, I am no better programmer by knowing assembly. C in the other hand will make you a good programmer, giving you a good understanding on how memory, arrays, and pointers work.
I think it's necessary to know C because you need to understand memory layout to write efficient programs. Assembly is useful to understand how the processor works, and necessary when optimization is needed because high throughput dictates it.
@@tetsuoiiii yes agree, but assembly, for most programmers is not required, as an analogy, you do not need to know physics to balance chemistry equations and make predictable and precise compounds. But in some cases physics can be useful in chemistry to explaining things, I see it as different abstraction levels.
My advice would be to learn Assembly well enough to understand the debugger in C. Anything further than that is kind of pointless. Also learn a bit about binary numbers / hexadecimal at the same time. Although if you're just starting out in programming, it is probably better to start with a higher level language like Java
Yeah it’s insane to say you need to learn assembly or even C first. Genuinely stupid. This is why so many people don’t keep learning programming, because of annoying dorks like this. Imagine having to learn all of this before being able to make money. How about before even learning how to program, learn Wordpress or something that’s actually useful for making money, since you can at least make money Freelancing. Learning design is more valuable as programmer (especially front end) compared to BS that we haven’t had to code for 40 years.
@@stormsurge1850 Who tf ever said his advice was geared toward making money? I'm assuming it's about learning the fundamentals of CS, getting a good grasp on how things related to computers work and why they work that way. If you really want to understand what programming is, starting with assembly is absolutely the way to go.
@@Edude117 Hell no. Have you guys ever thought about the average person learning programming? Most of them don't know if they want to pursue it yet. Including me, even though I was a big tech nerd. That bullshit would turn them off. I consider myself a huge nerd and it turns me off. It's not just making money, no one other than .01% of the nerdiest people would like that. That would make them quit before finding out that they might have loved front end web development or something. You have to become more interested in the subject first. People can of course have different views on this, but that's just what I think.
@@stormsurge1850 Tbf, I took this video as "what languages should the average computer scientist learn." A lot of folks I know that do programming only know two languages or so and stick to strictly game dev or web dev. I think it would benefit them greatly to broaden their understanding of CS as a field. However, if we're talking about laymen, then honestly all they'd need is Python. If they were really trying to say that the average dude with no background in math, let alone CS, should learn Haskell, then yeah, I agree. That's ridiculous.
@@Edude117 Yeah, maybe he's just talking about people like Lex, but the way I understood it was that you should learn Assembly before learning anything. To me it just seems like the curse of knowledge screwing with him, you see that with a lot of super specialized people.
The thing with ML is that it defines only a small subset of concepts that are pure maths. These things have been around for around 50 years now. Classification, Regression, Association, Control and Clustering. The rest is based on the fitness of the developer to utilise that decision to facilitate a particular outcome. I don’t know if it’s really a programming paradigm. It’s more a collection of algorithms.
While I don’t want to push aside the possibility of benefits gained from learning Assembly or C, I disagree with the notion of the latter two being a requirement in a programmers toolkit. Programming ultimately is a way of solving a problem. While there may be a vast collection of tools to use for tackling that problem, ultimately, you should pick whatever you’re most comfortable with or whatever gets the job done most efficiently. Say, I am a frontend developer. Surely, I could get down to the atomic level of how a webpage is constructed and do all of that in either C or Assembly. But why would you do that when you could all do it just as easily at a 100th of the time and effort in languages like JS? Unless your work requires being closer to the architecture of the computer, there is no reason to not choose whatever works best for you and gets the job done time efficiently.
computers can build beautiful things , after a couple years of studying it becomes clear that machine learning is on another level , 1 that i will hopefully reach sometime in the near future. The best thing about Computer Science is that all you need is a computer to explore it
@@Moviemakerminutes of course it is. But do you know how much work it was? I didnt say you cannot do all things. But you basically have to do most everything from scratch. There is a reason c++ was the next generation of c.
@@zarni000 Your literal words were “not much you can do with it though” which implies you couldn’t do all things in it. C and C++ can both do all the things. It’s about tradeoffs. There were reasons for C++, yes, but unfortunately these reasons haven’t been addressed.
@@Moviemakerminutes well I guess I misspoke. I meant not much you can do as efficiently as with c++. Technically you can if course do everything in assembly too that you can do with c++ but the time cost is absurd
Well, he's right about knowing assembly gives you knowledge about the machine. C gives you memory issues and segfaults. He's wrong in saying those 3 "to start." Anyone learning should start with Ada, it'll teach you better design from a data and code perspective and you don't really have to use pointers. Start higher, then go lower. Yes, you should learn C, only because of the amount of stuff written in it and so you can bind to those libraries from a higher level language when you need to. Could the interviewer be anymore bored?
C and Python are really all I use anymore. I think it's important to actually limit the amount of langs you learn so you can focus on real computer science rather than constantly learning frameworks and syntactic things that aren't important.
Interesting. Im currently a CS major. I went from Java -> C++ -> Python -> JavaScript…. And now I’m making a project in rust. Java was a nice introduction, a little bit tough at first but once you get pass that bump you will be okay. All languages are very similar, just learn the basic principals in one before exploring others.
At the end of the day, most of the programming standards are moving towards abstractions, you can learn python without knowing a thing about C. I love C(incl C++) because it gives you more control of the hardware and embedded systems.
Started with C and x86 ASM. Never regretted that, and unfortunally in my school other students started with C++ instead and never touched C. I agree about Haskell: functional languages are underappreciated. About Python i'm ok, but it never attracted me for some reason, I rather learn Go instead
why is that unfortunate that they started with c++? c++ offers you the same things that c does and much more. c should have died in my opinion the moment the c++ was invented
@@sspitfire777 Well, according to the creator of C++ it should have died. C is simple to understand, you'll learn a lot of programming in general while learning c. With C++ you'll mostly learn the quirks of C++ and some anti-patterns you'll have to unlearn later. I my opinion c is good at what it does, simple and low level. C++ tries to be a higher level language, but it is basically c with al lot of awesome tricks to problems you should not have. If you need a real higher level language use C#, Python, GO or at least something with fast automatic memory management. Okay, a _/rant_ is in place here.
@@mennovanlavieren3885 , in short: c++ written for low level code is almost identical to that of c. c++ does not try to be a higher level language. fast and automatic memory management do not go together
If you are a normal person you should probably go for JavaScript or Python. In either case just find a particular use for the language that is personal and solves something for you.
Why would I try to get more competition? Do you know how many people can't complete their projects because they're trying to use a language unsuited to solving the problem where Assembly or C would get the job done? My career is based on it. It would be nice to find some help though.
@@m3hdim3hdi it uses a knowledge base of “facts” and “rules” analogous to classes, objects, and functions. What may take 20 lines of code for a knowledge base will use many more lines of code with Java or Python to produce the same output.
My solution: Learn the language you want to learn, first. You, know, the one that lets you build what you want to build, or acquire that dream job. Then, go back and use assembly, when you quit, because it blows, your now more grateful. Now go back and learn C, 50/50 chance you like it or quit again. But either way you will gain lots of gratitude in a short amount of time! Congrats! You saved yourself months of learning two languages that are probably useless to you, and still gained appreciation! -Your friend, Lazy programmer Joker
I am not gonna even watch the video because I know it is bullshit. But here is thr simole truth: Find something you wonna do thats gonna make the world a better place and learn to use all the tools you can that might help you do that something. And if one of them happens to be a programming language, learn it. Becouse if you wont to be a programmer just becouse it is "easy money", than di not do it. First of all, it is not easy money, and second, you will just end up wasting your own time and (more importantly) energy on doing something you hate. So no, there is no "best" or "most importang" programming language that a person should know
Languages mentioned:
- Assembly (1949) [Imperative Programming]
- C (1972) [Imperative Programming]
- Python (1991) [Imperative Programming]
- PyTorch (2016) [Differentiable Programming]
- Haskell (1990) [Functional Programming]
- Coq (1989) [Dependently Typed]
- Verilog (1984) | VHDL (1980) [Hardware]
@@delete7316 I don't think so 🤣
No LISP?
@@geocam2 rust is not mentioned in george's list. the list is for learning different types of programming paradigms (george's most important paradigms). What paradigm do you learn in rust that is not mentioned in the list?
@@geocam2 parallel programming is available in a lot of programming languages and is closer to a concept rather than a paradigm. rust is imperative programming.
@@godfather7339 that's what I was thinking lisp declarative language , Emacs
“I’m not a great Haskell programmer. I wrote a compiler in Haskell once.”
- George Hotz
XD
Yeah wtf
As an English learner, I doubted my ears lol
Yeah I'm so disappointed w myself lol
Like who does that?
"I'm not a great Haskell programmer, I wrote a compiler in Haskell once"
Bruuh
I struggled in school to build a full compiler with java lol
Pfftttt....yeah....rookie.
@@mohamadeen omg..i am so backward
@@mohamadeen Thats actually an interesting "feature" of the Haskell paradigm, is that it's really geared towards "pure-data transformations" that are compilers. I'm not a Haskell user but I've used a parser combinator and a page of code gives you an AST-like structure, if you leverage the hosted environment you're close to done.
The flex
Note for anyone wanting to learn programming, it might not be a good idea to learn the languages in that order (though some people might enjoy it). Programming has many layers and concepts, and for a beginner it can be overwhelming. One of the nice things about starting with Python is that you can focus on just the programming aspect (instead of worrying about compiling and other more low level concepts). Then once you get comfortable with that, you can choose to go as deep as you want.
I'm just speaking from experience. I spent years trying to learn C++ and it didn't click (I was pretty young at the time). Then later on I got to use Python and it clicked. I definitely see the benefits of learning assembly and C, but I don't think they are always great for a first introduction to programming.
i think java then going to c++ is best. Then finally python
I would argue that one thing which will absolutely help you no matter what language you learn is a good teacher - someone who can teach in a way that you will understand, can explain the concepts simply, visualize the concepts so it clicks (including practical examples). The quality of the teacher makes all the difference in the world, IMO.
+1
If you want to do something with AI, Java is pretty much useless. Java is a web language. If you actually want to build technology, as in actual programs, no need for Java.
I agree with you
This dude knows the importance of fundamentals. Loving the programming binge you've been on lately.
this is podcast is like joe rogan for nerds.
More controversial sometimes!🤓🤣
😂😂😂😂😂
Idk about nerds, I am just getting into programming and I find it really cool. Programmers are some of the highest paid people too.
geeks not nerds😂😂
@@JS-bk4pn shut it nerd
I've embarked on this path as of late, after years of being a high level web developer with no formal degree in CS, i'm embarking on a knowledge journey all the way back to assembly and machine code and C and really trying to understand what a computer does and how it works from a mere transistor point upwards. it's a great and long journey but one that i find fascinating and the more i learn the more i feel like i have superpowers. low level programmers who fundamentally understand these. concepts are like computer whisperers
Do you mind pointing out the benefits for a web developer of learning assembly because I also feel the urge inside of me to know what's actually happening under the hood and at the bare metal level. I would really appreciate if you could highlight some of the benefits you've received in your web development journey by learning assembly.
Plot twist: There was a nudist parade happening outside of Lex's window.
at 2:19-2:20, you can tell he saw some shit.
@@frankcastillo2855 he had nam flashback right there
@@blackraider777 😐He is Russian 🤭 😄 😅 😂 🤣 🤣 😆 🤧 🙄
@@mennovanlavieren3885 things Lex saw in that jungle can't be unseen....
Not at all. He simply doesn't respect his interviewee.
This channel is great, it's like those late night college brain sessions have been cut free of the University. Dorm not required.
such a great way to put it.....
Well said, understanding how things work makes you appreciate the tech more.
Another super UA-camr watching this... nice!
@@randiaz95 you have existential crisis ig
@@randiaz95 I can think of an analog relating to the English language. I studied classical languages in college and those years of studying e.g. Latin has made me hyper aware of English word etymology/word-roots.
I don’t read much literature these days because I write code for work, but I have a friend who teaches English at the college level who sometimes asks me if I know the meaning of obscure words and I can deduce their meaning with a high degree of accuracy because I “appreciate” where English words come from having studied an ancestor to this language.
An appreciation of English via dead and ancient (perhaps useless) languages makes me able to outperform someone who teaches English to college students.
I have a feeling that there might be grammatical errors in my response since I said all that hahaha.
sometimes you just need to get the job done because life is short and maybe you dont especially want to go on the rabbit hole.
@@alexzander__6334 i can tell you from personal experience, as someone who writes software for a living but studied dead languages (Latin etc) in college, that even a surface study of assembly language has helped me in a “practical” sense.
Even one week of studying assembly made me view how a computer functions in a much clearer way. No rabbit holes necessary - merely a couple weeks and good source material.
1:40 "I'm not a great haskell programmer, I wrote compiler in haskell once." Ow.
To be fair, parsing and compiler writing are some of the strong suits of Haskell. It makes things like tokenization and building ASTs relatively easy and intuitive, at least compared to C-like langauges
Everybody should write a compiler. It is a journey everybody should try.
@@Guztav1337 what would you say you got out of it?
@@johndoesson I wrote a compiler for some obscure Pascal-like language in C and Assembly for a class, and I learned a lot about regular expressions and state machines, some smaller instruction set Assembly (we used MIPS), abstraction and layering, how a computer actually works, and (very important) how many actual instructions you need for a single C instruction (z = x + 1 is not the same as z = x + y because in the second case you have to additionally load y to a register, maybe use a temp variable etc) and how registers work. Keep in mind I was already employed as a programmer for half a year already at that time, so I wasn't new to the game.
Years later I got into microcontrollers and after a while had to use registers again, this time in C. Understanding what's happening underneath probably saved me a fair bit of time I would probably not have invested otherwise.
@@czonios Cool, just finished a course where we learned MIPS assembly and now taking another course in theoretical comp sci where we are learning about state machines and regular expressions. Yes, I agree on the part about assembly giving a greater understanding of how it works. But do you mean that a compiler is basically assembly code using state machines are regular expressions? Because that would make sense. Also dabble with microcontrollers, mostly Arduinos up until now, great stuff.
I have not a clue what these two were saying, still watched it till the end.
Hahahaha! Yes, me too.
I dont code to appreciate programming languages. I code to get shit done and solve problems. Most programming advice is like "You should learn this because I had to learn this".
Well said.
That is no excuse for black box towers. You still have to understand what is going on unless you do not care about code quality and performance.
@@wumi2419 it depends on your role, its like the difference between the architect and the worker but translated into software projects, if you are going to design a whole system then yeah probably knowing assembly and C and how they interact with the hardware in such a low level is going to be very useful in order to design a good and efficient system, but if you are just a hired programmer to build that system, you literally dont have to know what even assembly is, the same way an architect can design a complex building structure but the only thing the worker needs to know is how to place bricks properly, he doesnt even care about how bricks are made or why the building has this specific structure.
My point is that not every construction worker wants to become an architect, and not every programmer wants to become a George Hotz.
I agree. This guy is kind of an idiot. Do you have to be a blacksmith to wield a sword in battle?
@@wumi2419 but you don’t need to learn assembly to understand what is going on. The whole mission of computer science is to provide abstraction to solve problems faster.
Great choice of programming languages: assembly, C, Python. I think Python could probably be replaced by any number of other languages but the first two would definitely be keepers in any list of mine.
@Bebtelovimab what are you talking about? Have you ever coded in C and Assembly?
@Bebtelovimab Do you even know what PyTorch is? How is an ML framework "Python on steroids?"
He didn't say "Python".
I haven't written a line of assembly language in many years, but it was the first language I learned, and it has been had a huge impact on my programming for over 45 years as a software engineer. I agree with George that if you want to be a really good programmer, learning assembly language will help.
really ? Please elaborate ?
How does learning assembly help you if you are working as a backend java developer. It doesn't seem useful at all.
@@DanReh MY ASS
I 100% agree with Hotz’s approach (understanding how a processor actually executes instructions) although I’d start with BASIC, specifically for the reason most people dislike it, the GOTO function (as it’s essentially a jump instruction). Writing your first function in assembly you’ll actually grasp how the processor knows where to go (with the return address being the last variable pushed onto the stack).
1. BASIC
2. ASM x51 (yes, for a micro controller)
3. ASM x86
4. Plain C
5. Java (just as an introduction to VMs and garbage collection)
6. NodeJS (with TypeScript)
Something that I haven’t heard in a while: C also has a goto statement
"...yyyeah, i'm not a great haskell programmer. i wrote a compiler in haskell once." holy crap balls! one can only imagine everything he did in C!
It depends on the type of compiler he wrote. If it's a small compiler for a small subset of a language, it wouldn't be that complicated. But I guess he didn't specify, so possibly it could have been something very complex.
Stuck with me as well. xD Classic Hotz
there are things that can be "simpler" in haskell than C/C++ etc. like parsing. Dont get me wrong, i struggle with haskells "higher" concepts a lot but you can do a lot of powerfull stuff with just some basics knowledge. my first project was a sloppy brainfuck interpreter. Its not an easy language but you can do really elegant stuff with it in a way thats impossible in imperative languages
@@joshuastein1888 facts
Probably wrote a program that solves the halting problem in C (and a python program that solves the travelling salesman problem in polynomial time while we're at it)
The algorithm loves “best programming languages” videos. Good job Lex, keep feeding the algorithm what it wants, the world needs to watch your podcast
I’m learning JavaScript HTML and CSS right now. I studied a little Python and a little GO.
When I hear Lex saying he’s up all night programming, I wonder what language he’s using and what exactly he’s working on? Stuff he gets paid for? Stuff he does due to pure interest? Creating AI?
Check out the game Turing Complete. I started with the webdev stuff too, TC is a game that will teach you all the most basic low level programming concepts by guiding you through building a computer circuit by circuit.
TLDR of this video according to Hotz: 4 types of paradigm/discipline of programming.
- imperative language (your generic programming language where most of you would be in this category), his top 3: C , Assembly (learning this is important as it helps build intuition on what goes behind the scenes when any code is compiled), and Python.
- functional language: Haskell.
- hardware description language: Verilog (if you've taken an EE/CE course then you know whats up), builds up intuition on concurrent programming
- differentiable language (aka data-driven programming, mainly used for machine learning programs): Pytorch > Tensorflow
god bless you!
Makes sense man. When I took a fundamental course in accounting, we learned to do everything by hand... reconciling books, ledger entries, prepare proper financial statements and once wet had that down, we learned the software that does all of that.
Great analogy! Now I understand why it is important to know the base layers of programming like assembly and c
maybe if you want to waste a bunch of time or are focusing on circuit boards... Then learn assembly.
@@centripetal6157 I love to waste time. *And* circuit boards. haha
oh so George is the 10X engineer that I kept hearing about on twitter a while ago
Trying to build Tic-Tac-Toe using Javascript and to me they're speaking a foreign language. One step at a time.
Same here! Plus, they're actually speaking a foreign language, since I'm not native English ;)
@Theodore Pugin How'd everything end up for ya?
"One step at a time." Very wise! These guys are speaking a foreign language to you now, but at one point they were in the same position as you, also taking it one step at a time for many years. Before you know it, you will have taken enough steps to be where they are right now:)
@@giorgionapoli85Your circumstances and excitements over this or that are not important to others. Don't you realize that? So save them to yourself and don't pollute the internet with even more trash.
Assembly is about hardware as well. You literally write the instructions that are almost always directly understood by your hardware
Excellent advice. I started out in machine code for the RCA 1802, then graduated to assembler for 8080, and a bit of C. Now I understand what is going on behind the curtain in Python. Building an early machine in wirewrap gave insight into the read internals. I'm very happy with Anaconda and the help it gives - also happy to understand what it is doing. As usual great conversations with guests. You let them answer!
Actually, designing a “sequential circuit” in HDL language is the ART, since they are by nature parallel languages. The beauty is creating FSMD (Finite State Machines) + (Data-flow) in VHDL that accelerates algorithms in Hardware.
I started with arduino/PIC micros, but when I had to do fast stuff (measuring speed of a projectile from 12 photodiodes in a barrel) I tried to do that in assembly. Man, that opened my mind
“Code in assembly”
Take your meds
George for me is like a rockstar in programming world. He is on this high level which I won't never achieve, because of my own limitations. Total respect for him
what limitations?
@@Dekibtw ADHD
@@Bratek193 oh, wow. I thought you underestimated your abilities. Sorry to hear that
@@Bratek193 Genuine question, have you tried Adderall? I don't have ADHD so I won't pretend to understand it, but it seems to really help people with ADHD take back some control.
@@Bratek193 Same here but Concerta has worked wonders for me, I can literally code and sift through documentation for hours. Please try to get medicated, it will make a world of difference. It felt like I had just opened my eyes for the first time.
Damn someone finally mentioned HDLs.
Technically not a computer language. If you treat it as such you will have problems. I know Verilog looks like C and HDML looks like Ada/Pascal, but they are not imperative in any way. You can't think of it as a computer language or programming language. It's a hardware description language - hence the name.
@@BitwiseMobile
So which own to learn as a software guy Verilog or HDL
@@ko-Daegu They both have plus and minuses, so it really depends on your needs. In some cases you don't even need to know any HDL and can use RTL instead.
This program gives me the confort to know that there are great minds working on solving world issues.
*me trying for hours to center a div using CSS* uhuh, what else
i gotchu:
You have to 'wrap' the element that you want to center (div for example) with a div element, put a class on that div then use css to relate to that div to set "display:flex" and "justify-content: center".
There are definitely other ways to do it (for just text you can only do "text-align: center" on the child div but this is just to have bases covered.
Hope this works lol
Display: grid;
Place-items: center;
That's it.
HTML+CSS is like using magic the gathering to draw rectangles. Fuck that. Give me my shader code.
CSS is not programming but styling or dressing HTML.
I tell you this:
You will learn CSS a 100 times faster than actually learning how to program.
@@jazzyniko css is a lot more annoying than anything I've done with c++. I won't say harder, but I've seen many people who'd rather spend 12hours on a single c++ program than on css.
Lex’s lack of eye contact has me dying lololol me too Lex
He's looking straight at George
Like these both have to be on autism spectrum if not autistic, right?
@@pery1952 nah
@@ոakedsquirtle If not Lex then definitely George.
@@pietart3596 is George outside?
Absolutely agree with that. Machine Language, Assembly, C (++), Python, etc...
IMO, master the one language that will enable you to create the one thing, or things, that you are most passionate about. Then when you've "made it", however you measure that, learn whatever else you find interesting.
There's learning to code for yourself, and then there's learning to code for someone else. My advice is that learning to code for yourself will guarantee your success. If you need to automate your work, and Python's the simplest way to get that done, then learn Python. Even if companies don't say they need your language skills, you will have built so much on your own that there's bound to be someone who will pay for what you're able to create
Learning to code for someone else gives you a clear career goal (get a job with Epic), but the real result of that is that you're fine-tuning yourself for a job competition. One in 350 coders will be selected for the job you're tuning yourself to get. And coding skill probably won't even be what gets the winner their job. It will be the way the candidate made the interviewer feel during the interview. Or the random delightful conversation had in the bar after a conference. Sounds risky.
Dude this is why Maniacs like this should rule the World,
everyone wonders why he Knows everything,
he simply dos not cut corners, he leaned it all.
Dear in head light moment 4 me
I believe the technical term for a software paradigm for machine learning is called Differential Programming. en.m.wikipedia.org/wiki/Differentiable_programming
Makes sense. Neural nets are based on differentials and gradients. It all comes down to the weights in the end.
1:35 "Is Haskell your goto?" - no pun intended?
I think he meant within the Functional Programming Paradigm
I learn assembly because of his suggestion, now I can actually visualise how machine code executes in CPU. I loved it. My understanding is broadened. ❤ he is a 10X developer, not a myth anymore
Assembly. At least the basics of it, to learn how a cpu works etc
C. Industry standard.
Python. Perhaps the most human friendly language.
Yet I hate it I just cannot stand Python code,not that I didn't understand it but somehow I prefer Perl and I know ppl will not understand it but there is certain freedom in Perl ... Python is just boring..
This is so true. I went through CS50 which is mostly in C. Now Im learning python and i have to keep myself is check not to go the long way around a problem, because sometime I dont even think theres a simple method or function built in for something thats like 10+ lines of custom code in C.
Do you think C should be the first language you learn ?
@@bharatjeevan i am really not qualified to give such advice. But I for fure recommend the CS50 course. It veeery difficult but worth it.
2:02 when I understood this concept during my electrical engineering study a whole new dimension in programming was introduced to me.
How is it possible ? Code is transformed into instruction set and it is executed from the begining to the end, if it were at once there everything would work instantaneously. Perhaps he mean that functions do not quite execute in the order thay are written ?
@@RafQ321 The hardware of the FPGA gets "programmed" according to the description thats coded. You basically describe the functionality and the hardware to implement that gets built on the FPGA meaning the circuit structure to have the functionality gets built on the chip physically. Just google FPGA and ASIC for more info.
Thanks, I definitly will read about that ;)
Yes, it's important for electrical engineering, and computer engineering, but no one else.
@@RafQ321 It helps thinking about it this way:
when you power on a piece of hardware, all the registers, arithmetic and logic units etc. power on at the same time. This is why all 'blocks' in verilog are executed at the same time.
Regarding your point of instructions executing from beginning to the end: there is no concept of 'execution' for a piece of code written in Verilog.
Its either simulation or synthesis.
when it comes to simulation, all the blocks in verilog start executing at the same 'time step'
0:45 Or study electronics, you will learn how to code with physical logic gates. It will make you appreciate even assembly.
That's what we have "Turing Complete" by Zachtronics for. 😅
Learning VHDL makes you appreciate any other language other than assembly
0:28 tbh assembly is very high level and barely tells you what is going on with a computer. Assembly isn't going to teach you about TLB misses, cache misses, branch prediction, hardware prefetching, pipelining, branch target prediction, or virtual memory. And those are all more important than being able to read assembly imo. I still think assembly analysis can be useful though for looking for branches and loads in the binary and generally getting a very rough idea of how efficient something is (also for checking if SIMD and FMA instructions are being emitted).
Maybe it's because I do 3d graphics that I find Data Oriented Design to be very important. But I did agree with George Hotz's list and found it interesting. My list would be different, but nothing I really disagreed with him on.
You made me miss my OS class from 6 years ago
Disclamer: The question answered really is "Programming languages that a computer scientist should learn ".
Tbh "Programming languages that a computer enthusiast should learn that needs to understand the journey and does not care about the results".
I was thinking in a way to explain Assembly and C to people that dont know what's the different between Source Code and an App and man it was going to be looong conversation.
I still think everybody should learn to make a very basic program in Assembly, C, and Python.
A program that computes the area of a rectangle, for example.
_Everybody_ should do that at school or something.
@@Guztav1337 I think programming will be mandatory in the west to at least some extent in school, it's creeping in into every field and will probably become more mainstream curriculum, but I think few will actually work with it, will not become mainstream. Most people tend to shy away from pure logic, just look at math.
@@johndoesson Math is an axiomatic system. Requires integration into a scientific discipline to explain objectivity.
Math in subjective avenues is a fruitless endeavour
Nice video
Ay
Why is one of the guys lookin like he just got out of a mental hospital and the second one is a secret russian agent? Man, I don't even code, why am I watching this?
Great vid. Used to think Uni was just for the degree. Once I learned data structures, and C, I fell in love with what's behind the code. Not saying you have to go to uni, not at all, just saying that uni opened my eyes to that part of coding.
Data-driven programming already exists though. And it has nothing to do with machine learning.
The existing paradigm that is closest to pytorch et al is declarative.
en.wikipedia.org/wiki/Data-driven_programming
That is correct. Data-driven means you are not wrapping input data in some artificial models in order to process it and then convert back to data. Also means data structures are exposed in your source code and are generic enough to handle 90% data processing cases. No data hiding. Generic structures. Data-oriented abstractions (for handling sequential, textual, associative, ordered and unique collections of data). No interpretation or very late interpretation. I wouldn't tell that in ML data is exposed. There are a lot of black boxes.
This makes so much sense to me. Been learning to program for the past year and am now realizing that a ton of the things i want to do i can't because i don't have a CS background
You can if you believe!
What are you talking about? You don't need a CS background at all. Just work
Don't focus on having a CS background. If there's one topic that the Internet has an abundance of information on, it's coding and computers. You can learn everything you would've at a university for free online. Can't say the same about other subjects.
Dataflow programming, which is an abstraction layer to get the ideas of DATAFLOW architectures to be amenable to Von Neumann architectures.
pretty much all languages learnt in an electrical engineering degree, assembler/C/C++/VHDL , except Pytorch
Verilog to
I took and Computer Eng elective and got Prolog as well
@@treadstonecorporation9555 loved Prolog ... 35+ years ago
I’m gonna learn C and then Assmebly. I’ll report back once I have.
Good luck
A week later, how's it going?
@@stompinknowledge3968 It's going well - decided on using 'The C Programming Language'! Got a long way of course, but really enjoying the 'low levelness' of C!
@Николай Аверин No, I’ve started a company called apostrophe ai.
@@bryanurizar Great that you're committing. What are you using for learning resources? And what's this business 'apostrophe ai' all about?
I'd like to learn C too, one day - until then, its vicarious living through the comment section.
Quick question,, what's a com pu ter?
Dissapointed he didn't mention declarative programming. Understanding how Prolog and SQL (and perhaps Maude) work is definitely a worthy perspective to have!
Wow I actually did learn all of those in this order!
I've been envying those people who jump straight to web-dev courses and know usefull stuf, and here I am with all those hardware knowledge
But perhaps it is actually good if such god of programming says so
If you dont stand outside with flashlights turning them on and off then writing down wether or not you turned that light on or off to write binary code, you have no idea whats going on
I am a software engineer and I will say "no" and "no" to both of those. If you're learning programming then starting with Assembly or C is only going to slow down your learning. Clearly this man is passionate about tech and wants "noobs" to understand programming deeply however it is just not necessary for most practical applications. Think of this as evolution, yes the concepts of garbage collection and memory allocation are real but not necessarily relevant for most things in tech since the pioneers have helped to automate many of these things with languages like Java and C++ and those are the "difficult" languages of today. Nothing wrong with starting off with Python and some basic web technologies to get your feet wet.
Yes, keep at it. I recommend picking a project where you can use Java, for example you could try building a native Android application. Something like this will give you a well rounded experience using Java in a practical setting alongside other common technologies like an IDE, XML, Git, relational database (SQLite for Android) and so on.
@3:33 "Imperative, functional, hardware... I don't know a better word for it..." The word is "concurrent", it will help you become a good concurrent programmer. As a side note Verilog is not a programming language, so its better to concurrent programming over Verilog if one is constrained by time (or at least that should be the priority).
I had programmed a lot in x86 assembly and also abstracted some classes and functions that generate ASM (I also know C, python and some HDL). However, I do not agree that you need to learn assembly, unless you need to implement complilers, or maybe work in high performance embeded systems. Honestly, I am no better programmer by knowing assembly. C in the other hand will make you a good programmer, giving you a good understanding on how memory, arrays, and pointers work.
I think it's necessary to know C because you need to understand memory layout to write efficient programs. Assembly is useful to understand how the processor works, and necessary when optimization is needed because high throughput dictates it.
@@tetsuoiiii yes agree, but assembly, for most programmers is not required, as an analogy, you do not need to know physics to balance chemistry equations and make predictable and precise compounds. But in some cases physics can be useful in chemistry to explaining things, I see it as different abstraction levels.
2 second version: assembly C python verilog haskell (write a compiler) pytorch
My advice would be to learn Assembly well enough to understand the debugger in C. Anything further than that is kind of pointless. Also learn a bit about binary numbers / hexadecimal at the same time. Although if you're just starting out in programming, it is probably better to start with a higher level language like Java
Yeah it’s insane to say you need to learn assembly or even C first. Genuinely stupid. This is why so many people don’t keep learning programming, because of annoying dorks like this. Imagine having to learn all of this before being able to make money. How about before even learning how to program, learn Wordpress or something that’s actually useful for making money, since you can at least make money Freelancing. Learning design is more valuable as programmer (especially front end) compared to BS that we haven’t had to code for 40 years.
@@stormsurge1850 Who tf ever said his advice was geared toward making money? I'm assuming it's about learning the fundamentals of CS, getting a good grasp on how things related to computers work and why they work that way. If you really want to understand what programming is, starting with assembly is absolutely the way to go.
@@Edude117 Hell no. Have you guys ever thought about the average person learning programming? Most of them don't know if they want to pursue it yet. Including me, even though I was a big tech nerd. That bullshit would turn them off. I consider myself a huge nerd and it turns me off. It's not just making money, no one other than .01% of the nerdiest people would like that. That would make them quit before finding out that they might have loved front end web development or something. You have to become more interested in the subject first. People can of course have different views on this, but that's just what I think.
@@stormsurge1850 Tbf, I took this video as "what languages should the average computer scientist learn." A lot of folks I know that do programming only know two languages or so and stick to strictly game dev or web dev. I think it would benefit them greatly to broaden their understanding of CS as a field. However, if we're talking about laymen, then honestly all they'd need is Python. If they were really trying to say that the average dude with no background in math, let alone CS, should learn Haskell, then yeah, I agree. That's ridiculous.
@@Edude117 Yeah, maybe he's just talking about people like Lex, but the way I understood it was that you should learn Assembly before learning anything. To me it just seems like the curse of knowledge screwing with him, you see that with a lot of super specialized people.
The thing with ML is that it defines only a small subset of concepts that are pure maths. These things have been around for around 50 years now. Classification, Regression, Association, Control and Clustering. The rest is based on the fitness of the developer to utilise that decision to facilitate a particular outcome.
I don’t know if it’s really a programming paradigm. It’s more a collection of algorithms.
Data engineering is exceptional useful, especially in event driven systems.
I love this podcast so much
Great job
While I don’t want to push aside the possibility of benefits gained from learning Assembly or C, I disagree with the notion of the latter two being a requirement in a programmers toolkit.
Programming ultimately is a way of solving a problem. While there may be a vast collection of tools to use for tackling that problem, ultimately, you should pick whatever you’re most comfortable with or whatever gets the job done most efficiently.
Say, I am a frontend developer. Surely, I could get down to the atomic level of how a webpage is constructed and do all of that in either C or Assembly. But why would you do that when you could all do it just as easily at a 100th of the time and effort in languages like JS?
Unless your work requires being closer to the architecture of the computer, there is no reason to not choose whatever works best for you and gets the job done time efficiently.
computers can build beautiful things , after a couple years of studying it becomes clear that machine learning is on another level , 1 that i will hopefully reach sometime in the near future. The best thing about Computer Science is that all you need is a computer to explore it
He just described what we learnt in electrical engineering.
Yup, George is spot on with that.
Heck ya C rocks! Made my fortune coding C. Love it because it is readable yet the syntax will fit in your head without a great deal of effort.
not much you can do with it though. c++ is where its at
@@zarni000 The entire Linux kernel is written in C. You can definitely do a lot of things in C. C++ is an eyesore.
@@Moviemakerminutes of course it is. But do you know how much work it was? I didnt say you cannot do all things. But you basically have to do most everything from scratch. There is a reason c++ was the next generation of c.
@@zarni000 Your literal words were “not much you can do with it though” which implies you couldn’t do all things in it. C and C++ can both do all the things. It’s about tradeoffs. There were reasons for C++, yes, but unfortunately these reasons haven’t been addressed.
@@Moviemakerminutes well I guess I misspoke. I meant not much you can do as efficiently as with c++. Technically you can if course do everything in assembly too that you can do with c++ but the time cost is absurd
pythorch suggestion was actually good for its time
Well, he's right about knowing assembly gives you knowledge about the machine. C gives you memory issues and segfaults. He's wrong in saying those 3 "to start."
Anyone learning should start with Ada, it'll teach you better design from a data and code perspective and you don't really have to use pointers. Start higher, then go lower. Yes, you should learn C, only because of the amount of stuff written in it and so you can bind to those libraries from a higher level language when you need to.
Could the interviewer be anymore bored?
"everyone should learn" part of the title really grinds my gears.
Everyone involved with computer science and programming...
@Victor Nascimento I am not a machine, I studied the same stuff..
@Victor Nascimento I talking about a computer scientist again..
Maybe u wanna be a web developer or something like that
Something makes me think either something weird is going on outside the window or Lex is trying to scare Hotz..
Respect for saying c and assembly
C and Python are really all I use anymore. I think it's important to actually limit the amount of langs you learn so you can focus on real computer science rather than constantly learning frameworks and syntactic things that aren't important.
Agreed.... especially working on embedded stuff.
Interesting. Im currently a CS major. I went from Java -> C++ -> Python -> JavaScript…. And now I’m making a project in rust. Java was a nice introduction, a little bit tough at first but once you get pass that bump you will be okay. All languages are very similar, just learn the basic principals in one before exploring others.
Have you done those computer programming, coding before you got into the college?
ok the sequence is 1. ASM, 2. C, 3. Python, 4. Tensorflow(framework). Do 8086 assambly counts! then I touch all of them. lol
George is essentially describing what it takes to get an electrical engineering degree minus differential and functional programming 👍🏼
Do you understand what goes into an electrical engineering degree? This is just not true whatsoever.
@@zaynesagarba3678 my bad i meant the digital design branch of ee, not analog circuit design or rf
At the end of the day, most of the programming standards are moving towards abstractions, you can learn python without knowing a thing about C. I love C(incl C++) because it gives you more control of the hardware and embedded systems.
Started with C and x86 ASM. Never regretted that, and unfortunally in my school other students started with C++ instead and never touched C.
I agree about Haskell: functional languages are underappreciated.
About Python i'm ok, but it never attracted me for some reason, I rather learn Go instead
why is that unfortunate that they started with c++? c++ offers you the same things that c does and much more. c should have died in my opinion the moment the c++ was invented
@@sspitfire777 "c should have died". take your own advice
@@sspitfire777 Well, according to the creator of C++ it should have died.
C is simple to understand, you'll learn a lot of programming in general while learning c. With C++ you'll mostly learn the quirks of C++ and some anti-patterns you'll have to unlearn later. I my opinion c is good at what it does, simple and low level. C++ tries to be a higher level language, but it is basically c with al lot of awesome tricks to problems you should not have. If you need a real higher level language use C#, Python, GO or at least something with fast automatic memory management.
Okay, a _/rant_ is in place here.
@@mennovanlavieren3885 , in short: c++ written for low level code is almost identical to that of c. c++ does not try to be a higher level language. fast and automatic memory management do not go together
@@mennovanlavieren3885 also, what are those quirks of c++ and what are those awesome tricks to problems you should not have?
Love your videos mate ! great interviews!
I have one: ladder logic for industrial automation.
Yeah, PLCs are fun lol
Verilog is like ladder logic, unrolled back into actual gates (instead of relays).... all the lines execute simultaneously.
It's so basic that one won't really learn anything new from it.
Wow, the way of thinking is revealing!
You have to know how the engine works to race a car?
It wouldnt hurt to have an overview. I doubt you'll find a driver who doesn't know how their engines work.
If you are a normal person you should probably go for JavaScript or Python. In either case just find a particular use for the language that is personal and solves something for you.
It's hard to convince people to learn a language they'll likely never use in their programming career (Assembly and C) unless they're in hardware.
You dont even need to do so (convince) - less competitors
Why would I try to get more competition? Do you know how many people can't complete their projects because they're trying to use a language unsuited to solving the problem where Assembly or C would get the job done? My career is based on it. It would be nice to find some help though.
C is used everywhere...
I'm glad that I learned all of these in Uni. I don't think I would have had any reason or motivation to learn VHDL
2:49 when i messing with junior ml engineer at first day of work
Such great advice!
Dude totally left out Prolog, the greatest of them all.
what special about this language?
@@m3hdim3hdi it uses a knowledge base of “facts” and “rules” analogous to classes, objects, and functions. What may take 20 lines of code for a knowledge base will use many more lines of code with Java or Python to produce the same output.
Just no.
@D M What in the Satan's name is this unholy concoction you have written
My solution:
Learn the language you want to learn, first. You, know, the one that lets you build what you want to build, or acquire that dream job.
Then, go back and use assembly, when you quit, because it blows, your now more grateful. Now go back and learn C, 50/50 chance you like it or quit again. But either way you will gain lots of gratitude in a short amount of time! Congrats! You saved yourself months of learning two languages that are probably useless to you, and still gained appreciation!
-Your friend,
Lazy programmer
Joker
He just cited a lifetime of work for most people
Everybody should learn the programming languages that better fit their needs, no the ones a snob on the Internet says you should learn.
Hotz is like the Kanye of programming. He is good but he sure likes to be pretentious about it.
he's right tho
I thought it was just me.
Yeah he sure has talent but personality-wise he has this very pretentious vibe
Hotz is also a bad ass hacker in the literal sense of hacker though. Not everyone has those kind of skills, probably what gives him that confidence
@Tr4shy C4t email him fashion advice
Future Ref.
S tier: Assembly, C and Python
Commendable list: Pytorch, haskell for a functional programming.
I am not gonna even watch the video because I know it is bullshit. But here is thr simole truth:
Find something you wonna do thats gonna make the world a better place and learn to use all the tools you can that might help you do that something.
And if one of them happens to be a programming language, learn it.
Becouse if you wont to be a programmer just becouse it is "easy money", than di not do it. First of all, it is not easy money, and second, you will just end up wasting your own time and (more importantly) energy on doing something you hate.
So no, there is no "best" or "most importang" programming language that a person should know
The jump from Assembly to C is fucking insane. I despise Assembly, but I love C.