6 ms·
At the same time… the language is interesting, and I’m sure it’s technically very well designed, but I’m not sure it’s a good fit for the task they’ve got. The
by 542458 4y ago
At the same time… the language is interesting, and I’m sure it’s technically very well designed, but I’m not sure it’s a good fit for the task they’ve got. The apparent goal is for this to allow anybody to democratically contribute to Fortnite (a game most popular with a fairly young audience), but the language feels very technical and not-beginner-friendly to me. For example, it’s fairly symbol-heavy (making it intimidating and hard to read), uses inverted pascal case, and has some tricky semantic whitespace (it has indent-based comments!).
Bar():int =
if (Foo[]):
1
else:
2
Find(X:[]int, F(:int)<decides>:void)<decides>:int =
for (Y:X, F(Y)):
return Y
false?
- CharlesW 4y ago> The apparent goal is for this to be a “now everybody can contribute to Fortnite, democratize content” thing… I don't think so. TFA notes that Verse was created to support a non-trivial use case, which is to make it possible to write software that works across multiple servers in order to support thousands of simultaneous players.
- 542458 4y agoEpic’s very first design goal for Verse is “simple enough to learn as a first-time programmer”, and all of their intro docs are framed around making content for Fortnite. https://dev.epicgames.com/documentation/en-us/uefn/verse-language-reference https://dev.epicgames.com/documentation/en-us/uefn/verse-lan... AFAIK at present time there’s no way of even using Verse outside of Fortnite mods. It certainly seems that it’s best suited for the use case you described, but their site is trying to sell it as a “let’s all learn programming and mod Fortnite” thing.
- waboremo 4y agoYes, but it's not an exclusive design goal. Other goals are listed on that page and you can see how design tradeoffs happened. You don't prioritize simplicity over all and make concurrency a core pillar! And certainly I think they pulled it off. Go through the lessons here to see what I mean in nothing stands out as beginner unfriendly here, but it's also not black boxing much in the way Python would. https://dev.epicgames.com/documentation/en-us/uefn/learn-the-basics-of-writing-code-in-verse https://dev.epicgames.com/documentation/en-us/uefn/learn-the...
- illiarian 4y ago> And make concurrency a core pillar! For such a core pillar they are extremely light on details. All you can see in the docs is they basically have: - green threads (maybe? no idea, no details on how async is executed) - "async calls" are blocking. Literally the equivalent of `x = await y()` - to have non-blocking calls you can use `Task = spawn(function)`, and then can optionally wait on it with `Task.await()` - there are a few syntax sugars on top (like `race` aka `Promise.race`). And some of them make no sense (`branch` is literally `spawn`, why does it even exist?) That... is not a "core pillar". It's a lazy minimal bare-bones implementation of decades-old ideas. Edit. Compare with a language where it actually is a core pillar: https://erlang.org/download/armstrong_thesis_2003.pdf https://erlang.org/download/armstrong_thesis_2003.pdf
- waboremo 4y agoDisagreeing with some of the decisions they've made in regards to concurrency doesn't negate it from being a core pillar. Neither does wanting more information on why they've made the decisions that they have. This is common sense.
- xboxnolifes 4y agoThat's a bulleted list, not an ordered list. It's not relavent that it's listed first, all of the points are equally important.
- jeron 4y ago+1 to this. If anything, you have a language that looks like it was made by luminaries, for luminaries. If you want something that would get kids that wanted to get into programming to create custom Fortnite modes, you want something that looks closer to Scratch or Python. I want to say Roblox has made programming quite accessible to children iirc
- robopsychology 4y agoHaving worked with a team building new programming languages and consisting of Haskell creators, I can confirm this was a near-fatal issue in those projects too.
- eru 4y ago> If anything, you have a language that looks like it was made by luminaries, for luminaries. Well, the opposite of that approach gives you Go.
- eat_veggies 4y agoOpposite in the sense that golang was created by luminaries for new grads
- deleted 4y ago[deleted]
- deleted 4y ago[deleted]
- culi 4y agoRoblox uses Lua, right? I think Redstone in Minecraft are good examples of introduction to programming via visual programming languages. Something you can really feel and play around with. I'm not sure how Verse or Lua are integrated into their respective games but it's really hard to imagine kids being able to get into these languages without something that gives immediate visual feedback
- shagie 4y agoConsider that classic programming language of old - LOGO. It's a really neat LISP. Yes, a LISP. to factorial :number if :number = 1 [output 1] output :number * factorial :number - 1 end or... to reverse :stuff ifelse equal? count :stuff 1 [output first :stuff] [output sentence reverse butfirst :stuff first :stuff] end From https://el.media.mit.edu/logo-foundation/what_is_logo/logo_programming.html https://el.media.mit.edu/logo-foundation/what_is_logo/logo_p... And from https://dl.acm.org/doi/pdf/10.1145/3386329 https://dl.acm.org/doi/pdf/10.1145/3386329 Logo’s design drew upon two theoretical frameworks: Jean Piaget’s constructivism and Marvin Minsky’s artificial intelligence research at MIT. One of Logo’s foundational ideas was that children should have a powerful programming environment. Early Lisp served as a model with its symbolic computation, recursive functions, operations on linked lists, and dynamic scoping of variables. .... In LCSI Logo, the if instruction above becomes a call to the if procedure, which takes three inputs: if :x<0 [right 90] [left 90] The first input is a Boolean value, reported by the < procedure. The second and third inputs are instruction lists, only one of which will be evaluated by if depending on the value of the first input. Square brackets both delimit and quote a list, so [right 90] is equivalent to ’(right 90) in Lisp. The entire expression is therefore equivalent to (if (< x 0) ’(right 90) ’(left 90)) in Lisp notation. How can Logo represent a thunk as merely the text of its body, without wrapping it in a lambda expression to capture its closure? See Dynamic Scope below (Section 3.7). The use of quoted instruction lists didn’t start with LCSI. From the beginning, the main looping facility has been repeat 4 [forward 100 right 90] with the instructions to be repeated inside square brackets. ---- LOGO was secretly introducing us to lambdas and thunks and closures... back in 3rd grade on the Apple][+. One of my laments is "I wish that we had computer scientists teaching us LOGO back then rather than the librarian who just wanted some quiet while we played Oregon Trail." So... the weird characters? We dealt with them as kids, that's no weirder than LOGO.
- lmm 4y agoSounds more like TCL than LISP. (Of course there are those who consider TCL part of the LISP family). > So... the weird characters? We dealt with them as kids, that's no weirder than LOGO. Most kids didn't learn much from LOGO. AIUI the best available research on learning programming (which is very limited) says that weird characters are a barrier to understanding, and so is case sensitivity.
- snarfy 4y agoI still make mods in Unreal Tournament. Unrealscript has its warts but does the job admirably. I can't look at Versescript without thinking that Unrealscript was better.
- DANmode 4y agoTheir business model has changed significantly since UT glory days — for better, for worse.
- dan-robertson 4y agoI’m curious how much of this is due to examples coming from people who already are interested in programming languages and therefore a focus on language features or semantics. It’s not obviously hopeless to me for it’s intended purpose.
- nightski 4y agoI mean I was writing C++ in junior high and I am by no means that bright. Just persistent. I think in some ways we have become too afraid of some upfront complexity at the expense of beginners in order for more well engineered systems. I think a slightly higher learning curve is not always a bad thing.
- wkdneidbwf 4y agothere’s nothing wrong with a persistence-centric approach like you took, but there’s also certainly nothing wrong with catering to your audience. we should strive to provide a better gateway than we had when we were young.
- deleted 4y ago[deleted]
- Yoric 4y agoThat's a good remark. In general, lowering the entry barrier is good. But you are right that we may now be scared of anything that doesn't have a very low entry barrier.
- Yoric 4y agoOn that topic, see the reaction to Rust. Rust has pros and cons, but perhaps the fairly high entry barrier shouldn't be considered a real issue for people who deal with very sophisticated abstractions and requirements all day long?
- csande17 4y agoA lot of this type-system stuff is not really relevant to the Fortnite modder audience. If you look at the kind of code used in more practical examples (https://dev.epicgames.com/documentation/en-us/uefn/learn-code-basics-8-practice-time-in-verse https://dev.epicgames.com/documentation/en-us/uefn/learn-cod...) it doesn't do very much of this -- it's basically Python crossed with Java. Well, they have also inverted the usual capitalization conventions for seemingly no reason. Class names are lowercase_with_underscores and local variable names are UpperCamelCase.
- codetrotter 4y ago> lowercase_with_underscores aka snake_case > UpperCamelCase aka PascalCase But yeah I agree it’s curious that they use these the other way around from what I am used to in Python and Rust.
- dmytrish 4y agoI'm just guessing, but snake_case might be inspired by dependently typed programming languages, where there's no strict boundary between terms and types. PascalCase for variables reminds me of unification-based programming languages like Prolog.
- dsffghfghfghfgh 4y agoThe typical perspective with functional programming, if you buy it, is that it is a little more investment in getting going, but once you have something compiling and working you spend less time on bugs and refactoring.
- astrange 4y agoI think the problem with this claim is that "functional programming" (or "object-oriented" "procedural") aren't actually distinguishable kinds of languages but are more like social groups or aesthetic movements. More important question is if a language has a spec or just a default implementation, and if so if that's a compiler, interpreter, JIT etc.
- tragomaskhalos 4y agoThis is a valid point, but on the other hand we don't seem to have solved the problem of deciding the sweet spot of language features that are the best on-ramp for kids to get into coding. For my money, we'd actually be better off if kids were still learning BASIC, for all its faults. I don't know Lua too well, but maybe that's best in breed. Don't even get me started on Python >:(. One of the tensions is "make it learner-friendly" vs "align it with languages they're likely to use as professionals", aka "don't teach bad habits", but IMO this is grossly inflated as an issue because (a) many of these kids will not become programmers anyway, (b) they certainly won't if their learner languages put them right off by being full of counter-intuitive gubbins, and (c) the idea that learning BASIC, or Cobol, or whatever, fundamentally ruins your brain for "proper" programming is a manifest nonsense anyway.