Hello,
I have been learning programming (Next.js, Express, Python) for quite some time now. I am definitely improving. I am able to code small apps and solve many types of problems.
However, I think I am hitting a plateau and I am not sure how to keep improving. Let me explain, I have been learning programming through online resources, most of which, teach very ways to code "simplified" apps.
I feel that now is the time, to make a big jump and try to build real-world-ish web-apps. I have some app ideas. But, each time I try to implement them. I get overwhelmed by the complexity of the code I am writing: multiple pages app with authentication, the need to have user input verification everywhere to either not crash the app or to give the user meaningful error messages, complex database schema which I often have to modify and migrate (and end-up with migration errors), questions on how to structure my project and my code to keep it understandable/maintainable , etc.
So, I wanted to know if there are some developers who can share with me advice on how to transition into what I am calling "real-world" coding ? Are there any (affordable) resources which teach that?
Thank you
Besides what others recommended I'd suggest taking on an internship in a company where you can learn from other developers. Usually, there will be a supervisor assigned to you and/or developers that will be reviewing your work.
Are you mostly working by yourself? If so, then definitely start doing some projects as part of a team. It sounds like dev work isn’t your job, but there are lots of open source projects that are looking for help and some are very beginner friendly.
This book can change your future: https://pragprog.com/titles/vbopens/forge-your-future-with-open-source/
(The publisher has regular discounts they announce on email and twitter)
There definitely are resources that can help. You can search up "__ boilerplates github" for whichever language/framework you're looking for. Try to find the most popular ones that have good documentation to see how they implement things like authentication, etc.
Since you've used python, I've made a Flask boilerplate if that interests you: https://github.com/nuvic/flask_for_startups
If you're interested in JS, then remix.run has a good tutorial: https://remix.run/docs/en/v1/tutorials/blog
Thank you all for your great advices 🙏🙏🙏
I've been where you are. I really appreciate all the thoughts I'm reading here, but I don't resonate with any of the comments. They just feel kind of wrong in different ways.
You know how to code enough probably, but you sound ambitious. I spend 40 hours or more every week coding professionally. I'm probably less inspired for my employer than I would be for myself, but 40 hours is a lot of time and, though we always make important progress, the progress rarely impresses me or makes me feel like I'm as good as the programmers that make video tutorials.
I just want to build something awesome! ...And confidently build it tonight! And you can. We all know of people that have done it. The real problem is when you get stuck, often because you're trying to create something that has no open-source solutions and you have less experience with than you thought.
Let me explain: I'm not the oldest or newest programmer, but I know that coding something conventional is a million times faster than coding something unique. For example, if you want to add authentication to your app and you don't get paralyzed by all the options, it's fast and easy in your proficient language. You'll find examples everywhere you can steal from.
BUT the more unique your application is the more likely it has the chance to become something really great for the long-term and face less competition until its proved itself, which would be awesome--Four Seasons all-the-way from now on, baby!
I'm over-generalizing a bit, but on the one side you have a Wordpress blog with some plugins and the other end is something you have to build from scratch that involves making technologies work together that weren't designed to work together. Makes sense?
Your job is to pick a place on the spectrum that works for ONE PERSON. You'll save some time on the organizational aspects, like SCRUM, BDD, meetings, etc. You'll save more time if you're able to spend to use tools and technologies that other companies take care of for you. DevOps tasks can be outsourced to Digital Ocean and you can use database solutions like firebase that mimic the backend if your backend is going to be pretty standard anyway. Stick with the stack you have and be at peace with the technologies you don't have time to learn.
Yes, you do need to get good at some project planning. You need to develop your software using SOLID principles to make it more adaptable to evolving business needs. You would benefit by learning Domain-Driven Design if you want to service custom solutions to a few clients and how to write automated tests to make sure you can quickly check everything before release.
...But then maybe you do just want to build a plugin you can sell or a service that's already been done a million times but might make you a bit of cash. I'm not sure if these would meet your definition of a "real-world app" as a DEVELOPER.
One consolation: You absolutely will learn something and become better each time you get stuck. You just don't want to get stuck too often or it's brutal frustrating.
Use some kind of framework
Think everything in modular fashion
Envision about what can possibly change in near future. Keep code flexibility
Study implementation Patterns
Work on a solid open source project. Extend it or add new features to it
To add to the points already stated, one technique that helps in building maintainable systems is writing automated tests that verify your application behaves as it should. This gives you the freedom to modify your application, and restructure it as it grows, with confidence that you're not breaking anything when you do so.
Beyond that, strive to keep each unit of your system (i.e class or method) small and with ideally a single area of responsibility. Avoid the temptation to, for instance, place all your methods in some very large User class.
If you are trying to build out everything all at once and getting overwhelmed, I recommend building smaller things which just feature the functionality you are trying to learn.
At one point I was building out a web app using Go, a language I was new to, and adding auth to it. Auth was new to me as well.
Even though I was a seasoned programmer, just adding auth to an existing app was complicated, so I wrote a very basic app that just had auth. I needed to understand the bare minimum required to make it work, and incorporating it directly into something that was already complicated would be a lot of extra work for not a lot of gain.
Once I had the bare app that just had auth working, I had some experience on how to use it and from there I was able to start thinking about how I would incorporate it into the main project.
Another bit of advice I'd offer is to just build things quickly and not worry so much about how messy it is or if it's "wrong". Do this on projects that you're not relying on shipping. I think that moving fast and not worrying about correctness is a great antidote to feeling overwhelmed. It helps that you can throw that code away since you're not stressing too much about it too.
You get overwhelmed because you need to plan well and design before you start coding something large. Don’t jump straight into code, but draw out the plan before you write any code.
Also, there’s many free/paid tutorials online that walk with you through building a large app. Or tutorials that lay down the skeleton of a large app and you can take it from there and just replicate to expand on it.
Also you can look at sample code bases for large applications similar or close to what you want to build.
disagree, you can never plan for everything. Make a lot of prototypes instead and discard them quickly if they dont work
I didn’t say plan for everything. Write out the basic plan for the skeleton:
The initial routes, initial api endpoints, initial data models, pages..etc
You prototype and throw away parts that are unknown/uncommon/new, not parts that have been done a million times before.
Don’t start building with the prototype mentality, build with a production-quality mentality and don’t plan on tossing anything that is not a prototype out, continuously refactor instead.
I agree with this. For a service, layout your routes, business logic, database access, plugins, etc in ways that you feel comfortable with and try to build around that organization. There’s no one-size-fits-all, and what works at the start may not work later on, but planning a big picture and refactoring from there keeps you moving forward.
I agree with you. Building small prototypes is the way to go if you want to learn how to do something at first.
When you're starting out, you don't know what to plan or how to architect software very well yet. Your planning isn't going to be that beneficial.
Even with lots of dev experience, I still go to prototypes to build new features or explore ideas, and often they end up being what I ship.
Honnestly just take the jump and start coding more complicated features. You say this
« I get overwhelmed by the complexity of the code I am writing: multiple pages app with authentication, the need to have user input verification everywhere »
Coding complex systems is the ability to break them down into smaller parts. Start one page at a time. Start with a simple login/password page without validations, ect…
Those are not actually that complicated, it just takes time. But if you never try, you’ll never learn….
Also I dont know what’s your working situation but you could also do some freelancing, maybe just as a frontend or backend first then go fullstack
My advice is to commit your code to a public repository on GitHub or similar. Then ask other developers to review your code and do pull requests with small incremental improvements.
There isn’t really a solid line in the sand when you suddenly become a professional. It’s just a long progression over the course of time: from low quality to proficient to excellent. I’ve seen some pretty awful production code with serious security flaws running on supposedly reputable sites. The only way to get better is to just dive in, be prepared to have your code roasted, handle some constructive and sometimes rude criticism (there are a lot of arrogant people out there). You have to risk looking foolish to get better. When I first begun coding there was no GitHub so I had no choice but to gleam knowledge from coworkers at my first company.
I think there should be a group on here for code reviews. Maybe if a few others express some interest we can get something like that going.
This comment was deleted 4 years ago