The best advice I can give to new developers is "question your assumptions".
"But I set that variable" - did you?
"It should default to 0" - is it?
Remember - if things were working as you think they are then your code would be working.
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Follow the wormhole through a path of communities [email protected]
The best advice I can give to new developers is "question your assumptions".
"But I set that variable" - did you?
"It should default to 0" - is it?
Remember - if things were working as you think they are then your code would be working.
Thanks will keep in mind next time it happens
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.
You didn't add the date field to your query and couldn't work out why it didn't return the missing field for over 2 hours?
Perhaps SQL isn't for you as things get waaaaay more finicky than that.
You’ve never made a silly mistake where you “can’t see the forest for the trees”?
It happens to the best of us
One time I've been trying to force UE5 to let me edit TArray, an hour later I realized I could just use TMap
Seriously. If this broke him it gets so much worse.. but honestly op, this is how you learn what to do and what not to.
I know that, my anger has manifested this post, and I shouldn't have criticized the entire field
You don't know the circumstances. They might have only seen the query results after several processing steps...
it's indeed a new language for me and I haven't developed that ability to know where the bug is happening but I am going to get there.
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.
Was going to say that.
@OP:
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.
You should read up on what's called "rubber ducky" debugging
Here's a link to a comic that summarizes the idea succinctly: https://www.smbc-comics.com/comic/the-rubber-duck-method Wikipedia article here: https://en.wikipedia.org/wiki/Rubber_duck_debugging
If you're not familiar with the table, use a select top 10 * from table
if you're on sqlserver, postgresql uses limit and oracle has fetch.
Don't recommend select * without limits or conditions unless you absolutely know the table, you can very quickly make a DBA unhappy
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.
Thanks for sharing your experience, who knew a frustrating post written by me would give me lessons which i am going to take to heart.
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.
You tried "everything" for over 2 hours but never tried the "*" selector?
User: I've tried everything
Support: Have you tried ?
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
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.
You want to hate programming? Try using JS. It's anarchy.
"Why is this the way to do things?"
"Because it just is."
Get yourself a debug rubber ducky mate, talk to it when you are troubleshooting might fire off a coupe more pathways to identify the problem sooner.
I would like mine blue with an army's helmet.
You can dress it up however you like.
Holiday duck
Professor Duck
Tech support duck
At least its 2.5 hours and not 2 years because of writing h instead of H
I suspect there's a long tragedy about this, the likes that would give The Odyssey pause.
Real moral of the story: STATIC TYPING!
Seriously so many people think it's a waste of time, and then stuff like this happens.
How would static typing help here?
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.
I do this, too. The only remedies I know are a walk or a colleague's fresh perspective.
For me rubber ducking a coworker solves a lot of these things instantly, but walking just gets me further entrenched in my own stupid ideas.
Sucks bro. You’re in good company tho
One of the hardest issues to troubleshoot is a bad assumption. Be glad you only spent 2 hours on this.
What did you asked ChatGPT? I tried it and straightforward said that the date field wasn't included on the select statement
https://chatgpt.com/share/80918db9-5284-4a9b-b971-dde78b00497a
Better to ask a rubber duck than an LLM.
It has better results, is cheaper, and makes has a positive compounding effect on your own abilities.
https://m.youtube.com/watch?v=CFRhGnuXG-4
Watch this. I have found that this makes it way easier to debug shit, is more readable, and cuts down on mistakes.
Every bug is an opportunity to learn. Learn about the language, the code base or about yourself. Today you learned about yourself.
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.