|
Post by svajoklis on Apr 28, 2020 11:36:31 GMT -5
Well English is not my first language either, so we will have to work something out here My point is not to criticize BASIC, I have expressed multiple times that I love it for what it is. What I don't understand and what I am questioning is the even more poorly argumented side of "BASIC IS GREAT, I LOVE BASIC, I DON'T GET EVERYTHING ELSE". It's what I've been criticizing all along. The arguments why "BASIC is the greatest thing since sliced bread" was the following. "You don't have to import things." Yeah, so you're working with a global namespace where you can inadvertently shadow a name or you can't use some names altogether even if they would make sense. "You don't have braces." I know it's the lovely sarossell, but still, really - braces? Python doesn't have braces and people are sometimes not very fond of it, other languages mostly have them, and it doesn't seem to be too big of a problem. Other than that all I seem to find is "darn kids these days, back in my day we coded in BASIC and we LOVED it". I don't doubt that you did, but it doesn't seem it's that enjoyable now, and it is as much about BASIC as it is about fond memories of simpler times. You can write poor code in any language, hell, if you were more proficient in JavaScript and saw the things I write sometimes, you'd be probably laughing too, but we are all here to improve, not to discourage. My point is it's better to not know 100% of the language, but be able to find something you are looking for like new structures, new statements, ternary operator, what have you, than to know it 100% but be limited by it. To answer the question of this thread: I don't think BASIC has moved on with the world. I see BASIC as two separate concepts. One is the syntax: it's verbose and at times inconsistent. "end if" but "wend" is a good example. Liberty BASIC doesn't have imports, so you are working on a huge single file - not very efficient for navigation (I know about the label jump panel), and it's a hell if you want to work with other people on it - you can't establish assumptions and even the code you know is pretty much correct is always in front of you instead of being abstracted away and documented. The $ at the end of string variables is a lot like the Hungarian notation for C/C++. At first it's fine, you know, nApples, sName, but then it jumps the shark with lpstrzHwndMainWindow. BASIC doesn't do that, QB64 adds more suffixes like %, &, but at the end of the day compiler checks the types and we are far from the days where we couldn't compile programs on a whim and had to deliver reams of paper to a computing centre. en.wikipedia.org/wiki/Hungarian_notation#AdvantagesNo imports means if your language of choice doesn't support something you either have to manually copy things in or you have to write your own importer (which I am thinking about doing some time), or that's that - you are left with only the things that are supported. I can't even write my own utility library, since I'd have to manually version and copy it everywhere. The other side of it is the "simplicity", the romantic notion of booting up your computer and being able to code immediately. World is way away from that. I'd love to see a machine that would boot to BASIC, and there are some, but the appeal is not so great when that's almost the only place you could use it. Getting Python with Thonny is easy, even getting the hellhole C++ is easy with Visual Studio, other languages have many options too. There is ample documentation for them and the community is vibrant - that's the appeal nowadays. I am getting sick of repeating it, but I like Liberty, I commend the creators of it, and I like BASIC in general, I just don't think it can compete that well.
|
|
|
Post by Rod on Apr 28, 2020 12:03:36 GMT -5
I think you have forgotten what B means, indeed BASIC. I also think you discount the many years surmounting the learning curve you have achieved. Net, CSS, JS et all are just vapour to most of the readers here. Beginners, like children dabbling, need an easy to use, easy to assimilate and easy to correct and retry environment. Precisely what an interpreted BASIC is all about.
However your point is that BASIC can't do Web, can't do streams can't do a lot of things. We agree. But not withstanding we all love what we CAN do with it. Why do you have a difficulty understanding that some folks love BASIC?
|
|
|
Post by svajoklis on Apr 28, 2020 12:59:38 GMT -5
I have to agree, I do come in with some years of knowledge, first program I have found in my archives that I have written dates back to 2006, and I work as a full-time programmer, so it does give me a bit of an advantage.
I do understand that people love BASIC and I do like it myself. Where have I stated anything differently?
|
|
|
Post by svajoklis on Apr 29, 2020 3:05:21 GMT -5
Sorry for doublepost, but I am really thinking about it. Yes, I have lots of criticisms, some valid, some not. I want BASIC to improve and be able to stand it's ground well. Sadly, there's not a lot I can do about it. All of that doesn't mean I'm here just to crap on BASIC and on people who love it. I try to address people and people address me.
I don't want to think I mistook the meaning of this thread. As I understand it it's "why did the world give up on BASIC?", not "why the world is wrong for giving up on BASIC and why BASIC is better overall, not just for beginners?".
|
|
jordi
Full Member
A simple solution is the smarter one.
Posts: 106
|
Post by jordi on Apr 29, 2020 7:49:07 GMT -5
Well English is not my first language either, so we will have to work something out here My point is not to criticize BASIC, I have expressed multiple times that I love it for what it is. What I don't understand and what I am questioning is the even more poorly argumented side of "BASIC IS GREAT, I LOVE BASIC, I DON'T GET EVERYTHING ELSE". It's what I've been criticizing all along. The arguments why "BASIC is the greatest thing since sliced bread" was the following. "You don't have to import things." Yeah, so you're working with a global namespace where you can inadvertently shadow a name or you can't use some names altogether even if they would make sense. "You don't have braces." I know it's the lovely sarossell, but still, really - braces? Python doesn't have braces and people are sometimes not very fond of it, other languages mostly have them, and it doesn't seem to be too big of a problem. Other than that all I seem to find is "darn kids these days, back in my day we coded in BASIC and we LOVED it". I don't doubt that you did, but it doesn't seem it's that enjoyable now, and it is as much about BASIC as it is about fond memories of simpler times. You can write poor code in any language, hell, if you were more proficient in JavaScript and saw the things I write sometimes, you'd be probably laughing too, but we are all here to improve, not to discourage. My point is it's better to not know 100% of the language, but be able to find something you are looking for like new structures, new statements, ternary operator, what have you, than to know it 100% but be limited by it. To answer the question of this thread: I don't think BASIC has moved on with the world. I see BASIC as two separate concepts. One is the syntax: it's verbose and at times inconsistent. "end if" but "wend" is a good example. Liberty BASIC doesn't have imports, so you are working on a huge single file - not very efficient for navigation (I know about the label jump panel), and it's a hell if you want to work with other people on it - you can't establish assumptions and even the code you know is pretty much correct is always in front of you instead of being abstracted away and documented. The $ at the end of string variables is a lot like the Hungarian notation for C/C++. At first it's fine, you know, nApples, sName, but then it jumps the shark with lpstrzHwndMainWindow. BASIC doesn't do that, QB64 adds more suffixes like %, &, but at the end of the day compiler checks the types and we are far from the days where we couldn't compile programs on a whim and had to deliver reams of paper to a computing centre. en.wikipedia.org/wiki/Hungarian_notation#AdvantagesNo imports means if your language of choice doesn't support something you either have to manually copy things in or you have to write your own importer (which I am thinking about doing some time), or that's that - you are left with only the things that are supported. I can't even write my own utility library, since I'd have to manually version and copy it everywhere. The other side of it is the "simplicity", the romantic notion of booting up your computer and being able to code immediately. World is way away from that. I'd love to see a machine that would boot to BASIC, and there are some, but the appeal is not so great when that's almost the only place you could use it. Getting Python with Thonny is easy, even getting the hellhole C++ is easy with Visual Studio, other languages have many options too. There is ample documentation for them and the community is vibrant - that's the appeal nowadays. I am getting sick of repeating it, but I like Liberty, I commend the creators of it, and I like BASIC in general, I just don't think it can compete that well. Now you have explained all very correctly and I can understand why you say what you say, and it's of course valid. I disagree in some things, I suppose it's just by personal tastes and points of view. As Rod said, I think you are an experienced programmer, and that has shaped your mind in a way that you find that other languages have advantages and all of them are understandable at the same level as basic. That's okay. But for most people, they are not. For beginners of programming, for the casual programmer, and even for people like me that programmed in different languages, Basic is still easier. The more abstract the language is, and more far away from a natural human language, we all find it difficult. It's only the full time programmers who find all languages have the same difficulty. What sarossell, and I, and almost everybody in the world doesn't find easy is the big difference with human language. For example, the if-then instruction in C#, which is the least horrible language: if (condition == 1 ) { Console.WriteLine("This is an if"); } else { Console.WriteLine("Nothing."); } In Basic: if condition = 1 then print "This is an if" else print "Nothing" end if In human language: If the condition is equal to 1 then print "this is an if" else print "Nothing" Human language and basic are almost the same. For anyone, it is easier, faster, more efficient. A person can understand this syntax inmediately, intuitively, and can start making programs right now. In Python, the most easy language after basic, and more similar to Basic, printing something is this way: print ('hi') In Basic: print "hi" In human language: print "hi" The same. Human language doesn't use () or {}. You may find () and {} are very good, but they only confuse non-programmers. The code looks much more obscure to a non programmer than not having them. Specially because () is used for remmarks or notes in human language, and {} is not used at all.
That is also a reason why many languages offered as basic alternatives look weird to non programmers.
The "while-wend" is inconsistent, you are right. It should end by "end while". Having imports is also nice. The $ sign for the strings is not so intuitive. You have to learn that a string means a text variable. But $ sign looks like a knot in a cord or rope. I suppose that is why they chose that. In Spanish, we call it "cadena" ("chain"), and the sign looks like a chain piece to us, so we also find it intuitive. Having 2 kinds of variables, text and numbers, is also intuitive for an human being. Having long, float, etc is not. In our human world, people distinguish between numbers and text. Only mathematicians distinguish between floats, long, double, and that all. "My point is it's better to not know 100% of the language, but be able to find something you are looking for like new structures, new statements, ternary operator, what have you, than to know it 100% but be limited by it." My point is that not. If I speak a bit of German, a bit of French, and a bit of Spanish, I can't do anything, many people won't understand me. If I know English and Spanish at some degree, I can do lots of things. If I only speak Spanish, I can do everything in my country. Knowing basic math, people from ancient civilizations built pyramids, and predicted the movement of the stars.
You have a computer language that is Basic, and there are tons of things you can do with it. There are some you can't do, but for most people, they won't do those other things anyway. That is why Basic is a general purpose language, not a specific purpose language. It's purpose is to be as close to human language as possible, so most people can understand and use it. It is not meant for specific tasks and it's not for geniuses of programming.
Python has weird things too. For example "elif". What does that mean? "Else if". A normal person can understand "else if", but not "elif". And the () in print are weird. The lack of an "end if" is also weird. The for loops in python are a brain spasm for the beginner.
In C#, the for instruction: for (int i = 0; i < 5; i++)
In basic: for i = 0 to 5 BLA BLA next i
In Basic, it's completely understandable by beginners. In C# they see it as a weird formula that has no meaning unless you know what each part does.
Also, the double == is absurd in many languages. A single = is read by any person as equals. This: i = i+1 is understood by all people in the world. This: i++ is not understood by any non programmer.
Programmers love ++ and == and {} and () and two different kinds of quotation marks, and abstract constructions, and all that. But people hate them. They look as math, and 90% of people hate math.
The world needs Basic, it still needs a lot. If the people who made Microbit, Arduino, and many other modern inventions didn't had their brains sucked by Edsger W. Dijkstra, they would have seen that they should equip their hardware with a basic dialect, and not micropython or C.
I am learning elecronics. People say that when they use Arduino and Microbit they learn electronics. But they don't. They would learn electronics if they were not using micros.You learn electronics by building things with electronic COMPONENTS. With arduino and microbit you learn programming. And for learning programming, people need Basic.
They can use another language to learn programming, but that will let out 90% of the possible people. Because no other language is so readable and understandable as basic.
Now comes Dijkstra and says his famous stupidity about Basic. It doesn't convince me. A person who is born to be an advanced programmer and has an abstract specialized mind won't be ruined if he learns Basic. If he does, then probably he doesn't have that mindset. And many more people that will never be that kind of programmer will be able to program something.
By the way, let me quote Alan Kay about Djikstra: "You probably know that arrogance, in computer science, is measured in nanodijkstras".
|
|
jordi
Full Member
A simple solution is the smarter one.
Posts: 106
|
Post by jordi on Apr 29, 2020 8:02:55 GMT -5
And as a final word, the marvelous ternary operator in Python: Blueprint: condition_if_true if condition else condition_if_false Example: is_nice = True state = "nice" if is_nice else "not nice" In Basic: is_nice = 1 if is_nice = 1 then state$ = "nice" else state$ = "not nice" end if In human language: is_nice = true if is_nice = true then state is "nice", else it is "not nice" Basic is much closer to human language. Completely readable by non programmers. Python looks shorter but weird. The only good thing is the "true" word. I could say that for me, that I know a bit of electronics, 1 is true and 0 is false. But common people will prefer true and false.
|
|
|
Post by svajoklis on Apr 29, 2020 10:03:54 GMT -5
I don't care much about Dijstra's arrogance. If you criticize a person, then you criticize the person, but if you criticize a point, you should only do it based on what that point is. 2 is equal to 2 irregardless if someone is called a doofus afterwards or not.
Skipping that I feel you misrepresented a bit.
if (condition == 1) { Console.WriteLine("This is an if"); } else { Console.WriteLine("Nothing."); }
I know there are many brace styles, this is a more compact one. I find it very hard to believe that when you are teaching programming it is hard to teach the concept of a "list of statements, or sentences". Your counterexample in BASIC is misformatted too.
if condition = 1 then print "This is an if" else print "Nothing" end if
or
if condition = 1 then print "This is an if" else print "Nothing"
So it's still a difference of "if this condition, then perform this set of actions, and if not - this set of actions" and "if this condition then perform this action between this and else, otherwise perform everything after else until end if". In the first example there are two clear sets of instructions separated by symbols, and in the other you have to look for those exact words. Formatting is very important too, I mean take one look at obfuscated code challenges.
Other good example is for loops. Let's take a neater example from Python
for i in range(0, 3): print(i)
for i = 0 to 3 print i next i
Again, for i in this range it seems similar. You lose the step though, but the for becomes much more versatile, since you are now iterating over a list of things, so "for i in arrayOfInts" is possible instead of "for i = 0 to len(arrayOfInts)". Remember the zero, calculate the length every time.
Regarding calls you are asserting, that it's harder to understand "add(3, 2)" than "call add 3, 2". Why no comma after the first word, but there is one after the second. It's almost as if a list is started after the "add" word, which is neatly outlined by the parentheses in the first example.
Ternary operator in Python is kind of ugly, yeah, but more often it's "condition ? ifTrue : ifFalse". It's used for assignment, so you can write it out in an if block too. It's nice to have the option rather than lack it when you do a lot of these, I'm not saying "replace all ifs with ternaries".
Different quotation marks, again, have special meanings. If I followed this progression, then I'd start arguing against quotation marks altogether. "var$ = This is my text". I can't expect people to understand there's supposed to be quotes around text!
To finish off I was thinking about how BASIC could be improved syntatically, but it starts leaning toward the Visual Basic syntax which is even more verbose. I understand the verbosity though, especially because of the target audience, so not a lot of complaints there.
Why do you think BASIC is not sticking? I'm pretty tired of all the "this damn Dijkstra, always pushing BASIC away" stuff, the guy's been dead since 2002. There is ample room to start creating BASIC dialects, free, open source ones (59 USD for a programming language is quite steep to be honest). Microsoft tried Small Basic. Pascal was teached in schools when I was still in there, first-graders are doing Python just fine if they are interested, writing poor code and learning, my alma matter moved on to C# last I remember, Java is used too. Why not BASIC?
|
|
jordi
Full Member
A simple solution is the smarter one.
Posts: 106
|
Post by jordi on Apr 29, 2020 10:24:33 GMT -5
Well people understand quotes in text because they are used to see texts in quotes. The same reason as the other things.
|
|
|
Post by svajoklis on Apr 29, 2020 11:32:35 GMT -5
So they don't see parentheses anywhere, like let's say basic math with (2 + 3) * 3 = 15.
Oh and regarding = and == they are two inherently different operations. Pascal does comparison with = but assignment with := (closer to maths).
isVowel = letter = "a" or letter = "e" or letter = "i" or letter = "o" or letter = "u" or letter = "y" vs isVowel = letter == "a" or letter == "e" or letter == "i" or letter == "o" or letter == "u" or letter == "y" vs isVowel := letter = "a" or letter = "e" or letter = "i" or letter = "o" or letter = "u" or letter = "y"
(Yes, I know about instr, that's not my point) Nice.
Oh and people are used to seeing pseudocode with "if this then that else somethingElse". The people who teach programming don't have to start off with the concept of "here's a list of things you do one by one in order".
|
|
jordi
Full Member
A simple solution is the smarter one.
Posts: 106
|
Post by jordi on Apr 29, 2020 11:57:08 GMT -5
Again I think you see it as a pro programmer but for the normal person it looks weird.
It doesn't mean that those features aren't wonderful but for normal people they are the reason why they don't program.
And 60 dollars for a language is a very good and even cheap price. It's the same price here than for a concert or a dinner and those are one day fun and this is a lot of years of fun. I don't understand how people can spend in beer more than in a book and be ok with that.
People basically are not using Basic because they think the art is the medium.
|
|
jordi
Full Member
A simple solution is the smarter one.
Posts: 106
|
Post by jordi on Apr 29, 2020 12:06:48 GMT -5
I mean: in graphics if you do something with MsPaint people think it is poor. If you do it with Photoshop it's great.
At the same time, if you are between classic painting people, your Photoshop art becomes poor.
In 3d, something modeled with Zbrush is great. If you say you used Silo3d, it's poor.
In programming if you use C++ it's fantastic. If you used Basic it's not.
But in all cases what the final public sees and loves is the same
The tech people or the small circles of people think different though. They tend to think that the art is the medium that they used to make it. That is simply false.
So: my conclusion is that Basic needs marketing.
|
|
|
Post by Chris Iverson on Apr 29, 2020 12:37:52 GMT -5
I think at this point the conversation's just spinning its wheels, and I think jordi hit the nail on the head as to the reason why: for people who are deeply involved in the programming paradigms(like me), who are able to pick up any language and probably be productive with it purely due to experience with other languages, all the weird little quirks of the more advanced languages just make sense, and BASIC is just another language with its own weird little quirks.
As an example from one of the things listed here, the "print()" in python. That makes sense to me, because unless it's flow control(conditionals, etc), everything in python is a function. You call functions using (), and you provide parameters to functions by putting them in the parenthesis("Hello, world"!).
Even in LB, you call functions using (). You can't do "print abs -10". You'll get a syntax error. It's "print abs(-10)". Because you're calling a function.
But from the point of view of someone who doesn't have that programming and computing experience, all those weird little quirks don't make sense. While BASIC does have its weird little quirks(and LB especially has some inconsistencies, such as return values of time$()/date$() and winstring()), a BASIC program will (generally) look closer to more easily-understood pseudocode than almost any other implementation, so someone who has no experience in programming at all might have a good chance of understanding somewhat of what is going on.
It's funny, because I can remember my first attempts at using C, YEARS ago, working on(ironically, considering my most recent projects here) DLLs for LB. C made absolutely no freaking sense, and even if I could get it to compile, I often couldn't get it to run without crashing. NOW I understand what I was doing wrong, but back then? It was arcane wizardry.
I've come to have a very deep understanding of computers, and that both helps and is helped by some of the more advanced languages, but not everyone who wants to make their computer do their work for them(like computers were made to do) wants to learn about all that. They shouldn't have to know what a vtable is to run some calculations. They shouldn't have to know how and why computers use binary, and type sizes, and how to work around and deal with those. They shouldn't have to be able to write an x86 bootloader for an OS from scratch in assembly language and C to do that. That's what we make the more abstracted languages for. Heck, that's why we abstract anything. The number of levels and amount of abstraction happening in a modern computer, each level making things easier for the next level up, is absolutely insane.
And there is some programmer bias when it comes to what's made for things like the Microbit and the Arduino, as I've said previously. The first programmers for those were, well, programmers. They ported over the languages they were already using, because that's what they were already used to. (Or, in the case of Arduino and C, they just used the existing ATMEL C compilers, and called it a day.)
Since at this point, it all boils down to a difference of perspective, I think it best to let things lie as they are.
|
|
jordi
Full Member
A simple solution is the smarter one.
Posts: 106
|
Post by jordi on Apr 29, 2020 13:01:10 GMT -5
I think at this point the conversation's just spinning its wheels, and I think jordi hit the nail on the head as to the reason why: for people who are deeply involved in the programming paradigms(like me), who are able to pick up any language and probably be productive with it purely due to experience with other languages, all the weird little quirks of the more advanced languages just make sense, and BASIC is just another language with its own weird little quirks. As an example from one of the things listed here, the "print()" in python. That makes sense to me, because unless it's flow control(conditionals, etc), everything in python is a function. You call functions using (), and you provide parameters to functions by putting them in the parenthesis("Hello, world"!). Even in LB, you call functions using (). You can't do "print abs -10". You'll get a syntax error. It's "print abs(-10)". Because you're calling a function. But from the point of view of someone who doesn't have that programming and computing experience, all those weird little quirks don't make sense. While BASIC does have its weird little quirks(and LB especially has some inconsistencies, such as return values of time$()/date$() and winstring()), a BASIC program will (generally) look closer to more easily-understood pseudocode than almost any other implementation, so someone who has no experience in programming at all might have a good chance of understanding somewhat of what is going on. It's funny, because I can remember my first attempts at using C, YEARS ago, working on(ironically, considering my most recent projects here) DLLs for LB. C made absolutely no freaking sense, and even if I could get it to compile, I often couldn't get it to run without crashing. NOW I understand what I was doing wrong, but back then? It was arcane wizardry. I've come to have a very deep understanding of computers, and that both helps and is helped by some of the more advanced languages, but not everyone who wants to make their computer do their work for them(like computers were made to do) wants to learn about all that. They shouldn't have to know what a vtable is to run some calculations. They shouldn't have to know how and why computers use binary, and type sizes, and how to work around and deal with those. They shouldn't have to be able to write an x86 bootloader for an OS from scratch in assembly language and C to do that. That's what we make the more abstracted languages for. Heck, that's why we abstract anything. The number of levels and amount of abstraction happening in a modern computer, each level making things easier for the next level up, is absolutely insane. And there is some programmer bias when it comes to what's made for things like the Microbit and the Arduino, as I've said previously. The first programmers for those were, well, programmers. They ported over the languages they were already using, because that's what they were already used to. (Or, in the case of Arduino and C, they just used the existing ATMEL C compilers, and called it a day.) Since at this point, it all boils down to a difference of perspective, I think it best to let things lie as they are. I completely agree.
|
|
|
Post by svajoklis on May 1, 2020 11:40:59 GMT -5
Jordi, I have said literally nothing about the programs themselves written in BASIC or whatever. Do it in BASIC, do it in Python, do it in GameMaker with drag and drop interfaces, I've used programs written in Pascal and the only thing that concerned me was that it worked well. It starts sounding a bit defensive.
Chris, of course the gap seems vast when you compare oranges with apples. C was created for low level coding, where you can almost feel what the assembled machine code will look like after compiling. Comparing apples with apples would be comparing BASIC with some dynamically typed language like Python or JavaScript. To get back to the call syntax I criticized - I talked about "call", not function calls, I am well aware that functions are called with parentheses. "call" is written out as "call param, param2, param3". It's not a gamebreaker for me even, AutoHotkey solves this problem by allowing commas after function, so "SendKeys, 'abc'", I haven't studied BASIC enough to make a more educated guess about how BASIC would do that.
I wonder what kind of marketing money Python Corporation spends. All the ads and billboards, people being paid to write books and put in schools. Oh wait, it's a non-profit Python Software Foundation.
Start a Wiki with helpful articles, update and better format the help files. Post more actual code. Nice initiative on the Notepad++ syntax, jordi. I want to do one for Visual Studio Code since it's really going up right now. It's not marketing, it's the ecosystem.
|
|
|
Post by Brandon Parker on May 1, 2020 14:34:08 GMT -5
I think enough has been said surrounding this topic, and we can all agree/agree to disagree about anything/everything. This thread is being locked for the time being...
Back to programming!!
{:0)
Brandon Parker
|
|