What is a coder's worst nightmare?
quora.com
quora.com
Oh, and there's no test suite.
That is my nightmare. I've been there a few times and it can be literally impossible to shine in that role.
"What do you mean, it will take you ten hours to add a button? They coded this whole module in one week and there are 100 buttons!"
aarrrrgh
Now, as an engineer, I understand and embrace the challenge of explaining this sort of thing to management. I get it. That's the type of skill that separates code monkeys from senior developers and architects. But, no matter how good you are, you can't force management to listen nor understand.
I really enjoy working on legacy code. Usually everybody else leaves me alone because nobody wants to touch that code. I get a tonne of freedom. As long as I don't break things (requires a fair amount of experience) I can quietly improve things under the hood -- targeting areas where we get a lot of requests. Legacy code is also great because usually nobody wants new features just for the hell of it. You almost always get real requests from real users that have real pain points. The biggest downside (as you imply) is that it's hard to shine because the best you can do is make things acceptable. It's difficult to hype the legacy project so you don't get a lot of recognition for your work.
One thing I'd say is that it's awfully tough to do this sort of work as a contractor when there's a (direct) hourly cost for your time. It's tough when you're on salary working on an internal project... but doubly tough (not impossible) when you're a contractor! Theoretically, it would be in clients' best interests to improve efficiencies, but it's really hard to get a client to sign off on hundreds or many thousands of dollars of work for a future gain that's hard for them to grasp.
(Getting them to grasp it is part of our job, of course)
Then after the fact I say, "Remember when this used to take a week? Now it takes an hour". Once you do that a couple of times, management gets the point (usually)
This is great advice. It's all about those metrics and demonstrating the value of your work!Just put a > in front of a normal paragraph to indicate a quote.
Three years later I was still struggling to figure out even the most basic of features. It would regularly take me days, sometimes even weeks to fix trivial bugs. The convoluted code definitely didn't help (message passing between several processes, 4000-line functions...). There were a lot of features that I could barely use, let alone debug. I had no mental model of the code at all. Figuring out where my mental model didn't match reality was pretty much out of the question under the circumstances -- and my only source for creating a mental model of the code was, well, the buggy code.
Thankfully, I also worked on other things during these three years, so my sanity is still mostly intact. But that thing was really terrible.
The convoluted code definitely didn't help (message passing between several processes, 4000-line functions...)
Oh man, yeah. This kind of thing's hard enough in a single threaded monolith, much less when you've got multiple processes!One time I was actually able to kill/retire a whole bunch of external processes and bring stuff back into the monolith. Yeah it made the monolith 1% bigger or whatever, but I think it was 100x better than throwing more services into the absolute gangbang of dependencies in which we were already drowning.
I'm glad you were able to move on and had other stuff to work on. Looking back, I probably should have just found another job rather than push through those legacy maintenance slogs. Lost sleep and hair for years, and it was sort of a career black hole.
It took me months to take his spaghetti code, modularise it, and yet still every time he commits is a constant argument of things being in the wrong place in code.
Ken Thompson, "Reflections on trusting trust", 1984. https://dl.acm.org/citation.cfm?id=358210
So by declaring nerd war, he actually saved himself a day.
Something like 30% of papers can't be reproduced, regardless of bugs.
You might then suggest that the journal should be prepared to also review the code alongside the claims it produced in the article — this seems like a good idea to me too but in reality would require hiring more reviewers (doubtful the tenured nonagenarians are up to the task), all while tightening the restrictions on the submitters. Just doesn’t make sense for a business.
This could propagate any bugs in the code to multiple works. A similar problem occurs with blog code snippets that are written with shortcuts. Despite warnings that these snippets need to be expanded for production settings they are often copy pasted as is into hundreds of code bases, propagating incomplete or buggy code.
Still, you could solve for this in other ways. E.g. maybe reproduction focused journals can require reimplementation.
It says a lot about how these people see themselves within a team, and it's the kind of team I don't want to work in.
> On one occasion, according to Richards, Mick was in the mood to do some recording -- at five in the morning -- so he called Watts on the phone and said, "Where's my drummer?" Says Richards, these were the days when Mick's ego had gotten onto everyone's nerves, that it seemed all was about him.
> Watts got into his car and 20 minutes later arrived at the place. When Keith opened the door Watts walked right past him, went over to Mick, picked him up by the lapel and slugged him in the face. "Never call me your drummer again."
It's one of my pet peeves.
"Coding" irks me as well. Probably because it's used uniquely by outsiders, in my experience. I tried to ponder more about why the word might be inappropriate for what we do, but didn't get anywhere. There's that obvious difference with the word "to program", that "to program" identifies what we do, but "coding" identifies what we use. Another aspect, is that "code" is probably a leftover from the paper card programming days, where source code was very cryptic. Now we use programming languages, which are readable, so suddenly the meaning "something cryptic" of the word "code" isn't appropriate anymore. Of course, you could say that coding refers to the fact that all programming is conversion of intent into some form of messages, like processor instructions or ones and zeroes. In that sense a synonym for coder could be intent digitizer. A bit more sci-fi.
1. "software engineer" (might drop the "software" for specific roles like "front-end engineer" or "machine learning engineer" etc.) - use this for people who value their education/fancy-degree and/or who pride on code-quality, low bug/defects rate, reliability etc. and they'll love it!
2. "software developer" - use this for people priding on craftmanship and "ability to ship the right stuff on time" no-respect-for degrees etc. and they'll love it!
2b. feel free to mix up (1) and (2) and nothing bad will happen :) also using (1) or (2) instead of others will tend not offend, just show that the person using it is clueless a bit.
3. "programmer" - this is the most direct / no-bullshit term for people who hate fancy extra words and pride on practicality and getting stuff done (but it might offend ppl with fancy degrees or make them feel devalued - never use it for a PhD unless you know beforehand he/she would approve)
4. "software architect" (this is a dangerous one) - can be used to boost the self-confidence of smart but terribly insecure people (use it sparingly bc some might be pushed tot he other extreme and end up with over inflated egos bc of this... better add "senior" before "engineer", it's more honest, what we call "architecture" in software is closer to "structural engineering planning" or smth, very far off from what building architects do) ...also practical senior no-bullshit people might be offended if someone junior to them gets this title!
5. "code monkey" ...the '99 bubble is over man, like 20 years ago, forget about this, unless you're in SV or other hip place and some club/group uses it for nostalgic-value ...otherwise it's offensive, and God have mercy on your soul if you mistakenly use it in a place where ppl are unused to it and at the same time to refer to someone with non-white skin color!
6. "coder" - might be acceptable in some places, but it's also cunningly devaluing (see sister comment for details)... unless you have the malevolent intent of "placing a hint of their personal irrelevance in someone's mind while at the same time avoiding to offend them" please avoid it! (might be the worst of all actually, bc nobody can complain but at the same time you spray them with a depressing hint of their inferiority while mildly boosting your superiority and subtly lowering everyone's morale at the same time... and then as a manager you end up asking yourself in the end why it all turned to shit despite you being "such an awesome and nice guy")
Everyone pays attention to plane or space craft crash. But bad software in cars, air bags, trains, medical equipment have cost lives. Bad software at financial institution have occasionally ruined people financially. Bad social media software have ruined relationships. Bad localhost software that has crashed and taken data could ruin people in ways many people can't imagine.
Someone out there is using something as simple as a text editor to write their favorite book or keep track of their finances and run their businesses. if the editor screws up their data, you can't imagine the hardship.
You never know how your users will use your software, don't take it for granted.
https://www.reddit.com/r/cscareerquestions/comments/6ez8ag/a...
Obligatory (poor guy): https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commi...
And he has permissions to delete the production database? Heads much higher up the tree need to roll.
If you can destroy a buisness on your first day, or even severly hobble it, you have larger issues than a green dev.
Subtle corruption that silently degrade your whole company's data, hearing customers come back with complaints days after you've released your code because stats don't seem to make sense anymore... And understanding after you found the issue that you'll have to run batches to manually fix the bad data and restore anything that was affected.
That's definitely an experience i'll never ever forget.
I've found the best mental defence in such situations is to assume the worst from the outset, by expecting to have to burn untold hours figuring out how this black box _really_ works and then be pleasantly surprised some parts actually work OK. Better that than assuming "this can't be that that hard" and ending up frustrated.
This could be a case that person B was innocently working on the curses-based questionnaire program for the psychologist. Person A was aware of this work and hacked the compiler to recognize and doctor that program (including squashing it down to one line), in addition to /sbin/login and possibly others.
I'm curious how the program managed to include various headers, like <curses.h>. That requires multiple lines. I'm thinking that the hacked compiler took the preprocessed original innocent program and then output it as one line not requiring any preprocessing directives. Not even necessarily to obfuscate it, but because the division into lines was gone at the point in the compiler where this was done; i.e. this was a manipulation of the token stream of the program, and the tokens were just converted back to text and output as one line.
Could even be that this was all done in the C preprocessor rather than the compiler proper, by recognition and replacement of token sequences. Though modern compilers integrate the preprocessing phases of the language, this sounds like it was in a classic Unix environment, in which cpp was still a separate program.
Isn't it kind of obvious that this is a story, with some creative freedoms taken? The theme is an old one in hacker lore ("it was the compiler all along!"). While you are completely right this detail isn't important to the story.
The one that irks me is engineer. I've met very few developers who have the sort of professionalism that the term engineer requires. Most developers are more like cowboys whose primary goals are making other developers and themselves happy. An engineer needs to instead feel responsible for serving the users of the application, which includes maintenance by others as a subgoal. No doubt my definition of engineering is not popular here.
A good software engineer/developer has more than just code on their mind when getting something done. In fact, code is ideally the last thing you get around to.
That's my worst nightmare.
But I think one could make a good argument his final post indicates he had people who probably cared for him during his deterioriation, in part because love for them had been a north star for him.
Maybe suffering such an end without that would be worse.
P.S. If you love programming, management will destroy your soul.
(This is an actual issue I've encountered. It had to do with code scraping weather data for a horse racetrack, specifically if the page was updated while the scraper ran. It was buried in a PHP monolith with no tests. The track didn't run races on Sunday.)
Especially so when you can't adjust those defaults, thus making your post-listed code substantially more abstract and less readable than it would have been at first.
Case in point: forcing your simple 11-line function to become something more complicated that has to maintain state through each call.
Hired by a company and realize afterwards that you must work on a project that's designed and built on potatoes using potato languages and potato tools
Working in a company where I have only one monitor and a PC without SSDs. And I am not allowed to bring my own mouse/keyboard. And I don't have admin rights for the OS.
However, since I’ve bought my 27” 4k monitor I pretty much stopped using extra ones. Unless I have to for something very specific, like debugging an app which output to multiple monitors.
https://www.archive.ece.cmu.edu/~ganger/712.fall02/papers/p7...