this post was submitted on 02 Dec 2024
110 points (91.7% liked)

Programming

17695 readers
308 users here now

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

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 2 years ago
MODERATORS
 

The four phases of the typical journey into coding

  1. The Hand Holding Honeymoon is the joy-filled romp through highly polished resources teaching you things that seem tricky but are totally do-able with their intensive support. You will primarily learn basic syntax but feel great about your accomplishments.
  2. The Cliff of Confusion is the painful realization that it's a lot harder when the hand-holding ends and it feels like you can't actually do anything on your own yet. Your primary challenges are constant debugging and not quite knowing how to ask the right questions as you fight your way towards any kind of momentum.
  3. The Desert of Despair is the long and lonely journey through a pathless landscape where every new direction seems correct but you're frequently going in circles and you're starving for the resources to get you through it. Beware the "Mirages of Mania", like sirens of the desert, which will lead you astray.
  4. The Upswing of Awesome is when you've finally found a path through the desert and pulled together an understanding of how to build applications. But your code is still siloed and brittle like a house of cards. You gain confidence because your sites appear to run, you've mastered a few useful patterns, and your friends think your interfaces are cool but you're terrified to look under the hood and you ultimately don't know how to get to "production ready" code. How do you bridge the gap to a real job?

Which phase are you in?

all 47 comments
sorted by: hot top controversial new old
[–] atzanteol@sh.itjust.works 44 points 3 weeks ago (1 children)

I never found it that hard... But I also never expected to just know everything. Coding is life-long learning. People who see it as "a thing to learn once" struggle a lot more I think. They also start to fall behind at some point.

[–] Buckshot@programming.dev 18 points 3 weeks ago

100%. I also never found it that hard but I've been doing this 20 years now and I'm still learning. I look back at what I did a year ago and I probably wouldn't write it the same today. I've worked with people who don't seem to have learned anything in 10 years and it baffles me.

[–] mesamunefire@lemmy.world 32 points 3 weeks ago (1 children)

Im not sure if this helps anyone but I used to tell my jr devs the same thing:

  1. You got the job.
  2. You are now a developer.

The article somewhat goes over this but: Learning to code is a life long thing. You just keep getting better each day with practice. Im not sure about the phases though. Definitely the "job ready" portion of the article. It seems short sighted to say you need all those things and going through each of the "phases" in order to be successful. Just solve a problem. With software. Congrats!

[–] ByteOnBikes@slrpnk.net 8 points 3 weeks ago (1 children)

I remind my team every year that even seniors struggle at times.

I'm now 15 years in and at least twice a month, I'm coding with 40 tabs open trying to piece together the best solution, often just throwing spaghetti at the wall.

[–] mesamunefire@lemmy.world 2 points 3 weeks ago

Heh yeah. I feel that. Close to 20 now and Im starting to feel the churn. But its still a good feeling to give direction and see people grow. I used to be a team lead in addition to a senior dev...now im just a dev (being an individual contributor is fun again) and the 40 tabs bit resonates with me. I find that AI is good a surface level assignments like build basic CRUD/models...but it Fd up so hard sometimes its hard to come back from. Definition of spaghetti sometimes haha. I just go back to the old stuff that I know works.

[–] radau@lemmy.dbzer0.com 16 points 3 weeks ago (1 children)

I didn't go through these phases I just pray to the Omnissiah and sacrifice an HP printer when it doesn't work

[–] deathmetal27@lemmy.world 5 points 3 weeks ago (1 children)

At least you're not using abominable intelligence that's commonplace these days.

[–] Feathercrown@lemmy.world 3 points 3 weeks ago (1 children)

AI is a pretty good tool for this sort of thing though. If you don't know what to ask, or need an example, etc.

[–] sukhmel@programming.dev 4 points 3 weeks ago (2 children)

Yeah, but they literally used the term as used in Warhammer lore: A.I.

In Warhammer AI is forbidden on the grounds of past wars with humanity

[–] Mikina@programming.dev 4 points 3 weeks ago (1 children)

Oh, I totally forgot about this bit. Maan, I really want to write "a practical guide for programming with the Omnissiah.", a book of fun rituals and litanies to support your software development. I always felt like computers are kind of really literally magical, and adopting a more spiritualistic approach to programming sounds like a lot of fun. Unfortunately, I didn't find any existing spiritualism that would match this, Tech Priests being really close to what I was going for.

I need to add more litanies and copious amounts of censer into my programming workflow.

[–] Feathercrown@lemmy.world 1 points 3 weeks ago (1 children)

Thou shalt not repeat yourself

Thou shalt extract common functionality into smaller functions

[–] Mikina@programming.dev 2 points 3 weeks ago

I shudder at the thought of "Programming Inquisition", that would drive around doing PRs and exterminating anyone whose code shows signs of heresy against The One SOLID God.

None of us would make it :D

[–] Feathercrown@lemmy.world 2 points 3 weeks ago (1 children)
[–] sukhmel@programming.dev 3 points 3 weeks ago

Yeah, I wanted to reference Dune, too, but then thought that it's not a very rare trope. On a related note, I took a look at tvtropes and it says that in the Dune the AI didn't wage war, it was humans that didn't like what AI does and prohibited it. I read the books too long ago to remember if this is so ¯\_(ツ)_/¯

[–] Asafum@feddit.nl 16 points 3 weeks ago (2 children)

Phase 0).

Started to learn last year, 2626143747722 articles later about "No company will hire JR devs anymore" and "AI will replace all of you." and I decided to stop :(

[–] QuazarOmega@lemy.lol 12 points 3 weeks ago

That's what the junior devs want you to think!!

[–] ReversalHatchery@beehaw.org 5 points 3 weeks ago

it can be still useful to know how to code, for when you want to put together a tool, or something that does things automatically

[–] Windex007@lemmy.world 15 points 3 weeks ago

This is all predicated on the assumption that people already have a familiarity with organizing their thoughts and intentions in a way that even have a prayer of being understood by a machine.

There are a lot of ways people innately organize their thoughts. Some of them translate much more easily than others to code.

For some people, even step 1 is a hurdle that there are insufficient resources to clear.

[–] Mikina@programming.dev 13 points 3 weeks ago

It took me a long time to realize the worth of having a CS degree. When I was leaving the school, I felt like it hasn't tought me much. I was already a pretty ok programmer, since I was programming most of my highschool, and it felt like I've wasted a lot of time on languages I'll never see in my entire life. Which is kind of true - I'm still pretty confident that I'll never use Lisp, Prolog, Lambda Calcul, base assembly or Pharo ever again, but after a few years I've realized something important that I was missing - the school wasn't trying to teach me how to be a "pharo/lisp/prolog programmer", but to be "a programmer".

I noticed it on my pentesting colleagues who didn't have formal programming education, how they mostly spoke about programming in relation to languages - "I know a little bit of python, but wouldn't call myself a programmer. What programmer are you?". That question felt wierd, and I eventualy realized that's because the lines between languages eventually blured for me naturally, and I paid no mind to the language of choice - I was simply able to naturally pick up any language, and write anything I needed in it pretty quickly.

Only then it occured to me that I have my education to thank for that. Sure, I might never use Lisp again, but I do vaguely remember the concepts and workflow the language has, so now I can more naturally pick up any lisp-like language. Same goes for the prolog-style of languages, or the more OOP-focused languages, like Pharo. Since I had to drag myself through hell to pass an exam in most of the flavours of languages, it made me a versatile programmer that can just naturally pick up anything I see, to the point where I don't have to think about it - I just subconsciously detect what kind of basic workflow style is it going for, google the basic syntax and standard libraries, and I can write whatever I need in whatever language is available in a reasonable amount of time.

I don't see this "ascendance" mentioned in the post, and I think that it's a really important point in learning to be a programmer. It's also a piece of advice I try to give anyone unsure about whether his degree is worth it, because it feels like you're learning useless stuff. I have no idea how to teach it, though. It kind of happened naturally for me, and I can't identify the point when it happened or why, or how would I go in teaching it to someone else.

It's important to keep a wide field of view when learning programming, and not just lock yourself into one language. You can always google for syntax pretty quickly, but seeing the wide array of workflows and flavours different languages use to accomplish the same thing will go a long way in making you a better programmer.

[–] rothaine@beehaw.org 12 points 3 weeks ago

Where is the "burnt out on corporate BS and not sure if I even like coding anymore, I just want to retire and sell shit on Etsy, too bad everything costs money" phase

[–] FourPacketsOfPeanuts@lemmy.world 10 points 3 weeks ago

Very accurate. Working for a small dev shop with sympathetic senior team members brought me through 2 and into the start of 3. But a job change (into something I only barely qualified for) meant I had to trek phase 3 alone. It's a loong slog, and the myriad of technologies in the intro without ever feeling like you know anything is spot on (I would frequently be reading web pages for help only to pull my hair out at how often they mentioned things I should know but didn't). Fortunately I had gone to work for an IT team embedded in a larger company, not a software company itself, and they had far lower standards. I don't think that's a good thing in general, but it did allow me to get semi hacky things done during the desert of despair and I felt like I was delivering just as often as I was floundering. The upswing of awesome is real though. I hit it about 5 or 6 years in. I found my niche, everything id been reading and studying suddenly started to reinforce one another rather than sow deeper confusion and confidence and productivity started to multiply. About 7 years in I was technical lead in a couple of business critical areas. After 8 years I started my own consultancy in those technologies and have never looked back. I take care now to give junior staff projects that stretch them, and they need to work at, but which aren't soul crushing.

[–] Schal330@lemmy.world 9 points 3 weeks ago (1 children)

Over a year in as a junior dev and I'm still in the second stage. I did 6 months backend and now I'm now entering my 6th month as frontend. I still know so little, but I know more than I did yesterday.

My biggest challenges:

  • I don't know what questions to ask when it's about something I don't know.
  • Having a rough idea as to how I want to try and solve a problem, but not knowing how to code it
  • Trying to retain so much new information on a daily basis and then remember everything from the days before
  • (What I hope is) Imposter Syndrome on a weekly basis

I just keep on trying, try to understand what I can and ask for help when I feel I'm at a blocker.

[–] Olap@lemmy.world 10 points 3 weeks ago* (last edited 3 weeks ago) (2 children)

If you don't know, ask a stupid question to yourself. Then ask it again in a more intelligent manner to a rubber duck. Then a real person. One of these three will give you an answer

TDD is the answer to the second part. Seriously, just try it. Don't do it for every task after, but do try it!

Notes, tickets, knowleadge bases, READMEs, well written code that is easy to understand, tests that are descriptive, ADRs. Nobody can remember it all, the hard part of programming is making it easy for the next change. Remember it's likely to be you, be kind to your future self

And imposter syndrome never goes away. And this is a good thing - "don't get cocky kid". It does get lesser though, and then you get more responsibilities! But really, if you aren't questioning why and what you are doing, how do you trust your past self? Embrace the imposter, realise we are all imposters to a lot of extents

[–] Schal330@lemmy.world 4 points 3 weeks ago

Thanks for this, almost every day can be a challenge but that's what I signed up for when I switched to software development! I'll keep what you've said in mind and try to put it to practice 🙂

[–] CCMan1701A@startrek.website 1 points 3 weeks ago (2 children)
[–] Derp@lemmy.ml 12 points 3 weeks ago* (last edited 3 weeks ago) (1 children)

Test driven development. It's a technique where you know what behaviour or result the code should produce, but you haven't written any producing code yet. So you break down the problem into small steps which each produce a testable result or behaviour that brings you closer to what you need. And before writing any implementation for each of these small steps, you write a unit test which checks whether an implementation would execute this step correctly. Once you have each test set up, you can start writing the implementation, keeping it as simple as possible, and running the test until it passes for your implementation. This keeps going in a cycle.

Once all your tests pass, provided you've written good and correct tests for every step, there are several benefits of this approach:

  • you can be quite confident that your code works as expected
  • making changes to existing code is much less scary, because you can change the thing you need to change, adjust or add tests accordingly, and rerun all the other tests to make sure everything else still works as expected
  • there is a big psychological benefit when you force yourself to define exactly what you expect the code to do before you actually write it
  • it can help others understand what the intent behind the code is by looking at its expected behaviour

The downside is that it takes more time to write tests for everything. But for complex applications, it will save you a lot of time in the long run if the code will be changed very often in the future or is complicated, because many bugs will be caught by your test landscape.

[–] mesamunefire@lemmy.world 3 points 3 weeks ago

Sometimes ill do TDD, sometimes ill do the opposite. When I know what something looks like or should function. Im not sure what the technical term of itis, but ive heard someone call it Scaffold testing. Its making sure all the parts work as expected (Unit and integration/e2e) for your future sanity.

TDD lets you experiment and makes multiple potential solutions to a general problem. IE starting with the end first. Scaffolding lets you create a scaffold around what you already built so its more rigid. Both have their place.

[–] Olap@lemmy.world 2 points 3 weeks ago

Test Driven Development. The route to programming nirvana includes a stop at this station

[–] Sauerkraut@discuss.tchncs.de 7 points 3 weeks ago* (last edited 3 weeks ago)

Phase 5. True despair: you graduate, apply to 500 jobs over 6 months and get zero job offers

[–] Zookeeper@programming.dev 5 points 3 weeks ago

I think it s easier. Get a problem you want to solve > press buttons as best a syou can > get something working > congrats.

Then by doing you will learn how to get better.

[–] Kissaki@programming.dev 5 points 3 weeks ago (1 children)

I did not go through those phases.

[–] embed_me@programming.dev 1 points 3 weeks ago* (last edited 3 weeks ago)

I regularly cycle through them

[–] sibannac@lemmy.world 5 points 3 weeks ago

I started with the desert, reached the cliff only to turn back to the desert, through a community school parking lot, and now I am just hiding under a rock in a hole for now.

[–] LANIK2000@lemmy.world 3 points 3 weeks ago

I started programing at such a young age that I don't even remember how it went. Makes it difficult to teach as I find it hard to relate to newbies. I'm quite used to just learning my self and sometimes hitting roads that lead to nowhere. In the past that I actually remember, I've only been learning new paradigms, deepening my understanding of low level stuff and mastering my art. Hardly stuff I can give along to a newbie.

Definitely 4 but stage 2 always comes back, it's just not as emotional anymore

[–] duplexsystem@lemmy.blahaj.zone 3 points 3 weeks ago (2 children)
[–] Oka@sopuli.xyz 9 points 3 weeks ago (2 children)

Also 5. I made it to the point i can engineer basically anything, not just "write code". If only someone would recognize that and hire me.

[–] magic_lobster_party@fedia.io 5 points 3 weeks ago (2 children)

I’m at the point where I think I can engineer anything. But I also know that it takes effort and I ain’t gonna do that unless there’s a paycheck.

[–] mesamunefire@lemmy.world 1 points 3 weeks ago

Unless its for myself or my family I ant gonna do it :D

I think in retirement, my goal will be to step back from the keyboard and go fishing/gardening or something. Unless I get the itch to do coding, Im not going to do it.

[–] Oka@sopuli.xyz 1 points 3 weeks ago
[–] duplexsystem@lemmy.blahaj.zone 2 points 3 weeks ago

Same, there's always more to learn but I guess part of being at the point where you can engineer anything is that learning new stuff is just part of the process and not a big deal. Like you can ask me to program literally anything and I'll fiqure out all the stuff I dont know on my own

[–] AdamBomb@lemmy.sdf.org 1 points 3 weeks ago* (last edited 3 weeks ago)

Yeah, definitely higher than 4. The way that scale progresses, I think I’m at like an 8, maybe 10.

  • Can take business requirements and design a scalable distributed solution
  • My code is well-factored and I refactor as part of my usual workflow to deliver new features
  • I maintain my own build and deploy automation
  • I am a sought-after code reviewer and mentor
  • My features are well-covered by business-level unit tests
  • I monitor my own systems in production with log and metric-based monitors
[–] Boomkop3@reddthat.com 3 points 3 weeks ago

I did not have nearly as much trouble. Then again, I started very young.

[–] dosuser123456@lemmy.sdf.org 2 points 3 weeks ago (1 children)

depends...

  • html: 1? idk i only use it to make a site that i dont even wanna make too fancy. it works and i like iy that way
  • css: 2, i can do basic layout but man doing anything else than just font and colors is so hard...but again, i might not do more and just keep it simple
  • basic: 4, i can make text games fluently, but its pure spaghetti
  • js: i can only make a hello world :(
  • batch: see basic
  • bash: see js (i cant code crap in it all i can do is navigating the filesystem)
  • gray snail: idfk man i only know it for the lolz of "yeah i know esolangs" i never really did crsp in it
  • everything else: see js
[–] fool@programming.dev 0 points 3 weeks ago* (last edited 6 days ago) (1 children)

[deleted bc kinda personal]

[–] dosuser123456@lemmy.sdf.org 2 points 2 weeks ago

it took me quite long to get my first ever game to work but it was worth it. i forgot to mention scratch there. i never really liked it but had to use it at school and that started everything...that first game was absolutely awful but i was just so damn proud of it being better than any of my classmates back in 2021, hehe.

then i started making weird quizzes with batch, until i got a c64 emulator and moved on to basic (no more having to deal with cmd going all "[string] Is NoT rEcOgNiZeD aS aN iNtErNaL oR eXtErNaL cOmMaNd, OpErAbLe PrOgRaM oR bAtCh FiLe11!!1!")

im still very bad at coding but i dont care, i just do it for fun...nobodys gonna see my spaghetti anyways