I think one of the nice things about Python is that most people write it in a similar way (with the exception of classes vs not and annotations). "There should be one-- and preferably only one --obvious way to do it." There are already "accents" on how people write code, and the beginner dialect sounds a bit too close to Visual Basic to me.<p>There are some chances to smooth out some warts. I like typed languages like TypeScript, though I find Python's type system not very natural comparatively.<p>My biggest gripe though is that it's not possible to write functional code where you can read the operations in order. For a contrived example, if you wanted to know the total length of all strings in a list that start with the letter 'a', you would do the following in C#:<p><pre><code> strings
.Where(s => s.StartsWith('a'))
.Select(s => s.Length)
.Sum()
</code></pre>
Each step follows the last: first you filter the list, then you get the lengths, then you add the lengths together.<p>The equivalent in Python is this (I broke it out into multiple lines for a better 1:1 comparison):<p><pre><code> sum(
len(s)
for s in strings
if s.startswith("a"))
</code></pre>
Okay, maybe in this example the only difference is the location of the if, but in more complex example I really lose the flow by using list comprehensions.<p>And before anyone says I can use `map` and `filter` assign each step to a variable and write it in an "imperative-ish" style, I find it difficult to come up with descriptive names for each intermediary variable, and don't want to call them `l1`, `l2`, etc.<p>Gripe over, hopefully I conveyed my message.