How Python Makes Working with Data More Difficult in the Long Run
medium.com
medium.com
I'm sure there's plenty of reasons to use Go but I'm not sure this article makes a terribly good case for it in this scenario.
How about using
If some external data doesn't fit Go type system then Go makes it extremely hard to work with these data. Same thing with SQL, it's extremely tedious with Go when fields can be null.
You could also use mypy(https://mypy.readthedocs.io/en/latest/index.html) which is a static type checker for Python.
You mention that it's much omre laborious to write a struct that matches your data exactly - however, I've found that, at this stage in the process you already have some sort of schema (mental or formal) of what your data is, and it's fairly trivial to write out a structured representation of it.
What this then buys you is a semantic understanding, in your code, of what 'bad data' is and how it's handled. You know that if you get a string where you expected an int, that's a problem. You also know that if data is missing, eg: null, that you'll handle it.
In Python, a function can erroneously return None. To your data, this is just a missing value, not a bug. But there is a semantic difference, and a cost associated with that bug.
All of these problems, limited strictly to working with data, are far easier to react to and deal with in a static language.
We absolutely conceded the exploratory phase to Python. It is, and will likely remain, an excellent and near-ideal tool for that phase.
If it hurts stop doing it. I can think of several ways to solve this ambiguity. Off the top of my head:
1. Create a custom class to represent your data's 'None' and treat the real 'None' as an error.
2. Stick to a fairly reasonable convention that all functions and methods are terminated with a single return statement. This would make it pretty hard to get bitten by the implicit None (which has never actually bitten me in the real world)
But since it provides you the option to use static types, I think the limitation is more in whether you do so or not, not in the language. If anything, by not forcing you to use static types, the language provides more options, which seems like a good thing...
Not so much 'in the long run' but moreso 'as soon as you end the exploratory phase'.
> I think the limitation is more in whether you do so or not, not in the language
Perhaps if the type systems were equal in power, but they are not.
> If anything, by not forcing you to use static types, the language provides more options, which seems like a good thing...
The problem here is that touching an untyped interface can break inference, and break assumptions about types, meaning that by having the type system be optional you potentially poke holes in it.
But to be clear, I think that the typed python approach is valid, and can be a great way to help with these problems. I am not saying to ditch python and go with another typed language - just saying that the untyped approach has caveats. Maybe you're right and optional systems are better, but I think the point to get across is that a typed understanding of your data helps a lot.
We talk about technical debt in data science and how rust (and the type system) can help.
Right, but why can't these declarations be written by some Python code? (with a large set of examples of responses as input)
among the most important criteria for me are:
parametric polymorphism (eg, a typed vector); immutable data structures; and exception handling (preferably monadic)
and i don't believe Golang has any of these.
As you mentioned, if one is looking for a statically typed data science language, objectively scala is hard to miss. Apache Spark is probably the most widely used "big data" tool at the moment; it's written in Scala, and while the python API is likely far more widely used, new features hit the scala API first.
(i don't know F#, but aside from the feature you mentioned, R copied it's pipe operator, |>, which i also see in a lot of scala code, usually implemented as a type class)
https://www.youtube.com/watch?v=D5tDubyXLrQ
See also his answers to some follow-up questions:
http://www.datadan.io/common-go-for-data-science-questions/
... and his O'Reilly article on the topic: