Hello,
@15: as I said in my previous post, no, this problem is not purely theoretical.
Especially not for beginners. Back in days, when I was beginning with neural networks, I've studied basic feedforward nns.
Because I wanted to see, what's happening inside a neural network, along the traditional matrix based computations, I have developed my own framework based on small objects communicating with each other, so it was clearly trackable, which part of nn is doing what.
It was not designed to be fast, but readable, in sense of what's happening.
Now, following your arguments, this system would work slowly no matter what programming language was used, because... it's simply slow. And in theory, you're right about that.
But... in Slovak language, we say, that it isn't slow as slow (\nie je pomalé ako pomalé). I have no idea, how to translate it to English, but it basically means, that under the one word, more practical scenarios can actually happen.
And this is exactly the case. I have implemented my system in both Python and C#. Yes, it was significantly slower than matrix computations, just as expected.
But while in C# I waited for the solution 5 min, in Python, I waited several hours!!!
And that is a problem, a huge problem, especially taking in the fact, that the whole think didn't work!
I needed to experiment with it to find out, what's wrong with it, but good luck with experiments, if you need to wait few hours before getting a single result.
I have designed my own matrix library in order to find out, whether it's my interpretation, what's causing the problems, and my matrix solution, in Python, took about a hour to run, just because a dot method containing three loops, which Python wasn't able to consume. The same thing in C# took just few seconds to run, but that didn't help me, as the only working network Ive had was with numpy, so I needed to stick with python.
So no, this isn't just theoretical N-body problem not applicable in reality, I have used it just as an objective measure. The problem is real and especially actual for beginners.
Yes, inefficient algorithms will be slower than the best optimised algorithms, but while in C# or other compiled language the performance hit will be hardly noticeable if at all, in Python, you're going to get it in full size.
And explain to beginners, how to optimize the thing, when they had hard times to create it in first place.
As for cythonizing, it's not hard for skilled programmers, I have learned the necessary basics in about 30 minutes, counting in the time for experiments.
But it would be significantly harder to learn it correctly for newbies, there are lots of alien words there, if you're marking everything, which don't harmonise with Python philosophy at all.
The goal of cython is not to use cython as the primary language, if it was so, then Python wouldn't exist and we would use Cython.
But we don't, because Cython was designed to support Python, not to replace it. Python is good at what it's doing.
But again, explain it to someone, who don't know neither Python nor Cython and has probably no deeper imagination about what've re trying to avoid by using Python like syntaxes.
I apologize to author of the question, if this isn't his case, I'm talking now about beginners in general.
One time, my friend asked me to teach him programming. He was a kid and in the same time, I was teaching him computer basics, such as how to open an application, how to open a webpage etc.
I have smiled: "Yes, I can teach you, but first, you need to go through this. Okay?"
As for .net packaging, I don't see anything troublesome with it, even if using external assemblies. I have wrote few of them myself, for example my BgtKit, supporting my games and everything worked just fine. All you need to do is to make sure they'll stand along the .exe file.
You can make an installer and if you don't want to mess with innosetup, you can simply zip the whole thing and it will simply work after extracting.
That goes for .net assemblies as well as native dlls, I've used them in many projects, ranking from Windows apps, through Android apks to extensions for VisualStudio and I've never had problems with them.
For comparison, explaining Java which class is main and how to find it is weird even with pure .class files, actually packaging them to .jar file is another process, which requires either to design a bat file to do it, or to use your ide's exporting tools.
Packaging .apk file is even more complicated than packaging .jar archive, as you need not just to package, but also sign the whole thing.
Of course, ides usually simplify these tasks, so they can be automated, however as it's not you who's doing the thing, you need to always find a way to tell your ide, how to package everything correctly and that can be... kind of complicated.
For example, I was trying to convince VisualStudio for few days to package a native .so library into correct location in .apk file, for various processor architectures. No luck, I ended up writing a native dependency into the .csproj file, I didn't find a way how to do it from the interface.
Yeah, and packaging python is another story. When I found out with my Python application, that I'll need to install 32-bit python in order to compile a 32-bit pyinstaller package, which I needed after a whole week of customizing my app for people with 32-bit systems - recompiling native dependencies, reorganizing the directory structure, building the logic to choose a correct library to load, I've rewritten the whole thing to C# in few hours, and the problem was solved. I've saved about 50 MB, the app was faster and compatible with both architectures.
This of course was possible only because the app was rather small, so I could recode it in reasonable time, for bigger projects I would install a side version of Python. I didn't want to say by this, that python apps can't be packaged, they definitely can, but the process can be bit tricky, when compared to other languages.
So, that's how I see things. Don't take me wrong, Python is a great and powerful language, which I frequently use, especially for machinelearning purposes.
I just wouldn't recommend it to beginning programmers. Scientists yes, as they usually don't want to build more complex things and if they do, they most likely already have some background, but to someone who wants to code in first place, I see C#, Java or other statically typed language as a better starting point.
Best regards
Rastislav