I have only recently realised that my terrible misunderstanding of programming is slowing me a lot.
I have only recently realised that my terrible misunderstanding of programming is slowing me a lot.
If you want to learn about functional programming, something like this could give you fun and relatively painless head start: http://www.4clojure.com/ . Also, you could try to download LINQPad and look at code examples.
If you want to learn about real OOP, I would recommend looking into Smalltalk, learning about design principles behind Xerox Alto/Star and listening to some OOP seminars from mid-80s.
If you want to learn about high-level system design, here are some intelligent people I would listen to: Alan Kay, Rich Hickey, Peter Norvig, Salvatore Sanfilippo.
I would also recommend every programmer to watch through at least one introductory AI class. Not because they necessarily need to work with AI algorithms, but because those classes teach to solve programming problems in a better way than just "write more logic and abstractions".
https://ocw.mit.edu/courses/electrical-engineering-and-compu...
https://www.youtube.com/watch?v=mkBM4jvrhzk&list=PLAwxTw4SYa...
Hope this helps.
Functional programming is a completely different conceptual model and even if you don't use it day to day it teaches you some important principles.
Is it good if I rebuild my foundation on JS? I feel like JS is a bit, uh, messy.
Understand JavaScript deeply.
Write your applications in TypeScript.
Function scope is good.
Closures are good.
Higher order functions are good.
Partial function application is good :-)
Warning: if you get too used to FP style programming in JS, Java will feel quite painful afterward.