💡 TIL: Today I learned that there is nothing special about
pkg/ inside of Go projects. It is just like any other sub-package structure you might otherwise define in your project. It just adds an extra part to your imports. I think it’s actually confusing at best and just unnecessary typing and an unnecessary sub-structure. Just keep your packages in the top-level and be done with it 👌
@firstname.lastname@example.org I think many projects largely started using it because of “the standard go project layout” which is not actually endorsed by the go core dev team. I generally advise against it for similar reasons.
@email@example.com Sometimes it feels like a cultural import from the Java world. I work a lot with Kubernetes code and it feels a bit like a bunch of Java devs wrote it. Good Java devs, but Java devs nonetheless.
@firstname.lastname@example.org I HATE Standard Go Project Layout, I have always prefered to structure my program by bounded context.
@email@example.com That’s the thing I really hate the most about programming languages and the communities that that eventually evolve around them. You end up with (as you rightfully point out) with folks from other languages come in and start touting ways to do things that may have made a lot of sense in one language but not necessary another. Standards are great and all, but they also take away the creativity that we all enjoy in this field in the first place. Conventions are better IMO.
@firstname.lastname@example.org. The issue is that (I don’t know why) programmers (often backends) are full of protocol, and they forget the basis of clean code, to pursue their protocol.
@email@example.com I sometimes wonder if this is a breadth of experience problem. I know I did this a lot when I was first starting out. As I’ve learned more programming languages, I have noticed that I’ve gotten better at following each language’s idioms.
@firstname.lastname@example.org Bingo! That’s just it 👌 Idioms.
That’s why you keep hearing about:
Some years ago when I still actively developed in Python i twas:
Zen of Python
Every language has its strengths and weaknesses, like you , I really hate it when the Java or C++ crowd come bring their sillyridiculouss structures to nice languages like Go 😅 (I felt the same way about Python 2.x -> 3.x too, I just couldn’t write Python anymore 😅)
@email@example.com @firstname.lastname@example.org @email@example.com Exactly, you just know what you know. You simply can’t follow a pattern which you haven’t heard of, so you just stick to what you’ve been doing in the past. From my own experience and what I’ve seen from others, it’s getting much better with more experience.
@firstname.lastname@example.org You are right of course ! 👌 but what we’re talking about here I think it’s probably very experienced program is from one language coming to another language so there isn’t much learning the new patterns of such? Anyway 🤷♂️
@email@example.com I’m bad with terminology, sorry. But I think, we’re basically on the same page. The only thing I wanted to say is, that I fully agree with @firstname.lastname@example.org’s theory here and tried to elaborate a bit.
Even if you have a very deep knowledge of one language, you typically won’t know about all the styles, patterns, spirits, etc. when starting to pick up a new one. Some ideomatics are just different. So when tackling something, you naturally do it like you’ve been doing it before in other language(s). In the beginning it just doesn’t occur to you, that something might be done (entirely) differently in this new language. It takes time to pick up and sometimes even more to wrap your head around it. Open-mindedness certainly also helps, I found. The more you’ve really worked with different languages, the more your little knowledge base grows. Hence, you know that things can be solved in lots of different ways. And that will basically bring you awareness, that you might want to look out for the specific procedures of doing something in that other language you’re using.
@email@example.com Yeah I agree, and that does happen.