Aboutsaddened by the culture and attitude of devRant
Skillsi just want my raven
Joined devRant on 2/20/2018
Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
I am a PHP developer.
Yeah, "another PHP is awful" rant... no, not really.
It's just unsuitable for some ambitious projects, just like Ruby and Python are.
First of all, DO NOT EVER use Laravel for large enterprise applications. The same goes for RoR, Django, and other ActiveRecord MVCs.
They are all neat frameworks for writing a todo app, as a better-than-wordpress flexible blogging solution, even as a custom webshop.
Beyond 50k daily users, Active Record becomes hell due to it's lazy fat querying habits. At more than a million users... *depressed sigh*.
PHP is also completely unsuitable for projects beyond 5M lines of code in my opinion. At more than 25M lines... *another depressed sigh*.
You can let your devs read Clean Code and books about architecture patterns, you can teach them about SOLID & DRY, you can write thousands of tests... it doesn't matter.
PHP is scaffolding, it's made of bamboo and rope. It's not brick or concrete. You can build quickly, but it only scales up to a certain point before it breaks in multiple places.
Eventually you run into patterns where even 100% test coverage still doesn't guarantee shit, because the real-life edge cases are just too complex and numerous.
When you're working on a multi-party invoicing system with adapters for various tax codes, or an availability/planning system working across timezones, or systems which implement geographical routefinding coupled to traffic, event & weather prediction...
PHP, Python, Ruby, etc are just missing types.
Every day I run into bugs which could have been prevented if you could use ADTs in a generic way in PHP. PHP7 has pretty good typehints, and they prevent a lot of messy behavior, but they aren't composable. There is no way to tell PHP "this method accepts a Collection of Users", or "this methods returns maybe either an Apple or a Pear, and I want to force the caller to handle both Apple/Pear and null".
Well, you could do that, but it requires a lot of custom classes and trickery, and you have to rewrite the same logic if you want to typehint a "Collection of Departments" instead of "Collection of Users" -- i.e., it's not composable.
Probably the biggest issue is that languages with a (mostly) structural type system (Haskell, Rust, even C#/JVM languages to some degree, etc) are much slower to develop in for the "startup" era of a project, so you grab a weak, quick prototyping language to get started.
Then, when you reach a more grown up phase, you wish you had a better type system at your disposal...33
What follows isn't dev related and began as a comment on one of @AlexDeLarge's rants, and quicly became a full fleged story deserving it's own rant.
Oh God, drunk people are the worst and my gf is awesome.
I live with her in a street that never sleeps. Hardly anybody lives there, actually. That's just bars and night clubs, so during evening and at night, it's very crowded and noisy (luckily we have good noise insulation).
When we get back home late, there is always people standing in front of our door, looking at you like you just shat on their already puke and urine covered feet, just because you try to make them move to use your key.
Then I make sure my lady goes first, so I can check that nobody tries to go inside after me. The boys and girls standing there, watch us then, astonished, like you're some kind of homophobic gay or antisemitic jew, then ask, with a half smile and their eyes blank from any intelligence : "Isn't it hard living here?" (or, sometimes, "Hey dude, can I enter with you? Lol". Everytime I just refrain myself from answering "Yeah, the worst is people the like of you."
It happens exactly like this EVERY.FUCKING.TIME.
I'm not against getting drunk, I do myself sometimes (though that rarely on purpose). But please don't make me hate you for it.
One day we got back after a long party. My gf was merry and I was dead drunk because it bored me so I just drank glasses after another. I remember half of the night, and she told me the next day that I tried to buy a kebab with laundry and beer tickets (also a pants button), and really didn't see what was wrong in this. I can agree with drunk me here : you give a kebab, you get free beers and can go wash your clothes. Win-win!
Anyway, when we made it back to our front door, there was as usual people in front of it. Mainly manly man lesbians with some overweight problems. So she asks "Please could you move a little, we'd like to enter and my boyfriend here feels sick". A plain old 'no' was their answer. So from the top of my drunk wise, I declared "Go away or I'm puking over you, dumb bitches". They didn't like this. They began hitting us.
Everything is blurry from there, but I think some guys came to help them hit me, while they focused on my gf. I was mainly on the floor, taking hits after hits, waiting for them to stop because it was really annoying being punched in front of your door and pissed off that I was in no position to help her. Luckily for her, she can defend herself. The lesbians were just pulling her hair and scratching, so she gave them a few good hits in the belly and they let her go enough time to grab me in the middle of the boys (a friend of us helped her grab me as well, though he managed to stay out of the fight). When I took my key in my pockets, they stopped because they thought it was a Swiss knife (because my keys are arranged like one to take less space). I just went like "Guys, you dumb fucks, that's a key. A keeeeeey", before proceeding to put the wrong one in the lock and breaking it inside.
I don't know how, but the gf, with her long nails, managed to get it out in no time and used the right key afterwards. We were home and alive.
I was really proud of her that day, but also a bit ashamed to have just been a victim and a dead weight. To this day I never drink more than a beer or two during parties, in case I'd have to fight or run on the way back. Also, when she gets out to party with friends, she always phones me to fetch her when she's done, because there are cases of harassment and sometimes rape when a girl is alone late in these streets.
I really don't like a lot of people, but these braindead stupid fucktard make things really, really worse. One day there will be some bomb dropping from my window and these waste of carbon atoms and ethanol molecules won't understand anything that happens to them.16
I vehemently despise the popular image of developers as borderline autistic savants living on junk food and working 24 hour days!
You see, I bought into that vision and became that person. When I first started working as a developer, I would work crazy long hours, eating junk food while neglecting my health and personal life. This behavior was encouraged by my boss and co-workers, and became expected, with the sales people boasting about it to the clients, like is somehow proved I was a better developer.
It's no big surprise that this kind of life comes at a cost and can not be sustained. I burnt out, my life fell to pieces and my body fucked out on me.
It's taken me years to repair the damage and I am still doing so.
I now work at a company that understands the importance of a healthy work/life balance, and I take full advantage of that.
Perhaps if I had a wise mentor when I first started, I could have worked smarter instead of harder and respected the needs of my mind and body.
I am that mentor now.
Developers are smart people, we should stop glamorising a stupid lifestyle.12
As a developer, sometimes you hammer away on some useless solo side project for a few weeks. Maybe a small game, a web interface for your home-built storage server, or an app to turn your living room lights on an off.
I often see these posts and graphs here about motivation, about a desire to conceive perfection. You want to create a self-hosted Spotify clone "but better", or you set out to make the best todo app for iOS ever written.
These rants and memes often highlight how you start with this incredible drive, how your code is perfectly clean when you begin. Then it all oscillates between states of panic and surprise, sweat, tears and euphoria, an end in a disillusioned stare at the tangled mess you created, to gather dust forever in some private repository.
Writing a physics engine from scratch was harder than you expected. You needed a lot of ugly code to get your admin panel working in Safari. Some other shiny idea came along, and you decided to bite, even though you feel a burning guilt about the ever growing pile of unfinished failures.
All I want to say is:
No time was lost.
This is how senior developers are born. You strengthen your brain, the calluses on your mind provide you with perseverance to solve problems. Even if (no, *especially* if) you gave up on your project.
Eventually, giving up is good, it's a sign of wisdom an flexibility to focus on the broader domain again.
One of the things I love about failures is how varied they tend to be, how they force you to start seeing overarching patterns.
You don't notice the things you take back from your failures, they slip back sticking to you, undetected.
You get intuitions for strengths and weaknesses in patterns. Whenever you're matching two sparse ordered indexed lists, there's this corner of your brain lighting up on how to do it efficiently. You realize it's not the ORMs which suck, it's the fundamental object-relational impedance mismatch existing in all languages which causes problems, and you feel your fingers tingling whenever you encounter its effects in the future, ready to dive in ever so slightly deeper.
You notice you can suddenly solve completely abstract data problems using the pathfinding logic from your failed game. You realize you can use vector calculations from your physics engine to compare similarities in psychological behavior. You never understood trigonometry in high school, but while building a a deficient robotic Arduino abomination it suddenly started making sense.
You're building intuitions, continuously. These intuitions are grooves which become deeper each time you encounter fundamental patterns. The more variation in environments and topics you expose yourself to, the more permanent these associations become.
Failure is inconsequential, failure even deserves respect, failure builds intuition about patterns. Every single epiphany about similarity in patterns is an incredible victory.
Please, for the love of code...
Start and fail as many projects as you can.31