4 ms·
That is a lot of what not to do. What are some ways to learn what to do for someone just getting into the field?
by DMell 4y ago
That is a lot of what not to do. What are some ways to learn what to do for someone just getting into the field?
- jtmarmon 4y agoSee a tech stack that seems cool/sexy/interesting? Make something up to build with it over a weekend to try it out. Put your blog on Kubernetes just for fun.
- felipeccastro 4y agoBuild your own project for learning and make your own choices. Ideally, something that you intend actual people to use, not just toys, so real-world constraints become a factor in the decisions. There's usually no right or wrong answer - it's all about tradeoffs. I personally prefer to keep the stack and architecture as simple as possible, but many others prefer to rely on 3rd party code as much as possible, regardless of added complexity. Sometimes my choices bite me (I have to reinvent more wheels than I was expecting), sometimes the too-many-layers-of-abstraction approach will bite too (like errors you have no idea why they happen). Compare different solutions available to the same problem, understand their tradeoffs, and then pick what better aligns to the needs of your project. If you're working with a team, you probably will not be making that decision alone, but the process could be the same.
- nazka 4y agoSame build your own project. As a full stack I wanted to know what devops and infrastructures was all about I went down the rabbit hole. I made my own Kubernetes, Istios, Helm charts, CI/CD, throw everything you can at it with even some eBPF and stuff. I learn sooo much. And it was so good to see the progress and getting the gotcha of the field. For instance one back then was how do you use kubernetes with databases. (I think it’s pretty much solved now but not 100% sure I have to check again). That was very different from what I usually do. And I mean it was functioning! You can’t beat this type of knowledge. And you learn even more things on the side. I am still blown away by the capabilities of eBPF and what the guy at Netflix does with it for instance. Or stuff like Falco. And if someone (here a devops let’s say) think your are like half bluffing you can show them exactly that you are not. And it also work to spot those that are bluffing and really just read a blog post about it. Which comes back to the question: better to learn by doing and then you see more the real experts and can lean on them. Or continue yourself to be one. So ya best way to get knowledge. Like we say there is no free lunch.
- machiaweliczny 4y agoBest way to learn is by working with someone experienced. Or just use mature solution like Rails for example it solves most of typical problems and has easy itegrations. If you need more flexibility then maybe Node.js or other ecosystem is better. Generally theme about architecture is called System Design and there are resources to learn it for interviews/learning purposes but most of it only is applicable at very big scale and you might never need it. Read "Designing Data Intensive Applications" and look into [1] if still interested. IMO better to invest time into data design/querying (caching) so that you won't think you need some vodoo to handle your traffic. Like 90%+ of sites/apps don't have 1000req/second and this should be handled by Python on Arduino so as long as your DB design is good you are fine. For async processing it's worth taking a look into Temporal [2] as it looks as promising alternative to job ques and cronjobs. I can also recommend [3] to learn some cloud patterns [1] https://github.com/donnemartin/system-design-primer https://github.com/donnemartin/system-design-primer [2] https://temporal.io/ https://temporal.io/ [3] https://docs.microsoft.com/en-us/azure/architecture/patterns/ https://docs.microsoft.com/en-us/azure/architecture/patterns...
- machiaweliczny 4y agoIf you mean more like code architecture than web services architecture then I can recommend http://aosabook.org/en/index.html http://aosabook.org/en/index.html There's even intro about web services: http://aosabook.org/en/distsys.html http://aosabook.org/en/distsys.html
- call-me-al 4y agoAre there more resources about code architecture in general? I am slightly frustrated since I can only find web service architecture resources when searching for software architecture on Google...
- machiaweliczny 4y agoI don't think there's much as project architecture is domain specific. There's some tricks that's good to know that mostly emerge from language limitations so for novice it's good to learn some language specific patterns: * Ruby [0] * Node.js [1] Then from more stable software except DBs is OS, Compilers and Games: * Games [2] * Interpeters [3] * Computation: [4] * OS: don't really know. Generally if you understand computation, computers/language and your domain you will come with good architecture. I haven't found any shortcuts yet. Fast iteration wins, so optimise mostly for that and ability to swap stuff that doesn't work, so contain crap as much as you can. Pure functions are by definition swappable and easy to test so abuse that. Use domain commands to mutate stuff and not updateEntity(X) and you will be good. Use turnOnEngine(car) instead of updateCar({ engine: true }). Also learn to use Facade[5] pattern -> this one makes gluing things much safer against abuse (limits API surface). It's also good to know about all the things one can optimise for to take decisions more consciously. So like maintainability, reusability, iteration speed, speed of delivery, observability, security etc. Generally search for "How to design programs book/course" for more abstract stuff and "$MyLang patters/architecture book" or check blogs of some high profile software or their devs [0] https://www.goodreads.com/en/book/show/13507787-practical-object-oriented-design-in-ruby https://www.goodreads.com/en/book/show/13507787-practical-ob... [1] https://www.goodreads.com/en/book/show/24514193-node-js-design-patterns https://www.goodreads.com/en/book/show/24514193-node-js-desi... [2] https://gameprogrammingpatterns.com/contents.html https://gameprogrammingpatterns.com/contents.html [3] https://craftinginterpreters.com/ https://craftinginterpreters.com/ [4] https://computationbook.com/ https://computationbook.com/ [5] https://refactoring.guru/design-patterns/facade https://refactoring.guru/design-patterns/facade