What's worked in Computer Science (2015)
I learned to program sometime around 1988 or 89 when I was 12 and have been doing it for 28 years.  I saw several of these rise and fall, and conventions have changed greatly even though most of us are still using C-style languages.<p>The highest leverage I&#x27;ve found comes from spreadsheets and relational databases because they require little or no code to accomplish so much.  So I think that declarative or 4th generation programming languages deserve an honorable mention in the &quot;yes&quot; category.<p>The lowest leverage has been on the object-oriented side, especially with C++.  Java is the least abstract language I&#x27;ve used in recent memory, due to its obsession with staying as far from functional programming as it can (closures were accomplished with anonymous objects until version 8!).  There is simply no way to infer where a value was set without tracing the entire code, which slows development time by a factor of 10 to 100 over more functional techniques that use methods to derive state instead of values.  So I think the &quot;No&quot; category needs a mention of highly imperative code and its tendency to become spaghetti.<p>The single most damaging practice I encounter daily is the breaking of convention and the loss of programming context that we&#x27;ve built up in our minds over the years.  So while most functional programming languages are conceptually brilliant, they stray so far from mainstream languages like Javascript that I think they complicate syntax unnecessarily.  Heavy-handed patterns also urge us to segregate code into parts when the logic doesn&#x27;t require it, which I often find unintuitive.  Mobile development especially, with its obsession with delegation, event broadcasting, observers and nondeterministic behavior of partially uninitialized views (especially recycler view and UITableView) feels like always having to remember 10 or 20 digits when we can only comfortably manage 7.  Types for the sake of types will likely expand code size and complexity by an order of magnitude when a simple compiler would have accomplished nearly as much.  I have low confidence that any of these will survive the next tech bubble.<p>I view parallelism and AI as a great uncharted sector of computer science that was stifled by Microsoft, Apple, Intel and NVIDIA.  Had FPGAs or open source graphics cards taken off after the 90s, we would have a very different view of things like the Actor model (Erlang, Go, etc).  So shared threads are a huge &quot;no&quot;, but the private address spaces&#x2F;streams&#x2F;message passing and copy-on-write model of UNIX is a huge &quot;yes&quot; and we&#x27;ll likely see these techniques adopted at the language level in the next decade.  It would also be nice to have the numerical computing techniques from MATLAB so we can operate on matrices instead of primitives and saturate the hardware with less effort.  Under these tools and conventions, AI loses much of its mystery because you realize you can always brute force a solution and evolve more elegant ones later to find a better local optimum.