Everyone wants to removed about JavaScript. How about using languages like Python and Java to create websites? You have to use an entire bloated framework and compilation just to be able to use a language that was never intended to be used for websites. Java web frameworks are atrocious.
The experience of using these JS frameworks is not comparable to using Java or Python as if they were PHP. There’s tangible (and monetary) benefits to using web tool for the web.
Right. JavaScript is a web tool and is used for the web. The other two I mentioned are not, yet they don’t get anywhere near the same amount of hate as JavaScript does. We get it, JavaScript has loose typing and was primarily a scripting language 30 years ago. Things change. JavaScript is a robust language capable of OOP now, and you can even add typing if that’s your hangup
The more and more I use CICD tools, the more I see value in scripting out my deployment with shell scripts and Dockerfiles that can be run anywhere, to include within a CICD tool.
This way, the CICD tool is merely a launch point for the aforementioned deployment scripts, and its only other responsibility is injecting deployment tokens and credentials into the scripts as necessary.
Anyone else in the same boat as me?
I’d be curious to hear about projects where my approach would not work, if anyone is willing to share!
Edit: In no way does my approach to deployment reduce my appreciation for the efforts required to make a CICD pipeline happen. I’m just saying that in my experience, I don’t find most CICD platforms’ features to be necessary.
All the build logic is coded in python scripts, the jenkins file only defines the stage (with branch restrictions) and calls the respective script function.
This means it works on all machines and if we need to move away from jenkins integration with a new ci platform would require minimal effort.
I’ve found Docker helpful when I want to use it to build binaries or use CLI tools that may not be available directly on the CICD platform. Also, Docker makes it easier to run the same code on MacOS that I ended up running on a Linux CICD server.
What would you consider to be overuse of containers?
Most of those things mentioned aren’t bona fide needs for me. Once a developer is deploying their project, they’re watching it go through the pipeline so they can quickly respond to issues and validate that everything in production looks good before they switch contexts to something else.
I see what you’re saying though, depending on what exactly is being deployed, the policies of your organization, and maybe expectations that developers are working in another context once they kick off a deployment, it could be necessary to have alerting like that. In that case it may be wise to flex some features of your CICD platform (or build a more robust script for deployment that can handle error alerting, which may or may not be worth it).
I come from game dev. We do lots of checks on the data that all kinds of people can screw up. So it’s important these situations are handled automatically with an email to the responsible person. A simple change can break the game, or someone might commit an uncompressed texture so the memory usage jumps up.
You’re not advocating against CI like the meme seems to be, but rather for CI builds to be runnable on human’s machines and the results should be same/similar as in when running w/in the CI system. Which is what CI folks want anyway.
I don’t think there is a single right or wrong answer but to play devils advocate making your CI tooling lightweight orchestration for your scripts that do the majority of the work means you lose the advantages of being able to easily add in third party tools that you want to integrate with your pipeline (quality, security, testing, reporting, auditing, artefact management, alerting, etc). It becomes more complex the more pipelines you are creating while maintaining a consistent set of tooling integrations.
Python is the second best language for everything. Having one language that does it all is better than learning several that might do it a little bit better.
JavaScript is very much not the second best language for anything.
JavaScript came about because it was the only choice in the context for which it was designed, and then it metasticized into other contexts because devs that used it got Stockholm syndrome.
Speed is a serious problem in Python though. Python has its use cases, and so do other languages. Things would not end well if we started using Python for everything.
If I wanted to write a 3D game engine, I wouldn’t use Python either. But there’s zero chance of me ever doing that. For 90% of things 90% of people do, Python works just fine. And the performance thing is actively being worked on and getting better all the time.
Python is the best “glue” language I’ve ever used. When you want to chain together your program’s high-level logic and all of the loops happen inside lower-level languages like Rust, Go, Zig, D or C, Python’s performance is perfectly adequate and it’s so clear and concise it reads like pseudocode.
Python is secretly a functional-paradigm language. If you’re not making liberal use of comprehensions instead of loops (especially loops with LBYL conditions in them), you’re doing it wrong.
The Danish word for 99 is nioghalvfems, which literally means “nine and half five.” Which you could be forgiven for assuming meant 11½. The trick is that a) “half five” actually means 4½, as in half less than five, and b) it’s implied that you’re supposed to multiply the second part by 20. So the proper math is 9 + (-½ + 5) * 20 = 99.
Java has many abstractions that can be beneficial in certain circumstances. However, it forces a design principle that may not work best in every situation.
I.e. inheritance can be both unnatural for the programmer to think in, and is not representative of how data is stored and manipulated on a computer.
You don’t have to use inheritance with Java. In fact, in most cases it’s better that you don’t. Practically all of the Java standard library doesn’t require the use of inheritance, same with most modern libraries.
On the contrary, I think inheritance is a very natural way to think. However, that doesn’t translate into readable and easy to maintain code in the vast majority of the cases.
I am not sure what you mean by how it’s stored or manipulated on a computer. A garbage collected language like Java manages the memory for you. It doesn’t really care if your code is using inheritance or not. And unless you’re trying to squeeze the last drops of performance out of your code, the memory layout shouldn’t be on your mind.
People hating on Java because “inheritance” usually don’t know the difference between inheritance and polymorphism. Stuff like composition and dependency inversion is black magic to them.
We’re gate-keeping the most mainstream programming language now? Next you’ll say English isn’t a real language because it doesn’t have a native verb tense to express hearsay.
And it is not forced at all. Noone holds a gun to your head to write extends. “Favor composition over inheritance” has been said as a mantra for at least a decade
Memory is an implementation detail. You are interested in solving problems, not pushing bytes around, unless that is the problem itself. In 99% of the cases though, you don’t need guns and knives, it’s not a US. school (sorry)
I do not like Java but this is a strange argument. The people that invented Java felt that most of the C language should be wrapped in unsafe.
Opinions can vary but saying Java is not a real language is evidence free name calling. One could just as easily say that any language that does not allow you to differentiate between safe and unsafe baheviour is incomplete and not a “real” language. It is not just the Java and C# people that may say this. As a C fan, I am sure you have heard Rust people scoff at C as a legacy language that was fine for its day but clearly outclassed now that the “real” languages have arrived. Are you any more correct than they are?
JS is fine. But as with any tool it’s not the best for every scenario.
The flak JS tends to get us mostly because of the rise of popularity is Node.js leading to backend JavaScript beginning commonplace. which it’s overall a poor choice for backend when compared to many other languages as the strengths that JS has are more tailored to frontend.
Don’t worry about, JS is a fine language and is used by all of the top companies. If you want to get a job as a software developer you have decent odds if you learn JS
As someone currently job hunting - native JS isn’t enough anymore. Everyone wants React devs. I see some posts for Vue or Angilar and sometimes even TypeScript but the vast majority want React coders now.
Very true.
If you are learning JavaScript, typescript is absolutely worth learning as well.
React and Vue have some additional paradigms, but it is basically just JavaScript/typescript.
It’s a lot to learn all in one step.
I guess it’s like trying to learn C# and Unity all in one
If you don’t hate a programming language you simply haven’t used it enough or are delusional. Every language sucks in its own special way, js ain’t special.
I agree with you that every language has its flaws but JS feels like it was a hodgepodge created without any design philosophy in mind. I don’t use C or lisp in day to day work but I can appreciate their philosophies and power. Can’t say the same about JS.
That’s because it literally is the result of mozila, Microsoft and later Google fighting about what the right language choices were/are. Browser detection scripts and shims are still a thing, but back in the day we had to code that shit by hand every, and I mean every, minor version release of every browser.
This is super interesting. But why isn’t HTML or CSS a similar mess? I found their structure to be more logical than JS. Parts of JS feels like it’s intended as a backend language but parts of it don’t.
Really? I find that css is pretty much the ugly part of html. Html is no worse than markdown or latex. If you just wrote plain HTML and were okay with how it rendered, you would have nicely structured code.
My point is that if you only use the parts that don’t bring confusion you have a problem… Nobody ever does that in production… Much less with any frameworks. There is no such thing as semantic html at scale or in any modern framework.
That isn’t the fault of the language though. It does what it was designed to well. Maybe it is I’ll suited to achieve things it wasn’t designed to do?
I could absolutely write code to do data analytics with C and gnuplot, does that mean they’re the appropriate tools for doing that when pandas, SPSS, Julia or matlab exists? Probably not.
Honest answer: JS is a shitty language and I despise it. BUT you can learn a ton of stuff with that, all the features (loops, conditions, variables, etc.) that exist in other languages. You will hate JS one day too, but right now it’s good to learn, and when you’ll switch to other languages, you’ll be happy you learned something.
So yes, JS sucks, but no, it won’t be useless for your future. Keep on working, programming is really fun.
I know this is a meme, but just in case someone doesn’t actually know. CI saves literally thousands upon thousands of dev hours a year, even for small teams.
And a lot of users' frustration, especially on more niche platforms (Linux, ARM, etc.) - things look much better on release when the code have been regularly compiled and, hopefully tested, on all platforms, not just the one the lead developer uses.
I can’t even imagine not having a ci pipeline anymore. Having more than a single production architecture target complete with test sets, Security audits, linters, multiple languages, multiple hour builds per platform… hundreds to thousands of developers… It’s just not possible to even try to make software at scale without it.
If you fuck up the setup and deploy to multiple environments at once with each one set to rebuild an image/program things can get long. You really have to fuck it though.
As annoying as it is when someone else breaks the CI pipeline on me, it is utterly invaluable for keeping the vast majority of commits from being able to break other people (and from you breaking others). I can’t imagine not having some form of CI to preventing merging bad code.
Hah, or my current one. Before we had CI you just directly committed to master (on SVN). It was incredible how unstable our build was. It broke basically everyday. Then one of the senior back end guys got promoted to architect and revamped the whole thing. Probably saved the company tens of millions dollars in man hours, at the very least.
Even better is when you restrict merges to trunk/main/master/develop (or whatever you call it) to only happen from the CI bot *after all tests (including builds for all supported platforms) pass. Nobody else breaks the CI pipiline, because breaking changes just don’t merge. The CI pipeline can test itself!
More complex build systems are just build.sh calling other build.sh in different configurations and using different software. It’s build.sh all the way down.
If I break our master build in CI, I get multiple emails and people saying “fix this”!!! I wouldn’t have to fix it if you stopped letting people commit directly to master and stopped using git rebase! 😁
programmer_humor
Active
This magazine is from a federated server and may be incomplete. Browse more on the original instance.