4 ms·
This! I think Rob Pike said it best in his initial talk about Go: there are two kinds of developers...programmers, and engineers. programmers want to build thin
by tomphoolery 7y ago
This! I think Rob Pike said it best in his initial talk about Go: there are two kinds of developers...programmers, and engineers. programmers want to build things, engineers are constantly monitoring and maintaining existing structures. the terms "builder" and "gardener" are also used in this context, but I always felt that the classic usage of "engineer" was someone who would maintain, monitor, and keep systems alive...whereas a programmer is tasked with building that system in the first place. Not saying that programmers shouldn't be responsible for the correctness of their own work or anything, nor should engineers never build anything from scratch, it's more a matter of your preference and what you personally like to do in your job.
But what is a "computer scientist", really? Is it just some theorist who sits in an ivory tower and tells us all what to do? In my opinion, a "computer scientist" can actually be either a programmer or an engineer (or maybe have both in their blood? who knows). It's someone who is less concerned about building things for today, and more concerned about how computers are going to work tomorrow. It's a wholly separate role from us "construction workers" who have our boots on the ground and are actually building things...the scientists are concerned with how we're going to build things tomorrow. I don't know if Rob Pike, Robert Griesemer, Ken Thompson, or Russ Cox still work on actual systems code anymore or whether they just figure out how to improve the Go language, but assuming that they only work on Go full-time, that to me is the role of a "computer scientist", though for example Ken Thompson is also a "programmer" because he likes to build things.
- nnq 7y ago...except that people tend to use there words with reversed meanings too :| If a programmer wants to sound fancies he/she uses the term "software engineer". Also, separating "building" from "maintaining" (when "maintaining" means more than running / scaling / securing, and also includes adding features) is a a recipe for disasters! The builders/creators start creating unmaintainable messes because it's not their job to maintain them. I don't think these kinds of distinctions help in software... we need different ways to look at the problem... Also this lack of separation is kinda what makes software dev a cool field to work in... I love the hacker mentality and if it ever fully dries out I'm gonna quit working in this field and move to a fresher/younger one.