Is PHP becoming irrelevant? It still comprises the vast majority of web pages out there. Maybe that has been going down but with he amount of competing languages and systems out there, that is to be expected.
Either way, it’s an awesome language, happily been using it for decades now
Yeah they do, with no real reason, really. Oohh, “some functions use underscore and others don’t!” And? It’s not a problem, really. Every language has baggage from the past and PHP kept it for stability, I’m happy with that.
That’s weird, but more of an aesthetics issue than anything. JavaScript will actually decide to behave oddly for no reason; if that’s it it’s still king of the shitbirds.
I’m not the one you asked, but what I like isn’t really about PHP itself, but the fact that I can get dirt cheap hosting with PHP and MySQL. Every time I want to create a small “app” that makes some manual task easier it’s very useful to create something I can access from the internet.
Python is really useful for stuff like that too, but (in my experience) not as easy and cheap to use as an web app.
For example I go to dinner with some friends every month and we always forget who’s turn it is to choose and book a restaurant. So I just made this PHP page that shows the current and next 2 months with a name. So we always use that to see who’s turn it is.
Though I like that you use PHP, I don’t think there is such a thing as PHP hosting, or python hosting? Maybe I’m not understanding what you’re saying here?
When you pay a company and they provide you with a domain (you choose) and give you a webserver, some disk space, a database etc.
I pay about 30 euros a year for 5 websites. They are all very basic (either some php stuff I made, or WordPress). These websites have very few visitors so the hosting specs don’t really matter. All these websites have a specific domain name, some disk space, and a database.
For this price they offer PHP and MySQL. So it’s not a dedicated server where I’m root and can Install other stuff.
Quite early on the eyes, powerful, fast to build and rolk out projects, about. A billion libraries with all the functions you’ll ever need. People both about it because it has some language quirks from way back in the beginning, I see it as stability. I don’t know how node is now but I remember a few years back where every bug fix came accompanied not only by 10 new bugs but also a bunch of interface changes that immediately broke everything. Every. Single. Damn. Time.
Having said that, it under very active development and has been majorly improved over the years. Dumb design choices are no long available and right now it’s quite easy to work securely with it.
Beyond the “but these two functions should have similar naming but they don’t!” argument, that with a good editor doesn’t matter anyway, there isn’t really a good argument out there not to use it.
LLM costs $20 a month and needed only 60 hours of training, junior dev has been at it for years, costs as much for a half hour, and still needed me to repeatedly explain what a rectangle is
One key point here is: While you actually can replace a bunch of junior developers with AI in some places, any replaced junior developer will never become a senior developer that cannot be replaced by the AI because he/she is basically experince on two legs.
So, corporations, don’t complain about the lack of experienced, senior personnal because YOU have been the main reason they don’t exist.
Exactly my point. In the second case the two lines are also not the product, but it’s heavily implied that the dam, bridge is something useful, while the python code is useless. There are many examples where the opposite is the case
For unit tests, you should know the input and expected output from the start. Really responsible devs write the unit tests first, because you should know what you’re going to put in and what you’ll get out before you start writing anything. If you find yourself making the same mistakes in your tests as you do your code, you might be trying to do too much logic in the test itself. Consider moving that logic to its own testable class, or doing a one-time generation of a static set of input/output values to test instead of making them on the fly.
How granular your tests should be is a matter of constant debate, but generally I believe that different file/class = different test. If I have utility method B that’s called in method A, I generally test A in a way that ensures the function of B is done correctly instead of writing two different tests. If A relies on a method from another class, that gets mocked out and tested separately. If B’s code is suitably complex to warrant an individual test, I’d consider moving to to its own class.
If you have a super simple method (e.g. an API endpoint method that only fetches data from another class), or something that talks with an external resource (filesystem, database, API, etc.) it’s probably not worth writing a unit test for. Just make sure it’s covered in an integration test.
Perhaps most importantly, if you’re having a lot of trouble testing your code, think about if it’s the tests or the code that is the problem. Are your classes too tightly coupled? Are your external access methods trying to perform complex logic with fetched data? Are you doing too much work in a single function? Look into some antipatterns for the language/framework you’re using and make sure you’re not falling into any pitfalls. Don’t make your tests contort to fit your code, make your code easy to test.
If ever you feel lost, remember the words of the great Testivus.
Really responsible devs write the unit tests first, because you should know what you’re going to put in and what you’ll get out before you start writing anything.
I’ve obviously heard the general concept, but this is actually pretty helpful, now that I’m thinking about it a bit more.
I’ve written pretty mathy stuff for the most part, and a function might return an appropriately sized vector containing what looks like the right numbers to the naked eye, but which is actually wrong in some high-dimensional way. Since I haven’t even thought of whatever way it’s gone wrong, I can’t very well test for it. I suppose what I could do is come up with a few properties the correct result should have, unrelated to the actual use of it, and then test them and hope one fails. It might take a lot of extra time, but maybe it’s worth it.
How do you deal with side effects, if what you’re doing involves them?
For your vector issue, I’d go the route of some static examples if possible. Do you have a way to manually work out the answer that your code is trying to achieve?
For side effects, that may indicate what I referred to as tightly coupled code. Could you give an example of what you mean by “side effect”?
For your vector issue, I’d go the route of some static examples if possible. Do you have a way to manually work out the answer that your code is trying to achieve?
Not necessarily. In this scenario I’d imagine it’s a series of numbers as opposed to something more human-friendly exactly because there’s internal complexity that’s important but hard to manually survey, let alone generate. If you’ve worked with GANs at all, maybe it’s a point in a latent space.
For side effects, that may indicate what I referred to as tightly coupled code. Could you give an example of what you mean by “side effect”?
I mean it in the standard functional language way, if you’re familiar. There’s an operation that happens at some step of an algorithm, and it changes a data structure which is referred to or updated at another step. Sometimes you can’t really avoid it, because the problem itself has an interconnection like that.
A sorting algorithm example, if that doesn't make this too complicated.Concurrency it’s pretty much guaranteed to do it, so let’s say we’re trying to implement some sort of bespoke sorting algorithm, where each compare is large and complex enough we have bugs, and which runs in multiple threads. If threads are interfering with each other in this program, how do you test for that? The whole thing won’t give expected results, obviously, but another unsorted array or a failure to terminate doesn’t tell you much. Each compare and each swap might look correct at first, and give properly typed results. Let’s assume that each thread might traverse to anywhere in the array, so you can’t just check when they’re overlapping.
Another version of this is unexpectedly finding some niche, single-developer software tool that does precisely the thing you need, all because some genius angel stranger (strangel?) from the internet happened to encounter the same problem, and somehow knew how to fix it.
programmer_humor
Top
This magazine is from a federated server and may be incomplete. Browse more on the original instance.