It's a common saying that the two most difficult tasks in development are naming and cache invalidation.
Inspired by this, I recently tweeted out the following question: https://twitter.com/josepheames/status/1196835125700354048
I got a crazy amount of response and thought it would be interesting to compile and categorize the responses. So, according to about forty developers, here are the hardest things in programming: (I tried to categorize and compile it intelligently)
First, I'll start with the purely technical items. Some of them are unsurprising. A few probably imply a current problem someone is working on…
- change detection
- dates and time-zones
- folder structure
- off by one errors
- picking and sticking to a front end framework
- macbook keyboards
- any problem involving linkage of two systems that expect certain things to
- match up
- data structures
- reading and understanding someone else's code in order to fix it
- for newer programmers, getting things working efficiently
- thread management and synchronization
- setup & config of a new language, library, or environment
- ignoring unit test coverage
- providing estimates
- threading (2 votes)
- working with legacy databases that lack referential integrity
Next are the architectural and design items. This is what I thought most people would reply with. I personally identify very much with much of this list:
- finding the balance between good architecture and over-engineering
- keeping things simple (2 votes)
- striking the balance between shipping code quickly and shipping quality code.
- choosing when to build/use abstractions. If you abstract too much you become an architectural astronaut if you abstract too little your codebase becomes
- unmanageable with copy-paste pasta, lack of consistency and just hard to understand (I REALLY loved how elegantly this was phrased)
- thinking before coding to avoid bad architectures
- avoiding duplicated code but also not over-engineering everything
Then we have the personal items. Things people struggle with internally. Perhaps here are some items you may personally identify with.
- choosing a side in the text editor, naming convention or tabs vs spaces holy wars
- remembering it's time to sleep
- taking the first step into the unknown
- the ever-increasing concept count of all tech
- remembering you don't have to learn everything
- balancing learning with productivity
- deciding what to ignore
- knowing when to stop
Finally, the items that have to do with groups and organizations. Here I compiled all the similar items, and ended up with the most common issue people said they believe is the most difficult task in programming.
- working as a team (6 votes)
- convincing people to design and implement with a11y and mobile-first mentality
Here, I compiled many variations of working as a team, from getting agreement to just a simple reply of "people". How interesting that the most popular answer (although only 6 of about 40 votes) was not really anything to do specifically with programming.
What do you think is the most difficult task in programming (besides the 2 exclusions)? Do you agree with this summary? Are people the most difficult part of your job?
Signup for my newsletter here.
Looking to increase your skills? Check out Thinkster.io, we are always adding new content.