David Bryant Copeland, a software developer, writes about Rails, Scala, web components, software design, and the security of npm.
HN commenters link his npm security post on multiple dependency versions, and recommend his Scala tour, though one notes it is dated.
Since they're compiled into the code, it means you can't change them without recompiling, so they're not actually configuration. But they're not actually code either, so they can't be subclassed or inherited, don't support generics, and have other quirks [1]. Furthermore, they are a sort of explicit notation to make you feel like you're getting 'convention' over 'configuration', but if it were truly convention you wouldn't need them in the first place.
For example, to teach my class how to serialize itself into JSON, I can compile com.fasterxml.jackson annotations into it, but by doing so I've made a particular JSON library a dependency of myproject-datatypes. I'd rather my myproject-controller or some other layer of my application take care of how the data looks over JSON. Luckily Jackson supports an entirely different way [2] of teaching it how to map a class, but not all libraries are so nice.
That is not to say annotations don't have their place. They're good declarative structures, but in my opinion they are used in places where they shouldn't be. This blog post [3] from 2009 accurately describes how I feel about annotations.
[1] http://www.cowtowncoder.com/blog/archives/2009/02/entry_216.html
[2] https://github.com/FasterXML/jackson-docs/wiki/JacksonMixInAnnotations
[2] http://naildrivin5.com/blog/2009/03/11/java-annotations-javas-love-of-configuration-over-convention.html
This is my favorite game for the 2600.
I built a clone of it for Windows using Direct X in probably 1999/2000. I don't have a Windows machine, but I think Microsoft's obsession with backward compatibility means it probably still works:
https://naildrivin5.com/adventure/index.html
Here's the C++ code in all its glory: https://github.com/davetron5000/adventureclone/
It replicates the 2600 game, and adds two new levels (additional castle and maze), and two new (optional) objects, a candle that shows more of the labyrinths, and a shield that prevents the dragons from eating you.
npm in particular has been problematic for a long time:
https://naildrivin5.com/blog/2019/07/10/the-frightening-state-security-around-npm-package-management.html
https://techbeacon.com/security/check-your-dependencies-githubs-npm-finds-nasty-trojan-packages
https://thenewstack.io/npm-password-resets-show-developers-need-better-security-practices/
The Artima book by Odersky is the bible, and so you need that one.
For reference, I like http://naildrivin5.com/scalatour although it's 2.8 rather than the current 2.12.
For style guide, I'd go with Li Hiayo's blog, notably the Strategic Style series: http://www.lihaoyi.com/post/StrategicScalaStylePracticalTypeSafety.html
This post (2019) by David Bryant Copeland about npm security goes into some of the complications that arise when multiple versions of a dependency are allowed to be loaded simultaneously:
https://naildrivin5.com/blog/2019/07/10/the-frightening-state-security-around-npm-package-management.html
"Another tour of Scala": http://naildrivin5.com/scalatour was informative for me.
It's a bit dated, mostly targetting Scala 2.8. Current version is 2.12. But should not be fundamentally different.