JavaScript Pro Tips - Code This, NOT That

SdĂ­let
VloĆŸit
  • čas pƙidĂĄn 26. 09. 2018
  • New Series! Code this đŸ’Ș, not that đŸ’©. Learn how to write solid modern JavaScript and avoid bad code from the olden days. angularfirebase.com
    - Source github.com/codediodeio/code-t...
  • Věda a technologie

Komentáƙe • 2,4K

  • @Fireship
    @Fireship  Pƙed 5 lety +701

    The await is over! The async/await video I promised is here czcams.com/video/vn3tm0quoqE/video.html

    • @panqmufin
      @panqmufin Pƙed 5 lety +6

      Hi! Awesome video!, Learned a lot. I just wanted to know, which code editor are you using?

    • @Gh0stl3y
      @Gh0stl3y Pƙed 5 lety +2

      Love this video, it helped me fix up some of my old code.

    • @ryokuhasu9699
      @ryokuhasu9699 Pƙed 5 lety

      holy crap this is useful for modding the new RPG Maker Engine since it's in JS.

    • @optimusprime9456
      @optimusprime9456 Pƙed 5 lety +1

      Also interested about code editor...

    • @Fireship
      @Fireship  Pƙed 5 lety +12

      VS Code czcams.com/video/u21W_tfPVrY/video.html

  • @jeromesnail
    @jeromesnail Pƙed 4 lety +2487

    At first I was like "I can't think of anything this video could teach me".
    After two minutes "I don't even know how console logging works..."

    • @xenithmusic3029
      @xenithmusic3029 Pƙed 4 lety +20

      Print()

    • @squidinc4376
      @squidinc4376 Pƙed 4 lety +4

      big same

    • @DailtonR
      @DailtonR Pƙed 4 lety

      LITERALLY

    • @Jack_Vickers
      @Jack_Vickers Pƙed 3 lety +59

      It's videos like this that remind me to never get comfortable with how I code, and to look at the specs for even the most simplest of code.

    • @phoexer
      @phoexer Pƙed 3 lety +8

      This comment is how we all reacted apparently.

  • @yandodov
    @yandodov Pƙed 5 lety +2694

    console.table() --- mind blown

    • @addictzz
      @addictzz Pƙed 5 lety +92

      Super mindblown. Spent hours to convert JSON to csv table and turns out there is a way to instantly do that.

    • @whatamievendoing
      @whatamievendoing Pƙed 5 lety +38

      Read this and it will be much more difficult for the console to surprise you developers.google.com/web/tools/chrome-devtools/console/api

    • @seanadamson7640
      @seanadamson7640 Pƙed 5 lety +1

      đŸ˜ČđŸ˜Č

    • @yuli1970
      @yuli1970 Pƙed 5 lety +2

      ===*

    • @Nomadvicky
      @Nomadvicky Pƙed 5 lety +1

      yeah really don't know whether this ever exists......

  • @bender7367
    @bender7367 Pƙed 4 lety +661

    00:51 - Debugging with console.log
    02:39 - Destructuring
    03:59 - Template literals
    06:07 - Spread syntax
    08:19 - Loops
    10:18 - async/await

    • @alexsamari5650
      @alexsamari5650 Pƙed 4 lety +7

      Give this human a medal

    • @sebastiansimon7557
      @sebastiansimon7557 Pƙed 4 lety +8

      If this were to be added to the video description, then CZcams would automatically display this structure in the video progress bar.

    • @quintencabo
      @quintencabo Pƙed 3 lety +3

      No you need to add
      00 - Start
      aswell

    • @iangorham2247
      @iangorham2247 Pƙed 3 lety

      Not the hero we deserve, but the hero we need right now

    • @dheepankarthiksworld6419
      @dheepankarthiksworld6419 Pƙed 3 lety +1

      Add a 00:00 to the top of the list. Add the name as Intro

  • @vitamin_ce
    @vitamin_ce Pƙed 4 lety +531

    Fireship : So we're going to parse the arguments in it....
    Me : Looses focus for a bit
    Fireship : So yeah that's how you make Minecraft with JS

  • @perfectwebsolutions
    @perfectwebsolutions Pƙed 5 lety +1504

    00:48 how to use console.log
    02:39 Object Destructuring
    04:00 Template Literals
    06:09 Spread Syntax
    08:20 Loops
    10:21 Async/Await

    • @Fireship
      @Fireship  Pƙed 5 lety +59

      Thank you for this :)

    • @sal97
      @sal97 Pƙed 5 lety +21

      @@Fireship I have a question: using reduce(), map() and filter() isn't 3 time slower than using a for loop? Especially with larger array/objects

    • @lukor-tech
      @lukor-tech Pƙed 5 lety +10

      YT needs a bot for every instructions video to do this.

    • @RemcoPeggeman
      @RemcoPeggeman Pƙed 5 lety +12

      Probably not exactly three times slower because of engine optimizations, but you are correct, it is slower.
      That is one of the trade-offs that you as a developer should make, most of the times the improved readability is worth the performance decrease.
      If the reduce/map/filter structure is fast enough, great! If not, then it is time to optimize, otherwise it would be premature optimization.

    • @infectedburrito
      @infectedburrito Pƙed 5 lety +2

      Code not this that

  • @mihutz98
    @mihutz98 Pƙed 5 lety +2070

    Code not this that

  • @andyyuan9338
    @andyyuan9338 Pƙed 3 lety +663

    It's a whole new level of console.log!

  • @yunusdurdygulyyew9270
    @yunusdurdygulyyew9270 Pƙed 4 lety +185

    This is depressing and motivating at the same time

  • @AlejandroVivas
    @AlejandroVivas Pƙed 5 lety +2054

    Shit, I just realized I don't know nothing about JS.

  • @9429963654
    @9429963654 Pƙed 5 lety +454

    "I can do a whole video on console logging"
    Please do!!

    • @gradientO
      @gradientO Pƙed 4 lety +2

      He did

    • @Tiritto_
      @Tiritto_ Pƙed 4 lety +8

      @@gradientO He did a video about console logging. We want him to console log the video.

  • @ihavetwofaces
    @ihavetwofaces Pƙed 4 lety +2

    Unironically liked, commented, and subscribed. Amazing quality. Extremely informative while concise. Thank you!

  • @HawkwardAlaskan
    @HawkwardAlaskan Pƙed 3 lety +1

    I watched your video on Async Await (in the future from this video's perspective) and I whole heartedly agree, even as one just starting to learn Javascript. For a month I was getting tired of all of the thens, THEN I found your Async Await video and boy oh boy, the game changed. I'm happy to have learned it from you early on rather than building lots of habits against it. Thank you for helping me get started on a good foot, and I love your teaching methods. Straightforward and zero filler.

  • @alexschlake9701
    @alexschlake9701 Pƙed 5 lety +206

    A lot of valuable information in here, thanks so much. Not too basic, but also not confusingly high-level. The console table, "Oh that's sexy"

  • @BlueskyFR_
    @BlueskyFR_ Pƙed 4 lety +188

    This is more a guide on how to use the latest JS features than a good pratices tutorial.

    • @BlueskyFR_
      @BlueskyFR_ Pƙed 3 lety +2

      @@njpromethium xD

    • @bill0x2a
      @bill0x2a Pƙed 3 lety +11

      @@njpromethium you say that but I totally would lol

    • @botondhetyey159
      @botondhetyey159 Pƙed 3 lety +7

      @@njpromethium It's not like that extra 5 seconds is not worth the big glowing red error message, so I actually notice it

    • @brianjones3643
      @brianjones3643 Pƙed 2 lety +1

      @@botondhetyey159 You can also use console.error or console.warn. They add a little bit of color and make the console messages a lot clearer and you don't have to spend time on styling the console log

    • @madhououinkyoma
      @madhououinkyoma Pƙed rokem +1

      @@bill0x2a I watched and actually spend a good 10 minutes making a little message for my team

  • @carlmeyer96
    @carlmeyer96 Pƙed 3 lety +5

    Hey! Just want to say this is an awesome video! I know most of the things in this video but its great for a refresher or to send to other devs. Love your presentation and you make it really quick and informative. Kudos!

  • @tehdave192
    @tehdave192 Pƙed 5 lety +88

    Another thing to keep in mind at ~10:15 is that you're now doing 3 loops compared to one loop. At some point you have to wonder whether you want to give up runtime for readability, because the for loop is definitely going to be faster. It doesn't matter when you have one record, but if you have an array of multiple hundreds of thousands of records if you're running a batch or an import of something, it is going to make a difference if you reduce, filter, and map, or just do one for loop. Technically you could also just do it in one reduce function.

  • @puargs
    @puargs Pƙed 5 lety +1144

    Please be very careful when condensing traditional loops to functions like map and filter... You can wind up running your loop several extra times, or in many cases dozens of extra times - per function call. It's often the case that a map or filter operation will be used by someone and re-run per element thousands of times on a single page load or interaction, and they'll even let it run on the UI thread... Concise code is good, and I like a lot of your recommendations but please exercise caution with convenience/style in the loop category. I see probably 3-4 times a month places in our prod code base that can be improved in execution time by orders of magnitude. We're talking seconds of wait time in production code used by tens of thousands of people daily. It's probably my number one pet peeve, wasting millions of cycles on fancy one liners. That's just my one crticism; it's not "đŸ’©" code to use manually indexed loops. It's usually the best solution.

    • @amdphenom92
      @amdphenom92 Pƙed 5 lety +65

      I was wondering the same thing, it adds a lot of unnecessary looping especially if it's a big array just for syntactic sugar. If using a single function it makes a lot of sense but not if we are using map, filter and reduce all at the same time.

    • @Keno_jm
      @Keno_jm Pƙed 5 lety +62

      Yup my thoughts exactly. Traditional manual loops have been tested to be the most performant method in JS even if they're not one-liners.

    • @Fireship
      @Fireship  Pƙed 5 lety +278

      You're right, they are convenience methods because you often only need to solve one problem when looping, should have made the performance part a little more clear.

    • @technoparty123
      @technoparty123 Pƙed 5 lety +41

      I exactly had the same reaction and concern when I saw that part and checked the comments if anyone else mentioned it so I can thumbs up their comment

    • @puargs
      @puargs Pƙed 5 lety +138

      Let me be clear though: your videos are great, and I (along with others) appreciate the tremendous work put into them. So thank you! But we wouldn't be programmers without a little peer review ;D

  • @magne6049
    @magne6049 Pƙed 4 lety +247

    9:23 It should be a disclaimer that running the for-loop on orders once (in the code he advises against) is faster than iterating orders 3 times using orders.reduce, orders.map, and orders.filter. If orders is a huge array this could significantly impact performance, and then the for-loop would actually be an optimisation.

    • @fort1Z
      @fort1Z Pƙed 4 lety +3

      The advanced way should be a composition.

    • @magne6049
      @magne6049 Pƙed 4 lety +7

      Timo M Yes, it should show chaining too, but even then it will be potentially a lot less performant than the simple single for-loop. Unless you are using Lazy.js or similar, of course.

    • @johndaveomandam9556
      @johndaveomandam9556 Pƙed 3 lety +2

      How about .forEach?

    • @magne6049
      @magne6049 Pƙed 3 lety +6

      John Dave Omandam forEach is same as regular for-loop, since forEach is basically just syntactic sugar for convenience.

    • @softwarelivre2389
      @softwarelivre2389 Pƙed 3 lety +13

      @@magne6049 forEach creates overhead because of the new scope in the call stack, though.

  • @sanswee6396
    @sanswee6396 Pƙed 4 lety

    Those stuffs are just marvelous and the way you wrap it up in minutes is just mind-blowing . .

  • @RonanConnolly
    @RonanConnolly Pƙed 5 lety +221

    Wow, I had no idea about:
    - console.table
    - console.log({propertyName})
    - CSS style in console.log
    Thanks for the tips!

  • @ycmjason
    @ycmjason Pƙed 5 lety +140

    Very nice video! But I find the Object.assign bit misleading. So I decided to comment here to clarify. In the video, he said instead of mutating an object, we might want to create a whole new object. Then he talked about Object.asign and said that object spread is just a syntactic sugar. This might mislead you to think that Object.assign will create a new object. But in fact, it doesn't. It mutates the first object in the arguments. And the object spread is only a syntactic sugar for Object.assign({}, ...), not for the whole Object.assign function. I hope this will clear things up. At last, thanks again to the creator for this informative, concise and easy-to-follow video!

    • @Fireship
      @Fireship  Pƙed 5 lety +23

      Well explained, thank you for this 👍

    • @VipulAnand751
      @VipulAnand751 Pƙed 5 lety

      Creating a copy of an object, which then can have alternative values. Is JSON parse the stringify-ed original object stored as new variable, achieves it?

  • @tareiknetro315
    @tareiknetro315 Pƙed 4 lety

    Best video/production/script/everything ever. Really cool, easy to understand but fast and straight to the point. Checking out the rest.

  • @aspected
    @aspected Pƙed 4 lety +2

    I swear I'm gonna end up adding all your videos to my helpful web development playlist. These are so handy.

  • @TwinFeats
    @TwinFeats Pƙed 5 lety +55

    Excellent video! I've been a JS developer for 20 years, and so I learned a ton from this. :) As an old-timer, I do have one comment on some of the efficiencies here: I prefer code clarity over code brevity. Shorter code is not necessarily easier to understand, especially for someone who is not yet a JS expert. So some of the tricks you showed I will absolutely be using, but others I won't just because - to me - they aren't as clear as what they are replacing. :)

  • @sleeplessdev7204
    @sleeplessdev7204 Pƙed 5 lety +199

    Most "pro" tip videos are pretty obvious syntax sugar in ES6; But I actually learned some cool stuff from this one!
    I can use console.table to print formatted arrays?? "Woah!"
    I can add inline styling to console.logs?? "Whaaattt!"
    I can use template literals to automagically destructure function parameters??? "Mind BLOWN!!"
    Great video!

    • @CottidaeSEA
      @CottidaeSEA Pƙed 3 lety +1

      I think it's nice even if it's just syntax sugar, because I notice that there are many changes in languages that people simply don't know of.

    • @loobakaer2
      @loobakaer2 Pƙed 3 lety

      I've been learning JS for roughly a year now and this video seriously blew my mind, wish that I'd seen this sooner.

    • @danj88888
      @danj88888 Pƙed 2 lety

      same reaction 🙃🙃

    • @blackcitadel37
      @blackcitadel37 Pƙed 2 lety

      Ugh

    • @faus585
      @faus585 Pƙed 2 lety

      @@loobakaer2 saw this early on in learning and tbh I don't understand it fully LMAOO

  • @aboxinspace
    @aboxinspace Pƙed 4 lety +1

    Dude you're an awesome instructor! Def subscribing. This video is probably gonna save my life, working an intership as the only other programmer besides my boss and not knowing much about JS Promises. lol

  • @tyler4475
    @tyler4475 Pƙed 2 lety

    These videos are changing my life! Things I never thought of starting to learn coding.

  • @maxosall6972
    @maxosall6972 Pƙed 5 lety +11

    I just discovered that there is - actually - a lot to learn about Javascript!
    Many thanks

  • @xAstericks
    @xAstericks Pƙed 5 lety +89

    First thing I want to say, the thumbnail for this video had some "DON'T DEAD OPEN INSIDE" vibes

    • @prasadlahane5486
      @prasadlahane5486 Pƙed 4 lety

      czcams.com/video/g99yhG2mYec/video.html here you go

  • @kumarvs66
    @kumarvs66 Pƙed 4 lety +1

    You just delivered what's need to be delivered. Straight and Accurate. Bravo 🙏

  • @PayneDeathz
    @PayneDeathz Pƙed 3 lety

    That spread syntax and template literal is something that I have used for months now after watching this video! Glad I subscribed a long time ago!

  • @tstuart9636
    @tstuart9636 Pƙed 5 lety +5

    I feel like i finally understand how to write JS for almost any type of project, but this video helped me realize I got a lot of work to do in terms of writing more efficient and clean code.

  • @gunnerandersen4634
    @gunnerandersen4634 Pƙed 3 lety +5

    the console tips are awesome, I just want to say the more you know the better, but dont always use everything you know. Sometimes you might want to keep things more verbose but more understandable, but this is always something to mind about each case! Love the video btw

  • @karimnaufal9792
    @karimnaufal9792 Pƙed 3 lety +1

    Priceless man! The kind of things that you would never know by reading the doc, does js even have a doc, never seen it lol. thank you, thank you!

  • @somedooby
    @somedooby Pƙed rokem

    I love the short comedic clips that you insert into these

  • @BuddyPupper117
    @BuddyPupper117 Pƙed 4 lety +8

    For spread syntax keep in mind that it only shallowly creates a new object. If you have deeply nested variables those are copied by reference, so to keep immutability with a deep object you can do, var x = JSON.parse(JSON.stringify(some_obj));
    Not sure of the time cost, but it’s an easy way to maintain immutability.

  • @susannnico
    @susannnico Pƙed rokem +234

    Investment in stocks is a great way to invest your money. The team is constantly checking the market for changes and make sure that you are always informed about the best time to invest. As a result, I have made more money than ever before, and I don't have to manage my portfolio on my own! Invest in stocks, it's worth it!

    • @lailaalfaddil7389
      @lailaalfaddil7389 Pƙed rokem

      That's great! may I ask who's your portfolio manager?

    • @susannnico
      @susannnico Pƙed rokem

      *ROCHELLE DUNGCA-SCHREIBER* is my portfolio-coach, I found her on Bloomberg where she was featured, I looked up her name on the internet. Fortunately I came across her site and reached out to her, you can verify her yourself.

  • @adammorait7429
    @adammorait7429 Pƙed 4 lety

    This kind of video es exactly what I was looking for, sometimes you find interesting videos or videos explaining the same stuffs again and again but yours is more than interesting... it's useful if you want to make a step to a higher level in javascript. Thanks :-)

  • @abimaeelmouraa
    @abimaeelmouraa Pƙed 2 lety

    Wooow!!!
    Those tips about console was really useful!!
    Thank you! I'll never forgot this!😃

  • @avi12
    @avi12 Pƙed 5 lety +13

    I love how that while explaining the code, for each sentence you hit Control+Z

    • @EpiDot52
      @EpiDot52 Pƙed 4 lety +5

      Ohhhhhh! I was wondering about that! That's so clever.

    • @sarvagya-sharma
      @sarvagya-sharma Pƙed 4 lety +1

      Yeah this guy is like genius

  • @tuqirehussain
    @tuqirehussain Pƙed 5 lety +4

    Really good video, thanks for making it!
    A bit of my own commentary.
    Personally I'd highlight `push` on arrays morphs the original array whilst the spread syntax creates a new array, therefore the spread syntax can be significantly slower. I think use cases exist for both.
    Object assign will morph the first argument, which I don't think is made super clear.
    Although array methods like filter, reduce and map are syntaxally really clean, I have found them to be significantly slower than for loops when working with large arrays. Again I think use cases exist for both.
    Besides that really awesome vid. Thanks for sharing!

  • @atomicpx
    @atomicpx Pƙed rokem

    This is so amazing! I didn't know about how to send data to tables and even style it in the console. How cool!

  • @nachannachle2706
    @nachannachle2706 Pƙed 4 lety +1

    Oh my Godness! If this isn't BEAUTIFULLY written and efficient code, I wonder what is.
    Best video I have seen in YEARS of learning programming.

  • @TheXBoy5
    @TheXBoy5 Pƙed 4 lety +28

    Thumbnail: "Code This, NOT That"
    My brain: "Code NOT This That"

  • @nathanmackinnon5406
    @nathanmackinnon5406 Pƙed 5 lety +25

    Good video. It's worth noting, by awaiting each function call like that, you are running all three functions synchronously. You can run them all in parallel by using Promise.all(), so the result would look like: const [first, second, third] = await Promise.all([random(), random(), random()])

  • @ericvaneldik7331
    @ericvaneldik7331 Pƙed 3 lety +2

    Really nice tips, the console logs styling was new to me. As for the good practice, I really love it, however the bad practice is sometimes needed if you need to code to work in older browsers (like ie11) or webviews in windows applications.

  • @swetabjahazra8050
    @swetabjahazra8050 Pƙed 4 lety

    This channel posts some of the best javascript tips and tricks.

  • @ihavetwofaces
    @ihavetwofaces Pƙed 4 lety +12

    When you playing checkers and someone breaks out the 3D chess board.

  • @Philson
    @Philson Pƙed 4 lety +34

    So much new modern stuff. I used to write a whole bunch of archaic code, since I come from the C/Java world.

  • @ouvie
    @ouvie Pƙed 2 lety +2

    00:19 being rickrolled in a JavaScript tutorial is one of the last things I would imagine happening

  • @lucasmelo6258
    @lucasmelo6258 Pƙed rokem

    brooo, this video is gold. Thanks man, you are literally helping me feed my kids.

  • @agustinlavalla8892
    @agustinlavalla8892 Pƙed 4 lety +3

    Amazing lesson! Thanks! I'm shocked about console posibilities. I've realized I've always debugged in a wrong way

  • @sebasn6751
    @sebasn6751 Pƙed 3 lety +6

    1:43 Instead of using [ ], use { }. And instead of "index 0, 1, 2" it will display the actual names of the objects.

  • @dianakalstein3644
    @dianakalstein3644 Pƙed rokem

    Thanks to this video, I've finally grasped the entire concept of async await. Great explanation! :)

  • @its-probably_fine
    @its-probably_fine Pƙed 2 lety

    I turn into an explody-head emoji whenever I check out any of your videos! Thanks for BLESSING US with this channel!

  • @jesucristoesteban908
    @jesucristoesteban908 Pƙed 5 lety +14

    Please make the await async video, please. Thanks!

  • @martinflogaus8577
    @martinflogaus8577 Pƙed 5 lety +6

    You, Sir...
    you deserve a medal! I'm a junior FE Dev and you just blew my mind JS :D

  • @erasmobellumat3973
    @erasmobellumat3973 Pƙed 3 lety

    Your channel is amazing! Your voice reminds me Joey Ramone, from Ramones. And this is not a bad thing, you rocks.

  • @jamjam3448
    @jamjam3448 Pƙed 3 lety

    Wow i never thought i could learn something new from this video. Thanks a lot.

  • @sivuyilemagutywa5286
    @sivuyilemagutywa5286 Pƙed 5 lety +11

    thank you, you are the best instructor on youtube

  • @avi12
    @avi12 Pƙed 5 lety +3

    9:32 The disadvantage of splitting for loop into 3 higher-order methods, is it that each of these methods has a complexity of O(n), a total of O(3n), while the previous, traditional for loop, or even a higher-order forEach(), has a complexity of O(n)

    • @codesymphony
      @codesymphony Pƙed rokem

      3n is still O(n), but yes c style is always more efficient

  • @Fingolfin1984
    @Fingolfin1984 Pƙed 4 lety +1

    I didn't know that template literal function magic... I saw that been used in styled components, but didn't realized you can just use it that way. Great tips!

  • @masroorahmad9520
    @masroorahmad9520 Pƙed 4 lety

    Thanks alot !!!
    Explanation is so expressable and very worthful information in short span of time.

  • @BlueProgamer212
    @BlueProgamer212 Pƙed 3 lety +3

    i like how const {} betrayed the "with" keyword

  • @TheLollercaster
    @TheLollercaster Pƙed 4 lety +6

    11:05 - oh my god, this is perfect! :D

  • @nothingnoone8752
    @nothingnoone8752 Pƙed 3 lety

    Bruh you're kidding me with this console stuff. I showed this to my front end dev friends and _none of them had heard of it_ - you're a legend. Seriously this channel is next level stuff.

  • @cedrics7374
    @cedrics7374 Pƙed 4 lety

    The console logging part was awesome, when I wanted to find something easier I use to add lot's of ===> or ALL CAPS!!! But now I can use color codes which is amazing. There are definitely some gems in this video, thank you!

  • @kazaakas
    @kazaakas Pƙed 5 lety +4

    10:16
    This type of stuff is nice on front-ends and/or for non-hot parts of code, but it should be known that on the backend it's not recommended if it regards the main workload of your code. In practically every multi-paradigm language loops result in much better performance than functional programming styles (even though FP is awesome). A function call and new variable initialization is a very small performance overhead, but it adds up much quicker than you would think with code like this.

  • @RobertLeeuwerink
    @RobertLeeuwerink Pƙed 5 lety +7

    Haha, .then() always reminded me of Dude where is my car. Cool tip about the console table, didn't even know you could do something like that

    • @Fireship
      @Fireship  Pƙed 5 lety +1

      Glad to hear I'm not the only one, haha

  • @altaccount648
    @altaccount648 Pƙed 4 lety

    Over five years. Yet, you sir have taught me way more in twelve minutes.

  • @FromRootsToRadicals
    @FromRootsToRadicals Pƙed rokem

    Oh hell great vid! I did not know about formatting the debugger like this.

  • @SoCreaty
    @SoCreaty Pƙed 5 lety +7

    Amazing Video. How can guys dislike this if they are not interested in becoming a better programmer? LOL!
    I learned a lot. Thanks!!!!

  • @christophbuhler6731
    @christophbuhler6731 Pƙed 5 lety +25

    For large JS apps:
    - The structure of your code is way more important when it comes to writing 'good' JavaScript.
    - The mentioned features are not necessarily 'best practices'. You don't need async/await if you are working with observables..
    - Styling the console output with css sounds like a terrible idea to me because debugging code should be temporary, my little picasso ;). I recommend debugging with the console like this:
    console.log('2 save item', item);
    This way, you can locate your debugging code easily and provide some meaning instead of just throwing out variables. Also you can add a number to check if your code runs in the right order (async code..).

    • @Fireship
      @Fireship  Pƙed 5 lety +2

      Good points, thanks! I agree 100% with your first one. I think you meant Promises (not Observables) on the second point, which I encounter in every project and async/await truly boosts productivity and readability.

    • @christophbuhler6731
      @christophbuhler6731 Pƙed 5 lety

      @@Fireship Thanks for the reply, I like your channel a lot! I did mean observables. In all our reactive applications we are using 0 promises and 0 async/awaits. It's just one paradigm of handling async code of many (imo inferior to observables). I agree with you that async/await is way better than promises which in return are way better than callbacks..

    • @LukePighetti
      @LukePighetti Pƙed 5 lety

      Point 2 isn't really a point, If you're working with observables you aren't working with promises and therefore async/await is not an option. If you're working with promises async/await is definitely best practice in 2018.

    • @TechWithMikey
      @TechWithMikey Pƙed 5 lety +1

      I would recommend debugging within your IDE if possible or using breakpoints, than using console.log's all over the place

    • @LukePighetti
      @LukePighetti Pƙed 5 lety +1

      when I'm writing tests I always use console.log() because they don't stop the tests and show data when you run the test.

  • @pebojote
    @pebojote Pƙed 4 lety

    My mind just got blown! Thanks for the pro tips

  • @RachidChh
    @RachidChh Pƙed 4 lety

    Greatttt Job guys ! all tutorials are awesome.

  • @brunobarretocarvalho2315
    @brunobarretocarvalho2315 Pƙed 5 lety +213

    awaiting the async/await video. HAHA

  • @shaunb
    @shaunb Pƙed 5 lety +27

    You made me feel better about being a JavaScript developer lol. Thanks for the tips!

    • @Fireship
      @Fireship  Pƙed 5 lety +5

      Best place to be IMO

    • @dustbinsavesyou8283
      @dustbinsavesyou8283 Pƙed 5 lety +1

      What made you feel bad?
      The complexity of javascript? Or the existence of javascript itself?
      Because errors scare me, like really

    • @Gustavo-ye1ko
      @Gustavo-ye1ko Pƙed 5 lety

      Maybe the JS haters... they can be annoying sometimes.

    • @nixtoshi
      @nixtoshi Pƙed 5 lety

      What's not to love

  • @joaomatos7565
    @joaomatos7565 Pƙed 3 lety

    These are really good tips! top notch

  • @koppresh
    @koppresh Pƙed 4 lety

    Absolutely loved it!!
    Learnt alot of things

  • @murugans1623
    @murugans1623 Pƙed 5 lety +7

    Seriously ! One hell of a way of coding😎😎. Before this video i never knew that you can use css in console log(). Seriously thank you for that. Could you please do a video on cron jobs using firebase real-time or firestore database. async and await are the awesome things in the new JavaScript world. Seriously i wanna become pro member in your site. In any near future I ll become one. You're the most stylish and sexiest code developer I have ever seen. keeping doing this forever. There is a lot to learn from you.

    • @Fireship
      @Fireship  Pƙed 5 lety

      Haha, thank you for the suggestions. I'll big plans to create better content and more of it :)

    • @WagnerShimatai
      @WagnerShimatai Pƙed 5 lety

      Go to Facebook and open the console. You'll see a CSS-styled warning message.

  • @neosahft
    @neosahft Pƙed 5 lety +14

    Awesome video with nice flow and presentation.
    But two small reminders
    1) loops sometimes are faster if you can do stuff in one loop rather than two one liners.
    2) If you use await improperly you pause the async function. So you might lose parallel execution chances.
    You should've put these a side note or warnings for new students :P. otherwise awesome video.

    • @DanishAnton
      @DanishAnton Pƙed 5 lety +1

      Could you give an example of 2? I never knew you could pause the async function improperly. In fact, I thought if you don't use await on an async function and you used the result, it would be undefined.

    • @neosahft
      @neosahft Pƙed 5 lety

      Danish Anton check out this techbrij.com/javascript-async-await-parallel-sequence you can see what I mean, accidentally doing this is probable

    • @amit-5463
      @amit-5463 Pƙed rokem

      @@DanishAnton Better late than never, for future reference:
      In the example he showed (11:43) the three executions are independent of one another, meaning the 3rd async call, for example, does not rely on the results on the 1st or 2nd asyns calls.
      Using 'await' as he showed there is essentially a sequential execution, we first await the first call, then we initiate the second call and await it, then the 3rd cal... etc.
      But if the calls are independent they can (and should) be executed in parallel for better performances, this can be achieved by first initiating all calls and then awaiting all 3 promises, or better yet, by using Promise.all()

    • @DanishAnton
      @DanishAnton Pƙed rokem

      @@amit-5463 Ahh, thanks

  • @unnamed49
    @unnamed49 Pƙed 3 lety

    I have never seen a video tutorial like this!!! Big thumbs up to fireship. Not what you are teaching but the way you are teaching is a 5 star.. very efficient code display for samples. unlike other tutorials, they tend to waste time typing the codes.

  • @zumatorney2680
    @zumatorney2680 Pƙed 4 lety

    Watched your video yesterday and used this knowledge today thx a lot

  •  Pƙed 5 lety +6

    Array methods like reduce, map and filter perform much slower than classic for loops. So keep that in mind when you have to process large arrays. For small arrays it doesn't make much difference and the code is prettier, but a classic for loop can be over 10 times quicker.

    • @marcelmokos
      @marcelmokos Pƙed 5 lety

      I prefer readable code over discussable performance gain with preemptive optimizations.
      This was a case a few years ago but javascript engines of recent browsers are performing well with these methods. Future improvements are on the horizon as well. I believe one time for loop will be slower than the map, reduce or filter.

  • @k1ngjulien_
    @k1ngjulien_ Pƙed 5 lety +6

    Last time I was this early JavaScript was still called LiveScript.

  • @DirectusVideos
    @DirectusVideos Pƙed rokem

    Great video! This is a good reminder for all devs, and looks like many of us learned something new. 💜

  • @TB3hnz
    @TB3hnz Pƙed 3 lety

    Just learning Javascript for myself, so I'm glad youtube recommended this to me.

  • @sudarshankj
    @sudarshankj Pƙed 3 lety +4

    Using a single for loop is better in terms of performance, since using separate ‘reduce’ ‘map’ and ‘filter’ will internally cause the object to be iterated thrice.
    The old for loop still exists for a reason and should not be discarded without considering the use case.

  • @acloudonthebluestsky9687
    @acloudonthebluestsky9687 Pƙed 4 lety +58

    2nd times watch this and still forgot almost everything, damn

    • @Killerbee-xh2bg
      @Killerbee-xh2bg Pƙed 4 lety +1

      lol me too

    • @cinilaknedalm
      @cinilaknedalm Pƙed 4 lety +8

      probably coz most of it unecessary stuff developers add to make themselves look hot, whilst making unreadable code.

    • @acloudonthebluestsky9687
      @acloudonthebluestsky9687 Pƙed 4 lety +4

      @@cinilaknedalm maybe because he talk too fast lol

    • @abidkhairy..3863
      @abidkhairy..3863 Pƙed 3 lety +2

      @@cinilaknedalm most of it is really usefull tho. I've been using it many times on my projects

    • @LuZ-vg6fy
      @LuZ-vg6fy Pƙed 3 lety

      @@cinilaknedalm this. Making stylish Console log ain't really this useful, you use your ECP for debugging. And the async/await is "must-do" thing nowadays, unless you're not trying to make some legacy stuff while working with API.

  • @alvinrochafi6600
    @alvinrochafi6600 Pƙed 4 lety

    found new fav channel !

  • @MaryamMaqdisi
    @MaryamMaqdisi Pƙed 2 lety

    This is pure gold, thanks!!!

  • @hassanbaiga
    @hassanbaiga Pƙed 5 lety +3

    Its 2019 ? hmmm, seems legit, i won the shirt !

  • @fuckthedumbsh1t
    @fuckthedumbsh1t Pƙed 5 lety +4

    â™Ș never gonna turn around and.... desert you ♫
    Damn it has been a while since the last time I was rick-roll'd.

  • @isabellasecretstory6ofweb476
    @isabellasecretstory6ofweb476 Pƙed 11 měsĂ­ci

    New suscriber ! Love your videos

  • @27FeetUnder
    @27FeetUnder Pƙed 4 lety

    Dude, you definitely deserved my subscribe

  • @desongan9068
    @desongan9068 Pƙed 5 lety +11

    what is you color theme, please?

  • @NextBeack
    @NextBeack Pƙed 4 lety +4

    I can't keep up with what is going on in this video...Anxiety Intensifies!!!

  • @anuragsandhu9590
    @anuragsandhu9590 Pƙed 4 lety

    please keep adding these awesome videos for us

  • @GrandpappyLuke
    @GrandpappyLuke Pƙed 4 lety +1

    One other benefit to traditional for loops is the ability to return early. With a forEach you are required to execute the callback on each item.