After few years programming for the GPU, i realized i would need 10 years more to finish. The task i try to solve is computationally too heavy. The need of parallelism made me program for the GPU. And now it is fine. It is fast(acceptably slow). But took me years of programming. And i am barely in the beginning of my project.
Few months ago i started realizing that the programming itself as a process is too much of work. But i kept programming monster shaders like a zombie coder.
The main problem is - it takes ages to program a good parallelism. If i were coding in C# for a single core CPU of 10000x4Ghz clock, i would be able to develop in a reasonable time. Still lot of work, but already manageable.
Monster shaders made in a garage - super fast to execute, super slow to program. Manually programming complicated tasks is becoming deprecated as a concept. Accessible to anybody.
NNs - super easy to program(compared to traditional programming). Super slow to execute. Still in development. As a concept it is the future. Serious projects in NNs are accessible only to supercorps.
Higher level parallel programming languages or extensions - i never felt convinced to use them instead HLSL.
When i try to repeat what my program does with NNs, they fall behind a handwritten code in all aspects except productivity. NNs that do the same as my program are super mega slower to execute(once trained) than the hand written program. And i have tons of other problems characteristic for NNs too. Like getting an "exact" answer between -inf to +inf as my shaders do.
In theory, I know the complete program flow. Every time i found a problem so far, i was able to solve it fast. So i don't need ML to find the unknown features for me. I am firmly convinced that any problem that pops up in the future, i would be able to solve it fast. Teaching an app instead programming it, it takes less time in the end(theoretically). This is what i need the most - productivity. My task is huge, but not unknown for me.
I love the concept of NNs, but so far, intelligent design beats ML in everything, except in productivity.
Still, i feel a very strong urge to abandon programming and move to ML. I feel inside, that ML is the future and i feel that typing code by hand will soon be deprecated.
NNs are still full of problems at this stage, but if in 10 years a NN is truly able to create content like a human does, in this case, right now is the moment to start working in NNs and be prepared when that moment comes. There is still a lot for me to learn and catch up with.
I feel like i should right now stop programming, and install TensorFlow. But at the same time it is very hard to abandon a project that took so much of my time. Because if i move to NNs now, i would abandon my project. I have not enough Flops for serious NN development. I would be just learning about NNs, preparing myself for the future.
PS: In my opinion..