Pokemon games!! All of the algebra is solved, and you can dig as deeply as you like in any direction you like.
Graphics? Check. And simple, top down, tilesheet or character maps work just fine.
Battles? Check. You can leverage anything from purely functional, object oriented, websocket, long polling, SQL, you name it. Whether you use 3 elemental types or flesh out everything from multiturn, semivulnerable, exp/leveling, it's all up to you.
Wanna just build an REST/GraphQL/gRPC API? Or a UI? PokeAPI is an opensource database of nearly all game data from moves, items, and species.
Pokemon is an endless, any-scope, extremely documented, opensource-rich field of exploration.
That's actually a great idea, hey. The only problem is getting C&D'd if you find yourself mesmerized by how much you like a new system into developing something that people would actually want to play.
At which point, going the "Freedom Planet" route and re-skinning is probably the epic gamer move I'd want to take.
As for nitty gritty graphics, I highly recommend https://pikuma.com. They have free and paid courses, and go into a lot of the in-depth aspects you wouldn't get from using a web framework like I typically do.
As for game mechanics, Wikipedia is a surprisingly solid resource. I mean, it's expected that these things are covered, but the depth is amazing. Check out this page for example!
To study the ROM, and how the 1st Gen games work, I recommend this article, which covers the mechanics of the bit level organization of the first games
Yeah! I've done it a few ways, mostly in React. I'm currently trying my hand at it in Solid.js, as I want to learn it, and Web Components.
As for graphics, I've been following along in this book, and absolutely love it. They have an online version. You use the author's bespoke engine, so it does abstract much of it, but it covers things from map generation to event buses!
Only as complex as you want to make it! My very first Pokemon game was a case statement where you picked your first Pokemon and it emulated the dialogue.
My second attempt was before I knew about OOP or FP, and just had a C++ array that held Pokemon data in set indexes. That was during my first programming class haha
The thing that my job is requiring me to do. Trial by fire. But also after the 4th or 5th language and Nth framework, it gets much quicker to pick up new ones.
This, but also I like to at least have a Hello World console app (or API server or web page or database reader or whatever the bare minimum is) that I can play around with and know that I can create something from scratch and not be entirely at the mercy of whatever the work infrastructure is.
But I also agree with the last sentence. When you are just starting out in your career, it's nice to have something more complex (I used to write sudoku solvers) to really get the feel of things. I'd never do that anymore though, as most things are similar enough to something I'm already pretty comfortable with.
The default used to be a blog engine. It's a complex enough web app that you can learn how web servers and database access work in the language/framework. But it's also easy enough that you don't need to spend a lot of time on a data model.
The benefit is that the design of a blog web app is going to be very similar in a variety of languages that you can compare different frameworks/languages pretty easily. The downside is that if your language is better at non-webapp things, it's not going to be an easy exercise.
Basically the same for me, but for a different reason than sibling comments: Nothing sticks in my head with toy projects, I need to be solving an actual problem.
On rare occasion I do end up learning something outside of the job, like I learned basic perl writing an IRC bot, but for the most part it does end up being on-the-job.
Agreed, though this goes beyond jobs to e.g. side projects also. Rather than "make X so that you can learn language Y," I would "learn language Y so that you can make X," where X is some project uniquely suited to language Y.
I'm an embedded/real-time/systems software developer. The realms I work in tend to be either the very small or the very large. When I wanted to learn Rust and Go, I coded the same application in both of them, one that I had previously coded in Java, C++, and C: I implemented the Generic Cell Rate Algorithm using a virtual scheduler. The GCRA is a traffic shaping algorithm that takes as parameters a desired peak rate, sustained rate, and maximum burst size, to meter or police traffic. I coded it as a library function, and provided a unit test to convince myself that it worked. I can only learn by doing, and that's what I did. One of the reasons I like this approach is it requires a lot of stuff: threads, synchronization, modularization, etc. https://coverclock.blogspot.com/2018/11/vamoose-rustler.html
same embedded developer here, my problem is that daily job only needs c/c++ so my skill about python or js or golang is always weak -- after a while I forgot many of their details due to lack of serious need...
my problem is: how to keep 3~4 language 'warm' at all times? write some code daily on each?
I found Python to be a great sidekick for embedded work. Parsing the captured logs, decoding memory sections, crafting specific hex sequences, building mock devices making desktop supporting tools... The syntax is different enough from C/C++ that I don't mix them up. Currently switching between 3 languages and I do notice a stray keyword from wrong language occasionally slips in.
Find out what the most common domain is for that language. If that domain is unfamiliar to me, I try to find a good tutorial on building something in it. The self-correcting part is if the language is good for the domain 99/100 a times an excellent tutorial can be found on it.
I'm not gonna write a compiler in Rust, and I'm not gonna write a web server in Haskell (reading between the lines the opposite is true).
So just for example
Kotlin => a quick web app or a mobile app
Python => rewrite some bash script I've been meaning to improve, or write some statistical analysis with numpy
In the process I get to learn a new domain at the same time, and get to see what that looks like when an ecosystem actively tries to make it easier.
Of course sometimes it's good to try to use a language for something it's not commonly used for, and find out how much programming can suck when no-one has worked on smoothing out the edges.
I just can't help it, I have to break out this old Kent Pitman saw. I'm not posting this to evangelize; I just think it's funny in context:
"But please don’t assume this is an exhaustive list, and please don’t assume Lisp is only useful for Animation and Graphics, AI, Bioinformatics, B2B and Ecommerce, Data Mining, EDA/Semiconductor applications, Expert Systems, Finance, Intelligent Agents, Knowledge Management, Mechanical CAD, Modeling and Simulation, Natural Language, Optimization, Research, Risk Analysis, Scheduling, Telecom, and Web Authoring just because these are the only things they happened to list. Common Lisp really is a general language capable of a lot more than these few incidental application areas, even if this web page doesn’t totally bring that out."
I use https://exercism.org/ with new languages to get a grasp on syntax and see examples that other people have submitted.
It's far from a true comprehension of the language, but it is really helpful to tackle problems that I've already done a few times in languages I am more familiar with to help relate concepts and highlight the differences.
I use it to get familiar with various concepts and idioms in languages I don’t know at all, and also for ones I feel comfortable with, where there are parts I’d like to understand and perhaps use in future. It’s incredible!
I've remade missile command in every language I've learned except COBOL (and node if you count it as distinct from Javascript). Not actually a programmer, electrical engineering (larger electrical gear for Datacenters).
It's also a nice touchpoint to look at general personal improvement at programming, since it's right at the point where it makes reasonable sense to use organizational schemes like design patterns and needs adapting for whatever language you're in. The first time I made it in high school was an utter nightmare that somehow printed to over 20 pages (I know better now), ended up multithreaded (early 2000s Java multithreaded), lacked many features like pause/titled screens, and had a memorable race condition where explosions could only start in pairs if they were both visible (so reserved top left of screen for that second explosion).
I’m a backend dev. To learn a new language, I’ll make some CRUD app with REST endpoints with some form of authentication.
I’ll pick the popular web framework, database library, json library, etc. and try to build it. I might even look at logging. This will help me expose all their popular libraries and features that’s relevant for my day job.
Plus Auth and publish and you will probably get followers. Annoying how many new things disregard Auth then CRUD is where 90% of monetization has existed on web to date.
Can you explain what you mean by publish? I'm assuming you mean publishing content (as in releasing learning material like a blog post or video tutorial) but some people as refer to publish as publishing (creating) events with an API.
I have a f1 news aggregator that I rewrite every time I learn a new language/framework. Over the years it has had a web frontend and also a mobile app.
Has a backend that consumes RSS feeds and builds a database of articles, a REST API that exposes articles, a web frontend that shows them, an iOS frontend that shows them, and an android frontend that shows them.
I've rebuilt every part of it multiple times in many languages - it's a project with reasonably constrained scope so you can usually implement any part of it inside a day or two, but it solves a real problem - I use it day to day to keep up with F1!
edit: I think the scraper is currently a .NET core 6 console app, the REST API is I think python, the frontend is pure JS, the iOS app is swift+swiftui, etc. Lots of variation.
Graphics? Check. And simple, top down, tilesheet or character maps work just fine.
Battles? Check. You can leverage anything from purely functional, object oriented, websocket, long polling, SQL, you name it. Whether you use 3 elemental types or flesh out everything from multiturn, semivulnerable, exp/leveling, it's all up to you.
Wanna just build an REST/GraphQL/gRPC API? Or a UI? PokeAPI is an opensource database of nearly all game data from moves, items, and species.
Pokemon is an endless, any-scope, extremely documented, opensource-rich field of exploration.
At which point, going the "Freedom Planet" route and re-skinning is probably the epic gamer move I'd want to take.
As for game mechanics, Wikipedia is a surprisingly solid resource. I mean, it's expected that these things are covered, but the depth is amazing. Check out this page for example!
https://m.bulbapedia.bulbagarden.net/wiki/Damage
For in depth game mechanics, I'd check out Dragonfly Cave, as they cover so much of it, too!
https://www.dragonflycave.com/
To study the ROM, and how the 1st Gen games work, I recommend this article, which covers the mechanics of the bit level organization of the first games
https://www.smogon.com/smog/issue27/glitch
I would love to make a game that compiles down to almost nothing like GameFreak initially did.
As for graphics, I've been following along in this book, and absolutely love it. They have an online version. You use the author's bespoke engine, so it does abstract much of it, but it covers things from map generation to event buses!
https://pragprog.com/titles/hwrust/hands-on-rust/
You make a roguelike, but the concepts carry over. And it can compile to Web Assembly, so any work you do can be embedded and shared on the web.
https://mikercampbell.gitbook.io/gotta-code-them-all/
https://mikercampbell.gitbook.io/gotta-code-them-all/
I'll look into starting that tonight and will share here if I go through with it!
https://mikercampbell.gitbook.io/gotta-code-them-all/
My second attempt was before I knew about OOP or FP, and just had a C++ array that held Pokemon data in set indexes. That was during my first programming class haha
But I also agree with the last sentence. When you are just starting out in your career, it's nice to have something more complex (I used to write sudoku solvers) to really get the feel of things. I'd never do that anymore though, as most things are similar enough to something I'm already pretty comfortable with.
The benefit is that the design of a blog web app is going to be very similar in a variety of languages that you can compare different frameworks/languages pretty easily. The downside is that if your language is better at non-webapp things, it's not going to be an easy exercise.
On rare occasion I do end up learning something outside of the job, like I learned basic perl writing an IRC bot, but for the most part it does end up being on-the-job.
Deleted Comment
Also: If I do not immediately have enough paid work, I brainstorm a side project which could feasibly use it.
my problem is: how to keep 3~4 language 'warm' at all times? write some code daily on each?
Then you can swap out all the python/njs/js frameworks to your heart's content.
I'm not gonna write a compiler in Rust, and I'm not gonna write a web server in Haskell (reading between the lines the opposite is true).
So just for example
Kotlin => a quick web app or a mobile app
Python => rewrite some bash script I've been meaning to improve, or write some statistical analysis with numpy
In the process I get to learn a new domain at the same time, and get to see what that looks like when an ecosystem actively tries to make it easier.
Of course sometimes it's good to try to use a language for something it's not commonly used for, and find out how much programming can suck when no-one has worked on smoothing out the edges.
"But please don’t assume this is an exhaustive list, and please don’t assume Lisp is only useful for Animation and Graphics, AI, Bioinformatics, B2B and Ecommerce, Data Mining, EDA/Semiconductor applications, Expert Systems, Finance, Intelligent Agents, Knowledge Management, Mechanical CAD, Modeling and Simulation, Natural Language, Optimization, Research, Risk Analysis, Scheduling, Telecom, and Web Authoring just because these are the only things they happened to list. Common Lisp really is a general language capable of a lot more than these few incidental application areas, even if this web page doesn’t totally bring that out."
It's far from a true comprehension of the language, but it is really helpful to tackle problems that I've already done a few times in languages I am more familiar with to help relate concepts and highlight the differences.
It's also a nice touchpoint to look at general personal improvement at programming, since it's right at the point where it makes reasonable sense to use organizational schemes like design patterns and needs adapting for whatever language you're in. The first time I made it in high school was an utter nightmare that somehow printed to over 20 pages (I know better now), ended up multithreaded (early 2000s Java multithreaded), lacked many features like pause/titled screens, and had a memorable race condition where explosions could only start in pairs if they were both visible (so reserved top left of screen for that second explosion).
I’ll pick the popular web framework, database library, json library, etc. and try to build it. I might even look at logging. This will help me expose all their popular libraries and features that’s relevant for my day job.
Has a backend that consumes RSS feeds and builds a database of articles, a REST API that exposes articles, a web frontend that shows them, an iOS frontend that shows them, and an android frontend that shows them.
I've rebuilt every part of it multiple times in many languages - it's a project with reasonably constrained scope so you can usually implement any part of it inside a day or two, but it solves a real problem - I use it day to day to keep up with F1!
edit: I think the scraper is currently a .NET core 6 console app, the REST API is I think python, the frontend is pure JS, the iOS app is swift+swiftui, etc. Lots of variation.