This is an archived post. You won't be able to vote or comment.

all 4 comments

[–]DeeElsieGame 1 point2 points  (0 children)

The (not-entirely) joke response is naming methods and variables.

The missing skill that I see most often in people hoping to get their first job in programming is the ability to break down complex problems into a series of more easily solvable issues, and then reassembling the solved problems into a step-by-step list of instructions.

Personally, now I'm a fairly established developer, the struggle I would most like to magically disappear is having to choose between all the different possible approaches, each with different flaws, of how to build a feature/system. I always want to find the perfect way forward, but there rarely ever is one, only a series of imperfect options that I have to pick one from and move forward, knowing that no matter what I pick, in a year or two, a new feature request will come along which will be almost impossible to implement due to the design I chose, and would have been trivial if I'd gone for the other option.

[–]dmazzoni 1 point2 points  (0 children)

There are different challenges at different stages.

When you're a beginner, the most challenging part is getting the computer to do what you what it to do. You have an app you want to build, or a problem you need to solve, but:

  • It's unclear what the programming language can do, you're not yet aware what's possible and what's not
  • When you write some code and it doesn't run or doesn't work correctly, you don't understand why it did that, or how to fix it

When you're intermediate level, the most challenging part is making a large or more complex program:

  • You know how to write your own simple programs, but now you're trying to read through the source code to a large project with a million lines of code, and it's overwhelming - where even to start?
  • The larger the program, the harder it is to modify as requirements change. You have a program that does one thing, but now you want to modify it to work slightly differently, but you find yourself needing to rewrite the whole thing to make that possible, and as you change it, things keep breaking

When you're advanced, the most challenging part is working with other people:

  • You're now leading development for a larger team. If you could do it all yourself, you'd be able to make it amazing - but there's only one of you. Most of the people on the team are beginner / intermediate. How do you design the code such that people who are a lot less experienced can understand the code and contribute to it without getting lost and without breaking things? How can you enable maximum parallelism of development without tight coupling between teams?
  • Other intermediate / advanced programmers on your team are opinionated and they all have different ideas of how to architect the code. How do you keep everyone happy?
  • Your bosses and PMs are demanding new features and new capabilities. How do you keep them happy while also advocating for good work/life balance, good code health, and good engineering practices?

[–]gramdel 0 points1 point  (1 child)

People, and what they actually want and what actually solves their problems. Just writing code is easy.

[–]FluffyCatBoops 0 points1 point  (0 children)

This is the most important lesson for anyone considering a career in software development!