the feeling of the racket community is that you build a DSL or DSLs in your code all the time, in any language, so why not take it seriously and codify your DSLs?
With macros this goes out of the window. You have to read all the custom macros before you can understand what is their behavior.
With haskell the same issue exists with complex monad stacks and control libraries like lens.
The ability to analyse a tiny piece of a big system is a major factor in building those in a manageable way.
Of course, for really complex macros the expanded code might be hard to read, but I guess that means "write nice macros".
I disagree with you on this one but I could be in the minority. I have about 8 apps that I trust and that rarely change. I don't go looking for new apps to install and I resist attempts to use the app version of a website.
> Lisp shepherds you into building your own language
I see the propensity of developers to build DSLs in all languages. I think the act of programming shepards us into creating elaborate abstractions.
If you weren't being shepherded into installing apps, why are you resisting?
I could install apps on my old Nokia dumb phone, but I never resisted installing apps. It never really seemed like it was worth the trouble to install one.
I actually looked into it once, despite the system shepherding me away from installing apps.
But then you will have to deal with the non-negligible amount of programs that use the exit value to return information. It is still better to place exceptions on failing code than to ignore errors that can wipe out your entire system, but it's not really good either way.
And yes I do know InteliJ, as I have to put up with it on Android Studio.
Have a look at the Language Server Protocol implementations for java (eclipse jdtls and to a lesser extent boot-ls). Not all the features from IDEA are there, but the gap is closing.
I'd argue LCs have more limits than loops, and hence are easier to read (because you can make more assumptions about what it does). That said, I find nested comprehensions harder to read.
Not sure how familiar you are with modern Windows, but you can try powershell. You can manage everything in Windows with it, and it’s a very cool shell language with a lot of feature.
(It’s also open source and multi platform)
You can start at https://docs.microsoft.com/en-us/powershell/scripting/learn/....
A quite nice feature is the command Get-Help:
Get-Help <a command> -Online
That will direct you to the documentation page specific to a command. That way you can discover the environment little by little by experimenting.
Also, the auto completion for all commands and their arguments is helpful to learn what is possible.
Also, if you want to keep your bash habits, be sure to install powershell 7, and enable the emacs edit mode (which is similar to bash defaults, with C-a, C-e, etc):
Set-PSReadlineOption -EditMode Emacs
https://docs.microsoft.com/en-us/powershell/module/psreadlin...
- Python shepherds you into using list comprehensions, even when it's almost always premature optimization and much harder to read than a loop. As a language smell that's not bad, it's just the worst I could think of in a post-v2 world. Luckily there's `black`, `flake8`, `isort` and `mypy`.
- Bash shepherds you into using `ls` and backticks, useless `cat`s, treating all text as ASCII, and premature portability in the form of "POSIX-ish". Luckily `shellcheck` takes care of several common issues.
- Lisp shepherds you into building your own language.
There's also tool shepherding:
- IDEA shepherds you into refactoring all the time, since it's the only IDE which does this anywhere near reliably enough. (At least in Java. In other languages renaming something with a common name is almost guaranteed to also rename unrelated stuff.)
- Firefox shepherds you into using privacy extensions.
- Chrome shepherds you into using Google extensions.
- Android shepherds you into installing shedloads of apps you hardly ever use.
- *nixes other than Mac OS shepherd you into using the shell and distrusting software by default.
- Windows and Mac OS shepherd you into using GUIs for everything and trusting software by default.