3 ms·
“Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.” Antoine de Saint-Exupéry Unfortunately, we still
by Ringz 2y ago
“Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.”
Antoine de Saint-Exupéry
Unfortunately, we still live in an era where humans have to adapt to technology rather than the other way around. From my perspective, this is particularly true for programming.
For me, Python is a good (though not ideal) mix of simple syntax and power. The language is characterized by low redundancy, meaning it uses fewer unnecessary characters like semicolons or curly braces to mark the end of a line. If a human can recognize the end of a line without special characters, then the compiler should be able to as well.
As someone with ADHD, I find it particularly difficult not to get distracted by these and other superfluous details. These small distractions add up and can become very burdensome. Interestingly, I found it easier to program in Assembler and Modula than in languages like C++ (MSVC), PHP, or JavaScript – at least as long as the projects were small.
Even a brief look at Rust’s syntax causes me almost physical discomfort, no matter how great, powerful, and useful the language may be.
For this reason, I almost exclusively use the terminal for emails, calendar, and programming, even though complex GUIs can simplify some tasks.
Although Python is not perfect in terms of syntax, it offers a good balance. Perhaps one day, before the perfect programming language exists, we will be able to use AI and ML to explain to the computer what a program should do with simple language (better than ChatGPT right now), just like Captain Picard. In fantasy, a few letters, punctuation marks, and some grammar is all that is needed. This may lead to inaccuracies in human-to-human communication, but that does not mean the same problems must occur in communication with an intelligent compiler.
Making syntax as “human-readable” as possible should always be the highest priority. We could unlock so much potential this way.
- masklinn 2y ago> For me, Python is a good (though not ideal) mix of simple syntax and power. The language is characterized by low redundancy, meaning it uses fewer unnecessary characters like semicolons or curly braces to mark the end of a line. If a human can recognize the end of a line without special characters, then the compiler should be able to as well. […] Even a brief look at Rust’s syntax That’s a shame because you’re missing that these sigils actually have meaning there, because the semantics of the language are completely different: Python is statements-based with very limited scoping (global and function), Rust is expression based with block scoping. As a result, blocks (paired braces) are a way to pack multiple statements into an expression e.g. let v = { let a = thing1(); let b = thing2(); thing3(a, b) }; And `;` is not an alias for end-of-line, it’s a separator for statements. And not aliasing end-of-line to end-of-statement is relevant to rust being expression oriented, it’s very common for expressions to span multiple lines, in that case Python requires either wrapping the entire thing in parenthesis or escaping the EOL with `\`. Could you find other ways to do this? Sure, but then you have to make other tradeoffs e.g. wrap everything in matching symbols à la lisp, or make statements into special cases à la Haskell.
- mavhc 2y agoWrapping 99% of things in {} seems worse than wrapping 1% of things in ()
- wqtrez 2y agoThat looks very clean, though the deviation from OCaml takes a minute to get used to.
- Ringz 2y ago> And `;` is not an alias for end-of-line, it’s a separator for statements. And in Python \n is not an alias for end-of-line, it’s a separator for statements.
- xigoi 2y ago> the semantics of the language are completely different: Python is statements-based with very limited scoping (global and function), Rust is expression based with block scoping. This is a red herring. Haskell, CoffeeScript, Nim, Lean, etc. are expression-oriented and use indentation like Python, while C(++), Java, JavaScript, etc. are statement-oriented and use braces.
- madeofpalk 2y ago> Unfortunately, we still live in an era where humans have to adapt to technology rather than the other way around. From my perspective, this is particularly true for programming. I think it's interesting that you say this, and point it towards Python. Personally, with Python's significant whitespace, I feel more constrained writing code in a style that I prefer, with the computer requiring me to adapt to it, compared to other languages. I see code with braces and semi-colons more freeing because I get more control over the line structure. At the end of the day, it's all stylistic personal preference. Python isn't the evolutionary ideal form for programming languages, it's just what some people prefer.
- __jonas 2y ago> Making syntax as “human-readable” as possible should always be the highest priority. We could unlock so much potential this way. I think there is a balance to strike here. I often like to work with code by cutting and pasting sections around and then hitting the format hotkey to align everything. I enjoy the guarantee that as long as the syntax is correct, it doesn't matter how I type out the code because I'll just hit the formatter hotkey immediately afterwards and it will apply the correct indentation and lay it all out nicely Obviously that's impossible in Python and it makes working with it really frustrating to me, it feels so delicate, I almost don't want to touch the code because I'm always accidentally changing the indentation, it's a real limit of this "human-readable" syntax in my opinion.
- Ringz 2y agoThat’s definitely possible in Python. Maybe not if you’re using the simplest text editor. But regardless of whether it’s NVIM or Visual Studio Code, you can easily jump to the end of a line, press Return, and the code will be inserted with the correct indentation. RUFF or BLACK do the rest, and they do it quite intelligently.
- __jonas 2y agoOh interesting, I didn't know! How reliable is it? Does it work well even if you partly copy functions / with blocks etc. ? I just tried it in vscode, it didn't work at all, copy pasted a single line to another function and it kept its indentation and vscode showed a pylance error about unexpected indentation. I just have the official Python extension by Microsoft, perhaps some more configuration is required? I don't really write any Python, I'm sure there is a way to improve the experience.
- xigoi 2y ago> Obviously that's impossible in Python and it makes working with it really frustrating to me, it feels so delicate, I almost don't want to touch the code because I'm always accidentally changing the indentation Skill issue. I just press my “paste with correct indentation” hotkey and move on.
- wqtrez 2y agoThe Saint-Exupéry quote applies to Lisp, may in some manner apply to Python 2.7, but certainly not to Python 3.12. Many people here argue that braces do provide some structure that helps in understanding and navigating the program. Python files over 100 lines with a lot of if-statements become syntactically unreadable. So taking them away does not help. Generally, minimalism (except for the Lisp-style one) is not always good. Python is called executable pseudo-code. Do academics use it to specify algorithms? No, most still use some form of Pascal/Algol style syntax, which conveys the meaning much better.
- Ringz 2y ago> The Saint-Exupéry quote applies to Lisp, may in some manner apply to Python 2.7, but certainly not to Python 3.12. Is the syntax not about 80% the same? And isn't most of that "same simple syntax" commonly used daily? > Many people here argue that braces do provide some structure that helps in understanding and navigating the program. Python files over 100 lines with a lot of if-statements become syntactically unreadable. That's probably True. But poor programming discipline and syntax that eases reading problematic code also contribute to this issue. > So taking them away does not help. For me it actually promotes better coding style and hygiene. > Generally, minimalism (except for the Lisp-style one) is not always good. The quote was about perfectionism, not minimalism.
- kazinator 2y agoThere is already nothing left to take away before you've made anything, so just don't start the project and you have perfection.