how to start to learn about programming and self host?
im very n00b about tech shit so i will ask 2 questions.
I want to self host some services for me and my first questions is: Any guide or book, or wtv, you recommend to understand self host world? I want to understand all things about it, but dont know where to start. And the guides for beginners i found on internet are very basic, just seems things like "do that, do this, and go" . I want to fully understand the world of self host. I want to understand firewalls, DyanmicDNS, MeshVPN; How to do self host; what not to do, what precautions, etc, etc.
The other question is about programming. I would love to know programming, but dont know where to start either. My focus is build android apps. Would like to learn programming to build apps for all world, but dont know how to do it and where to start. And i dont want make money with this, i just want to do this just for fun. Any advice? which language is better for a person who dont know nothing? which programs i need to install to start? Any book or tutorial recommendation ? im lost lol. thx
a) I don't have any good recommendations. I'd just like to say that's a lot of knowledge. Linux, networking, firewalls, the software etc. It takes some time to accumulate all of that knowledge. And probably reading more than one book
b) There are a lot of books about Android development. I'd recommend you visit a library or larger bookstore. They should have some, maybe you can skim a few pages and see if you like how it's written.
Edit: Any maybe ask in the self hosting community and not on ask lemmy. ( [email protected] )
My first programming language was Java and if you're looking to build android apps you only really have 3 options, Java, Kotlin & Dart. Android is built on Java so if you want to learn how android works, I'd recommend Java or Kotlin.
As for learning to program, your best bet is to think of a project and then try to build it. You will inevitably hit a wall at some point and working out how to overcome it is the best way to learn programming IMO.
The classic first apps are "Hello world" and a Todo list. Hello world is just an app which says hello to you on startup, it's hard to make a simpler app. A Todo list app is a note taking app where notes are saved between sessions, and can be deleted or updated.
I think learning linux and the terminal is a good place to start. Once you get comfortable doing basic stuff in the terminal, it will be easy to start making bash scripts. From there, something like Python would be a good next step.
In my case Ruby was my next step. I tried to learn Python later on but it always felt like a step back. Unfortunately Python is much more popular though for some reason so YMMV.
For the basics of programming, just pick any language to learn the syntax. Once you know one language, it's pretty easy to work with anything else. I'd recommend JavaScript or Python for that, but really anything is fine.
For advanced programming, the best thing you can do is learn to learn. Really than means being able to turn your concepts into concrete ideas that you can communicate into something other people will understand. Try taking a concept and doing Google searches for instructions on how to do it. Take other people's code snippets and make them work together for what you want to do.
Specifically regarding your desire to self-host something, pick a service and Google "how to self-host x". Maybe set up a PiHole or an Immich server for photos. Docker is widely used for easy portability for servers, so it will help if you learn how to use that. When you come to something you don't understand, do more Google searches and read everything, even if it makes your head spin. Read every bit of documentation you can and keep doing Google searches. Eventually, with enough iteration, you'll get something to work. Good luck!
On the programming front, there are a couple general buckets you can fall into.
Do you tend to naturally follow logical reasoning (given <when> then <action>)? If yes, you're in a pretty good starting position for algorithms. Computer programs should be predictable/deterministic. This all hinges on the people making algorithms implementing them well - especially when it comes to corner cases.
Do you build excel files with tons of vlookups and the like? If yes, data structures (think database schemas) and potentially back end could be your jam. Programs store/access data. That information should be well structured.
Do you have workflows/UX front of mine? If yes, maybe your strong suite is UI/"front end" design (and potentially implementation). IMO this is where a lot of FOSS falls down - my current podcast app can show you podcasts episodes that have been released in chronological order. You can remove them from this list, or you can add them to a secondary list they call a quque which... offers basically the same functional as the first list but now that it's a separate list you have to manage. This is not a dig on FOSS. If anything, it's meant as encouragement to say that even without knowing how to code you can contribute to help the apps you use feel better to users.
If you want to get your toes wet in Android download Android Studio. It's free.
All of what you said depends on a lot of concepts. Self hosting implies you need to understand basic networking, running servers, basic security, etc. Plus a lot more depending on the nature of the application you want to host. A simple website would only require a web server running on some machine, but more complex applications might require many more dependencies such as databases, caches, etc.
Perhaps first draw out a plan for what exactly you want to do and then think about what you'll need to learn to achieve that.
Programming is a good place to start in general. You could start from either Python or JavaScript and then move on from there.