5 ms·
What I think is missing from most of these discussions is an acknowledgement that people, in general (including developers), learn differently. In this context
by doktrin 13y ago
What I think is missing from most of these discussions is an acknowledgement that people, in general (including developers), learn differently.
In this context : you're either comfortable not knowing, or you're not.
What I mean by this : some of us are comfortable not knowing how X system works (temporarily, of course). Some of us can start building things with a web framework and gradually gain understanding from the top down. This is OK.
However, others (and I include myself in this camp), are completionists. Abstraction is an annoyance, and not knowing is like an itch that needs to be scratched. For such people, having significant gaps in understanding a system model is a real problem. Super duper high levels of abstraction is a real problem.
Different people, different learning styles. For any beginner in any field, it's important to acknowledge how you learn best and then pick a learning strategy that's compatible.
- robotys 13y agoThis is a very important point. I found it very true that different people learn in different way from my effort on sharing the details of programming and math with fellow co-worker and interns too. Try make 30 people grab the same details (programming/details) and you will learn a lot about what you teach about and also on how people learn. When i understand that, i ultimately understand the reason why there is so much debate and on going discussion about some particular details: much of our confusion were caused by lost of context in communication. [edit: typo]
- Edmond 13y ago>However, others (and I include myself in this camp), are completionists. Abstraction is an annoyance, and not knowing is like an itch that needs to be scratched. I think this a common fallacy that many developers fall victim to. Our entire modern lives consist of using things we don't understand, by this logic you should also not fly in a modern aircraft because I am sure you don't fully understand how they work. Better yet, you should refuse to drive your car. >Super duper high levels of abstraction is a real problem. Not at all. If an abstraction saves you a ton of time, you should accept it by all means. If you are your boss whose money is being wasted because someone refuses to use a time saving abstraction, I am sure that person would not be your employee for long.
- doktrin 13y ago> refuse to drive your car If I were engineering a car or a service tightly integrated with one, I would be pretty interested in knowing how cars works. > If you are your boss whose money is being wasted because someone refuses to use a time saving abstraction That's a bit out of context, don't you think? The article was making a claim regarding how beginners should learn web development - not how businesses should be run. However, since you bring it up - in my experience misunderstood abstractions are at the root of many, if not most, security vulnerabilities. Trusting the system without understanding it is often quite irresponsible.
- Anderkent 13y ago>If I were engineering a car or a service tightly integrated with one, I would be pretty interested in knowing how cars works. But if you aren't, you don't. If you're building a web application, you're the delivery driver, not the mechanic. You just need to know how to use the car.
- doktrin 13y ago> If you're building a web application, you're the delivery driver, not the mechanic. That's a flawed analogy. Delivery drivers aren't responsible for configuring or providing maintenance on the packages they deliver. However, this is drifting pretty far out of scope of the original discussion, which concerned learning strategies for aspiring developers. While I think it's a good idea to have an understanding of the systems we build on top of, that's just my opinion. We'll have to agree to disagree.
- jiggy2011 13y agoIf I was flying in an aircraft I would expect the pilot to have at least some understanding of how/why it stays in the air!
- falcolas 13y agoGood luck with that. As a pilot school alumni, I can safely say that the Bernoulli principle, and more importantly how it applies to an open system like an aircraft wing, is pretty fuzzy for most of my former classmates (I know because I was tutoring them on flight physics). Understanding the cause and effect between your interactions with the flight stick and throttle is one thing, understanding the physics behind it is another entirely.
- 0xdeadbeefbabe 13y agoSuper duper high levels of abstraction are okay for beginners only because they don't know any better, and they are comfortable not knowing because they are beginners. It's fun to think that completionists exist, fun like believing in the tooth fairy or the little rat. Have you honestly finished auditing the linux kernel yet? w3schools punts nowadays and suggests using youtube for cross browser video support. High level software has some real downsides, but don't forget to switch from grunt to gulp.
- doktrin 13y ago> they are comfortable not knowing because they are beginners I disliked web frameworks when I was a "beginner". > It's fun to think that completionists exist, fun like believing in the tooth fairy or the little rat. That's a bit nonsensical. Plenty of engineers feel strongly about having a solid understanding of the systems they work with.
- 0xdeadbeefbabe 13y ago> Plenty of engineers feel strongly about having a firm understanding of the systems they work with. It's not a bad feeling, but feeling that way doesn't magically enable you hold all the nuances of the output of billions of lines of code in your head. I've noticed that most engineers would rather rewrite than firmly understand.
- arghnoname 13y agoI've done a lot of web work on top of frameworks and have done work on the Linux kernel including a lot of time figuring out the nitty gritty of how the socket calls are implemented. I have a pretty good grip on everything in between because I enjoy knowing as much of the full picture as I can. I am weak on the hardware level. I know more than most programmers I've worked with, but embarrassingly little when talking with actual hardware people. I've done a little work to rectify this, but have miles more to go and I'm not sure if I'll bother. I don't consider myself extraordinary in this regard, so people who know the stack at some level of depth is not all that surprising. I take it as a given that there are many people who know what I know plus hardware. Completionists aren't unicorns (at least not for any sane definition of it. No one knows a modern operating system 100%, for instance). That said, knowing what the kernel does with sockets is not very helpful for writing a web page. In my experience the vast majority of benefit one gets from being 'full-stack' is knowing one level deeper than whatever they are working on. If you are writing a performant web server it absolutely helps to know what the kernel does and if you are writing a web language framework you probably ought to understand how the web servers you rely upon generally work (for instance, threading models, etc). You usually don't need to know two levels deep very well and almost never three levels deep. Usually the intervening abstractions are complete enough that those details eventually get papered over into something else.