Thank you all for the suggestions!! I will look into them and will start focusing on one problem at a time.
On Wednesday, March 12, 2025 at 5:14:01 PM UTC+5:30 Jason E. Aten wrote: > Hi Kanak, > > Thanks for giving us more detail. This is a fascinating > and incredibly useful problem space (networking and storage). > It is well worth diving into; sub-spaces in it become > people's whole careers. > > As you've observed, a finished product like MinIO will use alot of > technology. > > The thing to do is to take a divide and conquer approach, and to just > focus on one part at a time. Recursively split that part into its > components until you have something you can tackle in a reasonable > time span -- whatever that is for your available time. > > And don't feel rushed. Computers run so fast that they hide a > very large amount of complexity--and can deceive us into thinking > that these things "must be simple". These are complex topics that will > take quite some time to comprehend--especially if you have to come > up to speed with the math behind them--and even quite a bit of time > if you ignore the math, which is sometimes viable. Understanding the > TLS handshake, for example, from scratch, probably took me a good 3-6 > months. > > One trick is to choose a problem to focus on. By taking > a problem focus, you can turn learning into a fun game. Pick a > problem that you don't understand the answer to (yet), but that > you know *has* an answer, because others have solved it. > > By dividing and conquering, and focusing on specific problems, > you avoid being overwhelmed by too much at once. > > Then the thing that I find most help in learning a technology is to take > a hands on approach, and to try and "solve the problem myself" first, or > at least > some small version of the problem in the space that I want to understand. > That is, actually write code to solve, or try to solve, the problem. > > By trying to tackle a small, focused problem yourself, without "looking at > the answers" first, > you come to an intuitive understanding of the problem, and thus > the design space solutions must take. > > You'll either find an easy solution nobody else thought of, or you'll > run into a dead end and then truly appreciate the cleverness > of the solution when you do "turn to the back of the book" to > check your answer. Because that's the next step--once you > have come to grips with the problem space, then you can look at the > answers that other people have done. But still keep "hands-on" > as you do so. Take the clever ideas that you encounter in > looking at "the answers", and incorporate them into your > own solution code. > > To give a specific example for networking, the area > you are trying to tackle, I found it most helpful to come to grips > with TCP by implementing the sliding window protocol > that TCP uses for reliable stream transmission. > > The problem is stated thusly: how can I turn an unreliable, packet based > communication system into a reliable, infinite stream of bytes > between two hosts? I would minimize this at first to focus > on the essentials: how can you reliably get a 1000 byte blob from one > goroutine to another goroutine, when you must send it in > parts through a go channel of type "chan [10]byte", *and* you are > forced to discard 20% of your receives at random on the receiving > end to simulate a lossy wifi network. > > Good luck! Enjoy the learning process. > > Best wishes, > Jason > > > On Tuesday, March 11, 2025 at 12:36:55 PM UTC Kanak Bhatia wrote: > > > Thanks for your response! I wanted to clarify my focus. > > I recently started exploring MinIO, an object storage system written in > Go, and realized that I need a better understanding of networking protocols > like TCP and UDP in the context of storage systems. MinIO uses > S3-compatible APIs, encryption, and distributed architecture, which got me > thinking about how such systems handle networking and security. > > I’d like to understand: > > 1. Networking in Object Storage – How TCP/UDP, HTTP APIs, and data > transfer mechanisms work in systems like MinIO. > 2. File to Object Conversion – How files are stored as objects and > retrieved efficiently. > 3. Encryption & Security – How data is encrypted both in transit and at > rest. > 4. Backup & Storage Concepts – Key networking and storage fundamentals > relevant to cloud storage. > 5. How authentication, load balancing, and distributed networking are > handled in Go. > > > Could you recommend structured resources or approaches to learning these > topics? > > I have around 2 years experience in the Java Springboot Domain, work > mostly concerned around web development making APIs. > > My main issue is that I'm looking at an open-source project in Go and > trying to understand its flow, along with the different networking > terminologies used in it. Specifically, while going through MinIO's code, > I’ve come across terms like gRPC streaming, HTTP multipart uploads, > connection pooling, TLS handshakes, and distributed erasure coding. > Understanding how these pieces fit together, especially in the context of > high-performance storage systems, is where I’m struggling. > On Tuesday, March 11, 2025 at 12:16:59 AM UTC+5:30 Jason E. Aten wrote: > > Hi Kanak. You'll get better answers with a little bit longer description > of what specifically you want to learn. Just "networking" is too broad a > topic to offer any concise guidance--its like saying "I want to know about > 'life', or 'the earth', or 'the internet'". What problems do you face? What > things about networking to you find challenging, opaque, bewildering? What > do you know already/what is your background so far? > > Best wishes, > Jason > > On Monday, March 10, 2025 at 5:48:10 PM UTC Kanak Bhatia wrote: > > I want to learn networking in Go. What are the best resources to refer to > and projects to practice? Would love some guidance. > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/faa74975-2cf0-4e4b-8afa-0be3dc55f6cfn%40googlegroups.com.