That’s hard to teach as a separate thing.
That’s hard to teach as a separate thing.
As part of that course, we simulated spec work by having Team A write the specifications for a project and having Team B trying to interpret that as loosely as possible while still being compliant. (Team C would then do that with Team B's spec and so on, so there would be no 'revenge').
That wasn't perfect, but it did teach us a lot about writing down implicit and non-functional requirements, as well as the use of precise language.
As a blunt observation, the courses where writing a specification was part of the project everything seemed to click together more easily. The ones where a specification wasn't written were the ones where people were scrambling on due date.
There seems to be lots of information, of the sort you are interested in, available on the internet (I won't recommend anything specific as there is too much!) One can learn a lot simply by digging deeper into the specific issues that one has encountered, especially as you begin to see the links between them.
As a non-CS developer, I find this us not an easy problem to overcome: the wide availability of resources of varying quality.
I work more than full time (US exempt employee), and I have enough knowledge that intermediate depth and quality resources do not provide enough and, not having a solid grasp of fundamentals, MIT's SICP course is a bit beyond my current grasp,
I would love recommendations for a series of courses, a series of syllabuses, or even a part-time degree program where I could meaningfully progress while working full time.
I'm not afraid of advanced math, I'm ignorant but willing to learn about data structures. I'm highly educable but I'm time-poor.
What targeted resources would be a good investment of my limited time?
How are types implemented?
What are the native types on your computer?
How do types and whiteboard diagrams relate?
If you can answer those questions, you’ll start to get an intuitive sense of how to make a program out of types (eg, domain driven design) and of how the computer will interpret those types.
My day to day job is piping APIs together and making sure we deliver features on time.
On the rare occasion that I need to use a data structure or an algorithm to optimize for Time Space complexity, I'll either use a community built package or a language level feature. I'll never invent my own because whatever I come up with will be half baked anyway.
Knowing all the above is useful for passing interviews but not much use in your everyday life unless you are doing something other than SWE such as R&D or data science.
Just my 2c.
100% this. A lot of these concepts go over your head if you haven't seen a practical application for them. By the time you've encountered such a use in industry, the knowledge is long forgotten.
In these cases you recognized you needed to use a specific algorithm or data structure and was aware of it's existence, name and properties. That's most of the work.
Contrast this with code where common data structures are re-implemented (I need a dictionary and all I know is an array, better iterate and compare the keys until I find the right thing). And that's only scratching the surface of bad code, believe me.
Formal education won't give you the knowledge to get it right every single time. Your design will be always non-adequate because the circumstances always change.
The knowledge body of a CS and engineering can be obtained without enrolling these days. Engineering is about problem solving within the resource constrains and to a specification. Getting the specification right and fitting in the resource constrains are the biggest challenges that only experience will prepare for, because these are domain-specific.
CS and engineering studies can give you a toolkit to solve some problems and helps to give you to develop a "gut instinct" to pick a solution.
- I got a lot better at my job because my toolbox was a lot bigger
- I developed a much 'broader' view of the field, which became unified instead of a collection of subfields
- I realized that there was even more that I didn't know about, and that I should keep reading !
Great, you spent two weeks saving two percent of compute time and now only two people will ever be able to change this code. WTF?
That said, I think the best way to learn these kind of things is on the job, if you find a company kind enough to let you practice the basics.