5 ms·
In my personal experience, the best engineers I've encountered (and learned from) have understood every system, subsystem, and interaction, all the way down to
by jonaf 10y ago
In my personal experience, the best engineers I've encountered (and learned from) have understood every system, subsystem, and interaction, all the way down to the most fundamental foundational level. And this understanding allows them to make the best decisions (because they're equipped with the best information). This knowledge doesn't come by sitting down and studying how CPU architecture works when you're building a web application. But it does come from diving as deep as is required for any given task. So maybe if you're dealing with a web app performance bug and you have to crack open Chrome source code, trace it down to something that is compute-intensive, learn whatever C++ code is involved, understand how it utilizes the CPU, and learn about the specific architecture you're using that exhibits the problem, then you have ultimately obtained a significant depth and breadth of information, but at the end of it, you know and understand exactly why your web app performs the way it does, how to workaround it in your app, how to fix it in Chrome (or why you shouldn't), and how the CPU architecture affects the Chrome source code. Now you can apply Chrome, CPU architecture, and C++ to anything that is built upon any one of them (independently or otherwise). That's not to say you know everything about each of them, but you've learned things that will help you in the future in some cases.
The most important skill here is being able to diagnose a problem and fearlessly, relentlessly employ the engineering discipline of solving whatever problem/task is at hand, and not because of observed symptoms ("hey, I turned that knob and everything was OK! I don't know why, but I can close this JIRA ticket and move on with my life. I'm a 10X engineer!") but because you understand precisely what's happening. I made the mistake of the first decade of my software engineering career learning from trial/error and observations, and while those skills are useful in some cases, the best engineers are extremely disciplined about understanding the full depth of a problem before writing a line of code.
In a nutshell, I guess what I'm advocating for is do not blindly study man pages. The reason is because without a practical application for the knowledge, it seeps out of your brain and you forget it quickly. The exception (case in point, GP's example) is when what you're studying does have a practical application or is relevant to what you spend your time doing. This has always been my problem with academic curricula (sure, some people can learn well this way, and there's definitely a minimum foundation necessary that must simply be committed to memory). Even in basic subjects like maths -- the work is rote, and we maybe get a passing grade, but often without the understanding (or the depth of understanding) that is really the most important aspect of learning the subject matter.
- Retric 10y agoI have optimized websites based on a basic understanding of how CPU's work before. For example it's much faster to do 200 checks on an object then load the next object vs doing one check at a time for each object and thus reloading objects 200 times. This ended up being a 30x or so speed up and seemed like magic to half the room. It's not about knowing the minute details so much as understanding what's going on well enough to model it in your head. PS: Assuming you are operating on lots of data, a small scale test can and did go the other way.
- Tiquor 10y agoMost people wouldn't know an algorithm and concepts of algorithmic complexity if it bit them on the ass. Even devs. You don't need a PHD in computer science, just read some stuff and think a bit.
- agumonkey 10y agoGood thinking but beware of what a CPU "is". I've just came back from intel.com boards and .. holy jesus, amount of details even memory locality level thinking ignores .. To leverage a processor you need to understand OS cache conventions and interaction with L1 and L2 caches and how these caches are wired to the actual core. Otherwise you're already losing 30% of the raw bandwidth. I left with a strong laziness view on optimization. Profile based on what the business needs and ignore everything else or you will never escape the rabbit hole.
- hinkley 10y agoThe number of people I've had to explain reflow to is just staggering.
- kiba 10y agoPeople have time to do that while on the job? To understand something at a deep level?
- djKianoosh 10y agoYes. some would argue that's what they're paying you for.