145 karma · joined December 17, 2019
People outside the context of this discussion could simply be uninformed, they don’t need to be willfully misunderstanding.
You’re missing the point entirely, perhaps intentionally? If you’re using modules you’re already using a “build step” - code that runs before your actual code. Your “perfectly working paradigm” is only such if you intentionally disregard the core reason for modules: modularity.
You get an approximation of conditionally loading a module by simply converting everything to ESM and enabling tree-shaking. When module loading has no side effects this is simple to do. If you’re unsure at build time whether you will call a certain function from a certain module and that’s the reason you’re conditionally loading it, again enable ESM and tree shaking and import the function and call it conditionally except do so at runtime. You’ll only get exactly what you need to avoid the bloat of the whole module and your dependency graph will also be more correct as a bonus!
Syntax is absolutely neither natural nor unnatural, by nature, to humans, but it’s a fact that fewer symbols to memorize is easier than more symbols to memorize. The problem is a failure to launch. Some people never truly understand that it’s not just syntax, it’s semantics. Data is code, code is data. That’s why it all looks the same. This artificial distinction in “C-like languages” is more harmful for the enlightened programmer than it is helpful. Unfortunately not everyone that reads SICP experiences enlightenment the first time (or ever, I guess?)
All that to say, I completely emphatically agree with the original comment. The world would have been so much better off with Scheme as the language of the web.
Technical competence requires a certain amount of self-discipline and sacrifice. You don’t become competent just by doing the same things over and over, so experience alone is not competence. With self-discipline comes a healthy habit of self-motivation. You don’t need your employer “making you” feel valued, you derive a sense of accomplishment from doing good work. You know you’re valued because you’re literally valued (in dollars).
Do not put anything on the public-facing internet that you don’t intend for people to use freely. You’re literally providing a free download. That’s the nature of the web and it always has been.
1. You don’t have breakpoints, your code doesn’t run. Your code is the thing that configures the code that runs. Your code is descriptive.
2. Nothing unexpected can happen. That’s the point of pure functions and a strong type system. You don’t need to know the exact values that flow through at runtime to know that your code functions as written.
Granted, if you write code that doesn’t make sense then it will produce* results that don’t make sense. If you don’t fully understand the problem you’re trying to solve no programming paradigm can save you from creating bugs.
That being said, I don’t think it’s possible to “pull off soundness without compromising expressivity” because the expressivity in this context is self-referential types which equate to non-terminating unification logic (and thus, unsoundness). Still, I’m excited to see what they do with this type system! Reminds me a bit of Shen’s type system.
> All are good practices…
I beg to differ on this point actually. It’s very difficult to get right and leads to subtle bugs (or even potential security vulnerabilities). It also pollutes the codebase with conditional statements that aren’t related to the business logic and makes it harder to read. Avoid feature flags.
Consider the alternative perspective that each new feature actually makes it a new piece of software. You were able to fully design and specify the original piece up front, thus avoiding technical debt on that piece of software.
Edit: most people don’t even think about recursion as a possibility until taught about it in a formal setting, and even then it’s typically a struggle to understand. Even using a queue, that’s a data structure that a person with a task to do isn’t likely to spend the time to invent on the spot.
Learning how to use the tools of the trade, e.g. OS, IDE, version control, etc, is not something you need to spend $50k/yr to have a Ph. D. Teach you, it’s something you pick up on your own.
A lot of younger adults these days seem to think that college entitles you to a well-paying job, possibly due to the messaging from previous generation(s), but that is not (and never has been) the case.