Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Search - "complicated logic"
-
You know who sucks at developing APIs?
Facebook.
I mean, how are so high paid guys with so great ideas manage to come up with apis THAT shitty?
Let's have a look. They took MVC and invented flux. It was so complicated that there were so many overhyped articles that stated "Flux is just X", "Flux is just Y", and exactly when Redux comes to the stage, flux is forgotten. Nobody uses it anymore.
They took declarative cursors and created Relay, but again, Apollo GraphQL comes and relay just goes away. When i tried just to get started with relay, it seemed so complicated that i just closed the tab. I mean, i get the idea, it's simple yet brilliant, but the api...
Immutable.js. Shitload of fuck. Explain WHY should i mess with shit like getIn(path: Iterable<string | number>): any and class List<T> { push(value: T): this }? Clojurescript offers Om, the React wrapper that works about three times faster! How is it even possible? Clojure's immutable data structures! They're even opensourced as standalone library, Mori js, and api is great! Just use it! Why reinvent the wheel?
It seems like when i just need to develop a simple react app, i should configure webpack (huge fuckload of work by itself) to get hot reload, modern es and jsx to work, then add redux, redux-saga, redux-thunk, react-redux and immutable.js, and if i just want my simple component to communicate with state, i need to define a component, a container, fucking mapStateToProps and mapDispatchToProps, and that's all just for "hello world" to pop out. And make sure you didn't forget to type that this.handler = this.handler.bind(this) for every handler function. Or use ev closure fucked up hack that requires just a bit more webpack tweaks. We haven't even started to communicate to the server! Fuck!
I bet there is savage ass overengineer sitting there at facebook, and he of course knows everything about how good api should look, and he also has huge ass ego and he just allowed to ban everything that he doesn't like. And he just bans everything with good simple api because it "isn't flexible enough".
"React is heavier than preact because we offer isomorphic multiple rendering targets", oh, how hard want i to slap your face, you fuckface. You know what i offered your mom and she agreed?
They even created create-react-app, but state management is still up to you. And react-boierplate is just too complicated.
When i need web app, i type "lein new re-frame", then "lein dev", and boom, live reload server started. No config. Every action is just (dispatch) away, works from any component. State subscription? (subscribe). Isolated side-effects? (reg-fx). Organize files as you want. File size? Around 30k, maybe 60 if you use some clojure libs.
If you don't care about massive market support, just use hyperapp. It's way simpler.
Dear developers, PLEASE, don't forget about api. Take it serious, it's very important. You may even design api first, and only then implement the actual logic. That's even better.
And facebook, sincerelly,
Fuck you.17 -
I'm convinced code addiction is a real problem and can lead to mental illness.
Dev: "Thanks for helping me with the splunk API. Already spent two weeks and was spinning my wheels."
Me: "I sent you the example over a month ago, I guess you could have used it to save time."
Dev: "I didn't understand it. I tried getting help from NetworkAdmin-Dan, SystemAdmin-Jake, they didn't understand what you sent me either."
Me: "I thought it was pretty simple. Pass it a query, get results back. That's it"
Dev: "The results were not in a standard JSON format. I was so confused."
Me: "Yea, it's sort-of JSON. Splunk streams the result as individual JSON records. You only have to deserialize each record into your object. I sent you the code sample."
Dev: "Your code didn't work. Dan and Jake were confused too. The data I have to process uses a very different result set. I guess I could have used it if you wrote the class more generically and had unit tests."
<oh frack...he's been going behind my back and telling people smack about my code again>
Me: "My code wouldn't have worked for you, because I'm serializing the objects I need and I do have unit tests, but they are only for the internal logic."
Dev:"I don't know, it confused me. Once I figured out the JSON problem and wrote unit tests, I really started to make progress. I used a tuple for this ... functional parameters for that...added a custom event for ... Took me a few weeks, but it's all covered by unit tests."
Me: "Wow. The way you explained the project was; get data from splunk and populate data in SQLServer. With the code I sent you, sounded like a 15 minute project."
Dev: "Oooh nooo...its waaay more complicated than that. I have this very complex splunk query, which I don't understand, and then I have to perform all this parsing, update a database...which I have no idea how it works. Its really...really complicated."
Me: "The splunk query returns what..4 fields...and DBA-Joe provided the upsert stored procedure..sounds like a 15 minute project."
Dev: "Maybe for you...we're all not super geniuses that crank out code. I hope to be at your level some day."
<frack you ... condescending a-hole ...you've got the same seniority here as I do>
Me: "No seriously, the code I sent would have got you 90% done. Write your deserializer for those 4 fields, execute the stored procedure, and call it a day. I don't think the effort justifies the outcome. Isn't the data for a report they'll only run every few months?"
Dev: "Yea, but Mgr-Nick wanted unit tests and I have to follow orders. I tried to explain the situation, but you know how he is."
<fracking liar..Nick doesn't know the difference between a unit test and breathalyzer test. I know exactly what you told Nick>
Dev: "Thanks again for your help. Gotta get back to it. I put a due date of April for this project and time's running out."
APRIL?!! Good Lord he's going to drag this intern-level project for another month!
After he left, I dug around and found the splunk query, the upsert stored proc, and yep, in about 15 minutes I was done.1 -
> Root struggles with her ticket
> Boss struggles too
> Also: random thoughts about this job
I've been sick lately, and it's the kind of sick where I'm exhausted all day, every day (infuriatingly, except at night). While tired, I can't think, so I can't really work, but I'm during my probationary period at work, so I've still been doing my best -- which, honestly, is pretty shit right now.
My current project involves legal agreements, and changing agent authorization methods (written, telephone recording, or letting the user click a link). Each of these, and depending on the type of transaction, requires a different legal agreement. And the logic and structure surrounding these is intricate and confusing to follow. I've been struggling through this and the project's ever-expanding scope for weeks, and specifically the agreements logic for the past few days. I've felt embarrassed and guilty for making so little progress, and that (and a bunch of other things) are making me depressed.
Today, I finally gave up and asked my boss for help. We had an hour and a half call where we worked through it together (at 6pm...). Despite having written quite a bit of the code and tests, he was often saying things like "How is this not working? This doesn't make any sense." So I don't feel quite so bad now.
I knew the code was complex and sprawling and unintuitive, but seeing one of its authors struggling too was really cathartic.
On an unrelated note, I asked the most senior dev (a Macintosh Lisa dev) why everything was using strings instead of symbols (in Rails) since symbols are much faster. That got him looking into the benchmarks, and he found that symbols are about twice as fast (for his minimal test, anyway), and he suggested we switch to those. His word is gold; mine is ignorable. kind of annoying. but anyway, he further went into optimizing the lookup of a giant array of strings, and discovered bsearch. (it's a divide-and-conquer lookup). and here I am wondering why they didn't implement it that way to begin with. 🙄
I don't think I'm learning much here, except how to work with a "mature" codebase. To take a page from @Rutee07, I think "mature" here means the same as in porn: not something you ever want ot see or think about.
I mean, I'm learning other things, too, like how to delegate methods from one model to another, but I have yet to see why you would want to. Every use of it I've explored thus far has just complicated things, like delegating methods on a child of a 1:n relation to the parent. Which child? How does that work? No bloody clue! but it does, somehow, after I copy/pasted a bunch of esoteric legacy bs and fussed with it enough.
I feel like once I get a good grasp of the various payment wrappers, verification/anti-fraud integration, and per-business fraud rules I'll have learned most of what they can offer. Specifically those because I had written a baby version of them at a previous job (Hell), and was trying to architect exactly what this company already has built.
I like a few things about this company. I like my boss. I like the remote work. I like the code reviews. I like the pay. I like the office and some socializing twice a year.
But I don't like the codebase. at all. and I don't have any friends here. My boss is friendly, but he's not a friend. I feel like my last boss (both bosses) were, or could have been if I was more social. But here? I feel alone. I'm assigned work, and my boss is friendly when talking about work, but that's all he's there for. Out of the two female devs I work with, one basically just ignores me, and the other only ever talks about work in ways I can barely understand, and she's a little pushy, and just... really irritating. The "senior" devs (in quotes because they're honestly not amazing) just don't have time, which i understand. but at the same time... i don't have *anyone* to talk to. It really sucks.
I'm not happy here.
I miss my last job.
But the reason I left that one is because this job allows me to move and work remotely. I got a counter-offer from them exactly matching my current job, sans the code reviews. but we haven't moved yet. and if I leave and go back there without having moved, it'll look like i just abandoned them. and that's the last thing I want them to think.
So, I'm stuck here for awhile.
not that it's a bad thing, but i'm feeling overwhelmed and stressed. and it's just not a good fit. but maybe I'll actually start learning things. and I suppose that's also why I took the job.
So, ever onward, I guess.
It would just be nice if I could take some of the happy along with me.7 -
I wrote a database migration to add a column to a table and populated that column upon record creation.
But the code is so freaking convoluted that it took me four days of clawing my eyes out to manage this.
BUT IT'S FINALLY DONE.
FREAKING YAY.
Why so long, you ask? Just how convoluted could this possibly be? Follow my lead ~
There's an API to create a gift. (Possibly more; I have no bloody clue.)
I needed the mobile dev contractor to tell me which APIs he uses because there are lots of unused ones, and no reasoning to their naming, nor comments telling me what they do.
This API takes the supplied gift params, cherry-picks a few bits of useful data out (by passing both hashes by reference to several methods), replaces a couple of them with lookups / class instances (more pass-by-reference nonsense). After all of this, it logs the resulting (and very different) mess, and happily declares it the original supplied params. Utterly useless for basically everything, and so very wrong.
It then uses this data to call GiftSale#create, which returns an instance of GiftSale (that's actually a Gift; more on that soon).
GiftSale inherits from Gift, and redefines three of its methods.
GiftSale#create performs a lot of validations / data massaging, some by reference, some not. It uses `super` to call Gift#create which actually maps to the constructor Gift#initialize.
Gift#initialize calls Gift#pre_init (passing the data by reference again), which does nothing and returns null. But remember: GiftSale inherits from Gift, meaning GiftSale#pre_init supersedes Gift#pre_init, so that one is called instead. GiftSale#pre_init returns a Stripe charge object upon success, or a Gift (and a log entry containing '500 Internal') upon failure. But this is irrelevant because the return value is never actually used. Pass by reference, remember? I didn't.
We're now back at Gift#initialize, Rails finally creates a Gift object using the args modified [mostly] in-place by all of the above.
Another step back and we're at GiftSale#create again. This method returns either the shiny new Gift object or an error string (???), and the API logic branches on its type. For further confusion: not all of the method's returns are explicit, and those implicit return values are nested three levels deep. (In Ruby, a method will return the last executed line's return value automatically, allowing e.g. `def add(a,b); a+b; end`)
So, to summarize: GiftSale#create jumps back and forth between Gift five times before finally creating a Gift instance, and each jump further modifies the supplied params in-place.
Also. There are no rescue/catch blocks, meaning any issue with any of the above results in a 500. (A real 500, not a fake 500 like last time. A real 500, with tragic consequences.)
If you're having trouble following the above... yep! That's why it took FOUR FREAKING DAYS! I had no tests, no documentation, no already-built way of testing the API, and no idea what data to send it. especially considering it requires data from Stripe. It also requires an active session token + user data, and I likewise had no login API tests, documentation, logging, no idea how to create a user ... fucking hell, it's a mess.)
Also, and quite confusingly:
There's a class for GiftSale, but there's no table for it.
Gift and GiftSale are completely interchangeable except for their #create methods.
So, why does GiftSale exist?
I have no bloody idea.
All it seems to do is make everything far more complicated than it needs to be.
Anyway. My total commit?
Six lines.
IN FOUR FUCKING DAYS!
AHSKJGHALSKHGLKAHDSGJKASGH.7 -
Working on a project where the coordinator is insisting on using OneDrive. Lost the link he sent out in an email so decided to:
- Google "OneDrive": Eventually brought me to "office.live.com/...." with a view of my settings and apps ... no OneDrive.
- Spent a while using a bit of logic to click around and find it, forgot logic doesn't work well with MS products and ended up on Outlook instead.
- Spent a while searching for the original email with the link, found it, brings me to "...sharepoint.com/....".
- Inside sharepoint (OneDrive?) the banner says "Office 365".
- But the browser tab says OneDrive.
Are Microsoft just afraid of consistency at this point? I mean seriously, pick a name and use it everywhere. Why is that so hard? why is that so complicated?6 -
Just found this piece of code from one of my coworkers:
restMethod() {
try {
// some complicated logic
} catch (WebApplicationException e) {
throw e;
}
}
Why?!
And btw: Hi fellow devRant ppl! 👋6 -
Is it just me, or does nobody read their fucking email? Especially when I try explain how a bug isn't trivial to solve because its based on some shitty design decision, that the managers made, that is practically the core of the app. If YOU cant understand the logic with me explaining it to you in plain FUCKING ENGLISH, than how in the name of baby FUCKING jesus, do you expect me to communicate that to the most complicated machines that man has ever built?!? What in the actual fuck do you even do here?!? I could do your job blind-folded, with terminal access to the db, while a monkey was flinging shit at me!5
-
Context:
PM is not an IT professional but somehow leads IT operations ... (yes... I know)
---
PM: "Hey xxzero0, do you remember about the XYZ project?"
xxzero0: "Yes, tell me"
PM: "I told the big boss we can use it to make starships and explore the universe, I also said we can cut the developing time because we are already at 70% with it".
xxzero0: "....... Do you understand we planned to use this project to deploy a small ship in the sea?"
PM: "Yes, but you clearly inexperienced developer, don't know it needs only some refactoring to explore the universe"
xxzero0: "It is more complicated. There is no logic at all. It is just displaying data without doing anything and..."
*Get interrupted*
PM: "Yes, we need some refactoring, I'm such a genius."7 -
001 REM Code review
010 PRINT "Nitpick nitpick nitpick nitpick nitpick"
011 GOSUB REFACTOR
020 PRINT "This function is too complicated, break it up"
021 GOSUB REFACTOR
030 PRINT "Why do you have three methods for this? Put all the logic in one method."
031 GOSUB REFACTOR
040 GOTO 020
041 REM ARGH
998 PRINT "Looks good."
999 STOP8 -
"I'm almost done, I'll just need to add tests!"
Booom! You did it, that was a nuke going off in my head.
No, you shouldn't just need to add tests. The tests should have been written from the get go! You most likely won't cover all the cases. You won't know if adding the tests will break your feature, as you had none, as you refactor your untested mess in order to make your code testable.
When reading your mess of a test case and the painful mocking process you went through, I silently cry out into the void: "Why oh why!? All of this suffering could have been avoided!"
Since most of the time, your mocking pain boils down to not understanding what your "unit" in your "unit test" should be.
So let it be said:
- If you want to build a parser for an XML file, then just write a function / class whose *only* purpose is: parse the XML file, return a value object. That's it. Nothing more, nothing less.
- If you want to build a parser for an XML file, it MUST NOT: download a zip, extract that zip, merge all those files to one big file, parse that big file, talk to some other random APIs as a side-effect, and then return a value object.
Because then you suddenly have to mock away a http service and deal with zip files in your test cases.
The http util of your programming language will most likely work. Your unzip library will most likely work. So just assume it working. There are valid use cases where you want to make sure you acutally send a request and get a response, yet I am talking unit test here only.
In the scope of a class, keep the public methods to a reasonable minimum. As for each public method you shall at least create one test case. If you ever have the feeling "I want to test that private method" replace that statement in your head with: "I should extract that functionality to a new class where that method public. I then can create a unit test case a for that." That new service then becomes a dependency in your current service. Problem solved.
Also, mocking away dependencies should a simple process. If your mocking process fills half the screen, your test setup is overly complicated and your class is doing too much.
That's why I currently dig functional programming so much. When you build pure functions without side effects, unit tests are easy to write. Yet you can apply pure functions to OOP as well (to a degree). Embrace immutability.
Sidenote:
It's really not helpful that a lot of developers don't understand the difference between unit, functional acceptance, integration testing. Then they wonder why they can't test something easily, write overly complex test cases, until someone points out to them: No, in the scope of unit tests, we don't need to test our persistance layer. We just assume that it works. We should only test our businsess logic. You know: "Assuming that I get that response from the database, I expect that to happen." You don't need a test db, make a real query against that, in order to test that. (That still is a valid thing to do. Yet not in the scope of unit tests.)rant developer unit test test testing fp oop writing tests get your shit together unit testing unit tests8 -
When I just started my software engineering course in college, we had a group project every semester where we would use the skills learned during that semester to make a certain product or program.
For the semester in this story, we were tasked with making a reservation system for a campsite. Visitors would be able to select a free spot, and reserve it.
The spot reservation screen would be a map of the campsite, and visitors would click on the desired site on the map to select it. Sites were neatly laid out in a perfect grid.
My task in the group for this project was my favourite position: yelling at people for poor code quality. And boy did I get to yell.
Any semi competent programmer would probably come up with two simple loops to generate all the buttons (something like 144 buttons), one loop to fill a row, and then another to go down the rows until all were filled. Some other similar functionality in the program was solved this way.
However, my classmate that was responsible for this part of the code wasn't a big fan of concise programming. So instead, he wrote 144 functions aptly called `generateFirstButton()` all the way through `generateHundredFourtyFourthButton()`.
*what*
I called him out on his horribly smelly code, and his retort was "But it works, and now you don't have to think about complicated loop logic".
I rewrote the class and reduced it from ~1150 lines to about 20 lines.
He didn't pass the exam.2 -
How I should approach a new project:
- think about data design
- draw some tables
- configure relations
- create data structures
....
How reality proves I'm a donkey:
- builds random table
- works on models, with random querys
- realizes things get to complicated and relations are broken or tables need duplicate logic
- starts thinking about 'good' design
- draw some tables
- configure relations
- create data structures
.... -
Worked so many hours on a bug. Some manager thinks my code is too complicated. He asked my coworker to take my pr, then remove all logic that handles many edge cases. Now the shit is merged 😂. I hate my job8
-
Pulled into an 'emergency' meeting with a group of web designers deeply concerned a particular service wasn't going to meet all their requirements.
DevA: "For each page, Its going to be A LOT of work to retrieve all the data and store it's state. Every page load will require a round trip to the service."
DevB: "Yes, we aren't sure how the service should be changed to do what we need."
Mgr: "What is it not doing now? Doesn't the service already returns all the necessary data?"
DevA: "Well...um...its all the boolean fields. Some may be defaulted from the database or false because the user unchecked the box. We have to know which is which"
Me: "Why? Are you doing anything different in the UI? Checkbox will be true or false. What or who set that value is irrelevant"
DevC: "Well, it matters if the user didn't fill out all other other values."
Me: "How so?"
DevA: "Its matters because the values in the other fields. Its going to be A TON of work to figure out."
<mgr goes to the white board>
Mgr: "Lets map this out...what fields are you needing to trigger the state on?"
DevA: "Um...uh...the 'Approved' field...and um...'OK to Contact' field"
Mgr: "Just those two?"
DevA: "Yea..um...there are other fields, but whether or not to show the edit box depends on those two."
Me: "The service already returns data, you only have two fields to check? I don't see a need to change the service at all."
DevA: "Returning all that data, we are going have a serious scaling problem. We'll be hitting the service A LOT. All that javascript could cause performance problems too"
Me: "How much data are we talking about? Name, address, couple of booleans?"
DevA: "I have to serialize the data. All that logic is going to be reeeaaallly complicated. It might be better if the service returned only the data I need."
Me: "$64,000 question, how often is this feature going to be used on the web site? Maybe once? Few hundred a week?"
Mgr: "We have no idea. A lot of the data will be pre-populated and we're only sending out a few thousand invitations. More around the holidays...but honestly, not very many."
Me: "Changing that service only for this particular area of the web site isn't going to happen. Changing the UI is the only course of action."
DevA: "Oh frack I can't wait until this project is over."
DevA...how the funck do still have a job here? You wasted about half-hour of my time with your cry-baby crap. Where is my hammer...no...no..don't go there...ahhh...thanks devrant. Prison sentence diverted.2 -
My lead loves to over engineer crap and waste weeks building complicated solutions.
And then during retro when a team member has the stones to say we should've thought about it a little more or used the input of some other teammates, he shuts them down by saying that more input would've been bad for the design. I can see where he's coming from, but he always seems to have an excuse for us. Why can't he just be more transparent and clear with us? If he has a problem, just say it. That's what retros are for.
Oh and then he takes a shot at me saying that we shouldn't have built a UI in tandem with it. I didn't even recommend a UI for the thing. All I said was that if we ever have a UI, we should consider a database setup that assists both the server and UI. But nooo, he's stuck with this "server design" approach. Everything has to be built to make it easier for the server.
I still don't understand why anyone would have their server logic influence the design. Especially the database. I just seems too targeted. It just creates these nasty denormalized tables.
Ugh... Our team is getting dragged around by this arrogant and silly man. -
Taught myself assembler at 13 (this was the mid 1980s) and wondered how the hell people could stand to do this. Then I found out there were more abstract languages like BASIC or COBOL. So I taught myself BASIC and MS-DOS batch scripting. Various other languages came later (PROLOG, Pascal, C, Smalltalk, C++, VisualBasic, etc). But it’s never been easy for me because I suck at math and complicated logic structures. Especially not good with OOP. My brain was ruined by learning procedural coding first. It refuses to incorporate OOP.
-
New twist on an old favorite.
Background:
- TeamA provides a service internal to the company.
- That service is made accessible to a cloud environment, also has a requirement to be made available to machines on the local network so you can develop against it.
- Company is too cheap/stupid to get a s2s vpn to their cloud provider.
- Company also only hosts production in the cloud, so all other dev is done locally, or on production non-similar infra, local dev is podman.
- They accomplish service connectivity by use of an inordinately complicated edge gateway/router/firewall/message translator/ouija board/julienne fry maker, also controlled by said service team.
Scenario:
Me: "Hey, we're cool with signing requests using an x509 cert. That said, doing so requires different code than connecting to an unsecured endpoint. Please make this service accessible to developer machines and lower environments on the internal network so we can, you know, develop."
TeamA: "The service should be accessible to [cloud ip range]"
Me: "Yes, that's a production range. We need to be able to test the signing code without testing in production"
TeamA: "Can you mock the data?"
Me: "The code we are testing is relating to auth, not business logic"
TeamA: "What are you trying to do?"
Me: "We are trying to test the code that uses the x509 you provide to connect to the service"
TeamA: "Can you deploy to the cloud"
Me: "Again, no, the cloud is only production per policy, all lower environments are in the local data center"
TeamA: "can you try connecting to the gateway?"
Me: "Yes, we have, it's not accessible, it only has public DNS, and only allows [cloud ip range]"
TeamA: "it work when we try it"
Me: "Can you please supply repro steps so we can adjust our process"
TeamA: "Yes, log into the gateway and try issuing the call from there"
Me: (╯°□°)╯︵ ┻━┻
tl;dr: Works on my server -
I don't know how to deal with this, it's always complicated.
-customer sees some output from their computer they don't understand-
-customer comes up with a theory on why and some complicated logic to solve it and sends that as a request-
-i'm too stupid to realize it and follow their logic and hurt my brain until I realize it... no that's dumb...-
Result: time wasted1 -
Had to explain for 30 minutes to a consultant why:
1. registering a the container in the container.
2. writing abstraction for the container to use the abstraction of the container internally.
3. doing service locator thus hiding dependences.
4. having your business logic code know about DI.
5. writing log4net in a massively over complicated manner just because you didn't read the fucking manual.
6. coping code from github into our source.
are just wrong. -
!rant
Going through my graduate program I have come to realize that there is more to A.I than just machine learning algorithms. As if ML was not complicated enough, we add more to it such as KRR and other topics that border on the areas of Cognitive Science, Boolean Algebra, Logic and even Philosophy and you know what? I dig it. I dig it because finding some of the information in the course that I am getting is damn near impossible to see in other items. Such is the case as a method for fucking signature unit propagation which afuckingparently was developed by one of my instructors(not complaining, just really fucking impressed)
The thing is, most of these items would normally have a parallel in software development that we use on our day to day basis, all of us, no matter if you do web, systems development, database development whatever, the general concepts are the same: you represent real world concepts, such as that of logic and knowledge in programatic/mathematical representations.
I am really amazed at the content of these items, I really am. I just wish for some clarification on ambiguity, seems like most things are left better if it where explained in a programmer's point of view. Most of the items that I have seen could have easily been summarized in a programmers logic if only they would have preferred to take the time to do it, and I get that there needs to be mathematical intuition formulated before anything, it is better sometimes to learn concepts from an outside point of view, a mathematical point of view, but shit is just strange sometimes.1 -
Over complicated htaccess rewrites that dont work due to the client's business logic. I hate wasting time on something that should take 5 mins.
-
So been doing a TFVC -> Git conversion the last 3 weeks. I'm finally seeing an end to this mind numbing frustrating mess, so I was thinking 'this is a good time to write down my experience in a rant'.
So first of all, I'm working on a project that's about 10 years old, and didn't have a serious refactoring in that time (still runs on .net 4).
The project structure is f*cked up and seriously complicated the git conversion. For example forms only used in the winform application were in a solution for a web app, and file referenced in the windows application. But due to the fact that these forms also needed references to some business logic in the winform app, I had to constantly jump from one project to the other, fixing references to get this shit in NuGet. Sadly this wasn't the only case, and the other 40 project I had to convert from TFVC to Git had equally f*cked up stuff.
Only thing positive to come of this, pretty much decided to leave and start as a freelancer. At least I'll get payed better for doing shit like this, and I know it'll be a temporary thing and can move on after it's done.4 -
The logic in a method reflected a truth table not obvious to understand. The first time I implemented tests for coverage as I didn't trust anybody to remember and understand the logic after a few weeks.1
-
That feeling when you inherit a script to automate something that takes 10 seconds. Why would they even write this? It's not like the task is hard....
...
And why would they write it this way? I'm sure if I just move this part and ....
That feeling when you spend several hours improving and redesigning a perfectly functional script to automate a 10 second task for zero gain aside from cleaner code. "But the code for this quick-and-dirty script I'm never going to look at again looks so much better now!"
... If only it did a bunch of complicated parsing, regex matching, and error checking just so I can answer one less prompt.... Unless that parsing fails. Then it should still ask me for that prompt... And also validate that the answers I give are valid and correct....
That feeling when you spend a whole nother day starting from scratch to implement error checking and complex parsing logic knowing full well the original task takes 10 seconds to do manually and is needed at most twice a day (for a grand total of 20s a day)
WHY AM I LIKE THIS?!?!?!4 -
First dev job was not really a job but rather an internship... I was completely new to Spring and Jersey Java and i was given a 5 points story "which turned out to be 8 later on" to consume a RESTfrl webservice... Manipulate the response and create an Excel sheet at the end... But the Excel columns n rows had some complicated logic to determine colour, font, borders, alignment and a lot of other props..
Got it done "code was a bit ugly" and dev lead was satisfied and told me I actually knocked out an 8 points story on my own... Team velocity was 5 points story per Dev.
Now im a full time Developer therr -
There was a department. Long time ago their work was somewhat complicated: background checks of businesses, websites, ToSes, assuring agreement compliance, some risk management on top. They started as small 3 people team but over the years they were hiring new employees to catch up with the growing customer base. They were still struggling. Few years back we've integrated 3rd party services to help them and, finally, their backlog was gone!
In January they complained about how much more work they have since the merger so I inquired about which process was troublesome, what was the flow, etc., and it turned out to be very... Tinder-like - the issue was the sheer number of cases:
1. open a case,
2. check results in few windows,
3. if green + green + green, move right.
4. else move left.
It was ridiculous, I wouldn't stand for that. I sat for an hour, made some ghosting scripts that followed same business logic and saved results alongside their actual decisions. Last week I compared the two and there was zero difference so I green-lit it with my boss and pushed to prod.
Oh, the happiness on their faces when they heard the news, the disbelief, the tears of joy!
And then it happened. After 4 years of being cautious not to stir the waters I did it again. Yesterday I accidentally replaced 17 people department with 3 scripts. How was I supposed to know it was *all* they were doing??1 -
When you work on a project for months, the newly appointed tech lead says "we all (him, the boss and other colleagues not involved in this project) looked at your code and decided that it should be dropped and we are starting from scratch again....now I'm not against code review (which we never did) so I welcome the input but allow me to vent my frustrations about how this is being done. Also to have a review & verdict without me being present?
So I ask what was so wrong:
* You changed the database structure. Valid, I tried to make your db an actual db with relationships, so I added some foreign keys, delete fields that were never used, all because they told me to use an ORM.
* You used to much logic in setters, validation etc, valid again but this would be something we could look at and fix imho.
* You are passing classes in your constructor, valid I wanted to use DI to make unit testing possible. Ohh but I don't like unit testing so I don't see the point and it makes it to complicated was the response.
So not only was the project cancelled, the new iteration is being developed without me, I'm shunned from all meetings. Ohh and from what I see they are now using 5 tables instead of 25 and completely started the db model from scratch...5 -
I have been doing android dev for quite a time now and have started to understand/appreciate a few things that I previously hated (Like Kotlin) . so am not sure where would be my stance regarding this rant in upcoming months, but FUCK DEPENDENCY INJECTION FRAMEWORKS!!
dependency injection is rightly said to be a $25 term for a 25 cents concept. If i start refactoring my old apps today to "follow DI principles", they would require just 5-10% refactoring and i will end up with much more testable code.
But integrating dagger in my apps? Oh please fuck me straight instead. That thing is so overly complicated and confusing. Why would you trust compiler to inject instances in YOUR LOGIC ? it was YOUR LOGIC that guided the compiler, remember?
I am yet to work on a product of scale where frameworks like dagger or koin made even a slightest of sense.
Currently it just feels like another bad choice we took between "simple but verbose" and "complicated but pretty to look at"
The way this framework makes me think like a compiler than a programmer somehow reminds me of this beautiful article i read:
https://theatlantic.com/technology/...3