This post was first published on CoderHood as 7 Ranks of Coderhood: Coder, Programmer, Computer Scientist, Developer, Engineer, Architect. CoderHoo...
For further actions, you may consider blocking this person and/or reporting abuse
I've been reading CoderHood as Coder Hood, as in Coder Neighborhood. But now I feel like it's supposed to be more like livelihood or knighthood, right? If that's the case it may be worth making the H lowercase.
That is correct, and you have a good point. I'll need to think about it. Changing it would be a major pain, but probably worth it... Thank you.
for what its worth, I always thought CoderHood was related to knighthood and think the lowercase h would actually make it seem more like Code Neighborhood. π
Ha! I like this interpretation better, Jess! :) :) I think I will (conveniently) follow your instincts ;)
Probably that big a deal, but yeah, I think it could help. The most important thing is the content. XKCD has gotten along just fine without getting trivial naming details just right. π
I watched Black Dynamite lateley so I was thiking about the neighborhood.
But while I read A Song of Ice And Fire I probably would have thought about knighthood.
LOL. This discussion reminds me of this quote:
:)
Seeing these "levels" I feel I have a bit of every part, but nothing really "full"
I studied CS, but my focus was on usability, and programming techniques and not complexity theory.
I worked as a dev for 10 years now and did a bit of everything while focusing on UIs.
Often I ask myself, how can I grow as a dev and deliver more value, but I find it hard to find and adress problems in my skillset. Often I simply learn a new technology to tell myself "I got better"
Yeah, I can see that. Despite my attempt and dissertation about classifying "ranks linearly," I fully realize that reality, in practice, is a multi-dimensional beast and things are never that simple.
Thank you for taking the time to read!!
Love the article! I have had a similar discussion with a number of other professionals over the years. If now there was a was to empirically demonstrate a person a strengths and knowledge in order to progress through the ladder...properly and not game the system.
Thank you, David! I think that results (not effort) are what demonstrate strength. Unfortunately, it takes time, but I have not found a better proxy.
The levels look interesting! I like how you separated the levels of proficiency. This really is a field where we continually improve, and I think the comparison to marshal arts is apt.
However, I take some umbrage with the titles. "Computer scientist", "software engineer", "software architect," and similar suggest that this is a scientific, engineering-based field...and it really isn't.
Building code is nothing like building bridges, and every rule of computer programming is technically one of our own invention. Math and physics affects it, much in the same way math affects music and color science affects painting, but math and physics do not define programming like it does any scientific field. (See The Cake Is A Lie for more detail.)
Meanwhile, hacker is actually tricker territory than I think your article realizes. Removing the illegitimate, media-fueled uses of the word, a Hacker is truly the most skilled of coders. We aren't just come up with kludgy solutions. True "Hackers" write the most efficient algorithms, the cleanest code, and the best functioning software. We come up with unusual solutions, true, but those solutions are elegant, not kludgy. Eric S. Raymond, Linus Torvalds, Alan Kay, Guido Van Rossum, Bjarne Stroustup - these gentlemen are Alpha Hackers, having truly earned the title.
According to hacker culture rules, you cannot even call yourself a Hacker until a Hacker calls you one first. I only recently earned that distinction myself.
Honestly, a Hacker can appear anywhere in this spectrum. I agree we're something of a "street fighter" type - we follow our own credo, and not that of the Big Organized Groups. You can be a Hacker in infosec ("white hat"), in programming, in computer engineering, and in many other branches of the computer industry, but you are either a member of Hacker Culture who has earned the title, or you are not. All others who claim the title are imposters.
Thank you for your note. However, I am going to respectfully disagree with some of what you said.
Math is made-up by humans, and so is physics. We invented theories and rules to describe and model reality, but math is not "reality," it is only a tool to describe it. Physics is the same thing, a set of rules to describe, study and make sense what we experience.
Many "laws of physics" break down when you change the conditions (like at the sub-atomical level or speed of light), clearly showing how little we know and how those are only approximations.
Computer science is the same thing. It is a set of models to and theorems used to describe characteristics of problems that affect real life. In other words, computer science is a science as much as Math and Physics are sciences.
Well, no, I would not be able to agree at all. Don't confuse the fact that we don't fully grasp math and physics with the idea that they're somehow theoretical, fluid concepts.
Gravity works. It will always work. We can't stop it from working. We just haven't fully comprehended or described how it works.
Similarly, 2+2=4. For all time, those quantities add up in that way, and it is literally impossible to get anything else out of it. You can change the names on the quantities, describe the problem differently, but the principle that addition and the quantities describe is real, has always been, and will always be.
You only described how our understanding of the laws changes and breaks down. The laws themselves are beyond our present grasp, but they're there, complete and unbreakable.
By contrast, we invented every rule of computer science. We decided to use binary for storage (granted, it was the most efficient, but there are other working systems). We wrote assembly code. We decided what instructions a CPU could process. We designed the behaviors and specifications of every single language. The rules, flaws, foibles, and factors of programming are entirely the result of one human-created design piled on top of another.
Thus, it is more akin to an art, such as music or painting, than to building a bridge.
In fact, I'd venture that you'll have a very hard time finding any Founding Fathers of Modern Programming who would equate software to engineering. By way of example, Donald Knuth, Eric Raymond, Alan Kay, Gerald Weinberg, and Fred Brooks have all made these observations before. Programming isn't a science. Trying to cram it into that box is what keeps getting us into trouble.
The vast majority of computer science theory doesn't have much to do with physical computer hardware and programming. A lot of it is the study of problems and algorithms, which is much closer to math than to computers. In other words, it is a theoretical science that can be applied to real problems. That is very all similar to Math and Physics.
You are right that Programming isn't a science, but Computer Science is absolutely a science.
Confusing computer science with programming is similar to confusing math with woodworking.
Well, and I think we can agree there. The trick is, when 99% of people say "computer science," they mean "programming," and that gets really tricky, because it's wrong.
So, in general, I avoid the term "computer science", and separate things out - programming, computer engineering (a branch of engineering, definitely a science), and...whatever you call algorithmic mathematics. (Dangit, I'm two mugs of coffee shy of remembering what you call that.)
Incidentally, "computer science" was itself coined by the ACM with the intention of approaching computer programming as a science, centuries after mathematics first began studying algorithms.
But, bringing the point back around, software architect and software engineering, as well as "computer science" in the context of programming, are...definite misnomers.
I covered this in the post, but software engineering is not just about programming. Software architecture is also not just about programming. Programming is part of it, but it is not the same thing.
The terms describe exactly what they describe, and that is not programming.
That's why, in my view, they are levels on a path, like belts in a martial art.
What a black belt can do and understands is not the same as what a yellow belt studies. It is not "more of the same", it is "more and different."
Many people who code can't architect systems. Many people who code also cannot engineer systems. The confusion stems from using programming and those other terms interchangeably. The entire premise of the post is to differentiate between the terms, which mean different things and describe different levels on a path.
To be honest, I hadn't caught that the first time around, but I can see now that's the point your making. And, once again, I would have to disagree. To place them in a continuum would somehow suggest that a programmer must become a "computer scientist" (algorithmic mathematician), and must become a software architect, etc etc, to progress in career.
Yet Donald Knuth, who is regarded as one of the greatest programmers and mathematicians in computer science history wasn't a "systems architect", and yet he was far more skilled in the computer industry than most systems architects ever will be. You'll find the same true of many other greats. Meanwhile, some of those greats do not have degrees in computer science, and quite a few people with CS degrees aren't half as skilled as many peers with no degrees.
So, in short, I'd say that to place these differing fields on the same continuum is missing the point; it's like saying that a sculptor is more advanced than a painter, and therefore a painter must become a sculptor to move up in career. Clearly, that is not the case - painting and sculpting are different, but they are in no way inferior or superior to one another.
But, if you were to stop short of blurring entirely different branches of study into one continuum, and focus purely on one's skill in software development, you'd be onto something.
Programmer is before computer scientist, so no... a programmer does not have to be a computer scientist. At all. In the post I also talked about how many people stop at Programmer, and have fine careers. Sometimes great careers.
I knew that a 3000 words post would not be read completely by lots of people. Oh well.
Well, yes, I saw that part. The problem is, if we were to equate this to levels of marshal arts, the problem remains that Donald Knuth, Alan Kay, and many other true black-belts would get relegated to a lower level, below people they can code circles around. See my issue?
Martial arts (not marshal).
You don't have to be a black belt in martial arts to kick a win a fight against a black belt. That is a fallacy. There are masters of martial arts in their 90's who don't have a chance against strong and much younger athletes. That's why the analogy works so well.
Lots of people become masters of their niche and don't need to progress past it to have an amazing career. Donald Knuth is a master computer scientist and programmer. I am not sure what is the point you are contending. You call that "true black belt," but what does that mean? In many schools of martial arts, if you don't study certain Katas and other things, it doesn't matter if you are a super strong fighter. To get a new belt you need to master certain skills.
Does he also possess the skills that I described for Software Engineers and Software Architects? If not, then in my book he is not a "black belt," even if he can run circles in programming and computer science theory around people who I define as architects.
Anyway, I think I described a model in the post and I also made it clear that I expect some people to disagree. I am happy to see that I was right on that one at least :)
Well, I can appreciate your perspective, even if I don't agree with it.
If no one has told you yet Lorenzo, we appreciate your posts here. You continue to give us quality posts, sound advice, and easy-to-understand analogies. I'm always appreciative of leaders who can share their wisdom!
Thank you, David. Your note made my day!
Amazing piece. Andy Hunt, in Pragmatic Thinking and Learning, covered the Dreyfus model of skills acquisition to five levels: Novice, Advanced Beginner, Competent, Proficient, and Expert. You have made great improvements over the Dreyfus model and Andy's use of it. I actually have an InfoQ article scheduled to be published where I talk, very briefly, about Dreyfus, and, when I get the article back for last edit, I'm going to add a reference to this piece.
Thank you, Don. I am honored and humbled by your thoughtful note. If you do add a link from your article, please consider linking the original as it helps my SEO and it helps to spread the word about the work I am doing. Looking forward reading your article.
Ho letto nel tuo profilo che hai imparato l'Italiano. Bravissimo! Io sono nato e cresciuto a Firenze, dove ho vissuto per 26 anni. Mi fa piacere vedere che la lingua Italiana e' apprezzata e studiata.
Gracie per tua risposto. Io e mio moglie amato Firenze quando noi visitato li cinque anni fa. Uno domanda per te -- Lascia conosco qualcuno siti de Italiana for tech. Mi piacerebbe a leggere buono articoli in Italiano. Io gia letto multissimo romanzi in Italiano. A proposito, I letto, (in realtΓ , ascolto) in Inglese, due del il libri che te ha consigliato in "11 Books All Software Engineers Must Read" in il ultimo mese.
Or! We can just stick to Junior/Senior/Lead titles. And not make up our own interpretations of words we act like we understand. Ie Hacking is programming... Hackathons. Engineers and Developers are entirely dependent on the company. Most Engineers I know donβt touch a lick of OOP code.
About performance, you might find this is interesting:
Prints:
This reminds me of how Riot Games organizes their title bands.
engineering.riotgames.com/news/deb...
engineering.riotgames.com/news/deb...
Just FYI. Thanks for the article! Would love to see your perspective on their categorization.
Thank you! I'll need to take a peek.
As long as it is clear what problem it resolves and the tradeoffs. For example:
Great read. Love the closing "Serious martial artists study their art all of their life; serious software developers do the same"
Thank you for writing this. :) very enjoy the reading. Now I have a clearer look on software engineering.
The hacker way of getting the sum of numbers in an array
eval([1,2,3,4].join('+'))
the read that made my week : )
You forget to add the Tech Enthusiasts level
Thank you, Njoku. "Tech enthusiast" in my model is not a level; it is a motivation for studying programming. A tech enthusiast could be a beginner, a coder, or any of the other levels, depending on proficiency a skills.
What would a C version of this look like?
has Zaha Hadid worked as a construction worker?
wow find to much interesting discussion here. performance in computer architecture
Good day Brothers
I am looking for a good programmer , who can build a software with a very beautiful interface , Write me a message