I have been working on web/mobile development since ~2019 as a hobby. I took a course on HTML/CSS/JS and then moved into learning react and more recently react native. I’ve definitely improved over this time, and can make higher quality things faster. Recently I’ve been more serious about it and am trying to make stuff which could actually be used by other people. While I find the general process really fun and addictive, I notice that I also feel a lot of stress and burnout when I’m working on a project. But the thing is, I don’t feel that stress from the actual programming- dealing with errors and things not working the way I want etc. is stimulating if not fun, since I know that there is some error in my thinking that I need to resolve.
What frustrates me is constantly fixing a seemingly endless onslaught of environment/set-up related issues. For example, right now I’m trying to use the expo-linking module in my expo development build and am getting a “Cannot find native module ExpoLinking” error. “main” has not been registered. “A module has failed to load due to an error and ‘AppRegistry.registerComponent’ wasn’t called.”
Lately it feels like my time spent programming has been 20% actually writing code and 80% jumping between stackoverflow questions trying to resolve issues like this, fiddling with package.json when I don’t really understand what I’m doing. What is the name for this sort of problem?
Is this simply what web development is like? Does it get easier? I am passionate about what I create so I usually just grind through these issues and slowly move forwards. I think I’m better at resolving these issues than when I started 5 years ago, or at the very least am suffering because I’m taking on more and more sophisticated projects.
But to some extent I worry that I have a fundamental lack of knowledge which severely slows me down. I’ve only ever done this as a hobby which has mostly meant ‘learning by doing’ rather than ever actually sitting down and properly studying any of it. Is that what I need to do? What are the best resources for doing this? I study computer science at university but they don’t touch any of this sort of stuff.
Depends on your tooling. The more intermediary technology you use and the less you understand it, the more you will run into these roadblocks.
I always tried to reject frameworks etc because I wanted to know how stuff works and started making my own frameworks and learned a lot in the process. Though I will admit that I use stuff like Quill for JS because I don’t need to remake everything xd.
Depends on your tooling. The more intermediary technology you use and the less you understand it, the more you will run into these roadblocks.
I was under the impression that React/React Native or other frameworks are effectively the baseline in terms of tooling. I suppose I do depend on a lot of modules and with mobile development working with Expo is obviously a pretty big intermediary. At the same time, how do I learn to do the things these intermediaries do for me? Should I read the React docs?
Something to handle live bundling/reloading (Turbo Pack and Vite are the current favorites)
Something to handle production builds (Rollup is the current favorite)
React
One of the lightest practical dev setups for React would be via Vite, and that’s still like 115 different node_modules weighing in at ~120MB.
React Native takes like 5x the technology to run in a dev environment because you need to transform JS to either Swift or Java and stream it to an actual device or a simulator. You can add Expo into the mix for some nice ergonomics, but that’s even more intermediary technology. Expo is almost .5GB of node_modules.
One tough thing about the Node ecosystem is that everything goes out of date in ~30 weeks. If you have a project that you come back to after more than 6 months, just go ahead and assume the dev environment will probably not immediately work: you’ll probably need to do some maintenance to get the thing running again.
@Toby
You’ve been misled, like sooo many others, into thinking React is baseline or somehow the only ‘right’ way. It is not.
For most web projects, you don’t need a front-end framework at all. You can do just fine with vanilla HTML, CSS, JS and a few JS libraries. Nothing that requires a build step or has the dependency hell of React.
@Wendell
This, if you don’t need advanced features, you don’t need advanced frameworks.
I’m currently building a website at $10 for the first year. Bought a URL on GoDaddy, connected it to GitHub Pages for free. There’s a PayPal API link, and I just send the product details in the extra details for the purchase. I don’t need any security since it’s handled all on PayPal’s side, the user can go into the code and change whatever they want, if they underpay I just simply won’t give them the product. It looks pretty nice and interactive, and it’s all just HTML, CSS, JavaScript animations.
I’d also recommend people really dive deep into HTML and CSS because they’ve evolved considerably since React came on the scene in 2013. There’s a lot that can be done with HTML and CSS alone and more coming.
@Toby
Honestly, React tooling has been the worst experience I’ve found with the top 3 front-end frameworks. Vite makes things a lot simpler, but I’ve found Vue/Angular far better developer experience than React.
@Toby
If you want baseline, do something build-less. Something like web components (custom elements). Working that low is kind of a pain, and will help you understand why frameworks like React exist. But you will never need to worry about any of the environment headaches you’re pointing out here because the environment is just the browser.
Boy, you are just touching the surface of programming. When you move up from your position from some hobbyist to junior role to senior, it’s where it all goes downhill.
When you are a hobbyist you find everything new and exciting, everything works like magic, you feel incredible how this technology actually works, your app has been deployed to production and you can connect from other devices, wonderful magic.
When you move to junior roles, you’ll find that you have to maintain code written by some intern and the entire project is just a mess that you have no idea what you are doing. Changing the smallest thing results in the entire stuff breaking, why are they using a 20-year-old dependency when every line in my editor is red? Why are they still using jQuery in 2024? What are these selectors doing here? Why do they even write such stupid and redundant code? Why did they put secret keys on the frontend? I have to dig through WayBackMachine to find the deleted post because of the AI movement on this same issue, just to find ‘oh I found a fix’ and marked it as a solution.
When you move to a senior role, your programming drops from 80% to 1%. All are meetings with clients that spew out the most random and dumbest shit you’ve heard in your entire life, handling tasks with your junior roles, meetings, and more meetings, write some Jira shit. Oh wait, production is down? Now you have to do some DevOps shit, editing stuff on the server. Oh wait, my boss just called, why is production down? Boss is pushing the unbelievably short deadlines that you have to explain that it is not feasible. The project under ‘proof of concept’ suddenly became a permanent business solution in which caused a ton of issues in the long run.
Welcome my friend, you are just starting. Good luck, Tala’ Moana Warrior.
Project under ‘proof of concept’ suddenly became a permanent business solution in which caused a ton of issues in the long run.
I love it when our demos are shown to the customer as actual solutions and then we get told there’s no user registration and save function. Oh, and can we implement these 28 features we promised them? It’s just an HTML file I put together within 15 minutes in a meeting half a year ago to visualize what we’re talking about. Where did you even find that, and how did you think that the link in a random Jira ticket with the title ‘quick dirty demo’ that covers roughly 0.01% of the entire product can be sold as ‘almost finished’?
We estimated 180 hours half a year ago, and then never touched it again because product management deemed it not worthwhile. I’m not gonna cancel my holidays just so whoever sold it can escape responsibility because whoever saves the chaos now will be considered the one responsible the next time salary increases come up even if they weren’t involved before.
And you won’t know anything happened until the CEO makes a meeting with the entire team and you learn a random intern that’s already gone said it’s practically done after removing the big red box saying it’s a demo and adding a save button, acting like it would magically create an entire backend environment and database structure.
Reminds me when I was working off my intern. Company wants like a drag and drop chatbot builder, which has many functionalities like chat flow, conditionals, auto sort, escalation to manual intervention, cellphone connections (like hotlines), collaboration, etc.
Problem is, the ENTIRE TEAM working on this, is JUST me and another dude that works on the backend. Just the two of us.
Even if you’d given me a year, I probably couldn’t finish 1/4 of it. On top of that, the PM had changed the entire project from Node to Laravel in the middle of development because their existing project has performance issues on their MERN stack existing project, and neither of us have ANY experience on Laravel. And ChatGPT didn’t exist back then, so it was worse.
They pushed us to finish the project UNDER 3 MONTHS total (including the Laravel transition), five months in they saw the progress was 10%, and decided to scrape it.
It was a literal nightmare to work with; there’s literally no plans. The PM is only responsible for getting updates and asks us to do daily standups; they didn’t even manage the project.
Luckily, I was the intern; I opted out early, it was a nightmare.
@West
It’s awful project management if resources are distributed like that, even when the team members involved are clearly giving estimations higher than what’s expected. Why push it anyways and add even more requirements and changes in the middle? Especially not even accounting for available skill levels and experience. Changing from Node to Laravel leaves nothing to keep except maybe some frontend.
You dodged a bullet that would ruin your health by opting out there. Unfortunately, I was too optimistic and spent a decade at such a company, thinking things would change and I could prove myself by just putting in unpaid overtime constantly to meet goals. Turns out, if you manage to meet these goals, management in such companies will just change these goals anyways, throwing all previous work away constantly. If PM doesn’t listen to developers, you’re not part of the team but just a replaceable workforce that’s abused without them having to take responsibility, since in these cases, PM has the dangerous power to blame the devs for everything.