I fucking LOVE this guy. no lengthy (or, any) title card or intro music, not constantly saying "you guys" and talking down to the audience, no "i'll see you in the next video" and so on. In short: no bullshit. This is what all youtube channels should be. information without bullshit wrapping it and inflating the length (and therefore wasting my time as a viewer.)
Bonus points for stating the fact that programming is about data at the start. Many programmers seem to lose track of this when they get to work for real.
In the world of programming, that is what software engineering meant: make the automated means to receive, manipulate, and send data according to the intended design goals.
absolutely...hell, this is a good baseline for an experienced programmer...especially when starting a new framework or language...before you say i don't have any experience with that....refer to this.
@@Bonniebelle_00__ It's not really easy. Of course, the languages eventually get compiled to machine code, which is imperative, but they are over so many layers of abstraction that it changes the way you think about the programs.
Matheus Augusto functional programming produce a dynamic field of conditional loops containing operations from static code while imperative languages only have the capacity to represent a single collection of conditional loops at once
functional programming languages work mostly the same way but limit how you can do things. These types of videos are for C-like languages or 'C-inspired' languages.
beautiful...this is perfect for beginners...it will especially clear up the constant "what language do i start with?" question. I always get a lot of push back when i tell them it doesn't matter...but this clarifies it perfectly
Important to note: this is only a description of imperative programming. There are many languages that work in completely different ways (for example declarative programming).
Both logic programming (like Prolog) and functional programming have been called declarative, despite being quite different. There are also declarative elements in modern imperative languages.
Ladder logic programming (used on industrial controllers) is entirely about state😛. Attempting to understand it as data transformation leads to headaches and not much else.
Very true, and a direct consequence of its origins in relay logic. This hasn't stopped vendors from adding data-oriented features, but the essence of ladder logic is state.
mostly true for procedural languages, less so for some functional ones. they only have some of those things (variables, for loops) as syntactical exceptions
Most functional languages have variables (immutable variables you could argue are not variables), and most have some sort of looping construct beyond map and reduce. So I think he's still being general enough.
Well, if I have to complain about somthing, I would bring "if" and "while" statement, wich is basically "goto" constructions. But well, it would be far less understandable if he was using that. Also there is languages which don't allow you to use functions, and there is algebraic languages wich alows you to compute mathematical equations. But well, it's just complaining over nothing. Good video.
@Sydney Bean Actually, you don't need loops or recursion built into your language to express repetition. If you have higher order functions (you can pass functions as parameters), you can use for example the Y-combinator to simulate recursion, and using recursion you can simulate loops.
Great explanation, but misleading title. I thought I was going to get a quick sample of different programming languages: static imperative (C/Java), dynamic imperative (python), static functional (Haskell), dynamic functional (Lisp), declarative (HTML), constraint-based (Prolog), object oriented (SmallTalk), etc.
Purely functional languages just don't have the concept of time built into them. But indeed, you can model time and state with appropriate data structures and by appropriately shaping the evaluation (i.e. using recursive definitions)
@@MaoDev I sometimes don't know what people learn in Computer Science. I sometimes ask people who completed Computer Science what they learnt, and they said they don't know.
A lot of your material reminds me of the Gane and Sarsen Structured approach. I learned this early in my career and still think this way first when approaching a problem
You're really devoted to thinking about programming languages in a fundamental way. You have a thorough, all-encompassing understanding of their strengths and flaws. Your ability to reason about related concepts in an abstract way is quite impressive. Have you ever considered designing and producing your own programming language? I'm genuinely curious what the result would be given enough money and manpower.
Probably one of the best & concise explanations a program! But very far from "all programming languages", as it is *very* specific to programming in a C-style imperative language.
Interesting and useful, but does leave out one important mechanism: most languages have a way for variables in functions to retain their values between calls. For example, in Perl one uses "state", and in C and C++ one uses "static". So if you type "static int Fred = 7;" in a C function (or "state $Fred = 7;" in a Perl sub), the variable Fred will be initialized to 7 only on the first call to that function during that run of that program; for all subsequent calls, Fred will _not_ be initialized to 7, but will retain whatever value it had at the end of the last call (say, 42, or -17).
Not quite every programming langue though. For example, most of these things are false for prolog, since it has a completely different execution model and predicates instead of functions. Instead of having a return value, the inputs of a predicate are unified to satisfy the predicate and the code will backtrack otherwise. E.g. calling append([1,2,3], [4,5,6], X) will make X = [1,2,3,4,5,6], but append([1,2,3], X, [1,2,3,4,5,6]) will make X=[4,5,6]. The only thing from this presentation that is true about prolog is that it has input and output.
I generally agree with most of your opinions about the topics you cover on your channel, but there are a few places where we diverge. In this case, you may simply be over simplifying for the sake of the intended audience, but I think that some things are important for a beginner to be cognizant of: - A program's output may be the control of other programs. In some cases, a programs only purpose is to exist (the trivial idle process, for example). - Not all programming languages support functions, and some languages distinguish between procedures from functions. - Not all programming languages provide explicit loop constructs (while, for); some provide only conditions (if) and explicit branches (goto). - Parallel programming languages have concurrent functions where the caller continues execution until it uses the result of the function call, at which point it waits for the value to be available before continuing. - Not all languages support strings as a basic data type. - Not all programs are hosted by an operating system. Even some programs that are hosted (especially those hosted by real-time and/or embedded kernels) do their own I/O. The kernel itself is one or more programs. When you introduce hypervisors, this gets even more fuzzy. - The convention of "main" being the name of a procedure that is automatically invoked when a program is started is not universal. In some languages, it is immediate code (statements outside any named procedure) that is executed, in other cases the entry point is specified either at build or execution time. - There are languages that are not procedural or sequential, such as VHDL. SQL also falls into this realm. Regular expressions also. I wouldn't bring this up except that the video implies that the assertions are universal. The most common languages beginners are likely to encounter, and the programs they are likely to write, do exhibit the characteristics you list.
good points, although VHDL isn't a programming language it is a hardware describing languages. you can also make the case that SQL and regex isn't programming languages in the conventional sense of the words. I think this illustrates the underlying issue of making a video likes this, there are a lot of grey zones that might, or might not be, relevant to a beginner.
Actually the variables the way you talked about them and looping isn’t universal. Purely functional languages / declarative languages don’t allow for or while loops, and their definition of variable is actually strict equality in the way that math you talked about works, not assignment to a location in memory. For example in Haskell, a = 42 means “a is another way to write 42, and this will always be true for everything in a’s scope”. b = getStrLn means that “b is another way to write the ‘get a line of input’” function, NOT “assign the result of that function to b”.
@andré Artus I didn't say I use it at all. I prefer immutability to functional programming, which can be implemented in any language, it's just bad for performance. My point is just that it's called 'every programming language' and then, oops these ones don't count..
You provide a valid counterexample. The title is not exact. We forget numerical applications if we suppose that even programs are exact. If Prolog was the only exception then he speaks with great precision because 1 - (1 prolog divided by the number of programming languages) is very nearly 1. An operator needs to account for the behaviors of tools to ensure work is adequate. He is far less exact than off by one counterexample when he says variables change state when many functional languages hold variables immutable. There are probably many more hasty generalizations than that. It feels as though Brian Will is trolling for pedants and we hooked ourselves... He provides a nice abstraction when he prioritizes the concepts of data and their structures over details of implementation. I applaud this example of how being a pedant can obscure the value in a message: when I focus on finding a fight then I perceive less of what's right.
@Sungindra SetiawanAnd there are implementations of logical languages you can embed straight into lisp. A really minimal example is μKanren: webyrd.net/scheme-2013/papers/HemannMuKanren2013.pdf + arxiv.org/pdf/1701.00633.pdf - find more on minikanren.org/
@RebornOccasionally. Foremost my pupils (that program microcontrollers) need to know how to compile assembly and upload the hex code to the MCU:s. If you are programming a PC, assembly is very unlikely, then your Java or Python may suffice, but anyone programming microcontrollers need to know it, since optimizations, speed and interrupt control might be needed for certain applications.
I'm curious, which part off assembly isn't covered? I was thinking the same thing at first but when I thought about it more I changed my mind. For example, there are no explicit loop statements but there are loops, etc.
I was with you till 2:14 Purely functional languages do not natively have variables nor do they have loops and stuff like that. (kinda like Excel) I don't know that much about logic programming languages, but I'd expect them to diverge from your description even quicker
6:18 That's a big oof for any functional language. There, statements aren't really that important. You deal primarily with expressions and assignments (naming your values). Instead of execution you have evaluation.
This clears up may things for me thank you very much, mr Brian. Can you do a video on an example program lifetime how does it executes and what's going on beneath the hud
If each section of the video was isolated off and the viewer gave a lot of time and examples in the language they are using, then it is probably useful. This format is likely useless for most people. I remember watching similar videos when I started programming and they didn't really help me that much. I learned vocabulary, but no the way to apply it to my learning. My teaching experience in K-12 further pushes me to think that this is completely useless to the most student, but I don't have a sample size to prove it. This is a nice video and I don't want to dunk well-produced programming content. However, I don't know who this is for?
@@Manquia Yeah... As a person who's in a teaching position for programming, this video isn't very useful, as it might confuse the students rather then teach them the fundamentals. The problem with students (as far as I've noticed) is that they don't have patience to learn programming, because let's be fair, programming takes time, and A LOT of students are scared or don't know how to use Google... ( I had one of my students write code like this (JS) document.write += "bla bla bla"; And I, of course, asked him if he googled what he wrote, and he said that he didn't know what to google... So I did what I had to do and I googled document.write, took a screenshot, then pressed the first link and again took a screenshot... I know that this might seem a bit belittling, but I don't know who else to show the students that google is the answer for most questions. He then said that he wanted to print a variable, but that he doesn't know how... (and the game begins anew) (For those wondering the answer is: document.write variable, then click the first link.) ) As to who is it for? I think it's for us the programmers for two reasons: - To have fun and laugh a bit, - To in a way revise the basics, the pillars on which most languages stand.
I do find Brian's videos very useful, like this one, some of his videos teach computer science theory in an introductory way, which perfectly serves my need for such content as I'm self studying CS. -This content helps me to see the big picture. I can always read books to learn how to program xyz, but CS theory is not only important but it's a plus to know on a general level what I'm actually doing! -For a long time I wondered what OOP was, and I learnt it on a conceptual level in just 30 mins from Brian' video on same, actually made notes, this way, I can always go ahead and dive deep later into topics from actual/rigorous resources.
It should probably have said "Most programming languages" or "every programming language has at least one of" for the list at 2:02. I know that this should be as non convoluted and without explaining every caveat, but It's probably good in the vein of this video to prepare the viewer for the different paradigms.
11:29 Is that true? I thought that's what "functional programming" meant. Have I been programming in Python wrong this whole time, since I only ever define functions when I expect to have to reuse the code in more than one part of the program? EDIT: I've just realized that this probably has to do with what kind of programs you write. Most of the programs I've written as saved files (rather than just defining them in the shell for one-off use) have been little games, where you input whatever data you want it to use, AFTER the program starts, but, when you write programs for handling data, or programs designed to be run by other programs, it's natural to run the program as a function, or, in my experience in Python, to import a function from the .py file and use that (although, if you only want to do one or a few things with the program, you can just hard-code in the path of the file you want the program to take data from, and change it in the code if you want to process something else).
There is no 'wrong programming' if it achieves the objective ***(1). I view the 'functional programming paradigm' definition to be: a function doing just one thing and sending functions/output to the input of other functions to achieve the desired objective. Last year, I used C++ Geospatial Data Abstraction Library (GDAL) libraries because they did what I needed to do with data I was receiving from various sources. This year I am using QGIS's Python console to process data. I could use the C++ QGIS API but I would then need to build plugins ***(2) so other non-programmers could use them or standalone applications (or VBA plugins for Excel - been there, done that and would prefer not to do again as some people viewed it as 'magic' and were very suspicious). *** (1) Please spare me Machiavellian comparisons of people that are incorrectly programmed and/or behave. (2) Processing functions don't always implement the advertised functions, parameters or output nor do they fully cover the QGIS API.
@@PWRROne point is that I usually do define functions before commands that handle input and output, and you could define commands I give outside of any function as an implicit "function", if you were used to thinking if things that way. I've just started my first formal programming class, and they're teaching C++ with a textbook, and I notice that, though they're definitely not teaching functional programming (i.e. pure functions) they still always want me to define a main function and put whatever I want done in there, and it's just called whether I want it to be or not. I notice Python error messages always talk about everything happening in a __main__ (RUclips is turning the outermost underscores into italics, unfortunately.) function, or whatever it's called, so I'm guessing the interpreter/compiler written in C is either using __main__ to interpret, or is sticking some or all of the Python program into a __main__ function, and I'm guessing programmers from the C tradition view Python as just making the main function implicit, rather than C++ as wanting you to you to stick your non-function code into a function for no apparent reason.
@@Mr.Nichan Aye... You may want to take a look at this RUclips video by Corey Schafer: ruclips.net/video/sugvnHA7ElY/видео.html He also has a play list on Python that is excellent. It ranges from the basics to the 'probably never use' advanced stuff and includes practical application of numerous Python libraries along the way. Word of warning - I have been programming in countless languages since the 70's and learned that 'Just because you can, doesn't mean you should.' In other words, if someone can't explain 'why' I would want to or need to do something in code, I probably shouldn't be doing it.
Hi Brian, not sure how I can contact you so figured I'd drop a comment here. I was wondering if you'd be able to do a video (if not done already) on how a beginner finds out how to do something without copying code fromt eh internet. For example, we have the programming language's documentation, but that's only specific to teh language, it doesn't tell us how to make an IRC client with it, how would a beignner know how to do IRC? We have RFCs, which I think a lot of beginner programmers don't know about, and although they can be more complex in some regards, they are important. And in my experience, university doesn't teach about RFC and other resources to figure out 'what to do'. I watched a video where someone was making a bot for Twitch - and the person knew how to make a TCP/IP server from scratch - how does someone go from learning a language, to learning how to do something like that with that laanguage? - if that helps you understand my question.
I found your question to be very interesting. I think most older professionals started out with electronics and courses in mathematics and/or physics. Computer science courses didn't really exist back then. Books on UDP, TCP and IP are readily available and have been for a long time. I suppose you would have once purchased a book which would talk about the details of the thing you wish to understand. Your knowledge of RFCs is very helpful in this regard as you rightly point out. I suppose you'd look at the RFC for TCP, etc. But the paradigm of client/server architecture is something that I believe is taught at universities so perhaps that would have given you a fundamental introduction to certain core principles? You are lucky to live in today's world with the internet to be able to search for these things, and I wonder why you'd ask how one would know how to write something given that I assume you yourself would search for examples and thus learn from them? I would like to mention that there is also an aspect of creativity that must exist for a good developer; sometimes you are writing something that hasn't been written, and examples will not exist. The fundamental question is usually, "what problem am I trying to solve" and then, "what do I already know about this problem"? Apologies for my ramblings.. your comment was thought provoking.
@@mayaforte2 Your ramblings are welcome. I agree my question is odd considering the age of the Internet or more specifically the Web - but you got the core of my question at the end, which how one goes from zero examples and instruction, to solving a problem, creating that idea from scratch. I am more interested in the creative spark that comes to a programmer in a moment of problem solving. It's a difficult question for me to phrase because, and I suppose the TCP/IP example was a terrible one, but if say, one wanted to create an accounting program, accountancy has been around for generations, it's easy enough to get a book on the core concepts and talk to accountants on what they need from such a program. My question comes to something that does not exist already, I look at when Unix was created and think "What on earth possessed them to create it? How did they know which direction to take?" But from your response, I suppose it really just comes down to trial and error, a good understanding of the problem and analysis of what it is to solve and ultimately accomplish. I just look at today's world, where we have APIs all over the place, we hook and call into our operating systems, our browsers, we interconnect to all of these previously built systems in order to then make today's applications. Compare that to when Unix or Windows was created. (Of course i'm not asking anybody to show me how to make an OS) Take video games for example, they are marvellous examples of mathematics, from grids and tessalations for terrain geneartion and mapping, or complex geometric shapes for charactersa nd objects, these are all described mathematically. Perhaps again, to your comment, it comes down to the way of thinking mathematically, logicallly, and scientifically, and through any combination of those, programmers figure their way through a problem and solve it. And, I suppose, that way of thinking is sahped through experience and practice.
@@herrfriberger5 I would love to be. But, if your approach is the same to all Programming Languages; You have a serious problem. Also, Programming isn't about directives, it's about data, and it's journey to the desired shape. The philosophy of programming is not that at all --imperative--. Computer Science is so young, but it will be grow, be mature. These are just the phases, I think. I'd like to end with this; catonmat.net/what-would-john-mccarthy-say-if-he-saw-you-programming
@@seckinkukrer6920 You would love to be what? Who mentioned directives? Programming is about solving practical problems, either classic computational problems or the state machine type of applicances and applications. "Computer science" is in many ways not a science. It is more like a culture that partly employs science (physics, electronics) and mathematics. Important parts of it are around 60 years old (Algol 60, Lisp, Simula, etc.). With many fundaments being around a hundred years old (Shannon, Church, Nyqvist, etc.) or older.
This is definitely Developer Talk... Example: 7:56 Looping - would be great if you simply said "This could almost be called "until" aka keep adding this Number until this meeting this condition." That is how you translate Looping into English lol Show an example of it, why it'd be useful for someone who's creating a project. Otherwise you end up with half the class not understanding what you're saying.
Nice template, just a few colorful animations, just a bit simpler language, presented a bit slower and even average kids could grasp it in one condensed lesson.
It depends. Many assembly languages have the procedure (function) abstraction as well as syntactical variables (not just memory locations). Some even have ready made loop instructions.
Great concise video. If I would have been taught this I think it would have clicked sooner what exactly code really is and how computerd work. To all the people arguing with him on minor stuff: for real people? Obviously this isnt exactly targetted towards people that are at a level where they need to/can understand that. I srsly doubt you guys learned english at the oxford level instead of just easy sentences and words. Or physics with all the exceptions to newtonian physics right out the gate.
If I were a total beginner, this video could have made me think that programs are some entities within a computer that write to files or send data over a network (as per the first slide). It probably would've been more helpful to specifically point out that the computer does all that, not the programs. Just saying.
Agreed. I usually start off with explaining that program code are instructions which a computer follows, similar to a cooking recipe. However, I don't know how useful that actually is to the students.
Good point. I think the target audience is savvy enough to understand that though. Most people have common sense knowledge of what computers are like, especially ones that would be interested in watching the video.
data has only 1 underlying type: _enumeration_ we represent _anything_ else through that "string" as a distinct, dedicated type needs to die a fiery death
Great content. Just one thing: In C++ variables are not necessarily copied when passed as arguments to functions. If passed by reference, you are actually referencing the same variable in memory. Not sure about other programming languages though.
He did explicitly say that the _value_ passed into the function as an argument is assigned to the intra-function parameter variable. Noöne said anything about copying the variable. What you said is right (and generally true of run-of-the-mill programming languages), but you aren't correcting anything he said
You didn't cover data structures or converting different numerical variables on different systems but I suppose that would be more "development" or "engineering" than programming. Very nicely done!
Everything sounds simple until you start dealing with networks and system calls. FFS, all those forks and pthreads with asynchronous requests inside them. Ffs
Very good video. However, you should change the title to "Every Imperative Programming Language in 15 Minutes", because it does not match with logical or functional programming languages.
@@yura979, I'm not ignorant and I was joking a little bit, but really, functional languages have got most of the things that are described in the video apart from loops.
"but at any one moment a variable is storing just one value" - so a variable cannot contain many values at a time, like in R were every variable contains a vector of values??Obviously a click bait title. Should maybe be "What many C derived languages have in common". Others have pointed out, that loops are not part of Haskell or Prolog. Stating that a function has a name is often not true even in mainstream languages such as Python (anonymous functions/lambda expressions) and in many languages the same function name can apply to different "bodies of statements" (if the argument numbers and types differ, cf generic functions in R). Seriously, no mentioning of the difference of functions and methods? Seriously: Function calling does not prohibit multithreading. The "system call" explaination is not very suited for all those virtual-machine languages. "No code exists outside of the functions? Again not true for e. g. python and R and Perl and excludes Shell-scripting. Perl and R code starts at the start, not at some function called "main". The video could as well have stated, that block of code were always within curly brackets.Again: A lot of this is not only wrong for exotic languages like Prolog, but also for widely used languages like Python, Perl, R, Shellscripting thus not "every programming language".
Hey Brian, can you change the description? There is no way a "total beginner" will understand this, and there should not be an expectation that they should be able to understand it. I know the intent of this video may be to inform, however, I feel the description may instead discourage because of the level of complexity you go into. This is mostly what a systems-level programming language handles/uses so you may also want to specify that in the title. My main issue is with the "total beginners" which is just dismissive and rude. Like, if you don't get this why are you even here! P.S. Probably going to get downvoted for this comment...
@@matthewlind3102 Exposure to a topic will almost always improve a determined individual. However, exposure can cause less determined people to shy away and become disinterested. Calculus has this problem in spades. Calculus is complex because of the minutia of the algebra, but the core elements are quite simple. Many people get stuck in the minutia and fail to continue learning because of their exposure. personally, this happened to me in the opposite way. My first experience with programming was with C++ as a black-box language. We didn't go into great detail about how anything worked and this greatly discouraged me from programming. Years later, I am learning the same materials in a more focused manner and end up building a love of programming. Now I am a full-time software developer, even though my degree is in game design and programming. There should be some care into at least the framing of exposure to the audience. The video's content is fine, I just have a problem with the description using the term "Total Beginner". Finding something like this is the sort of thing which could encourage a newb programmer to give up to pursue other fields because they don't' get it.
Brian talking about c/c++ here for the "if", in other languages like javascript "if" do not only take booleans it take any value and convert it to a boolean, this is really useful
Some information here is not correct. There are a ton of languages which are mathematically pure. When you say they are useless without side-effect output, this is open for debate but some exist whether you like it or not.. like Zenlisp. I've used it for my home accounts for example.. :)
Are you merely using it to warm a room? A system with 0 outputs is little more than a space heater. If you (or any other thing) can see a result, by any means, you have output. If you are using it for accounts then you presumably have ways of seeing the result f a computation, no?
I was fooled by your title. I thought you were going to go over every programming language as a sort of quick tour/overview with hopefully some interesting factual nuggets about them I might not have known. I was disappointed to instead see a video telling me everything I already knew. I even skipped ahead some to see if there would be some new nugget of knowledge to glean but it was just more "Programming Languages 101" stuff. I don't know, this feels out of place from your regular content where you go into great detail of a single programming language, tool, or pattern...this video felt like going back to kindergarten.
cobol is the most difficult programming language to learn for me. Years later I learned cobol was invented by a woman. All of a sudden everything made sense.
@@herrfriberger5 I never used Fortran. Cobol has formats and phrases makes that language very complicated and always makes you feel you forgot something. Subtle meanings are buried in the phrases. Think about the Perform Through for example, and the PERIOD! The language is designed to trip a man. Hopper was divorced and never married.
"Every program must output data" - I don't know. I have written a lot of stuff, that just performs external actions / triggers things, with little to no data required. Unless you apply a really rediculously wide definition of data, I would say you constrain yourself too much. And before you say, I'm nitpicking. The difference between programms designed to calculate and output data in the narrow sense of the term and programms with business logic that live for side effects, triggers and actions is one of the main reasons why we still have even entire branches of different programming languages. Try writing a trigger / action based scenario programm in a hard functional programming language, and you will have real issues almost immediately, write a programm that is all about getting a data result from an input and they are awesome. Loops might also be an issue, if you take programming languages to a wider field. Regex for example doesn't have loops by definition. Sure most do have functions, variables and loops, but go to slightly more exotic places, and you will already have issues identifying them as such, if they exist at all. Theoretically and to a certain extend practically in stuff like hadoop, streaming sql or such things, you can express every manipulation of data as a series of maps and reduces. Try finding your while statements there. If you title it "Every Programming languages" you can't just assume C, Pascal and Basic derivatives. There is a wider world of crazy shit out there some people might even spend all their live coding in.
This should be titled *"NO programming language in less than 15 mins"* since it speaks of no PL but of what a program in an *imperative* PL is at a very abstract level. Then, there are functional PLs, whether "impure" (e.g., LISP) or "pure" (e.g., Haskell), as well as logic PLs (Prolog). And, for all such kinds, variations with object-oriented typing for the representation and manipulation of structured data. Finally, one must explain the difference between macro languages, interpreted languages, scripting languages, and compiled languages, and combinations thereof. But your video is a good waste of 15 mins for youngsters eager to learn how to write code that is useful for some non-trivial applications without spending more than 15 mins. They might feel disappointed though.
I am pretty sure the interpreter does actually have a named reference for variables. Due to duck typing, whenever a variable changes its type during runtime, assignment does infact overwrite.
@@EconaelGaming Ok, so lets define how a variable is created / generated. Remember EVERYTHING in a computer is only a simple matter of a voltage, it is either low enough to be considered a 0 or high enough to be considered a 1. So if I connect a voltage to a pin on a computer, and it does not loop, it will simply just be a voltage on a pin, but if the computer has a clock firing at some frequency, it can sit there and toggle that value through a set of gates that can then assemble a set of gates that have voltages that are a combination of 1's and zero's that can, when interpreted correctly ,can be the value of 42! Now a variable, in the case of RAM is simply a set of bits, that are interpreted by this machine we have defined, as a VALUE. That's is how ONLY looping can set a variable to a value. BRANCHING is the act of either running some code or running some other code, which without looping, would never happen. Try turning off the ONE oscillator that sets everything in motion.
@@shaurz Grumble grumble grumble... Kinda sorta, but not really. You have to loop to branch, but you need not branch to loop. They are closely related, but with a one way dependency. But I am grumbling...
I fucking LOVE this guy. no lengthy (or, any) title card or intro music, not constantly saying "you guys" and talking down to the audience, no "i'll see you in the next video" and so on. In short: no bullshit. This is what all youtube channels should be. information without bullshit wrapping it and inflating the length (and therefore wasting my time as a viewer.)
Amen!
Bonus points for stating the fact that programming is about data at the start.
Many programmers seem to lose track of this when they get to work for real.
In the world of programming, that is what software engineering meant: make the automated means to receive, manipulate, and send data according to the intended design goals.
absolutely...hell, this is a good baseline for an experienced programmer...especially when starting a new framework or language...before you say i don't have any experience with that....refer to this.
@@Aereto great :) inference
@@AnonymousAccount514 theoretically
This is my favourite CS RUclips channel by far, the style, the content, everything is brilliant.
Thanks a lot for this kind of diverse content Brian!
Wow:) fanboy here🤣
@@Bonniebelle_00__ yep, his videos helped me get some overview of many different topics while I was a beginner.
@@zikomo8913 what your avatar is about?
@@alexandrubragari1537 An AI in the Halo games universe.
This is true only for Imperative languages... Functional and Constraint/Logic are kinda different...
How would you describe them imperatively
@@Bonniebelle_00__ It's not really easy. Of course, the languages eventually get compiled to machine code, which is imperative, but they are over so many layers of abstraction that it changes the way you think about the programs.
Matheus Augusto functional programming produce a dynamic field of conditional loops containing operations from static code while imperative languages only have the capacity to represent a single collection of conditional loops at once
functional programming languages work mostly the same way but limit how you can do things.
These types of videos are for C-like languages or 'C-inspired' languages.
I would also give SQL an honorable mention. It’s yet another, pretty unique, approach.
Excellent! Brian’s explanations are uncannily concise and unobfuscated.
beautiful...this is perfect for beginners...it will especially clear up the constant "what language do i start with?" question. I always get a lot of push back when i tell them it doesn't matter...but this clarifies it perfectly
Clear and concise. A good artifact that will surely prove helpful to many students.
Thanks Brian.
I agree
Important to note: this is only a description of imperative programming. There are many languages that work in completely different ways (for example declarative programming).
Both logic programming (like Prolog) and functional programming have been called declarative, despite being quite different. There are also declarative elements in modern imperative languages.
Glad to see you are uploading these great videos, keep it up.
Promotional content is a must
Ladder logic programming (used on industrial controllers) is entirely about state😛. Attempting to understand it as data transformation leads to headaches and not much else.
Very true, and a direct consequence of its origins in relay logic. This hasn't stopped vendors from adding data-oriented features, but the essence of ladder logic is state.
I found this an excellent summary of what is going on. I shall share this with my programming relatives.
Great video and now I'm down the rabbit hole of your channel. I love the way you breakdown the information in your videos.
mostly true for procedural languages, less so for some functional ones. they only have some of those things (variables, for loops) as syntactical exceptions
Most functional languages have variables (immutable variables you could argue are not variables), and most have some sort of looping construct beyond map and reduce. So I think he's still being general enough.
Not worth mentioning, functional languages probably have less than ~1% of the usage of procedural, according to stackoverflow recent stats.
Well, if I have to complain about somthing, I would bring "if" and "while" statement, wich is basically "goto" constructions. But well, it would be far less understandable if he was using that.
Also there is languages which don't allow you to use functions, and there is algebraic languages wich alows you to compute mathematical equations.
But well, it's just complaining over nothing. Good video.
Don't forget about declarative languages like prolog
@Sydney Bean
Actually, you don't need loops or recursion built into your language to express repetition. If you have higher order functions (you can pass functions as parameters), you can use for example the Y-combinator to simulate recursion, and using recursion you can simulate loops.
Great explanation, but misleading title. I thought I was going to get a quick sample of different programming languages: static imperative (C/Java), dynamic imperative (python), static functional (Haskell), dynamic functional (Lisp), declarative (HTML), constraint-based (Prolog), object oriented (SmallTalk), etc.
I'm copying this for some research if you don't mind sir?
Woah there, 2:04, I'm pretty sure functional languages don't have loops, though of course one is able to mimic the functionality of a loop.
Purely functional languages just don't have the concept of time built into them.
But indeed, you can model time and state with appropriate data structures and by appropriately shaping the evaluation (i.e. using recursive definitions)
Wow, I have 3 years on computer science. And you have tough me more then the University ever did. Thanks!
did you really not even learn this in university? That's insane
@@MaoDev You'd be surprised by how wacky university can be.
@@simplytom1213 jesus
@@MaoDev I sometimes don't know what people learn in Computer Science. I sometimes ask people who completed Computer Science what they learnt, and they said they don't know.
A lot of your material reminds me of the Gane and Sarsen Structured approach. I learned this early in my career and still think this way first when approaching a problem
i wish i had this when i was learning
You're really devoted to thinking about programming languages in a fundamental way. You have a thorough, all-encompassing understanding of their strengths and flaws. Your ability to reason about related concepts in an abstract way is quite impressive. Have you ever considered designing and producing your own programming language? I'm genuinely curious what the result would be given enough money and manpower.
Probably one of the best & concise explanations a program! But very far from "all programming languages", as it is *very* specific to programming in a C-style imperative language.
Just stumbled upon this video, and dammn its good.
Everything organized and explained perfectly, thanks for the vid, u got my sub.
Interesting and useful, but does leave out one important mechanism: most languages have a way for variables in functions to retain their values between calls. For example, in Perl one uses "state", and in C and C++ one uses "static". So if you type "static int Fred = 7;" in a C function (or "state $Fred = 7;" in a Perl sub), the variable Fred will be initialized to 7 only on the first call to that function during that run of that program; for all subsequent calls, Fred will _not_ be initialized to 7, but will retain whatever value it had at the end of the last call (say, 42, or -17).
that's just convenience syntax
(some say "syntactic sugar")
Not quite every programming langue though. For example, most of these things are false for prolog, since it has a completely different execution model and predicates instead of functions. Instead of having a return value, the inputs of a predicate are unified to satisfy the predicate and the code will backtrack otherwise. E.g. calling append([1,2,3], [4,5,6], X) will make X = [1,2,3,4,5,6], but append([1,2,3], X, [1,2,3,4,5,6]) will make X=[4,5,6].
The only thing from this presentation that is true about prolog is that it has input and output.
I generally agree with most of your opinions about the topics you cover on your channel, but there are a few places where we diverge.
In this case, you may simply be over simplifying for the sake of the intended audience, but I think that some things are important for a beginner to be cognizant of:
- A program's output may be the control of other programs. In some cases, a programs only purpose is to exist (the trivial idle process, for example).
- Not all programming languages support functions, and some languages distinguish between procedures from functions.
- Not all programming languages provide explicit loop constructs (while, for); some provide only conditions (if) and explicit branches (goto).
- Parallel programming languages have concurrent functions where the caller continues execution until it uses the result of the function call, at which point it waits for the value to be available before continuing.
- Not all languages support strings as a basic data type.
- Not all programs are hosted by an operating system. Even some programs that are hosted (especially those hosted by real-time and/or embedded kernels) do their own I/O. The kernel itself is one or more programs. When you introduce hypervisors, this gets even more fuzzy.
- The convention of "main" being the name of a procedure that is automatically invoked when a program is started is not universal. In some languages, it is immediate code (statements outside any named procedure) that is executed, in other cases the entry point is specified either at build or execution time.
- There are languages that are not procedural or sequential, such as VHDL. SQL also falls into this realm. Regular expressions also.
I wouldn't bring this up except that the video implies that the assertions are universal. The most common languages beginners are likely to encounter, and the programs they are likely to write, do exhibit the characteristics you list.
good points, although VHDL isn't a programming language it is a hardware describing languages. you can also make the case that SQL and regex isn't programming languages in the conventional sense of the words. I think this illustrates the underlying issue of making a video likes this, there are a lot of grey zones that might, or might not be, relevant to a beginner.
Logic and functional languages also diverge from his description pretty quickly. And one cannot argue they aren't 'programming'
All of your videos are excellent, please make more!
Actually the variables the way you talked about them and looping isn’t universal. Purely functional languages / declarative languages don’t allow for or while loops, and their definition of variable is actually strict equality in the way that math you talked about works, not assignment to a location in memory.
For example in Haskell, a = 42 means “a is another way to write 42, and this will always be true for everything in a’s scope”. b = getStrLn means that “b is another way to write the ‘get a line of input’” function, NOT “assign the result of that function to b”.
Thanks Brian!
@andré Artus I didn't say I use it at all. I prefer immutability to functional programming, which can be implemented in any language, it's just bad for performance. My point is just that it's called 'every programming language' and then, oops these ones don't count..
Prolog isn't anything like this 😳
You provide a valid counterexample. The title is not exact. We forget numerical applications if we suppose that even programs are exact. If Prolog was the only exception then he speaks with great precision because 1 - (1 prolog divided by the number of programming languages) is very nearly 1.
An operator needs to account for the behaviors of tools to ensure work is adequate. He is far less exact than off by one counterexample when he says variables change state when many functional languages hold variables immutable. There are probably many more hasty generalizations than that. It feels as though Brian Will is trolling for pedants and we hooked ourselves...
He provides a nice abstraction when he prioritizes the concepts of data and their structures over details of implementation. I applaud this example of how being a pedant can obscure the value in a message: when I focus on finding a fight then I perceive less of what's right.
@Sungindra SetiawanAnd there are implementations of logical languages you can embed straight into lisp. A really minimal example is μKanren: webyrd.net/scheme-2013/papers/HemannMuKanren2013.pdf + arxiv.org/pdf/1701.00633.pdf - find more on minikanren.org/
if you skip "PROLOG" you're probably not a "pro" and should cut your gdam ponytail off.
That doesn't cover assembly.
This does apply to assembly, for the most part, although less so to machine code.
@RebornOccasionally. Foremost my pupils (that program microcontrollers) need to know how to compile assembly and upload the hex code to the MCU:s. If you are programming a PC, assembly is very unlikely, then your Java or Python may suffice, but anyone programming microcontrollers need to know it, since optimizations, speed and interrupt control might be needed for certain applications.
I'm curious, which part off assembly isn't covered? I was thinking the same thing at first but when I thought about it more I changed my mind. For example, there are no explicit loop statements but there are loops, etc.
@Reborn ive had to write assemblers and emulators in assembly
I saw this title and I was expecting a bunch of memes lol. Not a informative video
Notes to take from here:
The data you choose to program on is as important as the methods by which you program.
My favorite quote from Linus: "Bad programmers worry about the code. Good programmers worry about data structures and their relationships."
I was with you till 2:14
Purely functional languages do not natively have variables nor do they have loops and stuff like that.
(kinda like Excel)
I don't know that much about logic programming languages, but I'd expect them to diverge from your description even quicker
6:18 That's a big oof for any functional language.
There, statements aren't really that important. You deal primarily with expressions and assignments (naming your values). Instead of execution you have evaluation.
amazing as usual
This clears up may things for me thank you very much, mr Brian. Can you do a video on an example program lifetime how does it executes and what's going on beneath the hud
Thank you! Great content.
I wonder if none programmers will be able to understand this
If each section of the video was isolated off and the viewer gave a lot of time and examples in the language they are using, then it is probably useful.
This format is likely useless for most people. I remember watching similar videos when I started programming and they didn't really help me that much. I learned vocabulary, but no the way to apply it to my learning. My teaching experience in K-12 further pushes me to think that this is completely useless to the most student, but I don't have a sample size to prove it.
This is a nice video and I don't want to dunk well-produced programming content. However, I don't know who this is for?
@@Manquia Yeah... As a person who's in a teaching position for programming, this video isn't very useful, as it might confuse the students rather then teach them the fundamentals.
The problem with students (as far as I've noticed) is that they don't have patience to learn programming, because let's be fair, programming takes time, and A LOT of students are scared or don't know how to use Google...
(
I had one of my students write code like this (JS)
document.write += "bla bla bla";
And I, of course, asked him if he googled what he wrote, and he said that he didn't know what to google...
So I did what I had to do and I googled document.write, took a screenshot, then pressed the first link and again took a screenshot...
I know that this might seem a bit belittling, but I don't know who else to show the students that google is the answer for most questions.
He then said that he wanted to print a variable, but that he doesn't know how... (and the game begins anew)
(For those wondering the answer is:
document.write variable,
then click the first link.)
)
As to who is it for?
I think it's for us the programmers for two reasons:
- To have fun and laugh a bit,
- To in a way revise the basics, the pillars on which most languages stand.
I do find Brian's videos very useful, like this one, some of his videos teach computer science theory in an introductory way, which perfectly serves my need for such content as I'm self studying CS.
-This content helps me to see the big picture. I can always read books to learn how to program xyz, but CS theory is not only important but it's a plus to know on a general level what I'm actually doing!
-For a long time I wondered what OOP was, and I learnt it on a conceptual level in just 30 mins from Brian' video on same, actually made notes, this way, I can always go ahead and dive deep later into topics from actual/rigorous resources.
It should probably have said "Most programming languages" or "every programming language has at least one of" for the list at 2:02. I know that this should be as non convoluted and without explaining every caveat, but It's probably good in the vein of this video to prepare the viewer for the different paradigms.
is codeschool.org dead? any plans to put it back up?
*every procedural programming language.
You are amazing...
you can have code that is excuted outside of a function
Its sad there is no mention of FORTH whatsoever - or any of the concatenative style languages...
11:29 Is that true? I thought that's what "functional programming" meant. Have I been programming in Python wrong this whole time, since I only ever define functions when I expect to have to reuse the code in more than one part of the program?
EDIT: I've just realized that this probably has to do with what kind of programs you write. Most of the programs I've written as saved files (rather than just defining them in the shell for one-off use) have been little games, where you input whatever data you want it to use, AFTER the program starts, but, when you write programs for handling data, or programs designed to be run by other programs, it's natural to run the program as a function, or, in my experience in Python, to import a function from the .py file and use that (although, if you only want to do one or a few things with the program, you can just hard-code in the path of the file you want the program to take data from, and change it in the code if you want to process something else).
There is no 'wrong programming' if it achieves the objective ***(1).
I view the 'functional programming paradigm' definition to be: a function doing just one thing and sending functions/output to the input of other functions to achieve the desired objective.
Last year, I used C++ Geospatial Data Abstraction Library (GDAL) libraries because they did what I needed to do with data I was receiving from various sources. This year I am using QGIS's Python console to process data. I could use the C++ QGIS API but I would then need to build plugins ***(2) so other non-programmers could use them or standalone applications (or VBA plugins for Excel - been there, done that and would prefer not to do again as some people viewed it as 'magic' and were very suspicious).
***
(1) Please spare me Machiavellian comparisons of people that are incorrectly programmed and/or behave.
(2) Processing functions don't always implement the advertised functions, parameters or output nor do they fully cover the QGIS API.
@@PWRROne point is that I usually do define functions before commands that handle input and output, and you could define commands I give outside of any function as an implicit "function", if you were used to thinking if things that way. I've just started my first formal programming class, and they're teaching C++ with a textbook, and I notice that, though they're definitely not teaching functional programming (i.e. pure functions) they still always want me to define a main function and put whatever I want done in there, and it's just called whether I want it to be or not. I notice Python error messages always talk about everything happening in a __main__ (RUclips is turning the outermost underscores into italics, unfortunately.) function, or whatever it's called, so I'm guessing the interpreter/compiler written in C is either using __main__ to interpret, or is sticking some or all of the Python program into a __main__ function, and I'm guessing programmers from the C tradition view Python as just making the main function implicit, rather than C++ as wanting you to you to stick your non-function code into a function for no apparent reason.
@@Mr.Nichan Aye... You may want to take a look at this RUclips video by Corey Schafer:
ruclips.net/video/sugvnHA7ElY/видео.html
He also has a play list on Python that is excellent. It ranges from the basics to the 'probably never use' advanced stuff and includes practical application of numerous Python libraries along the way.
Word of warning - I have been programming in countless languages since the 70's and learned that 'Just because you can, doesn't mean you should.' In other words, if someone can't explain 'why' I would want to or need to do something in code, I probably shouldn't be doing it.
Hi Brian, not sure how I can contact you so figured I'd drop a comment here.
I was wondering if you'd be able to do a video (if not done already) on how a beginner finds out how to do something without copying code fromt eh internet. For example, we have the programming language's documentation, but that's only specific to teh language, it doesn't tell us how to make an IRC client with it, how would a beignner know how to do IRC?
We have RFCs, which I think a lot of beginner programmers don't know about, and although they can be more complex in some regards, they are important. And in my experience, university doesn't teach about RFC and other resources to figure out 'what to do'.
I watched a video where someone was making a bot for Twitch - and the person knew how to make a TCP/IP server from scratch - how does someone go from learning a language, to learning how to do something like that with that laanguage? - if that helps you understand my question.
I found your question to be very interesting. I think most older professionals started out with electronics and courses in mathematics and/or physics. Computer science courses didn't really exist back then. Books on UDP, TCP and IP are readily available and have been for a long time. I suppose you would have once purchased a book which would talk about the details of the thing you wish to understand. Your knowledge of RFCs is very helpful in this regard as you rightly point out. I suppose you'd look at the RFC for TCP, etc. But the paradigm of client/server architecture is something that I believe is taught at universities so perhaps that would have given you a fundamental introduction to certain core principles? You are lucky to live in today's world with the internet to be able to search for these things, and I wonder why you'd ask how one would know how to write something given that I assume you yourself would search for examples and thus learn from them? I would like to mention that there is also an aspect of creativity that must exist for a good developer; sometimes you are writing something that hasn't been written, and examples will not exist. The fundamental question is usually, "what problem am I trying to solve" and then, "what do I already know about this problem"? Apologies for my ramblings.. your comment was thought provoking.
@@mayaforte2 Your ramblings are welcome. I agree my question is odd considering the age of the Internet or more specifically the Web - but you got the core of my question at the end, which how one goes from zero examples and instruction, to solving a problem, creating that idea from scratch. I am more interested in the creative spark that comes to a programmer in a moment of problem solving.
It's a difficult question for me to phrase because, and I suppose the TCP/IP example was a terrible one, but if say, one wanted to create an accounting program, accountancy has been around for generations, it's easy enough to get a book on the core concepts and talk to accountants on what they need from such a program.
My question comes to something that does not exist already, I look at when Unix was created and think "What on earth possessed them to create it? How did they know which direction to take?"
But from your response, I suppose it really just comes down to trial and error, a good understanding of the problem and analysis of what it is to solve and ultimately accomplish.
I just look at today's world, where we have APIs all over the place, we hook and call into our operating systems, our browsers, we interconnect to all of these previously built systems in order to then make today's applications. Compare that to when Unix or Windows was created. (Of course i'm not asking anybody to show me how to make an OS)
Take video games for example, they are marvellous examples of mathematics, from grids and tessalations for terrain geneartion and mapping, or complex geometric shapes for charactersa nd objects, these are all described mathematically.
Perhaps again, to your comment, it comes down to the way of thinking mathematically, logicallly, and scientifically, and through any combination of those, programmers figure their way through a problem and solve it.
And, I suppose, that way of thinking is sahped through experience and practice.
This video is not about the Every Programming Language.
It is about the Imperative Languages...
Perhaps one point he's trying to make is that all languages are imperative at some level.
@@herrfriberger5
I would love to be.
But, if your approach is the same to all Programming Languages; You have a serious problem.
Also, Programming isn't about directives, it's about data, and it's journey to the desired shape.
The philosophy of programming is not that at all --imperative--.
Computer Science is so young, but it will be grow, be mature. These are just the phases, I think.
I'd like to end with this;
catonmat.net/what-would-john-mccarthy-say-if-he-saw-you-programming
@@seckinkukrer6920 You would love to be what?
Who mentioned directives? Programming is about solving practical problems, either classic computational problems or the state machine type of applicances and applications.
"Computer science" is in many ways not a science. It is more like a culture that partly employs science (physics, electronics) and mathematics. Important parts of it are around 60 years old (Algol 60, Lisp, Simula, etc.). With many fundaments being around a hundred years old (Shannon, Church, Nyqvist, etc.) or older.
This is definitely Developer Talk...
Example: 7:56 Looping - would be great if you simply said "This could almost be called "until" aka keep adding this Number until this meeting this condition."
That is how you translate Looping into English lol
Show an example of it, why it'd be useful for someone who's creating a project.
Otherwise you end up with half the class not understanding what you're saying.
Every structured procedural language*
Cool that the title of the video is a statement in itself. I agree - doesn't matter what the language is like, it has to have these things
I clicked on the video expecting to hear a song.
Nice template, just a few colorful animations, just a bit simpler language, presented a bit slower and even average kids could grasp it in one condensed lesson.
Assembly don't have if statements, while loops, or functions. It just has jump, call, and ret.
jne
It depends. Many assembly languages have the procedure (function) abstraction as well as syntactical variables (not just memory locations). Some even have ready made loop instructions.
There's multiple assembly languages, they have different instructions and different mnemonics for them.
@@flyingskyward2153 Mnemonics.
@@herrfriberger5 Well now I feel like an idiot. Thanks for the correction!
Great concise video. If I would have been taught this I think it would have clicked sooner what exactly code really is and how computerd work. To all the people arguing with him on minor stuff: for real people? Obviously this isnt exactly targetted towards people that are at a level where they need to/can understand that. I srsly doubt you guys learned english at the oxford level instead of just easy sentences and words. Or physics with all the exceptions to newtonian physics right out the gate.
What happened to your website, codeschool.org?
It doesn't seem to exist.
If I were a total beginner, this video could have made me think that programs are some entities within a computer that write to files or send data over a network (as per the first slide). It probably would've been more helpful to specifically point out that the computer does all that, not the programs. Just saying.
Agreed. I usually start off with explaining that program code are instructions which a computer follows, similar to a cooking recipe.
However, I don't know how useful that actually is to the students.
Good point. I think the target audience is savvy enough to understand that though. Most people have common sense knowledge of what computers are like, especially ones that would be interested in watching the video.
data has only 1 underlying type: _enumeration_
we represent _anything_ else through that
"string" as a distinct, dedicated type needs to die a fiery death
Great content. Just one thing: In C++ variables are not necessarily copied when passed as arguments to functions. If passed by reference, you are actually referencing the same variable in memory. Not sure about other programming languages though.
Same goes for C, but I guess that's obvious
He did explicitly say that the _value_ passed into the function as an argument is assigned to the intra-function parameter variable. Noöne said anything about copying the variable. What you said is right (and generally true of run-of-the-mill programming languages), but you aren't correcting anything he said
Br(ill)ian(t) Will
Bro, nice vid. Only 40 sec in. Already know its going to be good ^_^ yes good to see u upload. Thanks. Hope all is well.
Apart from not !, what wise uses just 1 operator
Bruh.
/dev/null is a pretty useful gizmo... :)
You didn't cover data structures or converting different numerical variables on different systems but I suppose that would be more "development" or "engineering" than programming. Very nicely done!
"Collections" on slide two is how he described data structures.
11:43 well... in a lot of languages (Python, JavaScript, Go?, ...) you can have code outside of functions.
He said programming language hehe
Good video man
Assembly is not a part of every programming language?
Neither is Haskell or prologue apparently
@@Mr8lacklp neither prolog
_or html_
@@jvcmarc to be fair there is an argument to be made that html isn't really a programming language, for instance: It isn't Turing complete
@@Mr8lacklp that's why it's in _italics_
Everything sounds simple until you start dealing with networks and system calls. FFS, all those forks and pthreads with asynchronous requests inside them. Ffs
Very good video. However, you should change the title to "Every Imperative Programming Language in 15 Minutes", because it does not match with logical or functional programming languages.
functional programming languages are just imperative languages but without loops. 😉
The constructs are named differently and the coder behaves slightly differently around them, but they are hidden there even with those paradigms.
@@SarahScratches such a false statement. Not sure if trolling or ignorant.
@@Alche_mist they really aren't there in the theory.
@@yura979, I'm not ignorant and I was joking a little bit, but really, functional languages have got most of the things that are described in the video apart from loops.
💯
"but at any one moment a variable is storing just one value" - so a variable cannot contain many values at a time, like in R were every variable contains a vector of values??Obviously a click bait title. Should maybe be "What many C derived languages have in common". Others have pointed out, that loops are not part of Haskell or Prolog. Stating that a function has a name is often not true even in mainstream languages such as Python (anonymous functions/lambda expressions) and in many languages the same function name can apply to different "bodies of statements" (if the argument numbers and types differ, cf generic functions in R). Seriously, no mentioning of the difference of functions and methods? Seriously: Function calling does not prohibit multithreading. The "system call" explaination is not very suited for all those virtual-machine languages. "No code exists outside of the functions? Again not true for e. g. python and R and Perl and excludes Shell-scripting. Perl and R code starts at the start, not at some function called "main". The video could as well have stated, that block of code were always within curly brackets.Again: A lot of this is not only wrong for exotic languages like Prolog, but also for widely used languages like Python, Perl, R, Shellscripting thus not "every programming language".
Hey Brian, can you change the description? There is no way a "total beginner" will understand this, and there should not be an expectation that they should be able to understand it. I know the intent of this video may be to inform, however, I feel the description may instead discourage because of the level of complexity you go into.
This is mostly what a systems-level programming language handles/uses so you may also want to specify that in the title. My main issue is with the "total beginners" which is just dismissive and rude. Like, if you don't get this why are you even here!
P.S. Probably going to get downvoted for this comment...
Agreed that beginners won't grasp everything. Still, it is worthwhile for total beginners to watch this and not understand it.
@@matthewlind3102 Exposure to a topic will almost always improve a determined individual. However, exposure can cause less determined people to shy away and become disinterested.
Calculus has this problem in spades. Calculus is complex because of the minutia of the algebra, but the core elements are quite simple. Many people get stuck in the minutia and fail to continue learning because of their exposure.
personally, this happened to me in the opposite way. My first experience with programming was with C++ as a black-box language. We didn't go into great detail about how anything worked and this greatly discouraged me from programming. Years later, I am learning the same materials in a more focused manner and end up building a love of programming. Now I am a full-time software developer, even though my degree is in game design and programming. There should be some care into at least the framing of exposure to the audience. The video's content is fine, I just have a problem with the description using the term "Total Beginner". Finding something like this is the sort of thing which could encourage a newb programmer to give up to pursue other fields because they don't' get it.
Can you make this more dry..............
Brian talking about c/c++ here for the "if", in other languages like javascript "if" do not only take booleans it take any value and convert it to a boolean, this is really useful
Replace C and C++ with Java and C# and your statement would be more accurate. Both C and C++ allow non-boolean expressions as if conditions.
Some information here is not correct. There are a ton of languages which are mathematically pure. When you say they are useless without side-effect output, this is open for debate but some exist whether you like it or not.. like Zenlisp. I've used it for my home accounts for example.. :)
Are you merely using it to warm a room? A system with 0 outputs is little more than a space heater.
If you (or any other thing) can see a result, by any means, you have output. If you are using it for accounts then you presumably have ways of seeing the result f a computation, no?
I was fooled by your title. I thought you were going to go over every programming language as a sort of quick tour/overview with hopefully some interesting factual nuggets about them I might not have known. I was disappointed to instead see a video telling me everything I already knew.
I even skipped ahead some to see if there would be some new nugget of knowledge to glean but it was just more "Programming Languages 101" stuff. I don't know, this feels out of place from your regular content where you go into great detail of a single programming language, tool, or pattern...this video felt like going back to kindergarten.
This video is about: "see the forest for the trees".
cobol is the most difficult programming language to learn for me. Years later I learned cobol was invented by a woman. All of a sudden everything made sense.
It probably has more to do with COBOL being an early language. The first variants of FORTRAN was not exactly easy to use either.
Actually, it was designed by a team of six, four of whom were men, but you sure put those wimmin in their place.
@@herrfriberger5 I never used Fortran. Cobol has formats and phrases makes that language very complicated and always makes you feel you forgot something. Subtle meanings are buried in the phrases. Think about the Perform Through for example, and the PERIOD! The language is designed to trip a man. Hopper was divorced and never married.
On infinite loop, a comment.. wouldn't you say it's desirable to have infinite loop for the case of servers ?
OOP stole my wife
I was waiting until you actually get to the languages. lol
my web browser isn't a program that takes input and gives output
Wouldn't you agree that displaying web pages on your screen is output and taking in mouse clicks/keyboard strokes is input?
@@112BALAGE112 based on his definition, i wouldn't think web browsers or games were created by programming langauges
@@stephenkamenar I found myself convinced that his description fits the c++ language well, in which many browsers and games are written.
Clicking The mouse îs input în vg and The caracter shooting îs output
mutable variables? bruuuuuuuuuuuuuuuh, disgusting, we in Haskell does not have this shit
"Every program must output data" - I don't know. I have written a lot of stuff, that just performs external actions / triggers things, with little to no data required. Unless you apply a really rediculously wide definition of data, I would say you constrain yourself too much.
And before you say, I'm nitpicking. The difference between programms designed to calculate and output data in the narrow sense of the term and programms with business logic that live for side effects, triggers and actions is one of the main reasons why we still have even entire branches of different programming languages.
Try writing a trigger / action based scenario programm in a hard functional programming language, and you will have real issues almost immediately, write a programm that is all about getting a data result from an input and they are awesome.
Loops might also be an issue, if you take programming languages to a wider field. Regex for example doesn't have loops by definition. Sure most do have functions, variables and loops, but go to slightly more exotic places, and you will already have issues identifying them as such, if they exist at all. Theoretically and to a certain extend practically in stuff like hadoop, streaming sql or such things, you can express every manipulation of data as a series of maps and reduces. Try finding your while statements there.
If you title it "Every Programming languages" you can't just assume C, Pascal and Basic derivatives. There is a wider world of crazy shit out there some people might even spend all their live coding in.
Fuck you
Nerrrrds.
/dev/null
This should be titled *"NO programming language in less than 15 mins"* since it speaks of no PL but of what a program in an *imperative* PL is at a very abstract level. Then, there are functional PLs, whether "impure" (e.g., LISP) or "pure" (e.g., Haskell), as well as logic PLs (Prolog). And, for all such kinds, variations with object-oriented typing for the representation and manipulation of structured data. Finally, one must explain the difference between macro languages, interpreted languages, scripting languages, and compiled languages, and combinations thereof.
But your video is a good waste of 15 mins for youngsters eager to learn how to write code that is useful for some non-trivial applications without spending more than 15 mins. They might feel disappointed though.
The explanation of variables is not correct for example for Python. Variable is not a named location in memory, nor assignment overwrites anything. :)
I am pretty sure the interpreter does actually have a named reference for variables. Due to duck typing, whenever a variable changes its type during runtime, assignment does infact overwrite.
I assert that the ONLY two things a computer can do is loop and branch. Everything else is based on those two things.
I'll bite. How do you assign value to a variable with just looping and branching.
@@EconaelGaming Ok, so lets define how a variable is created / generated. Remember EVERYTHING in a computer is only a simple matter of a voltage, it is either low enough to be considered a 0 or high enough to be considered a 1. So if I connect a voltage to a pin on a computer, and it does not loop, it will simply just be a voltage on a pin, but if the computer has a clock firing at some frequency, it can sit there and toggle that value through a set of gates that can then assemble a set of gates that have voltages that are a combination of 1's and zero's that can, when interpreted correctly ,can be the value of 42! Now a variable, in the case of RAM is simply a set of bits, that are interpreted by this machine we have defined, as a VALUE. That's is how ONLY looping can set a variable to a value. BRANCHING is the act of either running some code or running some other code, which without looping, would never happen. Try turning off the ONE oscillator that sets everything in motion.
@@shaurz Grumble grumble grumble... Kinda sorta, but not really. You have to loop to branch, but you need not branch to loop. They are closely related, but with a one way dependency. But I am grumbling...
Well, you forgot the single most important thing computers do - *arithmetics.*
@@shaurz Well... both looping and branching are jumps.