3 ms·
don't want to know how the system works internally. I see this sentiment a lot. People seem to be proud of technical ignorance ("We don't even know where are
by seiji 14y ago
don't want to know how the system works internally.
I see this sentiment a lot. People seem to be proud of technical ignorance ("We don't even know where are servers are! lol!") because they are too busy doing whizbang gollygee Important Work like making the world's four billionth PHP CRUD app and setting up a DB without durability guarantees.
"But we don't have time to learn... we are busy being cool and popular!" Sometimes you have to slow down and actually learn things. Sometimes you should be an intern for a year before being a CEO. (It sounds like you've already resigned to not learn things: I probably wouldn't have the chance to learn all of that stuff.)
what I would call "ops" knowledge which is great for him
That's kinda impressive: dismissal condescension towards someone who knows more than you. It provides the ego with a nice padding. "They know more than I do, but what they know is silly and useless in these modern cloud-based times. I feel sorry they actually had to learn how things work."
Programming means manipulating a system. Basic/beginner programmers pretend the entire system is the API of their favorite (read: ruby) programming language. You can get pretty far not learning more than that, but you will always be limited. You will always be pretending to understand more than you actually do.
If you aren't a "computer person," you'll stop at the basic level. You'll spin your wheels cranking out things that feel the same forever. What separates a "computer person" from people just in it for the glory or money is their insatiable knowledge hungerness. They want to be good, better, and then optimally best.
Intermediate programmers realize (and have a mental model of) how everything works together including a basic CPU, bus, memory, network (from hardware up to packet switching through routing and DNS), your language stack and heap, calling conventions, directly attached storage, network attached storage, and half a dozen other things depending on speciality (graphics? wireless? robots? distributed system? embedded system? web?).
Advanced programmers do not exist.
- ianterrell 14y ago>> don't want to know how the system works internally. > I see this sentiment a lot. I like that sentiment a lot. We have finite time and finite brain cycles. Stand proudly on others' shoulders and build something bigger. There's no shame in programming in high level languages to deliver more value more quickly. Ditto with operations, ditto with everything.
- nicholassmith 14y agoAnd there's no shame in standing on other peoples shoulders, but if you're building a web application you really need to think about having at least person with a devops background. Hell, even if they know how to compile from source and monitor properly that'd put them in a good place to go forward.
- cbsmith 14y agoIt's great to stand on the shoulders of others, but you ought to be able to look down without getting lost.
- flatline3 14y ago> There's no shame in programming in high level languages to deliver more value more quickly. Ditto with operations, ditto with everything. There is shame in not understanding how that high-level language actually works, because it means you'll invariably be a worse programmer than the guy that does understand what he's actually doing.
- seiji 14y agoI think it's the difference between a user and an engineer. As a user, you... use. You don't care how it works. You drive a car; you don't design a car. Things get fuzzier in software development. Programmers are supposed to be users of everything they aren't programming. Things are supposed to be black boxes with fully isolated layers of abstraction. Ha. Doesn't work. To be competent, you must be aware of, at a minimum, what pieces are under you, at an intermedium, how they work, and at a maximum, how to create them yourself. I'm only talking about people who want to be great technical workers though. If you just want to make a MVP to get funding then hire dweebs, who wasted their life learning computers, to make you rich, feel free to do that instead.
- Retric 14y agoHave you taken an electron microscope to trace each line for every CPU you use in production to know how it actually works? No? Well perhaps, not needing to dig into how things work is a useful feature of a well designed system.
- jakejake 14y agoI do think it's true that good programmers have a passion for understanding as much as they can. But there are so many levels and it's impossible to master everything. Not only that, but things are constantly evolving. If you set about to master everything you can drive yourself crazy. I have a friend who is an incredible engineer, he writes high performance code at the C and Assembly level. He knows almost nothing about higher level code. You could say in a way that he's lazy because he wouldn't know how to write a simple web page, but that would be missing the point. He's critical for the work that he does. Being a jack of all trades is helpful at times, but a team of people who specialize can go into depth that just isn't possible for one individual.
- michaelt 14y agoPersonally I'm interested in the design of a many systems - but I can see a case for wanting other systems to present a single well-defined, correctly implemented interface. There was a time when, to make a program with sound, programmers had to handle different sound cards differently. You used to get settings in games to choose whether your card was Sound Blaster 16 Compatible. Were those the good old days, or the bad old days?
- scott_w 14y agoI think you're interpreting it wrong. What you see as celebrating ignorance, I see as celebrating simplicity: "We don't _need_ to know how it works any more!" For many use cases, this is perfectly acceptable (and the article rightly notes this). "That's kinda impressive: dismissal condescension towards someone who knows more than you." I saw nothing dismissive about that statement whatsoever. I read it as "they know more than I do about that particular subject, but what they know is not useful for me to know at this moment in time".
- catshirt 14y agoso are you suggesting that everyone should learn everything? or that people shouldn't attempt things without expertise?
- mdc 14y agoThere is value in specialization. You denigrate the OP with your condescending "too busy doing whizbang gollygee Important Work" and mischaracterize him as using words like "silly and useless", but the OP never said that. All he said is that he's focused on one part of the work and doesn't know that much about the others. I've been considering these choices a lot. In my own career, I've made a conscious choice to pursue lots of different things that I found interesting, but I've become a generalist, pretty good at lots of different things but lacking the deep domain knowledge in any one of them that a specialist gains. You seem to be arguing that specialists should not exist, everyone should go for broad rather than deep. I think there's a place for both, and becoming a specialist often requires the discipline to stay focused and not pursue every interest and curiosity that rears it's distracting head. I think there's value in a programmer knowing the whole stack, from language APIs to hardware implementations, and being able to understand the consequences of every line of code. But time is finite and someone at the beginning of their careers must make choices on where to build their expertise.
- Draiken 14y agoVery well put. Every good programmer knows the underlying parts of what he is using, and unfortunately the new trend is that programmers don't need to know this stuff anymore. It's true that in some cases they don't have to, but they should, and for some reason people get offended when you tell them that...