The Daily WTF collects reader-submitted stories of bad code, failed projects, and absurd workplace decisions in software.
Commenters call it one of the best blogs, programming or not, and genuine in its stories. HN links it as the home for developer horror stories.
Gotta do a back-story post on this.
Developmental psychology (specifically the work of Robert Kegan) offers a good way to understand the life transition Ms. Shellnutt described so eloquently.
(http://www.worldcat.org/title/evolving-self-problem-and-process-in-human-development/oclc/7672087)
Developmental psychology by stages isn't just for middle schoolers. It it continues until we close our eyes for the last time.
Lemme do some broad strokes on this, even though it grossly oversimplifies things.
When we're kiddos growing up, we go through a bunch of stages of socialization. Most of us emerge in our late teens and young adulthood into a stage Kegan calls "interpersonal." In that stage we define ourselves by our relationships. We learn to tell our own stories by telling the stories of how we relate to the people around us. "BFF" is a shorthand for that. In the world of social media, lots of followers / friends / links is a goal -- in itself -- of this stage. "I know this many people."
After a decade or so, may of us make a switch to a new developmental stage. Kegan calls it the "institutional" stage. Again, to oversimplify, in this stage we become our business cards or our families. We tell our stories by the institutions we serve and our relationships to them. Silicon valley rituals like deciding whether to have job titles are part of the dance of this stage. So is the glory that comes from having a short domain name. "I am the VP of design for ZZZ Corp" is a…
Bad programmers I've dealt with tend to share certain traits:
- Their code is large, messy and bug-laden
- They have very superficial knowledge of their problem domain and their tools
- Their code has a lot of copy and paste, and they have very little interest in techniques that reduce it
- They fail to account for edge cases while inefficiently dealing with the general case
- They're always rushing around putting out fires, trying to look like heroes battling vast problems against impossible odds
- They never have time to comment their code or break it into smaller pieces
- Empirical evidence plays no role in their decisions
It would be hard to self-test, but some clues would be: do you think you're the best programmer in the world? Do you find code with a lot of functions messier and harder to understand than code with only a few large functions? Do you routinely copy code from one place to another and make a few small changes to it? Do your programs tend to be a few huge files or lots of small files? When you're asked to make a change, do you usually have to touch most of the code or just a small chunk of it? If you say 'yes' to most of these, you're probably bad. If not, you're probably alright. :)
Another clue is to go read the CodeSOD articles at The Daily WTF[1]. If you find them funny or horrifying, you're probably alright. If you don't understand what makes them terrible, you're probably bad.
[1] http://thedailywtf.com/
I find this disingenuous. It is a very common scenario that a new user knows of some way to solve some part of their question (or just thinks they do), and assumes the best/easiest/fastest/safest/whatever answer involves using that technique. This is exactly the scenario that Alex Papadimoulis referred to in his blog post[1] that I have to believe was the inspiration for his site The Daily WTF[2]:
> "A client has asked me to build and install a custom shelving system. I'm at the point where I need to nail it, but I'm not sure what to use to pound the nails in. Should I use an old shoe or a glass bottle?"
>...[potential answers]
>b) There is something fundamentally wrong with the way you are building; you need to use real tools.
The answerer is often telling the person, what you are trying to do sounds like a really bad/inefficient/ineffective/whatever solution. The common way to solve this is Y because of reasons A, B, and C. Are you doing something where those reasons are not a concern?
[1] https://weblogs.asp.net/alex_papadimoulis/408925
[2] http://thedailywtf.com
> Whenever people say stuff like this I can't help but wonder what on earth kind of projects they work on. Even GPT4, while useful for things like reformatting or generating boilerplate code and stuff like that, it's still a far cry from any decent dev I've ever worked with, especially if you're not using a popular language like JS or Python.
I mean this not overly sarcastically, but ... have you seen https://thedailywtf.com ? Between my own experiences, and that of some colleagues, I could probably put together at least a half-a-dozen WTF stories that would rival some of the best that site has to offer. There's enough really incompetent people in positions they shouldn't be in to the point that chatgpt - at this point - could realistically provide better output than more than a few of them.
It depends a lot on the experience/background of the person, as well as the problem at hand. Most programming "problems", like any other engineering field, have already been solved, so there's no shame in turning to a search engine or even better, StackExchange, for solutions. The best coders are the ones that are learning all the time.
On the other hand, there is usually an impedance mismatch between the description of the problem and the actual solution. Take a look at the horror stories on The Daily WTF. http://thedailywtf.com/
Anyway, try to read as much code as possible, both good and bad, find a mentor(s), be able to take constructive criticism, and just persevere, and you should be fine.
So how would you answer my question? Would you really dock someone who could give all three of those implementations, but struggled to give a truly horrible implementation? How bad does it need to be truly horrible?
I ask because I struggled coming up with a horrible implementation of FizzBuzz. My best attempt was to have Python create a sqlite table then use SQL to do the test. Such implementations occur all too frequently at http://thedailywtf.com/ .
But surely this would not be an example of great understanding of either Python or SQL. Therefore, I don't see how you can draw your conclusion.
Could you explain more fully?