5 ms·
This is my really high level and poorly explained thoughts on this. I have enormous trouble reading functional programming languages. Python gets away signific
by kayodelycaon 4y ago
This is my really high level and poorly explained thoughts on this. I have enormous trouble reading functional programming languages.
Python gets away significant whitespace by reading like pseudo code and is fairly clean. It uses words rather than symbols.
C syntax provides visual structure using brackets.
It seems to keep things readable, you get the option of using symbols or significant whitespace for scope.
Functional languages have a tendency to do both. Lisp’s syntax is defined by replacing syntax with parentheses.
You basically get into a situation where you need to be able to read and comprehend math-like lines of code. Which doesn’t seem to mesh well with the structure of nature language.
It’s kind of like abstraction in programming. Some people kind of get it. Some people really get it. And other people need to consider a different career.
I think there are just too good programmers who don’t work well with functional programming to say it’s a problem with lack of familiarity. I think it could be a fundamental lack of talent.
- bmitc 4y agoHave you tried F# or OCaml? I would argue that programming in Python is much harder than it is in F#. It is for me.
- kayodelycaon 4y agoF# was one of the languages I was thinking about with I wrote my comment. :)
- bmitc 4y agoVery strange. When I write F# code, it almost directly mimics the problem statement. For example, I have implemented a fair amount of The Ray Tracer Challenge in F#, and it feels like I'm literally just writing down the description and tests from the book and have working code. Do you have a particular example of Python that you feel it shows off its pseudocode abilities? Because one can write F# almost identically to Python, so I just can't imagine Python being superior given that it lacks several domain modeling tools that F# has (records and discriminated unions).
- akkad33 4y agoSpeaking as a python dev with some experience in F# , one maybe minor point is the unfamiliar function call syntax that could throw off programmers not familiar with curried functions. Most other languages have parenthesis for function calls, so it can be a bit jarring to have a sequence of strings and not know whether the result is a function or a value. Furthermore some experienced F# devs love making custom symbols, which can also obfuscate the code
- bmitc 4y ago> so it can be a bit jarring to have a sequence of strings and not know whether the result is a function or a value I think that the nice thing about F# is it is always a value. Function evaluation and currying can be taught fairly readily, especially given that once you get it, there's no gotchas. > Furthermore some experienced F# devs love making custom symbols, which can also obfuscate the code I agree that is painful when it occurs, but that style should absolutely be de-recommended and is so by Don Syme. I haven't really encountered it much in my personal development though (or I have avoided it).
- airstrike 4y agoI tried F# seriously for a few days and the tooling was so annoying to set up it made me crave going back to pip and virtualenvs I guess if you're a .NET developer that may be a non-issue, but I literally couldn't get all but the simplest examples to work and just gave up even though I loved the language and its design overall
- satvikpendem 4y ago> the tooling was so annoying to set up it made me crave going back to pip and virtualenvs Damn, if you wanted to go back to pip and virtual envs, then that's really saying something about how bad the tooling is, because pip and virtualenv are the bane of my existence when writing Python. Give me cargo or even npm and I'd be happy.
- dopidopHN 4y agoSomething I like about boring Java: I hardly ever think about the dependencies management tool.
- satvikpendem 4y agoJava is even worse to be honest, you basically need an IDE for it, so much that VSCode literally ships a build with Java preconfigured. https://code.visualstudio.com/docs/languages/java#_install-visual-studio-code-for-java https://code.visualstudio.com/docs/languages/java#_install-v...
- za3faran 4y agoYou need an IDE for any language honestly. And I don't see that as a negative.
- anon291 4y agoI have never used an IDE for any language. Some languages make it very easy to set up. Python, Haskell, Rust, Node are extraordinarily straightforwards with basic CLI tooling. others like C++ are more complicated, but the compilers and tooling are extensively documented.
- btilly 4y agoMy way of explaining this is that we have a part of our brains which is intended to handle and recognize grammar. If we offload some of the work to it, it feels easier to deal with code. Even though what we are actually doing is certainly harder. The tradeoff of this kind of grammar is that metaprogramming becomes harder because by the act of making some of the structure into special grammar, it becomes harder to metaprogram.
- rudedogg 4y ago> You basically get into a situation where you need to be able to read and comprehend math-like lines of code. Which doesn’t seem to mesh well with the structure of nature language. "The Art of Doing Science and Engineering" has a few paragraphs about this. He points out that language has some intentional redundancy, because humans are unreliable and require it. But programming language designers are often skilled in logic, and prefer that to verbose "human" communication. The language referenced is APL, but it made me think of functional languages which have a lot of custom infix operators, etc.
- Gibbon1 4y ago> But programming language designers are often skilled in logic, and prefer that to verbose "human" communication. Reminds me of a thing my dad quoted about the problem with Newtonian Notation. AKA dot notation or fly spec notion. Because with it a fly can do differential math. As a result people use different notation usually. That said redundancy allows for both readability by humans and better resync by parsers when there are errors. And it's easier to code gen and auto refactor code.