
The nice thing about Racket is it actively encourages you to design well which is far more important than what programming language you learn. Once you learn two or three languages, rest become much easier and somewhat redundant.

I won’t worry about what or which language or paradigm to learn. Focus on learning how to design and organize your programs, try different languages without worrying about whether they are “in” or “out”. You’ll be able to make better informed decisions once you’ve been exposed to diverse programming styles.

My anecdata/observation is that Clojure “in industry” means dealing frequently with Java/JVM concepts, tooling, builds, ecosystem. Clojure is hosted on Java. For some people this is a feature (e.g. helps sneak it into certain companies). For me, meh.

Yeah, I sort of felt the same way. Found some interesting points on Clojure here: https://news.ycombinator.com/item?id=14006242

@dustin I use Scala every day for work. I don’t think it’s a horrible language at all. There are parts of it that are ugly (that’s true of just about any language including beloved Scheme & Racket), or rather, I’ve seen people resort to ugly things in every language to get things done. Why did I choose Scala at work? Well, at work there is a .NET ecosystem and a JVM-based ecosystem, plus mobile apps (Android, iOS, Windows). I didn’t want to get tied down to one platform so that was a con for .NET. Also, more of my work ties into the Java-ecosystem. Scala fits very comfortably in that world. In Scala, you can write code that almost looks like Haskell, or you can write code that looks object-oriented (I remember the 80/90s when that was “a thing”), you can even write Scala that looks just like Java, so you don’t scare off the Java-only people. In short, you can write Scala in some pretty different ways, according to your taste, and the tastes of your colleagues. My Scala programs are much shorter and have less junk in them than the equivalent Java programs. My colleagues have been picking up Scala too, and like it. There are quirks, but you learn to deal with them pretty early on and then you forget about them. I use Racket at work for things that are experimental and/or where I want speed but don’t want to go back to C. I used Racket on the side at at home for all my own personal projects. Where does Haskell fit in? I want to learn more Haskell to improve my Scala programming and indeed anything I do in the functional world. I said as much in my annual personal goals statement at work. If I learn enough Haskell I may be able to finally understand all the category theory the most advanced Scala people float over my head at every Scala conference I attend. If I learn enough Haskell it may help me write Scala or Racket libraries with more finesse. Who knows. If I learn enough Haskell it may turn out Haskell can do everything with great elegance. We’ll see. Small aside: When I picked up Scala at first, I noticed in the preface to Odersky’s book that he’d been encouraged and given advice by the top thinkers in the Racket community, so that kind of cemented the deal for me in terms of the respectability of the journey. I definitely write better Scala given the lessons I’ve learned from the Racket and HtDP community over the years.

One of the biggest issues with Haskell in my opinion, is the lack of good documentation and libraries that feel a bit clunky.

That, and how I’d have a better chance (it seems) at understanding hieroglyphics!

Ha, I just looked for a book, meanwhile found a different one I could use to sharpen my Haskell and Russian: https://goo.gl/iNjv3N

@dustin: This is a book I’ve been working through: http://haskellbook.com/ I have a number of other Haskell books on my bookshelf, but this one seemed to try to make the journey easier.

I’ve tried a lot of resources to learn Haskell. I think this post sums of some of the best ways: https://argumatronic.com/noobs.html
(That one is in the list as well.)

Thanks @dustin. I’m now going to return to my DrRacket window. :slightly_smiling_face:

This is a site for beginners, and it links to an article called “Function Composition and the $ Operator”? As if the lexical syntax of a particular language is what a beginner should be spending time on?

The article’s title could just as well be “How to avoid using parentheses, for… reasons.”

I think the links are the gist of what’s available to learn Haskell. The book Geoff linked is probably the most understandable, but it also has its challenges at trying to teach a language where beginner resources are nearly non-existent. If you can make it through configuring Stack, or learning how to avoid the Haskell Platform, you’re doing well. Oh, and if you want a decent code editor, you might have to use Cabal or Stack to install additional resources for a nice IDE/editor experience. I probably spent days on silly things like messing with Vim, Spacemacs/Emacs, making sure I had the right version of GHC, etc. I learned a lot but I couldn’t live with myself after not being able to fully understand lambda calculus.

I think because Haskell is so verbose, it’s difficult to remember and grasp things. But I also felt like there was this secret club, and because things aren’t well-documented, you must begin to try harder. Either that, or once you learn Haskell, trying to explain every needed detail to a beginner becomes one of the most difficult tasks one can do. I often found myself staring at code and re-reading material many times over. I did get those epiphany moments, but the process was very slow. In that sense, I don’t know that learning Haskell as a first language is the best choice, even though many Haskellers will tell you it’s the best decision you could possibly make.

If ETA succeeds, there might finally be more support for learning (in a sense) Haskell on the JVM: http://eta-lang.org\|eta-lang.org

I don’t think Haskell is a good place to learn lambda calculus, if that’s what you meant in your earlier comment.

I couldn’t seem to find a direct correlation to make the two work in my head.

The Haskell Book (linked earlier) goes through a whole chapter at the beginning on lambda calculus, offering steps for things like alpha and beta reduction. I could maybe understand those things better, but some of the examples to be reduced were like 20–25 characters long.

I haven’t read that particular book but I’m rather surprised they’ve included a chapter on LC and reductions, that sounds like a good way to confuse beginners even more.

Knowing lambda calculus absolutely is not a prerequisite for learning programming in any form, even Haskell. While it’s nice to know to understand the theoretical and mathematical properties of computable systems, it’s not relevant to every day programming.

In a typical (well, I think typical) undergrad program, that sort of thing is usually part of a programming languages course that you’d take in, what, your third year?

yeah in my own undergrad experience, we were exposed to lambda calculus in the last two years.

in any event @dustin, don’t beat yourself up if you don’t grasp Haskell at first, it’s perfectly OK not to understand something at first. You’ve given yourself time and put in efforts to explore Haskell, you can move on to other things and come back to Haskell later.

Here’s one example for beta reduction taken from chapter 1:
a) (𝜆𝑥𝑦𝑧.𝑥𝑧(𝑦𝑧))(𝜆𝑥.𝑧)(𝜆𝑥.𝑎) b) (𝜆𝑥.𝜆𝑦.𝜆𝑧.𝑥𝑧(𝑦𝑧))(𝜆𝑥.𝑧)(𝜆𝑥.𝑎) c) (𝜆𝑦.𝜆𝑧1(𝜆𝑥.𝑧)𝑧1(𝑦𝑧1))(𝜆𝑥.𝑎) d) (𝜆𝑧1.(𝜆𝑥.𝑧)(𝑧1)((𝜆𝑥.𝑎)𝑧1)) e) (𝜆𝑧1.𝑧((𝜆𝑥.𝑎)(𝑧1))) f) (𝜆𝑧1.𝑧𝑎)

When I seemed confused, the author told me a ten-year-old made it through the book.

heh that doesn’t sound like a kind compliment.

I won’t worry about what the author said, he’s motivated to believe his book is easy even for ten year olds but that doesn’t say much. People have diverse learning styles and background knowledge that influence how well they assimilate given material.

Other than the author’s claim, we have no way of knowing how well the ten-year old actually understood the book, for all we know she or he just skipped right over the chapter and focused on the more interesting chapters.

Or if it was the author’s own ten year old child who i’m sure was given help more graciously

Maybe this is terrible advice, but I found redex traces to be very helpful for understanding how lambda calculus expressions reduce.

Regarding the ten year-old λ-calculus wizard, when I was in my mid-forties, I had a problem with my Mac. I got on some forum and a genius helped me out. When my problem was fixed, I said to him, “Man, I can’t believe how much you know about these machines,” he answered, “Yeah, I’ve been working on Macs for ten years, since I was five.”

good story

Ha! That’s funny. The kid was male, I believe, and his mom is a linguist and thoroughly knows algebra.

of course

Classical lambda calculus while a excellent model for understanding what computing means on an abstract level in terms of reduction and transformations, but it’s a very simplistic model and doesn’t even have any concept of mapping expressions to values or even typing.

It’s about a far as you could get from normal variety programming and computing. The most important concept from lambda calculus to have made its way into programming probably would be first-class functions as values which is the keystone to being able to parameterize code over arbitrary inputs, otherwise also known as lambda

Racket’s own lambda is far more rich than lambda calculus’s lambda and you can work with it without needing to know anything about lambda calculus. Nonetheless, if you’re interested in knowing more about classical untyped lambda, check this tutorial out http://www.inf.fu-berlin.de/lehre/WS03/alpi/lambda.pdf

the main takeaway I would offer is that the only thing Racket’s lambda
and lambda calculus’ lambda
have in common is the name and concept of first-class function values being applied to inputs

@abmclin I don’t think that’s really accurate

I’m going to start of HtDP. Is it safe to use the draft version?

@dustin yes, you should

@abmclin Hadn’t seen that tutorial before, I’m glad it’s 9 pages instead of 900, thanks.

@samth I probably am oversimplying things no question

I welcome corrections :slightly_smiling_face:

@dustin Yes to HtDP! When I was first exposed to it, after the first day or two, it was almost magical, that is: recognize these basic patterns, follow this recipe, and programs mostly write themselves. And they work, because of course you wrote your tests. The hardest part of HtDP is not HtDP, it’s later, when you begin to cut corners, thinking, “Oh I know how to do this, I don’t really need a test for this, or I don’t really need to use that pattern I learned, I’ll just wing it…” and then you find you would have been done hours earlier if you had just stuck to the lessons HtDP teaches.

I have personally seen intelligent, experienced programmers with 15 years experience struggle to grasp Haskell concepts. Haskell is a complicated programming language. That isn’t intrinsically bad, not by any stretch—with great investment comes great reward—but it is an awful language to teach to beginners. I think most of the people who advocate it are well-intentioned but have used it long enough they have forgotten why it’s so hard for someone new to wrap their head around.

I think you’re exactly right about that. Thanks for all of the comments.

It’s been a while since I’ve done pre/algebra. Should I get those fundamentals down well before starting HtDP?

I don’t think it’s necessary

Thanks.

Personally I’d think it may be fruitful to learn how to build apps with JS

It’s hard to go from low-level patterns to app-level organization

But the JS world has a community that’s actively figuring that out right now

So there will be a lot of learning pathways from nothing to app

The only caveat is that the JS world’s tooling is downright painful

I have to disagree (strongly) with that.

Unless, I suppose, you only learn from mistakes.

I would suggest that in the JS world

you learn by mocking, by modelling, by mimicking the architecture of people who are greater than yourself

and it’s a world that places app architecture at the forefront of its thinking

it’s hard to go from a programming paradigm, or design patterns, all the way to APP

The only JavaScript apps I write in JavaScript are really small ones. For anything medium to big, I compile a language I like into JavaScript.

meow: It almost sounds as if you’re referring to React.

If the Elm people are any indication, the HtDP approach does scale to whole applications.

Or just how unidirectional architecture has taken over the web

Since the “Elm architecture” is exactly the same as HtDP universe programs.

Wow, I didn’t know that! Very interesting, indeed. Perhaps it attributes to some of their success.

though I would also say that later on, some of the major languages of the industry are “small”

so learning a wrong language or two isn’t really bad

Javascript might be accounted for by 80–120 constructs, not including all the API’s

All I know, is it’s difficult to talk about Elm around Haskell and PureScript people. But I think their approach is why they’re so successful. They’ve told me: Elm is a library, and not a language…

That makes it better, surely

That’s silly. It’s a language bundled with a highly opinionated framework.

I personally don’t use Elm because I think it is limiting, but some people achieve great success with it, and simplicity has its advantages. But this is largely besides the point—JavaScript and Elm are engineering tools, not educational ones. If you understand how to design good programs, you should be able to work productively in either, but neither are particularly fit for the purpose of learning to program (though Elm is probably much closer than JavaScript).

If you look at the language by itself, you might judge it unfit

But I would look at the immense learning ecosystem

That has distilled the higher quality educators and materials to the top over time

including video materials

I think I just fundamentally disagree, and I assure you I am well immersed within the JavaScript ecosystem.

I think many of those learning materials are subpar and quite unhelpful to teaching good program design.

Many of them are useful for teaching someone how to solve a very specific engineering problem, like “build a CRUD app” or “build an interactive user interface”. But good design is still the starting point.

@lexi.lambda I guess it’s time for me to take a look at Elm, thanks.

But you don’t think even the skeleton of a unidirectional, reactive CRUD app is mind-bending?

I’ve seen a lot of people have handfuls of patterns but can’t seem to think of an entire app

I’m not saying it’s unhelpful. I’m saying it’s a bad place to start.

The JS world doesn’t aim to teach you computing, it aims to teach you a sensible app architecture

Like most of their materials are aimed towards making an app

I feel like the Racket world has two major texts

I don’t think HtDP claims to be a curriculum you can go through and end up capable of building anything without further learning. If anything, one of its purposes is providing a framework for learning more.

How to design programs, and SICP

I don’t think SICP is part of the Racket world; it comes from Scheme. And I don’t even think HtDP is really about Racket, either.

For online help, there’s Stack Overflow, the docs, and Slack!

The SO is quite sparse

I agree that Racket is rather lacking in the department of resources on engineering applications in Racket. But that’s not the point of HtDP—it isn’t training you to be a Racket programmer. It’s training you to be a programmer. You are expected to move onto another language after HtDP, and there’s a good chance it won’t be Racket.

The racket world has ~0.5 texts

For me, I always wanted a resource on how to program/design instead of how to make this thing right now, and I think that’s what’s being said, as HtDP teaches principles for a better foundation. In my experience, frontend is very fragmented, and hardly anyone agrees on the same approach.

unless you count the online docs

oh, well, now it has BR

so 1.5

@samth is RoR the half-a-text?

yes

and since you knew that you probably also understand why I say that

I do, I think

That wouldn’t happen to have been Chris would it?

(there’s two authors and one of them is a significantly more… empathetic person than the other)

I’m at a loss, but I haven’t read RoR yet

@samth by the way, the docker setup runs significantly more of the release checklist than I thought it did :) sweet

@notjack woo!

also I think the unix-style builds would be a good next thing to add

I think it’s over half the checklist items

yup

since they’re a simple argument change to the installer script

there’s a little more to it because it will change what paths the binaries end up at, which changes what directories the test setup has to chown

but yeah, it shouldn’t be complex

as to RoR, it’s 50% how to use Racket, 50% programming education

I’d like to maybe learn Rust later on, but is it weird I don’t like nested
{
}

why does the test setup have to chown the binaries?

@samth because some of the tests write and create stuff in the racket package dirs so the racket
user has to own the package installation dirs. And that has to happen after packages are installed and built, because there’s no way to chown a dir and all future subdirectories without using ACLs and lord I do not have the time to figure out how that nonsense works

really the tests just shouldn’t be doing that, but alas

they really shouldn’t be creating things in directories they don’t own

ie, you should be able to run the tests even if racket is installed globally

No, I’m mean I prefer parenthesis to curly braces. But many will repeatedly tell me syntax doesn’t matter which, I’m sure, has some truth to it.

Have you peeked at the aesthetics of Python or Ruby?

Seeing how people in several languages solve the same problem can be interesting, such as with Project Euler

@samth more strongly, I don’t think any test should ever be creating or writing to a file or dir that wasn’t explicitly given to it by the test framework for testing purposes - something as simple as reading a TEST_TMPDIR
env var would work for that

@notjack I might agree with that, but I don’t think we could consider all current instances of that bugs

agreed, and I certainly don’t think unix installation or the 6.11 milestone in general should be blocked on it

but I think that “install unix-style racket as sudo, run tests as regular user” should work currently

sudo
is recommended against in containerized setups in general because it does some weird things that are far more suited for interactive shell usage than for scripted builds

sure

I just mean that your description sounds like that would also fail

ah

yes, “install unix-style racket as sudo, run tests as regular user” would fail in a dockerized unix install unless the regular user was granted permission to read and write some of the racket installation dirs

would it fail in a non-dockerized install?

unsure

I think it would if the user installing racket did so while running as root and then ran the tests as a normal user

but docker can introduce a lot of permissions weirdness that makes it hard to guess what will happen by default

well, if you can test without the chown and then see what happens that would be instructive

Yeah, I started on this journey with functional programming. Many I encountered harshly criticized those languages a lot. I think it not only made me think, but probably arose even more questions. Ruby isn’t quite as popular anymore; other tell me learning it had them un-learning a lot of things. I tried to decipher all of the opinions, but I think the better way is to see what works for me.

if you remove the racket dir chowns from the current docker setup, the release tests fail to create a couple specific dirs that get written to as part of the tests/racket/file.rktl
tests

are those in /tmp
?

ah, the file.rktl
failures were for dirs in /tmp
but there were some other failures I don’t remember in the tests/racket/test
command, and those ones were for creating directories in either the package or collection dirs, I forget which

I can file an issue to investigate which tests are making what directories, then we could file bugs with those tests to make that more configurable somehow

that would probably be good

I’ve been meaning to write a doc of what a racket test “should” do for proper cooperation with test runners and different environments

maybe doing that and getting some agreement from racket folks would be best before filing bugs on racket repos

yes

but investigating first for the file tests would be good too

No I don’t mean to suggest those languages

And choosing a language on brackets would be bizzare

I meant to peek at them only, to look at their aesthetics

I have briefly. Maybe for design aesthetics?

Other languages borrow those aesthetics too,

For example

Matlab and Crystal look Ruby-like

Python is quite unique in its look

It’s spartan

@samth this is a neat project, I’m glad to help with it :)

well it wouldn’t be nearly as good without someone like you who knew what they’re doing

The main argument I’ve heard against Python was maintainability in larger codebases. Others say, no problem. A lot of it, I think, comes from who writes the code.

But you said you’re after learning, right?

You’re okay learning a 2nd language after, right?

this is in my wheelhouse I suppose

But I don’t mean to suggest Python anyway

and Ruby is on its way down

though Python is shooting up massively

I was only mentioning it as visual contrast to the problem of brackets hehe

Python goes one way

Ruby goes another way

both quite weird

Sure, tell me what language you have in mind :).

For learning you mean?

I really do recommend JS

hehe

I don’t think you’ll be poisoned by learning JS

like after, you try go back to Clojure or Racket or w/e

It’s not like a classical musician tryign to learn Jazz, but finds his soul poisoned by bach

that being said

I am learning Racket

and intend to fully learn it

So if you’re joining this journey with me

perhaps we can learn from each other

Haha! Well, it’s funny you say that, because I’ve returned to JS a lot. But I’m also interested in Functional JS if you have any suggestions there. I’ve looked into Ramda and Reason ML by Facebook (based on Ocaml).

I think it’s quite healthy to learn 4–5 languages

It’s also not an arrogant suggestion to learn 4–5 languages

Because after awhile, you get a knack for them

And few languages are truly unique, like Haskell

My suggestion is that instead of thinking about FP

you think about architecture

Do you recoil at the idea of OO?

Part of the reason I suggest JS is because many programmers never get to do everything

but in JS, you do

It’s possible to explore full stack

and when you do

you realize that it’s more important to think about major pieces of architecture communicating with each other

and how they behave

for example

Right, I like that idea. And yes, a study partner is a motivating factor. I’m driving at the moment, but I should have more to say when I get home.

@notjack well that led to a fun bug :slightly_smiling_face:


I notice it’s only the gc events tagged “MST”

yeah

I added that to the issue

those are related to places

From Jan 2011 “racket http server, major GC: –216 bytes collected” https://lists.racket-lang.org/users/archive/2011-January/043760.html

gasp, a zombie bug

The answer is in that thread: > On Tue, Jan 11, 2011 at 5:28 AM, Noel Welsh <noelwelsh at gmail.com> wrote:
> On Mon, Jan 10, 2011 at 9:53 PM, Greg Hendershott
> <greghendershott at gmail.com> wrote:
>>
>> What does it mean for the GC to collect a negative number of bytes?
>
> I'm ducking this one...
Clearly it means that the garbage collector thought it could throw
something out, put it in the trash, and then realized later that it
really needed it, so it reached in, pulled it back out, and then tried
to flatten it out and wipe off the bits of food which went in on top
of it.
Hasn't this ever happened to you? :-)
Todd

I doubt that’s the same thing

Does rackunit have a mode to print all the names of the tests it runs?

verbose
doesn’t seem to do that

@slack1 those are all very good points. I think you nailed it about studying architecture instead, since by exploring multiple languages, I’m sure you can get a better grasp at that. I’m sort of hoping to go through HtDP. Did you already make it through that one? I’m also enrolled in Frontend Masters and have access to some of Kyle Simspon’s workshops about his book series.
Another one I meant to explore is https://watchandcode.com/p/practical-javascript
but I’ve not made it there yet. Let me know what you think.

Well, yeah. There were times I felt like letting him know how I felt about his teaching style—how it didn’t seem to make things better, but I always held back. I know he means well in teaching people, but I’m not sure he has the patience, and probably also has a day job.

I really enjoyed Julie Moronuki’s podcast about Haskell below. I found it inspiring and she explained it from a beginner’s standpoint, but still, I think learning Haskell is tough.

I’m not sure the authors are doing work together anymore.

@notjack found it

@samth yeah copying a giant string will do it :p

The authors are very much not working together anymore. Julie super cool tho

I agree, she is. I came away from the podcast with a lot to think about.

and that does sound like a good rackunit feature, maybe something triggered by an env var or something

@notjack there’s a verbose
argument to run-tests
but it doesn’t do much

yup

maybe it could be made to be not useless

I’d want the test suite implementation made less incomprehensible first

but yes

more broadly, more docs describing what the responsibilities of a test runner tool like raco test
are vs a test framework like rackunit
or chk
would be great

Mozilla docs are also top notch and in clear English most of the times

But imo, you should do one approach at a time

So if you’re doing racket, then do racket

As you’re going along HTDP and making stuff

Or if you have a mini project you wish to work on

I’d be interested in working on it with you

esp if you ever wish to do Racket + web stuff

That’s what I’m working toward

I went to Racket because I thought it was the most beginner-friendly Lisp language

Ahh, yes. I found Racket from the FP community and immediately latched onto the documentation and one called beautiful Racket. Racket + the web is definitely something I’m interested in. I have a decent amount of experience in creating websites, CSS, HTML, minor server configuration, but only enough of JS to get by when needed… I also own the book Realm of Racket, so this is surely something we can study together. I’ll probably work through HtDP and try to make my way through the Racket book I own, and go through HtDP as fast as I can. Have a decent amount of concepts down to get started.

One thing that confuses me about Racket. Is DrRacket the only real way to work on projects?

No, but it’s pretty convenient

Unfortunately support on all the other popular IDE’s requires a larger community

I’ve found Racket support on Visual Studio Code, Atom, etc. to be lacking

That’s what I thought.

As many who don’t particularly like Clojure, they seem to have some great tools for editors…

They do indeed, because Java has some of the best tooling in the entire industry

The most advanced programmer assistance tools

I’m not touching Java though!

At least I don’t wish to ~_~

It is quite verbose

Me either lol.

And doesn’t give you the full payoff for all that verbosity

But Java is able to help the programmer catch mistakes that other language communities don’t understand

Yeah, I’ve heard someone compare its type system (in the context of Haskell) to the toy-maker Fisher-Price.

like I see some people being fancy using Vim to edit Python

No, that’s rude

Agreed. I have a nice CS book based on Java.

Java is stronger than Go

But I would also say too much focus on FP or OO isn’t that good

I hear a lot of people talk about it

And then, especially in real life

when I ask them about it, I might say something like

“Oh, so you like Haskell too!”

Yeah, it is a bit rude. But most FP people don’t think highly of Go either. I need to stay away from those groups, I think they’re making my head hurt lol.

“I’m trying to learn FP”

“How does FP help you with app design?”

And they cannot answer

or

“So you do OO, doesn’t that mean state is sometimes distributed?”

They have the mentality that it eliminates bugs mostly, and makes their lives easier…

“What strategy do you use to prevent problems?”

Yes, but those are very small level concerns

I think an interesting level of thinking is

How do I delegate work to person A, B, C, D, E, F

And while they have varying code level quality

I know that if they keep their “code contracts”

The entire system will run

How does a person know such things?

architecture

Another thing I would note about FP is

Let’s say you find out that you are joining an FP team, great

And you code you module in the FP style, very good

it connects with the team’s app and works well

all nice

and then one day you look over at your coworker’s module code

and you realize some of the code is imperative!

how dare they!

but from the outside, it looks 100% functional

it’s 100% deterministic

so… is it bad?

One day you look underneath the Scala code

and you realize, it’s 99.9% imperative

is it bad?

Have you looked into Rust?

oh

yes

Rust interests me

But I’m waiting for it to catch a harder bit of success first

As it’s a high commitment, and it’s very verbose, and it doesn’t agree with my aesthetics, but it has the characteristics I want

Macros, FP, concurrency, memory safety

Yeah, my attempts were very slow and probably not too beneficial.

That was exactly my thought.

so I would say don’t be too biased towards FP or OO

and that the lore in both worlds goes very deep

What would you say interests you the most in a language?

hm

it depends

You mean for general use?

I care if the language is (1) mildly popular, so that it won’t suddenly die on me and I can get some help, (2) has first-class consideration for concurrency and parallelism, (3) has support for FP and OO concepts, (4) has nice off-the-shelf data structures and standard library

As a side factor, I want a language to help me on my learning goals

Hmm, that sort of sounds like Elixir, Go, or maybe even Rust.

Yup!

but not Go

I have some experience with Go, and I don’t like it

It has barely any support for FP

Yeah, I have the same preferences.

Oh, right.

Rob Pike thinks that FP is a bad paradigm

He calls it “not machine simple”

or not close to how the machine operates

So he is resistant to even simple constructs like map

How would you assess your current Racket knowledge?

That’s interesting.

Limited but I know it’s dynamic.

You know how to make functions, use them etc?

Sometimes I left myself wondering if learning FP would have me lacking in other areas.. maybe not able to appreciate other paradigms.

The most essential aspect of computation is studied in algorithms IMO

Yeah, I’m aware of how to create functions, but not so much how to implement them in a working program.

Which is unfortunate and painful

That’s interesting.

Ha.

algorithms is the abstract study of problems

those problems tend to be well-stated CS / math problems involving information storage, retrieval, and computation

the language of algorithms is often in an informal, English-like code

which shows you how free-form and abstract it is

the most limitless programming Language is your lazy English speech!

Communicating to yourself the way you think is most obvious!

The Eve language looks interesting, but I’m not sure I’m a fan yet of having a program (Photoshop-ish) doing everything… http://witheve.com/

So doing things in a FP or OO way, or a procedural way, or wahtever doesn’t really matter

Right, I was thinking about the English language when learning Haskell..

If you wish to do interesting problems in computation, you cannot avoid the study of algorithms

One of the alluring ways that FP people think about data and programs

is your program is a function, and you throw inputs, and the output is the desired program result

So, maybe you’d be interested in machine learning and neural networks as well. I’ve thought about that a lot, but wondered if I should contribute to the end of mankind lol. (joke)

I’m interested in AI

but that’s a very distal interest

I’m interested in mathematical models of causal learning

Yeah, honestly, I got to some of the meat languages, I think, through wanting to know more about how computers work, and that probably lead to CS. But I’ve not yet begun to delve too much into that either, as there’s varying opinions on how to go about it. But I’ll probably stick with the Racket community and go from there. I think it probably has a lot to teach in that realm.

Have you heard of Project Euler?


That’s interesting. Yeah, I’ve enrolled into a few math courses. I’ll have to look more into it.

Does that first problem sound hard in Racket

Ignoring all mathematical insights that may help make this problem easier

I think the only way for me to memorize or appreciate that stuff is to make something with it.

Speaking of which…



I tried learning discrete mathematics but that was way over my head.

I would guess, no, it’s not hard in Racket? Only a guess, but I’d imagine Racket can do that easily.

Thanks for sharing the link. I’m going to bookmark it and try to do some problems in my spare time. I’d spent a little time at Kahn Academy today.

I can’t believe there are 604 problems, that’s amazing.

Ah I think of it as a good benchmark for programming ability, that first problem

It basically asks you do deal with conditionals and looping

What do you think of Mathematica?

It’s probably not the right language for you

It’s a lab language for universities that are uncomfortable with open source

so they’d rather have the proprietary support

do you have a free license or something?

Ahhh. Got it. Good answer.

No.

What kind of programming destination are you after

See, I already have a web background, so I don’t want to abandon that.

Why art thou avoiding JS…

That makes 0 sense…

JS is such a small programming language

It really is

I meant it when I said 80–120 constructs

which is about the same as Go or C

I’m not really. But perhaps I was a bit influenced by how people feel about JS. I can sort of see things in the bigger picture now, but yeah.

It’s so small it’s painful

like

small is easy to learn

hard to master

The reason is because so many tools you wish someone had built for you weren’t built

JS has no standard library, unlike Racket, which has a huge library

so does Python

Oh and, because I was looking into FP compile-to languages like PureScript and Elm, but even those require some knowledge of JS.

aghh those are all crazy stuffs TBH

like, job-wise

they have almost 0 chance of winning

like almost 0 popularity

JS is a really fine language

it’s minimal

If you’ve been learning HTML CSS

but not learning JS

it’s kind of crazy

because JS boosts your HTML CSS powers like 10x

Yeah, I realized that when I started looking more into that, but I think it’s improving, only very slowly.

What are some things that an aspiring learner might feel bad about learning JS with?

Well, JS has extremely limited parallelism

It has weak representation of underlying memory

Callbacks?

callbacks are fine

People who complain about callbacks are those who dont’ know how to work with streams

plus, JS has some really modern async constructs from the C# land

which has since been adopted by Python

Callbacks are a local code issue

I don’t actually know why, but I have a pretty big interest in JS—or did at one point—but I’m going back in that direction.

I would totally recommend it

You can do a very fast lightning review of JS pretty easily

Have you heard of a static builder called GatsbyJS? It’s based on React and GraphQL. I was highly interested in that at one point; you know what, I think it was tooling that had me back out when I should’ve first learned VanillaJS.

You should learn React before you touch Gatsby or GraphQL

GraphQL has nothing to do with React, but it works great with React

I totally believe in the mission of Gatsby


Yeah, GraphQL boggled my mind when I tried to understand it.

This is a static website I’ve been toying with

It’s part of why I believe in static websites with React

I think one of the most interrupting moments of web experience is in making a new web request

there are physical constraints that make it so your website can never reach someone that fast

the only way to break past this is smart http requests

with JS

so most of the links don’t work

but for the top bar

you’ll notice that the site loads instantly

Is that a Gatsby site?

like click settings, or add boomark

it’s a React static site, so it could easily be deployed on Gatsby

it has the same philosophy and faith in React’s place for a niche of websites

Oh, and then there’s Webpack sorcery. That is tough.

Yes, webpack is hard

But it won’t limit your learning

The lack of decent parallelism and memory represntation will

The lack of types means you’re not being experienced with a nice typed language

Obviously if you landed a job with a language like Rust right away

You’d be getting a way different learning experience

one which doesn’t neglect concurrency or parallelism at all

But React is very much a functional way of organizing apps

Which is why I would recommend learning React + Redux together, even though everyone might say that is a little heavy

but tons of beginners have walked this pathway

Decisions lol. Yeah, I’ll probably follow through with HtDP and Racket. Later, I’m sure I’ll finish what I can learn about JS. Someone told me they learned FP first and JS later. That was probably the strangest paths I’ve heard thus far, but maybe even in the direction I was going.

I would ask how much FP they know, though

I love FP, I keep on trying to advance my knowledge

whenever I meet techy people

especially IRL

I ask their impressions of FP

everyone who has loved FP has disappointed me

for one thing

the land of FP data structures and algorithms is high lore

This person was an advanced Haskeller. You’d be surprised how many Haskell programmers don’t know a thing about JS.

I wouldn’t be surprised if advanced haskeller doesn’t work with advanced functional data structures

it really is a land of deep lore

like the academic literary output in that realm is scant

you would think that academia loves FP

it does not

Yeah, everyone disappoints me. Hah! So many perspectives, but I can appreciate them all and learn.

academia loves imperative algorithms

99.99% of algorithms studies are non-functional data structures

when you read literature on FP data structures

sometimes authors leave sad statements

about how much some other author’s work helped them

but then you think

“omg, I know that work, that work is over 10 years old”

“This field moves at 1 MPH”

That’s why I admire Alexis. She knows Haskell, Racket, built Hackett, and I think, does frontend work with JS and such.

But you’re right, the JS community has too much to offer to pass up. I’d better do some work today. Thanks for the discussion.

If you want help with JS, I can offer some

including how to transport your FP knowledge over to JS

But aside from the most simple DRY stuff

I haven’t seen interesting FP

I tend to practice functional JS just for the aesthetics

That’d be great. I think Frontend Masters has a FP JS course, and there’s another one of GitHub if I recall. But I’ll definitely have to get more of your thoughts on certain things when I get stuck! Ha.

I also find it odd that FP people would talk about type correctness

But one of the most interesting kinds of correctness in a program is, “will it get stuck”

“will it freeze”

but they don’t talk about that!

That is the study of waiting and progress

Someone told me the FP community is very tribal, and in that, I would partly agree…

I notice you’re walking up some math pathway

I think if you cut off everyone’s ideas and efforts, you may be missing out on a lot.

perhaps out of some math anxiety

discrete math is a great programmer’s catch-all course

but when you go into the Haskell channel

you no doubt notice a bias for abstract algebra and category theory

including with alexis

and the people here

Oh yeah, I think it makes some people angry.

Ok, so I’ve walked up to abstract algebra so far, dipping my toes into category theory, and so far all I see are great applications in MATH

And a confident to read technical papers NOT in abstract algebra

*confidence

The theory part is the most telling. Haha. How can math be theory? But I suppose calculus is somewhat that.

If they knew everything, we wouldn’t still be on this forsaken planet. Lol.

but I would be wary about thinking that you have to revisit calculus

and walk all the way through math again

Discrete Math is a great programmer’s catch-all of need-to-know math

but yeah see ya

Yeah, that’s what most people have told me. I don’t know why I feel like I’m missing out on that, but perhaps later would be more logical and helpful.

Later!

@stamourv or @leif , can you help me run the contract profiler on a plot3d module? https://github.com/racket/gui/issues/86

@ben I wonder if the issue is threads, somehow

Clicking & dragging is slow. I want to see what contracts are causing the slowdown (I know the slowdown is because of an (Instance Snip%)
type)

:disappointed: I don’t know where to start looking for thread problems

okay threads is probably the issue with profiling. Running raco profile ....
prints a summary just after the GUI renders. So it’s not profiling anything about clicks & drags

I think the profiling library has something for threads

after looking at the docs I tried (profile-thunk (lambda () (send f show #t)) #:threads #true)
, but this doesn’t seem to profile the GUI thread either

Came across this after you mentioned Rob Pike http://users.ece.utexas.edu/~adnan/pike.html

A data structure is an algorithm problem well defined ; }

Are there plans to make DrRacket more aesthetically pleasing? I’m sure it’s not a priority, but I think it will help Racket’s cause. The logo could probably use an update as well.

On a side note, I suppose the default Emacs theme is completely outdated. Perhaps this isn’t important much at all.

@dustin there is a way to change drracket’s color scheme with custom plugins

but yes I find drracket a little clunky at times

I don’t think there’s any specific plans to work on that though

too much other stuff to do

Yeah, I didn’t realize until today (for some reason) that DrRacket was a complete IDE.

it does a lot

99% of which I have no idea how to use

so, guess that means it really is an IDE


¯_(ツ)_/¯

I don’t think there’s any formal recommendations for next books beyond what’s in htdp itself

I came across PLAI before, but came across it again through Andrew Brinker in his course: http://www.proglangs.com\|www.proglangs.com. Seems to cover a lot of stuff.

I not sure how many updates it’s received since 2007–2012 but apparently it’s still being used.