A really nice book. It does a really good job of simplifying everything down to the barest minimum (as they quote in the book: "as simple as possible, but not simpler").
@@weakamna Yeah, as someone who previously did not understand how computers work, doing all the projects in that book was a hugely enlightening experience. Very impressive how simple a computer can be.
1:11:48 I like the Rust syntax for references: 1) It is consistent when getting a reference type or value 2) It is familiar Type of a reference pointing to unsigned integer: let ptr: &u32; Get reference to value: ptr = &x; Dereference: x = *ptr;
Note: In rust they aren't called pointers because rust also has pointers declared with * only allowed to be dereferenced in unsafe code and because the borrow checker does not verify the lifetime of the object and jada jada jada... But aside from the compile-time validation they effectively are (as you said) just C-pointers with & while declaring them.
1:10:05 Not just Finland, but probably everyone using QWERTZ keyboards. On them you usually have to press the caret key twice to produce any input which often results in 2 caret characters.
as someone from europe, its quite common though for programmers to move away from keyboard layouts that have deadkeys. I know a few who even moved over to the standard american layout because of how bad the symbols are on nordic layouts.
In Brazil we have that suffering with ` Sometimes helps to press the dead key and then spacebar Idk how Jai is rn but copying the Rust-reference syntax would be a good choice like someone suggested here
I've wrote my first compiler (alas for fake machine that had its own interpreter) using "LET'S BUILD A COMPILER!" by Jack Crenshaw. I recommend it because its a very practical guide, with a lot of simple code and no PhD bs (even though PhD wrote it). It's also freely available on internet.
For the rant at 25:00 I think part of it is to take a lot of information with grain of salt. Ultimately there has to be some sort of fundamentals you go off of. It's not easy to know who is right and who is wrong when you're learning something new. Especially when some aspects of programming starts edging towards a Craft vs a Science.
You made a lot of (probably fair) assumptions about wasm, but it actually seems to defy most or all of them. Wasm is just a very very bare-bones stack machine, that web browsers happen to implement as a sandboxed vm. Web assembly (or at the very least, the 1.0 MVP) actually doesn't really have anything to do with the browser at all. You can't manipulate the DOM, you can't call into any kind of browser API, it only has 4 types: i32, i64, f32, f64, and you can't touch anything outside of the 'sandbox' unless it is explicitly passed in.The creators seem to have been exceedingly careful about keeping the browser out of scope. Anyway I don't think wasm will be perfect and I'm not married to it, but it may be worth looking into if you actually wanted something like what you described.
WASM is maybe that bytecode you're referring to with web distribution, and WASI being that system interface? EDIT: Saw someone mentioned WASM/WASI and the follow on hostile attack on the competence of web programmers. Need to be mindful of that Johnathon, there are a subset of web programmers that know what they're doing. Additionally, WASM is not coupled to the browser, maybe look into it.
@@kiwec Yeah, its pretty funny wasmer.io/ github.com/WAVM/WAVM github.com/bytecodealliance/wasmtime github.com/emscripten-core/emscripten/wiki/WebAssembly-Standalone Writing a WASM runtime doesn't seem particularly challenging, standardization around WASI will probably be a thing in the coming years. But whatever, just another thing to poke fun at.
Solution to parsing issue. You first go through the source code and operate the operand that ties in strongest, then you go through the source code looking for operators that tie in next strongest until you don't have anymore operators to go through and you have parsed every single operations. You can speed things up by replacing variable names and numbers in the source code by numbers, and those numbers are indices to an array that contains the variable names and values. Now the best part, use three letter acronyms for every variable name in the compiler/interpreter and don't use any comments in the source code. Now Imagine how much fun you would have coming back to that project 6 months later. When my harddrive crashed in middle of trying to figure out what that code did all I felt was relief that I didn't have to see that source again.
1:17:55 - can someone give more info (with more specific example, possibly) on this topic for those of us who aren't exactly familiar with the history of computer graphics? How does d3d retained mode relate to the current/future state of tensorflow?
It would be nice if you included descriptions of people you admire alongside the many people you think are incompetent. It's a bit alienating and it makes your otherwise good videos that much more difficult to watch. Perhaps your intended effect is to bring viewers into your inner circle, but eventually we all start to get the haunting realization that because we didn't build our own game engine we just don't measure up.
Don't listen to the people of Finland considering characters like ^. The default layout of any standard keyboard is ridiculous for programming. Rebinding characters like {()}\[]/ should be mandatory for everyone (I typed that with my 1 hand's fingers and did not move my hand at all, I used to the other hand to trigger a modifier key). Similarly the character ^ which requires shift + TWO sequential presses of the key for ^ is just stupid. There's no reason why that requires shift and 2 presses instead of one, if you are going to stay with default garbage layout. Maybe I remember the original way to output ^ wrong but it was not easy or sensible. Best regards from Finland.
@@ratgr Compilers are like interpreters in the sense that they both take human readable code as an input. Compilers have the extra requirement of being able to generate efficient machine code. This ends up making compilers much more difficult to implement, especially for someone has never built one before.
I just don't understand modern programmers. Why, instead of inventing the operator precedence problem, not simply allow functions to have operator like names and use lisp syntax....
@06:25 I've been working for the last 10 years in web programming and I have to say... I 100% agree. The JS community in particular is too busy "inventing problems" that don't really exist to then propose a "clever" solution, usually in the form of stacking layers and layers of unnecessary abstractions, just to make up for programmer incompetency. These days I shudder whenever people say "modern javascript" (as if all JS is "obsolete" in some way), it usually just means JS with some poorly thought out new feature or syntactic sugar that some feel they're obligated to use even if it adds nothing.
I think I agree with you but not sure, by "modern" javascript you mean ES2015+ or just the way ppl write code, trying to npm install all the problemes away ? Because while bloated, the newest "modern" version of the languages isn't just sugar, and sugar as nice as arrow functions does help. (they also fix arguments & this, which isn't just sugar) I've learn in 2015 and really feel like old school js is obsolete.
the most toxic community ever..when i was started, there is js library like jquery, mootools, prototype, scriptaculous..then come react, angular, abc, def, ghi...then the build system, babel, bower, webpack, grunt, gulp for fuck sake, i really want to see js die...disgusting community ever
I know this has nothing to do with this video but...you inspired me with The Witness. It is art. Keep up the good work with whatever you do in life. I was giving some thought to the title of the game recently. Perhaps the title The Witness has to do with something very interesting that I just thought about. When I first played this game I streamed it and people started watching. I had about 10-20 people who watched me play this game all the way through. Why? Because they had already played it and wanted to see someone else experience it and struggle through it for the first time. It hasbeen 2-3 years since I have played the game and I am now currently showing the game to my dad. He is playing through the game and he is getting frustrated and stuck on the same parts I did. There is no reason for me to go back and play the game myself since I already know all the rules and most of the solves. However...i now understand why so many people enjoyed watching me play the game for the first time a few years ago...it’s the same reason I enjoy watching my dad struggle through the puzzles. It’s because I can experience the game “for the first time” again by watching someone else play the game and have that experience. It truly was and is an amazing experience. Perhaps the ultimate value and infinite replay value comes from the perspective of the person watching the game being played by someone for the first time and not actually playing the game itself...aka the viewer is the witness. And you only realize this value months or years after you play the game yourself...when you introduce the game to someone else and watch them play it. Suddenly your perspective changes and you now understand the title...just like in the game where sometimes stuff doesn’t make sense until time passes and your perspective changes. Whether that’s the true meaning or not I don’t know...but I am quite impressed with this game. I always will be. This game affected me in such a way that no other game could. Anyways...
I listened to the whole conversation in 1 go, both original and Q&A. Always inspirational, enlightening, funny, and heats the nearly dead embers of my conviction.
So my introduction to programming was through Minecraft. For all the lifte time I wasted with that game and the fact it's Java, it was a pretty tangible way of programming and it motivated me to research creating my own game engine
1:26:30 Sooner or later it's about education more than changing the world yourself. I followed Alan Kay for a long time, exactly the same thing. Education's so important, yet in horrible shape. We're actively wasting generations of humans.
It's basically just a hack. Instead of using a compiled language in the first place you try compiling an interpreted one. There's no good reason to do so if you really think about it, just compile ahead of time
The first part about "solving" software distribution is what Android is doing. Their .dex files are platform independent byte code. And all Android system calls are in byte code only. And when an app gets installed it gets compilated.
On the carot thing: thank you for even considering. Feels annoying when you (we) need to push another key after to see the character...probably would get used to it though. Enjoyable Q & A BTW
This is how I've experienced it: Setting up a new Go project on a new machine: 1) Unzip Go from the website into the right place 2) Run "apt install vim git" 3) Copy over my .vimrc and .gitconfig 4) Install Vundle for Vim and run ":VundleInstall" inside Vim 5) Start working Setting up a new Javascript project on a new machine: 1) Install version control 2) Install a tool that autogenerates a working project from a template (so hard to get it right otherwise that they've had to make a tool for it?) 3) Generate a project from a template 4) Try to tweak it until all the essential aspects are correct (exactly the right kind of enforced automatic code formatting) plus all the necessary libraries 5) Give up in frustration after having wasted days on it Setting up something very quick and dirty isn't a problem with Javascript. The problems don't become apparent until you want full control and high quality. Maybe it would work better if I were to cargo cult the exact tool set that everyone else uses for that stuff.
To all the (Finish?) people that have issues with typing "^" just download www.microsoft.com/en-us/download/details.aspx?id=22339 and create your own keyboard layout that will make what ever you need to type easy. On Linux you can also create a new layout by editing /usr/share/X11/xkb* files: rlog.rgtti.com/2014/05/01/how-to-modify-a-keyboard-layout-in-linux/ askubuntu.com/questions/482678/how-to-add-a-new-keyboard-layout-custom-keyboard-layout-definition
using * for declaring pointer and get the address of variable is seems like a good idea for me...it looks consistent..using ^ or " for dereferencing pointer is much better than using
Also just expanding on the point early on In the talk: much technical information on the internet is like the review section on Amazon. Majority of reviews seem like they are written the day or week that the customer received the product. One counter point to the argument is that I have heard it said that right after you learn something is when you’re in the best position to help someone else overcome the hurdle you just overcame.
So Jon watches Lex Fridman!? Just speculating LOL.. Btw, would be nice to see Jon on Lex's podcast, but after his presentation on education. ps. Really awesome 5 hours of insightful content!
Do you have an opinion on www.craftinginterpreters.com at least as a starting point? Also, related to the WASM point, I understand your resentment of the web, but do you agree that essentially everyone has access to a web browser therefore targeting that let's you target more people than targeting a specific OS? I agree that the web as produced a lot of bad stuff, but I'm not sure why targeting browsers for IR bytecode is inherently bad.
Hey Jonathan, I love your stuff! One point you might find interesting is how much you use the phrase "I feel like" I think you mean to say "I think". Feelings are for things like sad, happy, mad, upset, they are about your state of mind. Thinking is about how you perceive the world. I find it is helpful to not mix the two. I understand that the definition of "I think" has connotations of "I know" thanks to how people use it.
Oh dude, you are gonna run into so many problems saying I think instead of I feel, saying I think this means (in a lot of people's head) "if you do think this then you are wrong." Saying I feel means "this is the way I feel but it's ok if you feel a different way." It took me way to long to learn this, but when I did life became much easier.
@@Zipperheaddttl yeah when I started using I think rather than I feel I was worried about that too. But it really has not been a problem for me. As a bonus I get to communicate my feeling. For example, I can say "I feel frustrated". Also, saying I feel can result in most people dismissing your ideas. I am not saying everyone should use "I think". But if you are helping to correct issues around development, adjusting communication to be more accurate might be worth doing. Finally, if someone gets upset or nasty about you using "I think". Then they probably need some help. Either your thoughts are non-consequential or they need to calmly and professionally figure out if your thought has merit. And if they don't, they need to explain to you why in a professional manner.
@@Zipperheaddttl well, the way I see it is either you accept that your boss and your company has no respect for you and your teammates, or you start to inform them that what they are doing is not professional and not helping the company. I worked for a place where all the employees kept rolling over. It got really terrible. But Yes, in the end it is your call.