*idempotent* - produces the same result multiple times *ephemeral* - may not persist, opposite of immutable *anonymous* - functions that don't have a name *predicate* - function that returns either TRUE or FALSE *memoization* - caching return value of a function *abstraction* - process of hiding implementation details from end user *serialisation* - process of taking data from one format into a more generic format *Turbo Encabulator* - a fictional machine whose technobabble description is an in-joke among engineers for decades. *technobabble* - technical jargon.
Ephemeral is just a fancy word for non-persisting. Something can be ephemeral and immutable tho. Anything in-between is called partially persisting. Also memoization is caching the result value of (pure) functions for some specific inputs, e.g. the cache key are the input parameters.
I find the ephemeral being defined as the opposite of immutable not really true. Immutable doesn't mean persisted, it just means it can't be changed. Ephemeral would simply be something that doesn't last for a very long time (or doesn't persist). I've never heard a javascript object be defined as ephemeral. In that case, anything in the call stack is ephemeral (which is true, but not particularly helpful to think about it that way).
Best fireship video yet! It's this type of stuff that is really hardest to self-teach imo. It's in all documentation, but there's no documentation about it
I'm not sure if that's a really good explanation in terms of typescript, I always thought that abstract classes should only contain methods that are not yet implemented, so they have to be overloaded in derived classes.
@@gamerzero6085 There are multiple ways of looking at it. Both make sense. For one, an abstract class can be a base class of two different classes, which doesn't make sense to instantiate on its own. The other, as you said, is an abstract class, for which not all implementation details are known yet. Often, both occur simultaneously.
@@MechMK1 Yes, now i actually understand the practice of using abstract modifier just as mark that this class doesn't have to be instantiated on its own, after working with C# for a while. Yet I think it worth to tell about virtual methods and overriding when talking abstract classes.
I would think of abstract classes as making it not instantiate on its own Because it doesn't have all the implementation details, I feel like those go hand in hand, at least I can't imagine a scenario where that's not the case. and if it was only abstract methods I might just vouch for an interface.
I'm big about terminology in programming, especially when tutoring. I try to emphasize to my students that using the right words makes communication much more efficient and finding the correct terms deepens your understanding of the subject. However, I'm also a bit of an etymology nerd so I may go too far with it sometimes... most of the time...
@dev stuff I agree that a good communicator need to be able to describe concepts in terms that are close to the target audience. However, I still believe that having good vocabulary and being able to compactly and precisely express ideas using "industry standard" terms in a professional setting among peers is advantageous. Also I don't think that building such vocabulary is a matter of memorization, but rather of exposure to the subject matter. E.g. I wouldn't require a student to know the difference between terms "anonymous function" and "arrow function" in Javascript right after they're introduced to the concepts, but rather after they're comfortable with it, but I would always make sure to use the terms correctly myself and gently correct any misuse of terminology.
Thank you! The more time I spend in the programming world, the more I wish we could all just have a glossary in front of us and completely agree on the meaning of words like these.
I would say that it's more accurate that while learning software engineering you have to learn some new concepts. These new concepts have words we are unfamiliar with, so for some reason we attribute them as "fancy". Many of the concepts are intuitive though, so it's just a matter of learning the vernacular.
I recognize idempotent from my discrete math class. The idempotent law, which is basically saying if there a prepositional statement p (boolean) then p OR p is equivalent to p. P AND p is equivalent to p
From Wikipedia: The term "memoization" was coined by Donald Michie in 1968 and is derived from the Latin word "memorandum" ("to be remembered"), usually truncated as "memo" in American English, and thus carries the meaning of "turning [the results of] a function into something to be remembered".
Serialisation need not necessarily involve conversion to a language independent format (of which JSON would be an example) for interop. It can also mean dumping object state to file, within a language itself for resumability or streaming.
Thank you for this video, Jeff! There was definitely a word or two (like idempotent and ephemeral) that I've heard before but didn't really understand.
@@ArchonLicht Yeah this video isn't as great as people think lol His definition of abstraction is also not perfect. He described inheritance, not abstraction. Abstraction is for example if you have a data structure with a .sort() method. You just call .sort() on it and you expect a certain outcome (a sorted collection), and you don't care how it sorts itself. Meanwhile the data structure can have a way it gets its output (for example quicksort or something), but then the developer of the library decides to switch out the sort for a faster sorting implementation. You keep using .sort() on it and it keeps giving the same result of a sorted collection, but it does it entirely differently than before and you don't even notice. This is abstraction. Creating an API (API as a term can be used for web APIs but also code libraries) where you hide useless implementation details but give out what the function takes and what it will output. This should always remain consistent but the implementation can then be done in a million different ways and the consumer (user of the API) never has to care or know.
PHP - The Scope Resolution Operator (also called Paamayim Nekudotayim) or in simpler terms, the double colon, is a token that allows access to static, constant, and overridden properties or methods of a class.
Rockwell Automation is still around; among other things they sell maintenance and support for robot arms, which adds an entirely new layer of inscrutable jargon ("inverse kinematics", "homogeneous coordinate transform", "palletizing") in their day-to-day business :-)
at 4:44 I might be wrong but I think TS is not strongly typed because you can coerce values into other types because ultimately it is JS. It does have optional static typing. But I am not an authority on the matter I think it would be cool if you had a video showing off a comparison of Static vs Dynamic and Strong vs Weak to show how those are two different things and not mutually exclusive
@@migueldomingos4570 Good point. You could also store two different types in the same variable and check it at runtime. let c: string | number = func() .
Thanks for sharing this content. A few remarks, though: A good example of predicates is the function you pass as the argument of the filter function on arrays. Your example with isCat, however, is a misunderstanding of OO and polymorphism. Both Cat and Dog should have a function makeSound() and their implementing classes then yield the respective result. No if needed. Your example means that for each additional animal you need to add 1 more is... function and you need to add it to the union type and you need one more if block in makeSound. This violates the Open Closed Principle and it is measurably more complex (check the CCN). Secondly, you are right that abstraction means to hide implementation details. Declaring a class "abstract" is not the answer here. Many abstractions exist without OO concepts like inheritence. Your code achieves DRY but not abstraction per se.
I really really like the interface and the theme of your IDE. Which one is it? Adobe Brackets? What Theme is it. Please make one video about it. We'll deeply appreciate it. ❤️
5:56 Just wanted to point out that you can optimise it even more from linear to log(n) by using Matrix exponentiation. f = 1 s = 1 new_f = 0 * f + 1 * s new_s = 1 * f + 1 * s f, s = new_f, new_s => Multiplier matrix = [0 1] [1 1] raise it power N using binary exponentiation to get the n-th Fibonacci number. There is NO need to memoize anything - So we can even save some space complexity to constant space; (assuming your binary exponentiation function is iterative and not recursive) Best solo: Time = O(log n), Space = O(1) Thanks for reading !
If we are going the math way, might as well go all the way and use the formula Fib(n) = (phi^n - (-phi)^-n) / sqrt(5) Where phi = (sqrt(5) + 1) / 2 For time and space both O(1)
By the way, the last example of serialization, there is an error in the json inside the python example. Attributes and string values have to be declared inside double quotes :P
Good vocabulary lesson. It is good that you eschew obfuscation. Oh and where did you get those wild B-roll clips of the guy explaining ... nothing? Is it stock footage somewhere?
My favorite is the missile guidance system, as described by the US Air Force - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-bZe5J8SVCYQ.html "The missile knows where it is at all times. It knows this because it knows where it isn't. By subtracting where it is from where it isn't, or where it isn't from where it is (whichever is greater), it obtains a difference, or deviation. The guidance subsystem uses deviations to generate corrective commands to drive the missile from a position where it is to a position where it isn't, arriving at a position where it wasn't; it now is. Consequently, the position where it is, is now the position that it wasn't, and it follows that the position that it was, is now the position that it isn't. In the event that the position that it is in is not the position that it wasn't, the system has acquired a variation, the variation being the difference between where the missile is, and where it wasn't. If variation is considered to be a significant factor, it too may be corrected by the GEA; however the missile must also know where it was. The missile guidance computer scenario works as follows: because a variation has modified some of the information the missile has obtained, it is not sure just where it is; however it is sure where it isn't, within reason, and it knows where it was. It now subtracts where it should be from where it wasn't, or vice-versa, and by differentiating this from the algebraic sum of where it shouldn't be and where it was, it is able to obtain the deviation and its variation, which is called error."
How do you make the code pop up chunk by chunk in VS Code? Is there some trick or extension to it or is it just working with ctrl + z? Love your videos btw!
They could both from the same latin root but I couldn't trace memo further than memorare memor -> memorial -> memorie -> memory momorare -> memorandum -> (memo)
In C#, Abstract Class doesn't hide implementation details but define, specify and mandate what must be implemented. I would have expected just defining a function, then calling it as an example of abstraction. In Js land, For example, importing a module, and calling it's function is an example of abstraction, as it has hidden all the implementation details...hence functional abstraction.
5:14 Well, it's the same "memo" in both cases, haha! Given the etymological focus you had going on earlier in the video, I'm surprised you didn't put it to use there :-)
Wish you (at least in the description) mentioned which of the buzzwords in the intro were fake (at time of recording to best of your knowledge). When you recognize most of them as actual terms... and at least one of them from the mindbogglingly amazing deadpan joke jargon video... you wonder if the ones you don't recognize are real ... also from the joke video.. or from elsewhere
There should be a """"dedicated keyboard shortcut for LIKE Button in Fireship YT channel"""". I'm tired liking each of the video of Fireship with a mouse and its so frustrating.
I didn't know anonymous functions meant the same thing than lambda functions. Turns out than as usual, the hardest part is actually knowing the right terms to use.
If these things actually were ask in an interview, without using simple language, your better off in a different company anyways. These all are not hard concepts which can be easily explained without using cryptic words (Especially ephemeral and Idempotent).
I know is a newbie question but can you explain, please, what ' : animal is Cat' in isCat function declaration means??? I didn't knew that you can type something else there besides the returned TYPE of that function...