Confessions of a Software Developer: No More Self-Censorship
kerrick.blog91 points by Kerrick 4 hours ago
91 points by Kerrick 4 hours ago
What does it say about me, that I was SURE his article was going to be admitting out loud that we are engineering ourselves into obsolescence, a lot of us are really enjoying it, and nobody is seriously discussing how afraid we should be for our families and future.
I am enjoying the hell out of it, I’ve done nothing else for dozens of months, and I feel that hence I am/developers are in a unique position to understand what type of hell - or heaven - our society might experience in the next five years. Shouldn’t we be openly discussing how we can leverage this foreknowledge?
Every time that I read this about remote work, all I can think is how much I miss IRC and the culture that came from it.
We were doing remote work effectively decades ago. Don't have hallway conversations to fix bugs? Easy, just post your problems on the team chat and someone (often one of several people) would love to drop by to help.
I'm not sure exactly all of the forces that have led to this changing so much, but I'm certain that merely blaming "remote work" isn't it.
Somehow we were better at using remote tools while literally in the same office than some teams are at using them now while fully remote.
> Somehow we were better at using remote tools while literally in the same office than some teams are at using them now while fully remote.
I couldn't agree more. I pushed to get the place I worked for to use Slack when it first launched, moving us off AIM (ha!). Our use of Slack when we shared an office in the twenty-teens was so much better than the use I've seen of Slack/competitors on fully-remote teams.
I wonder if it's because the failure mode was, as you said, to "drop by." Now the failure mode is... just failure.
I can't speak for everyone, but I'd say that I've noticed that younger devs simply do not chat.
My team rooms are pretty dead. I'll send stuff there but by and large the team simply doesn't use chat functions.
Perhaps the youngins are more cognisant that it's all monitored. Knowing your employer can read everything and it _will_ be used against you has a chilling effect and I'm pretty sure that's part of it.
We had such incredibly heinous group chats on our Slack that if an admin perused through the logs we'd be instantly fired and the company shut down right then and there lol. The paranoia drove everyone nuts which made it more fun.
They, for every team I’ve ever managed, have an off company owned systems chat on shit like slack or discord where they are roasting the fuck out of you.
I’ve managed to be invited or told of them after ingratiating myself to the teams, or more often, after quitting and getting invited as one of the “good ones”
They all know that every word on company shit is being monitored
Partially thats about teams and how most corps use it, which is built primarily around information siloing and management visibility.
It doesn't help that reporting people to HR is a way to career advancement.
I’ve never worked _anywhere_ where reporting someone to HR was anything but negative impacting for your prospects at the company. And I’ve worked at lots of places in many dimensions (company size, industry, age, etc)
This usually applies to Big Bank.
Is that a dynamic they have? I haven’t worked at Big Bank but I’ve worked in finance a few times and at those places and other industries I’ve worked in reporting anything to HR wouldn’t necessarily get direct consequences but you would permanently be on their radar and have to work to rule after that
Yeah. Random example: I have better "ambient awareness" remotely because with slack I am in every hallway simultaneously, and can skim the conversations and set up highlight words
I wonder how much of that comes down to culture. Since going remote I have come to wonder if a direct-message-first chat culture is harmful to collaboration.
IMHO most companies encourage public-first conversation, but still end up with DM-first as their employees don't have enough trust in how their messages will be received.
It requires to be comfortable exposing lack of knowledge or saying weird things to peers, and be confident it will be taken in good faith. As you point out, that requires a whole level of culture building.
It is. You need to be aware of it and have people that can set examples about chatting in public rooms or who can recognize when to stop a dm chat and move to be public
It's a strange pattern I observe often, whenever an idea gets promoted from organic-natural-human-ritual to official-new-visible-main-idea, it becomes bloated and off point.
> Somehow we were better at using remote tools while literally in the same office than some teams are at using them now while fully remote.
This is sort of the point. Remote tools work great when you have spent a lot of time building relationships and rapport with the people involved. That's hard to do in professional settings, and extremely hard to do in remote professional settings.
Letting teams that know each other well work remotely works great. Building teams remotely is very hard.
I'm a diehard for remote work, but we have to be realistic abouts limitations.
IDK, some of the remote teams that I've worked on were only able to meet in person once per year, if that. They were very communicative on the tools that we had though.
Electronic chat is really not the same as face-to-face communication. Neither are video calls.
For me, electronic chat is better most of the time.
Everyone is different. I vastly prefer email over chat, but also wouldn't want to live without the occasional face-to-face.
"Everyone is different" is my point. Face to face once in a while is nice, though I don't care so much about having it very often with my colleagues in a professional setting.
Of course it's not the same, that's the point. I personally prefer the async, chat based mediums I've used since I was a child. Some of my coworkers have disabilities that make conversational typing difficult and prefer video calls as a result.
Consider the effort to accommodate those preferences though. Accommodating a video call preference is easy. Same for chat. Accommodating a preference for face-to-face requires spending an hour (2x average US commute) traveling to meet you. That's quite a significant ask of the other person.
now we do the work of 7 projects in half a team paid 50% less and can't get to help anyone as we all drown in 7 tickets we should do in parallel with agents writing docu on the side and assist and some of the easier code on the side because management drank the koolaid of going full into AI and "the Team now can do 300% more right". I miss the old times where making 100k and still could have few minutes to help each other and now we're in this hypercapitalistic garbage AI age were we have to just output, output, output and fuck quality and else they lay you off and get the next guy from wherever.
> left inner join
While I do appreciate this joke (and I do hope this is a joke), I've recently had a project majorly held up because a lead dev didn't understand SQL. It's great to admit gaps but it's equally important to close those gaps.
> As a hiring manager I interviewed software engineers and tried to filter for object-oriented knowledge. Retroactively, it’s clear I was hypocritical.
As some one who has been on the other side of "rejected by an interviewer who didn't understand the thing they've interviewed you about" I, again, appreciate the transparency, but I'm not entirely feeling that the lesson has been learned in the case.
There was a time in my life where I felt ashamed that I didn't know calculus... so I learned calculus and my life has been better for it. While refusing to admit ignorance of a topic is particular problem in tech, confessing that you don't know something and gleefully stopping there is not much better. Holding people up to a standard you do not hold yourself to is a major problem in this field. The technical people I've learned the most from hold you to a high standard and hold themselves to an even higher one.
Of course not every engineer has to hold themselves to a high standard, but if you want to write a blog about a topic, then part of the requirements here is that you do hold yourself to a high standard. Yes, we all have gaps, and we shouldn't let shame get in the way of learning, but we shouldn't let shamelessness about what we don't know limit us either.
I am indeed learning, working to close those gaps.
For automated testing, I'm in the middle of reading Developer Testing by Alexander Tarlinder, with xUnit Test Patterns by Gerard Meszaros coming close behind. I'm also working through Test-Driven Development: By Example with my wife as we have time.
For SQL, I read Grokking Relational Database Design by Qiang Hao last winter, and I started SQL Queries for Mere Mortals by John Viescas this week. Sadly, my flub with "left inner join" was not a joke.
For OOP, I've been on a whirlwind tour: OOA&D With Applications by Booch et al., Object Thinking by David West, POODR and 99 Bottles of OOP by Sandi Metz, Domain-Driven Design by Eric Evans, IDDD and DDDD by Vaughn Vernon, and Design Patterns in Ruby by Russ Olsen, Clean Architecture by Robert C. Martin, and Smalltalk Best Practice Patterns by Kent Beck. Still on the docket are Design Patterns by the Gang of Four, PoEAA by Martin Fowler, Smalltalk, Objects, and Design by Chamond Liu, and Object Design by Rebecca Wirfs-Brock.
> confessing that you don't know something and gleefully stopping there is not much better [...] we shouldn't let shamelessness about what we don't know limit us either
I promise you, this was not gleeful and this was not shameless. Shame and fear affected me for months on these issues. And I'm not stopping there... From the end of the article: "I’m going to continue to work on skill building, but now I feel free to write about it. If [...] you’d like to help me fill [my knowledge gaps], [...]"
> if you want to write a blog about a topic, then part of the requirements here is that you do hold yourself to a high standard
A high standard of writing, maybe. But plenty of great stories come from those who are striving for a high standard, not just those already in the upper echelon. It's what makes this place different from academic journals.
This is great to hear and I do appreciate the clarification. Having put lots of content out in public myself (though this account is intentionally pseudonymous) I know it's also equally difficult to comment on content like this without being on either end of the "asshole" <-> "awesome!" spectrum, and sincerely hope my comment to not fall to close the the first part.
Not exactly your main point, but where’d you go to learn calculus? I did the usual classes in high school but none since, and I’d love to develop a better appreciation for it.
Check out Mosaic Calculus and see what you think: https://www.mosaic-web.org/MOSAIC-Calculus/. It's a free resource and it takes an interesting perspective on calculus pedagogy.
I find 3blue1brown to be a great resource to build up good intuition about math topics, his videos about calculus and linear algebra are wonderful in particular. https://www.youtube.com/playlist?list=PLZHQObOWTQDMsr9K-rj53... is his essence of calculus series, I found the visualizations made it a lot easier to grok.
I got mine doing a computer engineering degree.
My suggestion is using Khan Academy if you want to better your math knowledge. It's really quiet good for that sort of thing. It was just starting to take off when I finished my degree. I wish it was available before then.
No offence to everyone else in this thread but the holy grail is truly The Art Of Problem Solving textbooks + mathacademy [0].
I think the author is too hard on themselves for not knowing things, probably coming from shame. I can only speak for myself but learning to shrug that off just how to say "I don't know X" or "I forgot X" is very freeing. I say I don't know shit all the time at work, and so do people I work with. We aren't encyclopedias. Just chuckle about it and figure it out and learn.
I much prefer working with people who can just be honest about what they don't know, it's way better than pretending to know or trying to save face, and generally people in the former camp seem to have higher EQ.
My boss actually said that to me once. He said he really appreciated that I would say "I don't know" instead of bullshitting him. Of course I would also try to brainstorm with him or find the answer later on by searching.
For some reason I'm able to say "I don't know" to coworkers and superiors at work with no problem, but I have a much harder time online where it may affect future employers' opinions of me.
Where are you conversing online that this is a concern?
My blog.
- I blog with my real name, which includes an uncommon first name. It's easy for hiring managers to search the web for.
- My blog is linked from the website I host on the domain name I use for my email address, including for job applications. Anybody I email is likely to follow that thread.
I appreciate the author being vulnerable like this in a public setting. It's easy to see why it would be scary, especially since admitting being wrong or not knowing something can easily be turned into questioning one's overall competence.
I wish we'd be more open about our flaws and knowledge gaps in general. I think we'd all benefit.
Like the post overall, but the last section is a bit weird for "confessions" as it's all HIGHLY subjective. For example, I worked at a company where no one worked from home and we paired 100% of the time. When COVID hit, we started pairing over Tuple and I found it to be a superior experience to pairing in person (Tuple's drawing and attention drawing tools are far more accurate than my finger, I can use my own keyboard the odd time I want to control my pair's computer, and there are no office distractions of other pairs in the same room are benefits that come to mind). I continued to enjoy (and prefer) it for the 1.5 years I stayed after lockdown.
All the confessions are highly subjective. If someone tried a refactor like the one at https://refactoring.com/catalog/replaceConditionalWithPolymo... there is a decent chance it should get picked up and reverted on code review.
Taking a switch statement and spreading it out over 3x classes is not a general improvement, it is very context specific. It makes the code difficult to navigate because what used to all be in one spot and easy to read is now spread out who-knows-where and there might be a special case lurking somewhere.
I suppose I included the last section as a "confession" because I spent years pre-pandemic wishing I could go remote, talking loudly about how open office spaces were bad, etc. That, plus it's embarrassing to admit that I dislike remote work even though I am a remote worker. And not just a remote worker, but an enfranchised remote worker living 3 hours away from the nearest city with an international airport. I made the mistake of rebuilding my life around remote work before I had experienced it long-term.
Awfully nice, isn't it? You get all the privileges of being a remote worker, while "confessing" that remote work sucks to upper management who read your blog, giving them justification to deny other people the same opportunity you have. If you genuinely believe remote work sucks, you should own up to it, sell your property, and move to a city rather than reaping the benefits of it to the extent of your entire life being dependent on it while talking about how bad it is. The fact that you haven't done that indicates to me that you actually quite enjoy the benefits more than you suffer the drawbacks, but aren't acknowledging it, instead choosing to denigrate remote work for having any drawbacks at all.
> giving them justification to deny other people the same opportunity you have
I don't fear they'll deny others the opportunity for remote work. The company is "headquartered" in California, but I don't know if they even lease an office anymore. The CTO lives in the upper midwest, the architect lives on the east coast, my manager lives along the Mississippi River, and I live in the Ozarks.
> enjoy the benefits more than you suffer the drawbacks
Yes. I'm sorry, I thought I made that clear in the post. The benefits of remote work include, but are not limited to: no stress or time from commuting, an opportunity for geographic arbitrage, and the ability to build a better lifestyle around the lack of a commute. Beyond just the remote worker themself, a society that transitioned all office work to remote would also gain more benefits: more efficient use of real estate with entire office buildings rendered unnecessary, less chance of land value distortion due to centralization of workers, and less pollution due to fewer commutes.
I'm glad to also denigrate in-office work for having other drawbacks. For example, I was rear-ended commuting to work more than once, the family needed the expense of two cars, we spent more on clothing, and the ambient level of noise being above 35 dBA was annoying.
My knowledge-gap confession: even after many years with the languages, I can't write a main() in Python or Java without looking up the format.
So many things like that!
I don't know if I could tell you with confidence the proper way to get a string length in any language. Is it a global function or an object method or property? Is it length or count or size? I have to look it up or rely on intellisense every time. I do too much bouncing between languages.
Well, I know it in BASIC. Len().
I’ve spent so much time in both the .NET and JS worlds that I can't even begin to count how many times I’ve typed `Where` when I meant `filter` or vice versa.
What, `def main():`? Or do you mean the __name__ == "__main__" thing for distinguishing whether the code was imported?
I can successfully type "def main()" and not "function main()", unless I'm switching between JavaScript and Python and forget which language I'm in :-). It's the if statement with all the underscores that I need to check every time.
I actually made that a keyboard macro because, even though I remember the syntax, I can't be bothered with all the special characters all the time.
I set up some .NET services years ago. Since then it was just adding new stuff. If I was asked how to set up another service, I would have no idea how to do it
Continuing the confessions: I do php.net/<function_name> at least twice a day
Is that a bad thing? I also call man <libc function> several times per day, most times I think I already know the calling semantics, but there is always some nitpick about the calling semantics or a bug description, that I didn't had in mind.
LLMs are wonderful for this. I can't write hardly a line of shell script without looking something up. And then there are three different ways to do <thing> so I spend time beard-tugging as to which way to do it. Now I just tell the LLM what I want changed about this shell script and look at what it comes up with. 100% of the time it's fine.
It's the main benefit of Rust ;)
(obviously it's not but it is super nice that main in Rust is just:)
fn main() {
}In python, it's trivial:
def main(): # code
The dunder syntax you see around isn't required.
The section on cyberharassment is really troubling, although with the current vitriol on AI I'm not surprised. Do wish the author mentioned the name of the site though, if only so I can avoid it (and not in the Always Sunny "oh no terrible! where?" way)
I was as curious as you were. Turns out there are only so many popular threaded discussion sites in the vein of HN on the Internet, so an educated guess is all it takes.
Without making judgment on the actions of any involved party, I do wonder why the author would choose to bring up this incident and submit it as part of a story to a site where there is a significant overlap in readership.
That incident catalyzed the fear that suppressed my desire to participate online for months. I figured that if I couldn't talk about it now, I might never participate again.
Good on you.
Honestly, if there's any chance the content they posted on your profile before locking you out comes close to defamation, I'd consider talking to a lawyer about it. It could be that getting one to send them a cease-and-desist letter on your behalf could take care of the problem.
Well that sucks. It's exactly the site that comes to mind when I think "most popular alternative to HN".
I've generally found conversation there to be more respectful than HN, rather than less, when discussions get heated - so I had high hopes it would be a different site, but alas.
This leaves a really bad taste in my mouth.
Edit: you know what, screw it. In the spirit of "no more self censorship", here's the link: https://lobste.rs/~7u026ne9se
I don't find the conversation to be especially disrespectful. The people in the thread in question attempted to shame him, to some extent. Shame is a social measure to coerce people who are behaving contrary to society's expectations to change their behaviour. However, while shaming him, they did not especially resort to childish name-calling or ad hominem. They reasoned with him extensively as to why his behaviour was deeply undesirable. He went so far as confessing that he did not even know the language of the PR he submitted, yet intentionally withheld information about the provenance of the code. Sometimes the shame mechanism is misused for things that should not be shamed, but this seems like a clear case of shameful behaviour that deserves social repercussion.
Sadly, it seems like nothing was learned, since he settles only for diminishing his culpability in anti-social behaviour. He goes so far as to describe, in his blog post, his code as an "AI-assisted patch". When you profess that you don't even know the language of the code that the LLM generated, there is no "assistance" about it, you're at the deepest end of vibe coding. And in submitting it to an open-source project, you're making a maintainer spend more time and effort reviewing it than you did prompting it, which is not sustainable. Moreover, if the maintainer wanted a pure-LLM-generated solution, there was nothing stopping them from hopping over and typing in a prompt themselves.
In fact, most of the comments were purely a debate with no direct attacks at all. The extent of "not respectful comments" I see are something like...
So your original comment that you "didn't want to hype up AI" was a lie, you really just wanted to pretend it was your own work and didn't want the project to be able to make a choice about it. There are good reasons why projects may not want to accept code generated by AI. They may not care. But by consciously choosing not to disclose that, you took that choice away from the project. That's pretty lousy behavior if you ask me.
"Pretty lousy behaviour if you ask me" is incredibly tame. If that's what counts for toxicity, then you're advocating for a toxicly positive carebear forum where nobody is allowed to criticise anybody else's decisions.I don't know, I'd kind of like to see their responses before passing that much judgement on them.
> you're advocating for a toxicly positive carebear forum
Please stop putting words in my mouth.
I need to figure out how to be as open as the author is - it comes across as fricking amazing!
I am dumber for having tried to understand what I just read.
Loved your post! I've been feeling the same way (currently feeling crushed by work+master's)... hope to work the courage to break the dam as well.
Here’s a great idea for a good opportunist:
A “Confessions of a Software Developer” website where devs can come in and make anonymous confessions.
Refreshing to read, I bet it was cathartic to write. I hope your fears don't come true. I think they won't. Many people do genuinely appreciate this kind of honesty, even when directed against them, but it is a gamble.
A good reminder that everything we say/hear/write/read exists in the unseen context of all the things we believe we should not say.
> it’s easy to form an enemy image of somebody at the end of video call, but difficult to keep that image when you share a room with them and sense their pain.
I'm honestly so confused by this. Has the author never worked in an office before? Building a grudge for someone that you are forced to work with and sit next to all day is one of the classic office dilemmas. Being forced to be around them all day can really build resentment to people
> Remote work sucks
Work sucks in general. Remote work is of course not perfect, but its problems need to be compared against non-remote work problems..
Remote work isn’t for everyone. Their point of view is just as valid as your point of view.
And this is my biggest complaint about arguments about remote working. People turn it into something that’s evidence-based when actually it’s a deeply subjective topic and thus different personality types thrive in different working environments.
People have painted themselves in a corner re: remote work and get wacky in discussions about it. Lots of emo, not much fact.
Remote work is great (for the reasons you gave and more) and saying it "sucks" made me roll my eyes, and it's reductive in the same way as saying office work "sucks." I wouldn't have had a job if in-office was the only option. It certainly didn't suck for me.
Being bad at problem solving with people far away is just another problem you can solve with practice. Same as being bad at problem solving even when help is right next to you.
> made me roll my eyes, and it's reductive in the same way as saying office work "sucks."
Yes, "remote work sucks" is reductive, but I elaborated beyond the heading. Also, I wouldn't disagree with "office work sucks." Remote work simply has its warts, too.
> just another problem you can solve with practice
Perhaps, but practice alone clearly isn't enough. I've been working remotely since 2020 and it hasn't gotten more enjoyable. I would love to solve that problem, though. I read Remote: Office Not Required by Jason Fried in the past, but that was written a long time ago. I've added more recent works (Effective Remote Work by James Stanier and The Async-First Playbook by Sumeet Gayathri Moghe) to my reading list.
I’ve worked remote for at least 16 of the past 22 years including my first job out college. It’s always been friggin awesome. The only downside was when I was contracting and I’d get calls in the middle of dinner and I didn’t have the self-discipline to ignore the call. A few times a year I have to travel to work, it’s nice to see folks, but it’s not required to get the work done, I put my big boy pants on and figure it out, or ask for help when I can’t.
I think Uncle Bobs advice is mostly bad and am afraid to admit it because it’s like a (cargo) cult now.
If you ever feel bad about yourself as a programmer you can go read some Rasmus Lerdorf quotes to cheer up :)
Or work with a random programmer at a random company for a bit. We had to do some audit/estimate for a company with huge tech issues (race conditions causing data corruption, huge slowdowns with just small usage spikes etc) costing them clients/money. The company runs around $50m/year or so selling software to enterprises. Anyway; software backend written with Java/Spring, deployed/updated on EC2 manually, no automated tests (zilch). Frontends with Vaadin. Almost no processes are used, just Jira + tasks and then 'start at the top every morning'. No one knows sql anymore (Hibernate), no one knows html/js (Vaadin) and, even though most people are senior and there since the beginning, no-one has done anything high level on the job in the past 20 years or so. They have just been inside this 'ecosystem' writing code and it works. Old Java with some modern updates just to satisfy the compiler/linter (but not fully understanding why that nonsense is needed). None of the core seniors I interviewed touches computers outside of work, they had 0 tech courses since working there etc. They are all 9-5 code producing robots. I want to bet they can mostly/all be replaced today by Claude Code, of which existence, of course, they are not aware (they did chatgpt but not Codex or Copilot). We have since found so many issues in the code. Yeah, I do feel very much uplifted about my own skills after encounters like this, and these are by no means rare, i would rather say; extremely common.
Unlike OP though, I cannot be as open about these companies as we would definitely not have any clients left after.
That sounds amazing, what you can get away with while still shipping a product and getting paid. In some way probably the engineers there are unwilling to do any automation in fear of becoming redundant, and the company is still fine with that.
Also, I am not sure how not touching computers after work is a bad thing; people can have families and other hobbies?
[dead]
My confession is that I actually love torturing people in coding interviews. Sick I know, but these are 6 figure jobs they are applying for.
I don't know that it is necessarily sick ... I suppose it depends what you do, how the people respond, and if you are playing a useful role in the interview process for your organization.
Tell us more?
On the positive side... Seeing how people respond to pressure (done within some bounds) might be useful information. Watching people dig deeper into their problem-solving toolkit (and even their determination and resolve) might be informative. But I have not recently reviewed interviewing research, so I don't know how strong the causal connections are between observing these things in an interview and on-the-job performance.
On the negative side: If one is primarily interested in finding flaws as some sort of intrinsically valuable thing or to boost one's own ego, these are probably hints to look closely at oneself and reflect and make sense of what is going on inside.