The experience that made me hate programming, but that's all on me
Title before edit: I hate programming, why did i choose this field
TL;DR: Stupid mistake, made by hours waste.
Basically, I was extracting date from the SQL db, and it was not displaying. I tried everything, heck I even went to chatgpt, and copilot. Two and half hours of trying every single thing under the sun, you know what was the issue?
SELECT task, status, id FROM mainWorkSpace WHERE user_id = @user_id
I FUCKING FORGOT TO ADD 'date' TO THE DAMN QUERY. TWO AND HALF HOURS. I was like, "Ain't no way." as I scrolled up to the query and there it was, a slap in the face, and you know what was the fix?
SELECT task, status, date, id FROM mainWorkSpace WHERE user_id = @user_id
Moral of the story, don't become a programmer, become a professional cat herder instead.
I have great colleagues who still bust out this kind of cross-examination when we're trying to figure out why my code is a bag of poo. I have some friends I've known 25 years who will do this, and it's every bit as annoying and infuriating as it's invaluable help.
See? It should work because I initialize it as this and iterate doing this and this which gives me a data structure like this and ... wait ... oh hell that clearly doesn't produce the data structure I want. 🤦
We tend to see what we want to see, not what actually is.
Assuming you're coming from a linear programming and OOP background, then data (incl. SQL) kinda sucks because it's not always clear how to apply existing concepts. But, doing so is absolutely critical to success, perhaps more so than in most OOP environments. Your post isn't funny to me because I'd be laughing at you, not with you.
If a variable is fucked, the first questions you should answer are, "Where'd it come from?" and "What's its value along the way?". That looks a lot different in Python than SQL. But, the troubleshooting concept is the same.
If object definitions were replaced by table/query definitions in planning then you'd probably not have made the initial error. Again, it looks different. But, the concept is the same.
In those kinds of situations you need to remember to try to break the problem down into simpler sections to identify where the problem lies. One of the first steps would be to run SELECT * FROM mainWorkSpace WHERE user_id = @user_id and see if that returns anything.
One of the main skill a developer must have is being able to troubleshoot properly how their code behave.
Break your code in small pieces, check all of them with unitary test (formal or not) to validate their behavior then move to the next step.
Never test everything in one shot or you will be overwhelmed by side effect bugs whom will distract you from the real root cause.
Being a programmer is not just coding but also testing and deploying (even locally).
That won’t avoid you being blocked by a silly mistake for hours, everybody did that at some point in their career, but that will reduce your frustration against yourself when you discover why the bug existed.
Do a pause, go walk, change the topic and the next time you look at your code, you will spot the obvious bug :-)
In those kinds of situations you need to remember to try to break the problem down into simpler sections to identify where the problem lies.
Learned that the hard way.
One of the first steps would be to run SELECT * FROM mainWorkSpace WHERE user_id = @user_id and see if that returns anything.
It's one of those situations where if i write something, i forget it because it is doing its thing and about selecting everything, i should've done that and it's my mistake.
The difference between experienced devs and non experienced devs is that we have hundreds of stories like that under our belt. Hundreds of "Ah I wasted all this time because of a typo", and now we know to check for it.
It never stops. And after a while, a dev will share this exact scenario and you'll look back and share the same bit to them.
I had that experience last week. I half blame the language though cause the way it works is you don't initialize a variable, first time you use it the language automatically makes the variable and default value is 0.
I had a variable countoot that I had a formula calculate. Then a simple if countoot > 0 do this else do that. The program kept doing that. I knew countoot should be 2. I manually did the formula ... The answer was two.
I did the same formula in 3 other programs and it worked correctly. I spent between 1.5 to 2 hours a day for like 3 days banging my head on the desk trying to figure out why it would work. Fourth day me and 2 other guys were trying to figure it out when I finally really looked closely. I realized the formula result was stored in ccountoot(notice 2 c) and the if statement was based on countoot(notice 1 c)...yeah I felt so stupid when correcting the typo fixed the problem.
The difference between experienced devs and non experienced devs is that when seeing "the experience that made me hate programming" and "date" in the same post experienced devs just stop reading (mostly due to the PTSD hit) and assume it must have been some date format issue or shudder timezone shenanigans between the database and the programming language...
I’ve been a SQL dev for years. Last week I spent half an hour reading up on why wrapping a bunch of queries in a transaction was giving me incorrect results compared to when they were separate committed statements. I was investigating locking or what might be happening in the execution plan that was throwing it off.
Turns out I just fucked up the where clause. I didn’t even consider the schoolboy stuff. This kind of shit happens all the time.
This kind of stuff happens all the time IMO, we're human and not perfect 🤷♂️
I don't know how much of a help ChatGPT would be in this situation without access to your schema, at least with Copilot you can write a comment in the code explaining what you're trying to do and get some usable pointers in the generated suggestion (which takes your codebase into account).
I usually try to get a second pair of eyes on my code if something that seems relatively simple isn't working as expected... As you gain more experience these mistakes will become less common, and easier to spot
My second pair of eyes was in an another country for business stuff so I had to solve it all by myself and because of the frustration, i wrote this post. Sorry about that
No worries. I’ve wasted more time on lesser mistakes than this. I also once made everyone an admin by forgetting a single ampersand. That was a fun eight hours.
Thinking about C# and Dapper here 'cause they're what I'm used to, but, for example...
result = await connection.QueryAsync<ResultType>(QUERY); (where ResultType is a statically typed record, class, or struct shaped like the data you want returned.)
Given a query that doesn't return something that matches any of ResultType's constructors, the code'll throw an exception at runtime complaining it needs a constructor that matches whatever it's returning, whereupon you'll notice it isn't asking for it to have a date parameter, so the query must not be returning it.
Sure, but they use ersatz methods that are so incredibly obscure and removed from the standard library that expecting one to know them is beyond foolhardy.
Long before the duck gained popularity – and I still can’t talk to a toy – I walk around and explain things to a phantom off in the corner of my mind, and I use bold hand gestures.
So this is the second mention of a rubber duck. I'm trying to fiercely convince myself that talking to a toy on your desk was absolutely not a real thing for adults and that this is some satire I'm missing.
If it's true, that's beyond shameful for an adult. I would quit if I were next to that person's office/cubicle so that they didn't infect me.
In fact, if this was a real thing, don't even tell me. I don't want to live with that kinda shame for my species.
I feel as though you are missing a key part. Some people are verbal debuggers, we speak what we wrote to understand it better. Now in an office environment what is more acceptable, talking to yourself or talking to a toy on the desk?
I have done this where you read the problem in your internal monologue but nothing new sparks, yet when you speak what is going on it activates different parts of your brain for the debugging process.
Honestly I worry about the use of ChatGPT on programmers. Training your eyes and brain to see things takes time. I know the suits just want production but I’d rather have better programmers.
Watching this YouTube clip, I couldn't help but remember the other YouTube clip that shows a red panda leaping against a door and trying to reach the doorknob.
I worry you're artificially limiting yourself, and I hope you have the comfort to overcome this phobia one day.
🤣 no need. I certainly am not Linus levels of stickler on it and don't sit there and worry about it. I just found the concepts he is trying to teach very helpful. Fail fast and breaking things up into smaller methods that do "a thing".
I don't consider myself a never nester, but looking at my code now, I extract all the time and rarely go 4 tabs in. It just makes it more easily maintainable. I also like the idea of putting the failure conditions first. I haven't looked at this yet but I'm sure there are some times I can use it.
Sure, sometimes you might not have a choice, but I do think there is a lot of value to what they are saying. I think it kind of goes in line with standard "functions should do one thing" paradigm.
I'm pretty sure chatgpt caught mistakes like these for me recently and in the past. Just always slap in all your code into the prompt and tell it what you want the code to do step by step. Like with rubber ducky debugging.
I'm a coder and I like my job. It just has to fit with you. You have to be zen and like fiddling around with stuff. How did you even learn to write all of that if you hate it so much?
There's a book called what color is your parachute you might like.
The reason the date is not in the output is because you didn't include a date column in your SELECT statement.
If you want to include the date in the output, you'll need to add a column that contains the date to your SELECT statement. For example, if you have a column named "created_at" or "date" in your mainWorkSpace table, you can add it to your SELECT statement like this:
SELECT task, status, id, created_at FROM mainWorkSpace WHERE user_id = @user_id
This will include the created_at column in the output of your query.
Well I have to defend it here, it explicitly stated
if you have a column named "created_at" or "date"
But yeah anyhow anyone should be able to figure the own solution out with this. Nonwithstanding that if you need gpt for this, you might not have a good time in general.
When I have problems like this, I start to question whether I can program at all and whether I should perhaps change my profession. This often happens when I'm tired or overworked. I make stupid mistakes and assume that the cause of the problem is something complex.
This often happens when I’m tired or overworked.
Maybe it's because of this and the frustration of the situation that had me (idk the word) go angry and write this post.