5 ms·
As a non-CS engineer who writes software for a living, I can definitely say that there are times that I wish I had formal training in algorithms, parallel data
by whatever1 6y ago
As a non-CS engineer who writes software for a living, I can definitely say that there are times that I wish I had formal training in algorithms, parallel data structures, compilers, operating systems and hardware. There are many times that I need to rewrite my code because of non-adequate design. Other times I reach corner cases that take me too long to debug, only to realize much later that there was a lower-level explanation for the unexpected behavior.
- mannykannot 6y agoCongratulations! By not dismissing these temporary setbacks as being just the way things are, you have the right attitude to become even more successful at what you do. 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.
- mistersquid 6y ago> 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!) 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?
- AnHonestComment 6y agoMy “one weird trick” is take the time to understand type theory. 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.
- swat535 6y agoI graduated with a CS degree and a minor in Web Services and Applications. Let me tell you that whilst those topics are useful, they were pretty tailored and if I'm being 100% honest, I don't even recall the majority of them. 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.
- rgblambda 6y ago>> if I'm being 100% honest, I don't even recall the majority of them. 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.
- aries1980 6y agoYes, but the point of memorisation is you can much quicker re-learn the subject and you know there is a solution to a problem when you face it. If you have never learnt it, you don't know that there is a solution, or you start to optimise things in a way that is proven to be wrong. You might not able to recall them, but the knowledge is likely there in your subconscious.
- 908B64B197 6y ago> 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. 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.
- aries1980 6y ago> There are many times that I need to rewrite my code because of non-adequate design. 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.
- Agingcoder 6y agoThis happened to me (math background, now write software), so I decided to fix it : I read most of the classic textbooks over the course of a few years, and tried to apply what I learned in them at my day job (provided that it was useful to my company obviously). Three things happened : - 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 !
- Alekhine 6y agoWhat textbooks did you read, and what's still on your list?