DEV Community

Cover image for The Day I Truly Realized I Was a Junior Developer 🤡

The Day I Truly Realized I Was a Junior Developer 🤡

HichemTech on February 10, 2025

Disclaimer: This story is focused on the storytelling aspect of my experience. For the sake of flow and engagement, I’ve skipped detailed code exp...
Collapse
 
greensmurph profile image
Jonathan Self

I'd argue that most junior part of this story is spending hours over hubris. Every dept/shop/team is different, but I tell my team if it takes more than hour, ask for guidance. Our budget has a limit.

Collapse
 
brense profile image
Rense Bakker

To be fair that's definitely not junior typescript stuff hahaha. If you can write generic types like that without blinking a few times, I'd say you're an absolute typescript wizard.

Collapse
 
skhmt profile image
Mike 🐈‍⬛

Completely agree. Nothing in here is junior level.

Collapse
 
pengeszikra profile image
Peter Vivo • Edited

Thx for a great story. I am arguing the typescript "wizardry" title. Because if we don't know how to use typescript to declare our special type with generic and condition, is just means one thing: we just put on hype but don't spend enough energy to know to use it. Most of typescript / JSDoc ( my favorite ) post are stop the explaining on basic types using mainly: string & number. But a ugly fact is our type ( this is a reall great example, thx again! ) are much-much more complex.

May I try to organize TS code a bit readable format.
This format is always working to me with a ? & :

type MergePath<T extends string | undefined, P extends string> =
    T extends ""
        ? P
        : P extends "/"|""
            ? `${P}${T}`
            : `${P}/${T}`;

type ExtractRouteType<T extends RouteObject, P extends string> =
    T extends { path: string }
        ? { route: P, paramsKeys: ExtractPathParams<P> }
        : never;

type ExtractRoute<T extends RouteObject, P extends string> = 
    (T extends { id: string, path: string } 
        ? { [K in T["id"]]: ExtractRouteType<T, P> } 
        : {}) & ExtractRoutes<T["children"], P>;

type ExtractRoutes<T extends RouteObject[] | undefined, P extends string = ""> = 
    T extends [infer R extends RouteObject, ...infer S extends RouteObject[]] 
        ? ExtractRoute<R, MergePath<R["path"], P>> & ExtractRoutes<S, P> 
        : {};

export type RouteById = ExtractRoutes<typeof routeObjects> extends infer U 
    ? { [K in keyof U]: U[K] } 
    : never;
Enter fullscreen mode Exit fullscreen mode
Collapse
 
solixzsys profile image
solixzsys

Have being working with TS in angular professionally, honojs and Nestjs recently. But TS generic codes like this still aches my brain.
Thanks.

Collapse
 
karons profile image
KaRon Scott • Edited

Ok thanks for formatting this lol. Now this makes more sense without having to double take at what I was looking at

Collapse
 
tombeek profile image
Thomas Beek

Pure gold! Thank you, kind sir.

By the way, just a comment: I am a software engineer and developer, have been for several decades, but I'm also a writer and editor, and I just want to praise you're writing. Very tight. Very nice. Brilliantly explicative and evocative. Kudos.

Collapse
 
drizzl79 profile image
Andrew Grant Sheppard

I thought this was a good piece about the dev-life, if you will. It was also personally encouraging. But, most of all I thrilled at a legitimate experience of aesthetic pleasure where I was most certainly not expecting it. I forget which (I want to say modern, if not contemporary) poet said a main object of his craft was to "surprise and delight" his audience.

Collapse
 
hichemtab-tech profile image
HichemTech

Thanks a lot, I'm really happy to hear that ^_^

Collapse
 
moopet profile image
Ben Sinclair

To be fair, most of the stuff that's happening here is pretty yucky and it's almost like React goes out of its way to make things as convoluted as possible. Most people would probably come out with pretty hairy solutions!

Collapse
 
daj_bry_b5f4720ecbff83f43 profile image
Daj Bry

I'm literally experiencing this now. Today lol. It's amazing that this post showed on my timeline. I'm also using it as a learning experience. But yeah, that initial feeling of " man, I just did this"😁 to"oh,I could've just done.....😑"

Collapse
 
gerkim62 profile image
Gerison Kimathi Muriungi

Just use tanstack router

Collapse
 
mzcoderhub profile image
Galang YP • Edited

Im not even understand it yet, i just work with {data : any} right now 🤣 but still i'm improved by using type / interface for better validation,

i have skill issue so i use AI instead 😭😭😭

Collapse
 
pengeszikra profile image
Peter Vivo

On complex type cases AI can help you, until a point, because TS is a bit complicated language and shard knowledge on internet also a different levels so for AI also hard to learn TS. This example is very fine.
JSDoc even worst in this case, but almost know every TS parts ( expect interface, enum ) but the JSDoc document is really weak. I using a TS doc for that also.

Collapse
 
odama626 profile image
Adam Sparks

The param type matching was a nice touch, but the other types seem way over engineered. An actual Jr is going to have a to maintain this in a couple years. Why not just use an enum where the value is the URL and the name is the id?

const ROUTES = {
RouteID: URL
} as const

Then just replace all the URLs with the const value update your const object for the client request

Collapse
 
drizzl79 profile image
Andrew Grant Sheppard

@hichemtab-tech [ @greensmurph
It's hard for me to understand what is junior about spending mere hours over hubris. That must be because I live in a backward country that actually celebrates a senior citizen head of state that has lived steeped in hubris for many decades. And he is truthfully, and sadly, an excellent representative of the sentiment that my fellow countrymen seem to mostly express, if not in word yet deed.
That being said, I think your comment detracts from the humility, honesty, and skill with which this piece was written by @hichemtab-tech. I have studied code for programming on my own with an above average dedication of the average person interested in dev code, but I have passionately and relentlessly studied, poured over, lived, breathed, etc. the greatest accomplishments of the oldest code known to be recorded via long-term storage technologies: the written word. And this piece may well have been written by a young person, but Rimbaud, proved age doesn't even determine a junior in the most important and complex code of all: poetry. So, there is no argument for the author of this piece to be referred to as junior based on anything in this piece. @hichemtab-tech you coded this article with skill that could at least be evidence of a wizard in the making!
Disclaimer When it comes to code, my first and fondest love is maths.

Collapse
 
hichemtab-tech profile image
HichemTech

Thank u, really happy to hear that ^.^

Collapse
 
jeanj14 profile image
Jean

TL;DR: I relate to this as a junior dev as well.

I am currently busy with a project by a senior dev colleague of mine and I learned a lot from it. We're building a Full-Stack React app, during the whole process, I realised that there's a lot I don't know !
Looking at his code, I felt I could barely understand until the next couple days. It was a lot to catch up to them.

Collapse
 
hichemtab-tech profile image
HichemTech

Happy to hear that ^.^

Collapse
 
oj12345 profile image
Olaf Horstmann • Edited

I don't see Joe as a senior dev. Sorry.

Being a code wizard/acrobat/whatever you want to call it, does not automatically make you a senior dev.

A senior dev should know better than to force their acrobatics and wizardry code onto a project, because noone will be able maintain that code in the future ...unless you have a team of only wizards, which never works because mosts wizards have an ego that's a bit** to work with.
(I'm talking specifically about web-application-development teams and not about wizards of the like that work at places like DeepMind)

I've seen this countless times that someone with exceptional coding skills joins a company/project but then fails to improve anything because they just make life harder for everyone by introducing wizardry and writing fancier code instead of actually trying to figure out how to improve the output and quality of the project by incorporating the whole team and knowing their skillsets.
And yes this is partially also a failure of management, but you can blame a manager only so much, when most of us assume: "Oh he's a wizard, he will definitely make the project and codebase better!"

Edit: That being said, i can perfectly relate to where you are coming from as i had the same thinking in the early days.
And you are a junior, but not because you cannot write fancy code (yet) - but because you think that fancy code is good code.

Collapse
 
keremsabirlii profile image
kerem sabırlı • Edited

I scrolled hoping to see this comment.
This could have been solved with the same output a lot simpler in many ways.
This is just overengineering at its finest.
Being senior is actually writing simple, understandable and maintainable code. Not this "wizardry".

Collapse
 
hichemtab-tech profile image
HichemTech

Thanks a lot <3 I'm really happy to hear that those leaks of Wizard skills doesn't keep me from becoming a Senior ^.^

Collapse
 
i4nstigator profile image
ianstigator

I believe that's just a natural phase of learning or an example of problem-solving progression. You did well actually. You found the problem, you created a solution, and the fact that it involves automation is really good. Joe talked to you because it's probably a teaching moment and you actually took the feedback so that's really commendable. Those TS techniques are quite advanced, i.e. generics conditional types, etc. It will come to you later. What's equally important in your professional journey is having all that skills and knowledge and when to use it at the right time.

Collapse
 
hichemtab-tech profile image
HichemTech

Thanks a lot <3 that was really encouraging

Collapse
 
kavya-sahai-god profile image
Kavya Sahai

Happens all the time.