I am a hobbyist and I like to build small and tiny projects.
My gripe is that I don't want to go into software engineering as a professional career (for the reasons outlined in the previous post), however that hinders the progress of learning quite a bit, especially doing it part-time in the free time.
I do have some expectations potentially to build something that people pay for (eventually but not in a rush). Right now its just about solving puzzles, jogging my brain and solving for problems I personally have. But I do want to increase the pace of learning.
Any tips, stories and resources are appreciated!
Everyone with experience has their own style and preferences. For example, I like to write very defensive and modular code because I really hate chasing down bugs or getting up at night due to a production failure. Most people I meet don't like my code because writing code with that much test coverage and deliberate APIs takes time, so day-to-day I have to make compromises, but I will always push in that direction. Others push in other directions because of their own personal experiences. As long as there is communication, the end result is always worth it. However, if you were to follow only my advice, you'd likely become terribly locked in and think that programming is terribly boring. So don't listen to me, gather your own experiences and use learnings from other people to supplement your view of programming, but never let their view replace yours.
I don't hate the industry, I am a PM and work with engineers daily but looking at what they work on, its not really something I personally desire professionally.
The stuff that you describe though, is really only possible on the job. Like I don't imagine doing kubernetes for my apps. But I get the philosophy behind what you are trying to say and thank you for that.
Contributing to open source projects is a good way to get exposure to new patterns too.
I completely understand where you're coming from. Programming as a hobby doesn't mean you can't improve your skills or create something valuable. Here are a few suggestions that might help:
1. Project-Based Learning: Choose a problem you want to solve and build a project around it. This approach can help you learn in a hands-on way and see direct results.
2. Programming Challenges and Competitions: Websites like LeetCode, HackerRank, or CodeSignal offer a wealth of programming challenges that can help you improve your skills and keep your learning fun and engaging.
3. Online Courses and Tutorials: Websites like Coursera, edX, or freeCodeCamp offer numerous courses on different aspects of programming. You can learn at your own pace and choose topics that interest you.
4. Open Source Contributions: Contributing to open source projects can be a great way to learn from others and improve your skills. You can start by fixing bugs, adding small features, or improving documentation.
5. Networking: Join programming communities online or locally. This can provide you with a wealth of resources, advice, and potential collaboration opportunities.
Remember, the key is to enjoy the process. Happy coding!
I can’t help but think about this interview [1] with James Thomson who wrote Pcalc for the Mac. He wrote a little calculator app to help him learn. A fairly basic project, but then kept going. Any time Apple releases something new he ports Pcalc over to learn that new things, be it the watch, or even Vision Pro. When he wanted to learn about 3D graphics, he made an about screen for Pcalc that ended up being its own app where the user could drive a car around and it was a little physics sandbox. It kind of reminded me of the Easter egg in Excel 97, where the user could fly around a 3D world and find a spot where all the devs names would scroll by.
I’m kind of like you, where I like tiny projects that can be elegant and avoid complication. But to get better, the projects need to grow, and I’ve learned the most from project I’ve had which grew over time to become more than originally scoped. Sometimes this requires full rewrites along the way. Starting again with the knowledge of where previous decisions limited you can be helpful when starting other projects in the future.
You might see some of this as bloat. Maybe it is, but that’s part of the learning as well. What features are truly useful vs bloat. How can you implement new features while keeping the core experience feeling lightweight and fast? How can you design the features so the app is still simple and approachable for a new user, yet grows with them to be capable for power users? How can it adapt to fit different use cases?
So that would be my advice. Watch the interview below, and then pick a project that can start simply… your MVP… and then integrate and expand it with new features over time. Each feature is its own mini-project inside the larger project. You could look at almost any piece of software that has been around for a while for inspiration. Pick something you’d actually use day-to-day, and maybe one some people you know would use too. When you use it you’ll naturally start to generate your own feature requests, and if other people will be using it, you’ll have to develop with end-users in mind, which means more error handling, bug hunting, user friendly UI, documentation, help, onboarding, etc… all the stuff that probably doesn’t happen with little projects.
[1] https://m.youtube.com/watch?v=-_ZbWVTQNk0
I learned how to maintain my motorcycles with no intention of becoming a mechanic, but I still had to read the service manuals and practice and ask for help.
I use targeted search terms to find exactly what I need. Very much a just-in-time approach. I don't try to learn everything about a particular language, tool, library, etc. I focus on exactly what I need to get the next step working.
Of course, I often stumble across interesting materials that I read into deeply.
As a hobbyist you can potentially end up knowing far more than a SWE professional. For many jobs you already need to be an expert in a particular niche in order to get hired. That's why getting that first job can often be so difficult.
My first mind blown code read was TeX when I had to compile it off a tape to get it to run on a Pyramid in the late eighties. I learned so much it felt incredible. I’m sure there are much better code based now. Perhaps the source code for Git.
Or just for fun.
When Sun went to floating offices, I grabbed the office reservations, and superimposed them on a map of the office.
I did that?
You may enjoy a rapid prototyping environment. Think hyperscript [1]
Quick and easy wins that actually do something useful/fun will propel your quest.
[1] https://hyperscript.org/https://bun-elysia-tailwind-htmx-todo-app-falling-pond-2121....
The answer to "What is best way to get better at $something?" is almost always "Do $something. Over and over."
If you ask yourself the question and "Do something over and over" does not suffice, then explain why you think it does not suffice and how you'd like to pivot.
In your case, it sounds like you lack direction. Figure out a small project with well-defined goals, and then do it and don't quit.
[1] https://adventofcode.com/
When you figure out how to build something, you’re solving puzzles through figuring out the best language to approach that structure with, and learning how to build it with said language. As you build more parts, you naturally learn more.
You could even start with a web based game you can share with friends. This will teach you web applications, databases, possible sign-in security.
You can write something at home or use the cloud [1]. I have had a lot of fun using Python on a Raspberry Pi [2].
Solve ambitious problems. The best thing about being a hobbyist is that you are not beholden to populist stupidity. Do what works best for you, minimizes future effort, and most directly solves your target problem. You will get better and faster over time.
Pick a framework/s with good documentation and code grom there. Get AI to help fix your code but not write it.
You do not learn well help surfing and getting a dozen answers to the same question.
Revisit your old code often, and improve it.