Furious activity is no substitute for understanding.
Before you start to writing the code, YOU HAVE SPEND A LOT OF TIME STUDYING YOUR PROBLEM. (Brian Harvey, CS61A)
If you can’t write it down in English, you can’t code it.
Programs must be written for people to read, and only incidentally for machines to execute. Immortal classic.)
The sooner you start to code, the longer the program will take.
Details count. (Devil is in the details).
Get your data structures correct first, and the rest of the program will write itself. (Data structures suggest algorithms).
Premature optimization it the root of all evil.
There is nothing new, of course. In "old times", even if "old programmers" didn't have such marvels like Java or Javascript, being mostly scientists, they have figured out "how their minds work" and in what kind of processes they are mere parts.
An one sentence summary could go like this - "Programming is an engineering discipline, Coding is a translation skill". To write down quickly one has to spent a life-time thinking and doing.
Yes, someone in another thread is discussing about skill sets to be learned to engineer software, but I think academy already does a decent job.
To engineer a good architecture you need time to thoroughly think and explore alternatives. Coupled with deep field knowledge and an even deeper know how, gained by means of experience. And to build the best is impossible by definition: you can only hope to build a better one.
I didn't know what a fast programmer was until I had to work with one. The king of copy and paste. All his neurons on his fingertips. He showed to me that thinking with their hands wasn't limited to manual workers. Luckily for me, his awesome speed allowed me to become his "boss" a couple of months after being hired. And I'm not being sarcastic here. The manager saw he was better left typing and me better left thinking.
That's why, perhaps, in pre-Java era, in good schools they taught "big ideas in CS" instead of Java syntax and how to OO everything.
Algorithms, Data Structures and reasoning behind them, Scheme courses of CS basics (based on SICP) and Operating Systems, so a student could understand the principles and design decisions.
Then such student could code in any language, because syntax and common idioms are much less important than appropriate data structures and processes. Then, perhaps, they will use a modern file-system as a database (like this very site back-end does) instead of bullshitting each other about what re-implementation of optimized in-kernel routines in Java is more popular, etc.
I know syntax of about dozen languages, but I am inferior programmer due to lack of appropriate theoretical background. I could spent days trying to figure out, should a request be a closure or an assoc or this fancy but costly "persistent-map", and these nuances like aliasing and locality in Clojure and CL.
Of course, one could always Ctrl-C/Ctrl-V from millions of online tutorials and "get shit done", but I cannot write anything without understanding why this instead of that, not because they say so in some narcissistic, over-confident blog-post. Thank god programming is my hobby, not my job.
So, it is not about syntax or how pointers were arranged (in structures and ADTs or in classes and objects) it is about whats and whys instead of hows. Coding is easy. Programming is difficult.
> I know syntax of about dozen languages, but I am inferior programmer due to lack of appropriate theoretical background. I could spent days trying to figure out, should a request be a closure or an assoc or this fancy but costly "persistent-map", and these nuances like aliasing and locality in Clojure and CL.
I have a deep understanding of various areas of CS and maths and I never resort to "Ctrl-C/Ctrl-V" to get things I don't understand done. I rather spend enough time to understand them. Every. Single. Time. Ah, and I didn't attend a university almost at all.
You could do the same, you know? If I could learn all of this, without any help from friends or from lecturers or from senior programmers (until very late in my learning), basically with books alone (from a library - that was before the Internet!), then you could have done this easily. But you didn't and now you're whining and shifting the blame and making others responsible for your personal failure to learn.
Really, stop that and start learning for yourself, it's not too late!
For every scientist involved with computers in "old times" (at least after personal computing took off) you get easily 10 hobbyists, enthusiasts who actually built stuff.
There are AIMs (lots of them) for example. And besides MIT and Stanford ans CMU there were also research facilities staffed with scientists, like Bell labs, Xerox PARK, etc.
In early programming (Lisps, pre-winter AI, early OO and pre-OO languages, UNIXes) have been done by much brighter people than in modern J-world.
Furious activity is no substitute for understanding.
Before you start to writing the code, YOU HAVE SPEND A LOT OF TIME STUDYING YOUR PROBLEM. (Brian Harvey, CS61A)
If you can’t write it down in English, you can’t code it.
Programs must be written for people to read, and only incidentally for machines to execute. Immortal classic.)
The sooner you start to code, the longer the program will take.
Details count. (Devil is in the details).
Get your data structures correct first, and the rest of the program will write itself. (Data structures suggest algorithms).
Premature optimization it the root of all evil.
There is nothing new, of course. In "old times", even if "old programmers" didn't have such marvels like Java or Javascript, being mostly scientists, they have figured out "how their minds work" and in what kind of processes they are mere parts.
An one sentence summary could go like this - "Programming is an engineering discipline, Coding is a translation skill". To write down quickly one has to spent a life-time thinking and doing.