(Replying to PARENT post)

Just a spin on this: as a java developer that recently started doing a lot of python, what has really annoyed me (apart from the utterly woeful IDE functionality compared to typed languages) is the extra "boiler plate" thinking you need to do with python because of the dynamicness meaning you have to keep the types and classes you're using for your codebase in your head, rather than letting the computer deal with that.

e.g. you have a function with a "database" parameter ... it could be a string, it could be a dict, another class, or even a number. There is no way to know apart from back-tracking through the code (or run it and wait for it to fail with a TypeError when that code gets hit). With java you just read the type off the screen and you can get on with solving the problem at hand without extra thinking, and even if you do screw up your IDE tells you right away with a nice squiggly red underline, or if you're not using an IDE during compile time. With Python you might not find out about that TypeError until that 3am pager call.

People have suggested that the answer to this is forcing strict naming conventions and/or strict docstring conventions ... but if you are going to go with that level of extra work of typing "database_string" or """Lots of long docstrings explaining exactly what type the database parameter is.""" (and maintaining it!!!),you're not saving any boilerplate (biggest complaint I've seen levelled at java) so why not just use a statically typed language ?

tl;dr - for me, python adds cognitive load of keeping the minutiae of the code in my head on top of solving the actual task at hand.

That said, I like the "pick up and go" prototyping feel of Python for quick jobs - java sucks for that.

๐Ÿ‘คmattdlondon๐Ÿ•‘10y๐Ÿ”ผ0๐Ÿ—จ๏ธ0

(Replying to PARENT post)

Bingo! Coming from C# and C++, I had exactly the same realization using Python (before I switched back). I always ask Python programmers "but are you just keeping track of the types in your head?" because it's impossible to keep myself from doing that. If Python (and dynamic languages in general) are just pushing the type checking into the programmer's lap, I'm not sure what the advantage is other than less verbose (looking) code.
๐Ÿ‘คcantastoria๐Ÿ•‘10y๐Ÿ”ผ0๐Ÿ—จ๏ธ0

(Replying to PARENT post)

To be completely fair PyCharm is darn good with Python. PyLint will get you to quite comfortable place as well.

Thanks to this thread I just discovered the state of type hinting in Python 3.5.1 and I am super excited.

I can imagine working on huge code base and having a beef with Python but being a Java developer I think that would be using the tool incorrectly. The reason why I am saying this is that in Java world we (or some of us) work on large projects, we have multi-module projects with millions lines of code.

Whenever I think about Python project, I like to think that I would build series of small, independent modules. Maintain them separately. Thus limiting burden of dynamic language. In Java/JVM land you can achieve the same with small JARs. But we often don't (for various reasons).

TL;DR: There are more than decent tools for Python. Java =/= Python. Development approach matters.

๐Ÿ‘คopenplatypus๐Ÿ•‘10y๐Ÿ”ผ0๐Ÿ—จ๏ธ0

(Replying to PARENT post)

Although it won't help when using other people's libraries/code, when you're building your own code then you'll probably enjoy Python 3.5's type hints on function parameters. They negate the need for doing hacky things like specifying types in docstrings.

https://docs.python.org/3/library/typing.html#module-typing

๐Ÿ‘คrpeden๐Ÿ•‘10y๐Ÿ”ผ0๐Ÿ—จ๏ธ0

(Replying to PARENT post)

This also makes working with Python, even in an IDE, much trickier than Java in an IDE.
๐Ÿ‘คIndianAstronaut๐Ÿ•‘10y๐Ÿ”ผ0๐Ÿ—จ๏ธ0

(Replying to PARENT post)

You didn't say anything about unit tests. Those tend to be the technique that proponents of dynamic languages promote for catching errors earlier.
๐Ÿ‘คmwcampbell๐Ÿ•‘10y๐Ÿ”ผ0๐Ÿ—จ๏ธ0