Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
Get a devDuck
Rubber duck debugging has never been so cute! Get your favorite coding language devDuckBuy Now
Search - "dirty code"
I've been fortunate enough to work with a lot of awesome people early into my career.
At the company I worked where I met @trogus, I became friends with a few people, including Tim, that I think were my favorites. It was a really fun bunch and though it may sound immature, but a lot of the times it felt like we were kids so for me coming out of college it was awesome.
There's so many stories from working with that bunch that come to mind for me. One of my best friends there was this guy "Dirty Devin." He started around the same time I did. When I first met him he seemed really boring and professional. After getting to know him, and after he'd been at the company for a few weeks, his actual personality started to show and he was like a child (in the best way possible) and was absolutely hilarious/made the work place a blast.
Our office had a ping pong table and neither Dirty Devin or I had ever really played. We started playing against each other and we both very quickly got really good.
I also met a guy named Botond (he's the one in the photo). He was very similar to Dirty Devin. Lots of crazy stories but the photo is actually a really funny one - we both got to work a few minutes early one day. And we couldn't get into the office. We kept trying to enter the door code and it wouldn't work. We kept joking that we must both be fired. Turned out that they had fired someone the night before and didn't bother to send out the new door code :/
And of course, Tim. I think we clicked pretty early on and had the same friend group at the company.3
Although she hates HTML, I had my girlfriend try to (re)create some kind of interface as a challenge. She remade the Mirror's Edge Catalyst menu - and she did well, I guess. (ofc her code is dirty and stuff - and it's far from responsive, but damn it looks smooth xD)14
I was trying to style a website drop down menu (select tag) that would look the same on all browsers using css only. i removed the default arrow down, and i was trying to add a minimal arrow pointing down, and it took me a while to do it. Take a look at the pic.
However when i looked at the code. there was no code for that little arrow. I was confused for a few minutes, looking at both html and css. thinking how is this even possible, then i realised.
My f-ing screen was dirty. Dirt was similarly shaped like the thing i wanted to achieve. I was laughing at myself for a few minutes.
btw i did it in the end 😊 no dirt involved2
This one, is for all you haters out there tonight!
Cause I'm PHP, I'm dynamite
PHP and I'll win the fight
PHP. I'm a power load
PHP, watch me explode()
I'm dirty, mean and mighty unclean
I'm a wanted code
Public enemy number one
MD: The client doesn't care how sloppy your code is. They're not paying for the solution, they're paying for the result. If there's a quick and dirty option take it.3
I'm currently rewriting the heart, foundation, core module of my company, that's written with my own shitty legacy code that is old, is dirty, but somehow worked flawlessy during whole 4 years. I'm afraid.4
No matter how much product owners claim "bugs have priority over anything else", "we value high quality structured code", and "we do test driven development"...
...Once a big client wants a feature to be developed before they sign up, dirty code will be written from napkin specs, and that code will always be refractored "soon".6
"I strive for code quality and maintainability. I actually do. And i will not work for a company that does not care about it and just wants something done as fast as possible.
The only time i will do something quick and dirty is if it's actually urgent. And even then with one condition - my next task will be to fix it properly.
I do not care about your deadlines. I will do my best to meet them, but not at the expense of code quality. I've seen too many projects fall into technical debt, where productivity is so low, that the only way to move forward is hire more people and start working on a project 2.0
And please do not lie about how great your company is, if it's not. These kind of things surface very soon, and you will have wasted both of our time, because as i said - i will not work for a company that does not care about code quality."
you think i'll ever get a job again if i put this on my CV ? :D10
That you if you cant solve a problem on paper you can't solve it in the real world.
But seriously coding gave me a voice, I was a seriously smart kid, but I was also a dirty orphaned dropout.
Everyones worth in this world is measured on a piece of paper and mine was blank. I was just seen as some overly ambitious kid spinning fairy tales and crackpot theories because no one could understand what the ideas value was or didn't try because of my age and cv, then I taught myself to code.
All of a sudden my theories were provable and I had a way of delivering them to not just one but millions of people in a way that they could understand and interact with them.My whole life changed and the day I wrote my first program was the last day I was ever judged by a piece of paper.
For me definitely Microsoft for multiple reasons:
- Word is probably the best wysiwyg document editor, but it's unreliable. Wrote a 100 page document? - sorry file is corrupted. It's a bulldozer of a piece of software, but remembering a clean state of the document in case the computer crashes - disaster, or verifying a document for validity before overwriting the last version? Nope.
- Cloud services are integrated..badly. Word document stored on OneDrive with some problems after crash -> welcome to hell.
- Their approach to software development from an enterprise point of view, but trying to do customer software is currently driving me nuts with Xamarin Forms. Data structures and C# are awesome, but need a good UI you're back in the middle ages.
- Their lack of concern for performance: MacBook Air with browser open and a text editor: 11 hours of battery life. Start OneDrive and we're down to one and a half hour maybe.
- Apple charging hilarious money on their products is one thing you can't deny, but what the hell do the guys at Microsoft do... - I got a MacBook Air from my employer and it has ridiculously low specs (i5 Dual Core 1.8 GHz, 8GB ram, SSD) , yet it greatly outperforms my Win10 PC (i7 Quad Core 3.6 GHz, 16GB ram, SSD) in some tasks - code compilation for example. You can't tell me MS aren't generating demand for better hardware by writing the most inefficient pieces of software. My wife has a Quadcore Atom laptop and it struggles on opening one instance of ms word. Hell, my first PC had a 433 MHz Celeron and a slow HDD with 8GB and 64 MB ram and you could work more efficiently than with this quadcore trying to run Win10 piece of crap.
- Outlook: Stores gigabytes and gigabytes of data on the harddrive, yet when the mail server is not available, crashes on startup and when it launches for once doesn't show any mail for the unreachable server.
- Windows update - do I really need to go into detail? On a desktop - okay... But we had Windows Server running - well - on a server, doing some task on it's own (2 week's job). Couple of days into the task it decided to install updates and restart.
- Their inability to create something that works reliably over time. Computer's getting slow? We don't know why.. Rather than fixing the causes we'll add a reset button which will ease the process of reinstalling windows for you. (Did someone really ever use this feature?)
- Drivers on windows are thankfully now easier than before, but still a hassle sometimes. Some things just work on Linux/macOS, take ages on Windows. I remember looking for adb drivers for the Oneplus One just to mention one example.
- What's wrong with Hyper-V? I always wondered why I can do virtualization tasks on Linux without trouble whereas on Windows I'd always have trouble- especially when I also want to use emulated Android devices (HAXM).
- Their disregard for standards. Android uses adb as the interface for debugging apps. This way it doesn't really matter if you are on a device or an emulator. Not when you start working with Xamarin. Then all of a sudden you need Microsoft's emulator (i think it was because of HyperV) which is then not compatible with Android Studio although the interface should/probably could be the same. AND THERE IS NO SUCH THING AS "SYNC" IN GIT!
And I strongly dislike the attitude of Microsoft people - at least in my country. Microsoft is the best! It's the right way to do it! If it doesn't work the way you want it, you can still use this overly complicated workaround, your preferred solution anyway doesn't make sense/is dirty. You're using <put generic non MS tech here>? - Hahaha - I played with this when I was a child, now I do grown-up stuff. Or the famous: "iPhone? A business phone without keys? No one will buy this!"
Hope i didn't miss something, or I might need to come back...11
So I watched this video that tries to convince people, that the jQuery library isn't really best practice anymore and showed how you can achieve basic tasks with vanilla JS, aswell as some frameworks (Vue, React, Angualar) and how they handle interactions with the DOM.
It also talked about how nearly every JS question on SO has top answers using jQuery, and how that's a bad thing.
But what I found in the comment section of this video was pure horror: So-called "Developers" defending jQuery to the death. Of course there were some people who made some viable arguments (legacy code, quick & dirty projects), but the overwhelming majority were people making absurd claims and they seemed quit self-confident.
Want an example?
Commit Message Part2:
6528fff Code was clean until manager requested to fuck it up
241b35f Who knows WTF?!
4381a32 Argh! About to give up :(
c3bf1a9 more debug... who overwrote!
2d68d6d Fixed a bug cause Maciej said to
b112c1a This branch is so dirty, even your mom can't clean it.
bb456d4 Shit code!
4878b46 Copy-paste to fix previous copy-paste
e2c7e87 A fix I believe, not like I tested or anything
e4b8f4c formatted all
3691208 I'm just a grunt. Don't blame me for this awful PoS.
0888b69 just checking if git is working properly...
62741aa I'm too old for this shit!
0735196 COMMIT ALL THE FILES!
09caccf I CAN HAZ PYTHON, I CAN HAZ INDENTS
ab70bde Fixed errors
934436d Now added delete for real
5f84e30 My bad
99baff8 CHRIS, WE WENT OVER THIS. C++ IO SUCKS.
953473d final commit.
f0c3b57 Just committing so I can go home
4e5ce4e yolo push
deb4e3b I CAN HAZ PYTHON, I CAN HAZ INDENTS
710c06a Commit committed....
3c45e67 it is hump day _^_
4487788 Committing in accordance with the prophecy.
bf86e7e This solves it.
4804f68 FONDLED THE CODE
051d42e REALLY FUCKING FIXED5
I'm working in a blockchain company for $180 as a junior programmer and there is a mid-senior guy who get ~8 times more than me. So we got a project to make a backend API with its tests. When I was partly completed my part of the project I asked that "mid-senior" to share his code with me. Nothing was done, and he asked me to push my changes to git so he could start to do something (view at my code and start copying). BUT. He couldn't even pull from git. He couldn't use that fucking Visual studio's team explorer and even the solution explorer. Ok, he was working with VS for the first time, but I did too. I cloned the repo gave him the environment to start "working" and get back to my work. After that nothing changed, he was writing each one-lined if block for half hour and the code was very dirty. Finally I've got his laptop and started to writing his part by teaching him all the programming. You may say I'm mad. I really do, I think that I did all project. This is sad... How can people get this much by being this far from the programming? We need really high quality programmers.3
Sometimes dirty code is more efficient than clean code.
If features get dropped frequently and requirements change every few days, writing best-practices, tested code is wasted time. Learned that in my first job where I thought the other devs were all bad. Until I realized their bad code pays my salary, and my clean code takes more time to develop.6
"So, just show me the dirty and nasty things in this 'internet' thing...I mean, this nsfw stuff...c'mon..."
"How about the source code of my last project?"
I recently ranted so much about languages but here it goes
JS we need to talk. BECAUSE YOU GOT FAT AND UGLY STUPID BITCH! Dumb piece of bloatware. What even is your problem? Depending on a library for strpad and then blow up like Steve jobs ego. Bastardized fuckfest. I used to like you bro and then you screw me over!
It's like you fuck my wife while I try to fix your car. Why can't you even be usefully on your own anymore? I'd be richer than bill gates if I get a dollar for every damn framework people pull from their asses. Are you writing this fuck while shitting so you can compare colors of your outcome?
Normalize the fucking base, don't add to the bukkakke! bitch is drowning already. Why is everyone jerking of to react and angular? When have YOU written something in vanilla the last time? Why even bother? Remove the core and hardcore every damn framework into the browsers. Guess that saves you 200kb. Oh wait I forgot that's about unminified jQuery.
Now I need to load about 2GB of dependencies, some creating code that puts code in my code to load code out of my code which was generated out of something that remotely resembles JS so every browser is able to execute my fancy shit. But hey, it's fast. And of course there are the fanboys. You are worse than apple fags. You sample your own jizz with your friends in a wine glass. there was a Time it was bad practice to mix logic and view. Now you made it mandatory. "Browser does the rendering" ofc you imbecile pile of fuck don't show me a damn preloader for 1 picture and 20 lines of text. Who fucked your brain so hard?
So react seems to be the cool kid now, then I tell someone I know angular it's like showing up in a pikachu onsie to a formal dinner with the queen.
I used to love you girl. I loved how we could dirty things together. Now you are like a pig. Please loose weight bby the sight of you disgusts me nowadays3
As long as I remember, all goes well. Probably not because I'm a good coder or something. But all the time it ends up like this:
Reviewer: Can you make this in two hours?
[Type a lot of sinful dirty code, and I'm glad it's just for review]
Reviewer: Oh, well cool, you're in...
Me: No need to see the source code?
Reviewer: It is going to be your job, not mine....
So, this "always good" code review experience is usually bad omen. Means I'll be the only one who is able to write some working shit....1
I think I just blew my own mind here.
Look at this:
return call_user_func(array('SomeClass','uselessMethod'), 'method');
return new Adapter($foo)->execute($this);
so __FUNCTION__ resolves to
You can run that code, whether you comment out uselessMethod, or not.
Adapter is a function that looks for what class to call depending on a database value
and execute the call.
So api basically uses a chain call to do stuff like this in controllers, here's how
I call the above:
$someObject = (new Class($object))->uselessMethod()->doSomething()->doSomethingElse();
But like, eventually my code matured to where all those methods in the chain call have the same one line return that calls my adapter to find the logic to run.
So, basically, I can now have a class with headless function calls that calls a directory of other classes, that are all defined in a contract somewhere. So as long as those classes
all adhere to the contract, it will never return an error.
I can't think of any reason to do this, other than my setup, and I have a sneaky feeling,
as dirty as this trick is, that there's a bad reason my code has come to being able to do this.
Maybe wrong strategy pattern from the beginning?
I'm sure it'll come to me like 3 days from now..3
Me: *joins devRant once again*
"Wow this community is surely active! Better check frequently to keep up!"
*checks two times in 6 hours*
"Yea it was weekend. Probs everyone is getting their hands in a dirty pile of compileable code or a spaghetti of jQuery."
So, how is your day/night so far?46
Worst thing you've seen another dev do? Here is another.
Early into our eCommerce venture, we experienced the normal growing pains.
Part of the learning process was realizing in web development, you should only access data resources on an as-needed basis.
One business object on it's creation would populate db lookups, initialize business rule engines (calling the db), etc.
Initially, this design was fine, no one noticed anything until business started to grow and started to cause problems in other systems (classic scaling problems)
VP wanted a review of the code and recommendations before throwing hardware at the problem (which they already started to do).
Over a month, I started making some aggressive changes by streamlining SQL, moving initialization, and refactoring like a mad man.
Over all page loads were not really affected, but the back-end resources were almost back to pre-eCommerce levels.
The main web developer at the time was not amused and fought my changes as much as she could.
Couple months later the CEO was speaking to everyone about his experience at a trade show when another CEO was complementing him on the changes to our web site.
The site was must faster, pages loaded without any glitches, checkout actually worked the first time, etc.
CEO wanted to thank everyone involved etc..and so on.
About a week later the VP handed out 'Thank You' certificates for the entire web team (only 4 at the time, I was on another team). I was noticeably excluded (not that I cared about a stupid piece of paper, but they also got a pizza lunch...I was much more pissed about that). My boss went to find out what was going on.
MyBoss: "Well, turned out 'Sally' did make all the web site performance improvements."
Me: "Where have you been the past 3 months? 'Sally' is the one who fought all my improvements. All my improvements are still in the production code."
MyBoss: "I'm just the messenger. What would you like me to do? I can buy you a pizza if you want. The team already reviewed the code and they are the ones who gave her the credit."
Me: "That's crap. My comments are all over that code base. I put my initials, date, what I did, why, and what was improved. I put the actual performance improvement numbers in the code!"
MyBoss: "Yea? Weird. That is what 'Tom' said why 'Sally' was put in for a promotion. For her due diligence for documenting the improvements."
Me:"What!? No. Look...lets look at the code"
Open up the file...there it was...*her* initials...the date, what changed, performance improvement numbers, etc.
I opened version control and saw that she made one change, the day *after* the CEO thanked everyone and replaced my initials with hers.
She knew the other devs would only look at the current code to see who made the improvements (not bother to look at the code-differences)
MyBoss: "Wow...that's dirty. Best to move on and forget about it. Let them have their little party. Let us grown ups keeping doing the important things."8
Meet today.... Fetlang
lick Bob's cock
lick Duke's left nipple one million times
while Ada is submissive to Duke
make slave scream Ada's name
Have Charlie spank himself
Have Ada lick his tight little ass
Have Bob lick Charlie's tight little ass, as well
make Ada moan Bob's name
make Bob moan Charlie's name
Never felt so dirty after calculating the fibonacci sequence...
"Fetlang is a statically typed, procedural, esoteric programming language and reference implementation. It is designed such that source code looks like poorly written fetish erotica."8
I feel so guilty.
I had to make a hotfix today. It is the ugliest piece of shit code I ever intentionally created. But there was no other way. I swear there was no other fucking way!
My boss just assigned this to me. But because she thinks this needs to be a hotfix and can't wait for the next release we just have to change the server and not the client side of our application.
So I had to add a memory to our server so that it knows from which high level method from the client the multiple low level calls to it are coming from.
It just doesn't make sense logically.
I mean I feel like I killed someone. And just so that we get less writes to our DB. I mean yes in some edge cases it is a huge speed-up...
But nothing this fix solves is a new bug.
I'm gonna take a shower now. For like an hour4
I started a project at high school 7 years ago, I had no idea what's clean code or design pattern, just learn while keep coding. I eventually stopped because my code is so terrible I cannot understand it anymore.
Now, after 1 year of working, I look back those dirty codes and think it is actually not that bad. Within hours I even fixed a bug with concurrency.
I start to think, instead of learning to how to write good code, maybe I should learn how to read bad code. That's just much more practical.5
Need to rant. I am doing programming 2 at university with java and the assessment is to make a card game. The subject is shit and is basically going over loops, variables, conditionals ect which we learned in introduction to programming and programming 1.
This leaves little time for oop principles, design patterns inherentance and all other useful stuff.
I am dedicated to making a career in programming and want to do my assessment the correct oop way. Although the lecturer doesn't care and is instructing the class to do it procedurally and shit.
I could do the program really quickly the shit procedural way and still get full marks but I feel dirty as hell coding like a scrub. So I'm 60 hours in on this assessment and there are so many classes and even more because of unit testing (we don't have to unit test) and I am spending way too much time.
My code is beautiful, my classes are tiny and maintainable, easy to modify and I'm learning so much about how to code oop the correct way with the help of a mentor and someone I look up to. But god does it take forever to code this way. And soo many iterations and redesigns because I'm still learning.
It's almost done but now I have another programming assessment for another class I'll have to do the dirty way because of time restraints and other assessments.
Sorry for wall of text but this is stressing me out 😛4
Init Mud. (A poem)
A Giant Ball of Mud.
Haphazard in structure.
A sprawling, enthralling, duct-taped warning,
Of things to come.
Tumbling down a well-worn path
Of untamed growth and aftermath.
Into Spaghetti-code Jungle.
Where quick and dirty wins the day
And warnings spoken hold no sway
Or fall on deaf ears in the undergrowth.
Bits stuck on.
Bytes taken out.
On top of patches,
On top of obsolescence.
Hacked at, uploaded
All elegance eroded.
Made and remade
Refined and redesigned
Suffocated by expedient repair after expedient repair
The original self no longer there
Replaced by something
Design resigned to undefined
An architectural mystery
Whose function can no longer be
Seen or gleaned
From obfuscated in-betweens
Made and remade
A squirming library of disused.
Pulled at, prodded, committed
Corners cut and parts omitted.
Bug ridden branches fused to a rotting core.
I think a "git commit -hide" option could be useful. To hide the author of the commit when you push dirty code.2
Today, i discovered thus beauty within our legacy code:
// TODO: this is probably the most dirty thing in our product. It needs a model more than anything else
This captions a crappy part of controller code for several years :/
Nice to do some refactoring of the whole data access layer of our core logistics software, let me tell an story.
The project is around 80k lines of code, with a lot of integrations with an ERP system and an sql database.
The ERP system is old, shitty api for it also, only static methods through an wrapper to an c++ library
imagine an order table.
To access an order, you would first need to open the database by calling Api.Open(...file paths) (yes, it's an fucking flat file type database)
Now the database is open, now you would open the orders table with method Api.Table(int tableId) and in return you would get an integer value, the pointer.
Now for the actual order. first you need to search for it by setting the search parameter to the column ID of the order number while checking all calls for some BS error code
Api.SetInt(int pointer, int column, int query Value)
Then call the find method.
Then to top this shitcake of an api of: if it doesn't find your shit it will use the "close enough" method of search.
And now to read a singe string 😑
First you will look in the outdated and incorrect documentation given to you from the devil himself and look for the column ID to find the length of the column.
Then you create a string variable with ALL FUCKING SPACES.
Now you call the Api.GetStr(int pointer, int column, ref string emptyString, int length)
Now you have passed your poor string to the api's demon orgy by reference.
Then some more BS error code checking.
Now you have read an string value 😀
Now keep in mind to repeat these steps for all 300+ columns in the order table.
News from the creators: SQL server? yes, sql is good so everything will be better?
Now imagine the poor developers that got tasked to convert this shitcake to use a MS SQL server, that they did.
Now I can honestly say that I found the best SQL server benchmark tool. This sucker creams out just above ~105K sql statements per second on peak and ~15K per second for 1.5 second to read an order. 1.5 second to read less than 4 fucking kilobytes!
Right at that moment I released that our software would grind to an fucking halt before even thinking about starting it. And that me & myself and I would be tasked to fix it.
4 months later and two weeks until functional beta, here I am. We created our own api with the SQL server 😀
And the outcome of all this...
Fixes bugs older than a year, Forces rewriting part of code base. Forces removal of dirty fixes. allows proper unit and integration testing and even database testing with snapshot feature.
The whole ERP system could be replaced with ~10 lines of code (provided same relational structure) on the application while adding it to our own API library.
Best part is probably the performance improvements 😀. Up to 4500 times faster and 60 times less memory usage also with only managed memory.3
I see a lot of posts about old code which is dirty and full of bugs. I find it kinda weird because when I started coding I made sure that my code was clean and readable, if it was something simple I implemented almost every edge case and spent hours removing bugs every ten lines written. Now though it's all opposite. I slap something together real quick, check for bugs in the end all the time and don't even care about readability.
Am I a maniac or are there people like me too?2
Introducing, my YAML based pseudo programming language.
1. I'm tired of managing asynchronous processes, either by dealing with callback or thread synchronization.
So, let me hear your opinion on this...
The backend code is still messy even after I do a lot of refactoring: https://github.com/goFrendiAsgard/...
Majority part of documentations hasn't been updated yet.4
I told you fucking moron clients doing that "little" change would be complicated and in the worst case it would end fucking up your whole spaghetti crap. A really HUGE spaghetti monster of that you aren't aware because you guys don't know a shit about coding conventions.
*Clients call me complaining about their software is broken*
-Hey, we're in serious trouble. Our users aren't being able to see the proper calculated values. Why that little change had so much side effects?
- I already told you why.
- Can you fix it asap? Our clients are complaining.
- No. Deploy an old copy of the affected modules while you give me a prudent time to refactorize that crap.
I used to work in their place, 3 years later I quit that crappy job and decided to make them my clients. I escaped from the micromanaging thing but I didn't from their ugly practices.
Anyways, I have to fix this shit asap. Money talks, at least until I can find a better client.
I've tried to give it many chances, but I just don't think Python will ever be for me. Even "quick and dirty" scripts are faster for me in a statically-typed language with static syntax checking and sensible code completion.8
I hope one day i will stop writing dirty code to achieve a task, forget to refactor it and then struggle to use correct names for variables and methods when i need to move on other tasks.
Sometimes my girl talks dirty to me. She says things like:
"I don't leave comments in my code"2
Me: Who wrote this fu$$in mess of code? Never mind, we will get the dirty hacker.
*Runs git blame*
Me: What a innovative way to solve the problem! I'm a genius!
So I am a Ruby guy since I don't now when. Probably forever. Lately I have to code Groovy. People are telling me all the time that Groovy is like Ruby. Let me tell you: No! Groovy is not like Ruby. Groovy is shitty Java with a slightly more usable syntax. Nothing more. It is so so tedious to code and reminds me why I stopped coding Java like 8 years ago. The fact that some features resemble Ruby syntax makes it even harder for me because I cannot code and facepalm at the same time. And I automatically type Ruby code all the time because it looks so similar in some places. I don't have that problem with other languages. Just Groovy. And the fact that Java people like it tells me how bad Java really is. It's just dirty. Guys, I feel so dirty now. And showering this morning didn't help. Had to get that off my chest. Thanks for "listening"9
TLDR: Why the fuck is a senior developer creating multiple instances of a core piece of logic all over the fucking application?!?!?!?
Context: I am also a senior dev, and have worked with this guy for years. He has even completed me on my clean code practices and architecture, so I really cant understand why he would copy and paste a public class into 3 other models on the project instead of just referencing the original. I’m just posting this hear as my version of screaming into a pillow in frustration, and to avoid badmouthing him to co-workers.6
The beginning of my next blog post... at 6am.... Guess who hates his job and why?
<h1>Thinking Before You Code<h1>
The choices you make when you code a part of a program, or even the program itself, impacts everything around it. The importance increases as the size and the scope does.
Quick and dirty simple scripts that get a simple job done and rarely needs changing… fine.
A bunch of quick and dirty hacks all pieced together as part of a giant application... that constantly changes? That's duct tape code that will bite you in the ass later or will give birth to a maniacal raging psychopath that wants to kill you.
<b>SOLID, design patterns: saving yourself and others from you</b>
Story of my first successful project
Being part of a great team, I've shared in a lot of successes, one I am particularly proud of is my first attempt to use agile methodologies in a deeply waterfall-managment culture.
Time was June/July-ish and we applied for a national quality award where one key element in the application stated how well we handled customer complaint resolution.
While somewhat true (our customer service is the top-shelf good stuff), we did not have a systematic process in resolving customer complaints. Long story short,
the VP lied on her section of the application. Then came the 'emergency', borderline panic meeting (several VPs, managers, etc) to develop a process to better manage
complaints before the in-house inspection in December.
As most top priority projects go, the dev manager allocated 3 developers, 2 DBAs, and any/all network admins we would need (plus all the bureaucratic management that wanted their thumb in the pie).
Fast forward to August, after many, many planning meetings, lost interest, new shiny bouncing balls, I was the only one left on the project. The VP runs into the dev manager in the hallway and asks "Is my program done yet? If its not ready before December with report-able data, we will not win the award."
The <bleep> hit the fan...dev manager comes by...
Frank: "How the application coming along? Almost done?"
Me:"No, haven't really started coding. You moved Jake and Tom over to James's team, Tina quit, and you've had me sidetracked helping other teams because the DBAs are too busy."
Frank: "So, it's excuses. You really think the national quality award auditors care about your excuses? The specification design document has been done for months. This is unacceptable."
Me: "The VP finished up her section yesterday and according to the process, we can't start coding until the document is signed off."
Frank: "Holy f<bleep>ing sh<bleep>t! No one told you *you* couldn't start. You know how to create tables and write code."
Me: "There is no specification to write to. The design document is all about how they plan on reporting the data, not how call agents will be using the application to serve customers."
Frank: "The f<bleep> it isn't. F<bleep>ing monkeys could code against that specification, I helped write it! NO MORE F<bleep>ING EXCUSES! This is your top priority from now on!"
I was 'cleared' to work directly with the call center manager and the VP to develop a fully integrated customer complaint management system before December (by-passing any of the waterfall processes that would get in the way).
I had heard about this 'agile' stuff, attended a few conference tracks on the subject, read the manifesto, and thought "I could do this.".
Over the next month, I had my own 'sprints' and 'scrums' with the manager (at the time, 'agile' was a dirty word so I had to be careful of my words and what info I shared) and by the 2nd iteration had a working prototype.
Feature here, feature there (documenting the 'whys' and 'whats' along the way), and by October, had a full deployed application.
Not thinking I would get a parade or anything, the dev manager came back from a meeting where the VP was showing off the new app to the other VPs (and how she didn't really 'lie' on the application)
Frank: "Everyone is pleased how well the project turned out, except one thing. Erin said you bothered him too much with too many questions."
Me: "Bothered? Did he really say that?"
Frank: "No, not directly, but he said you would stop by his office every day to show him your progress and if he needed you to change anything. You shouldn't have done that."
Me: "Erin really seemed to like the continuous feedback. What we have now is very different than what we started with."
Frank: "Yes, probably because you kept bothering him and not following the specification document. That is why we spend so much time up front in design is so we don't waste management's time, which is exactly what you did."
Me: "We beat the deadline by two months, so I don't think I wasted anyone's time. In fact, this is kind of a big win for us, right?"
Frank: "Not really. There was breakdown in the process. We need better focus on the process, not in these one-hit-wonders."
End the end, the company won the award (mgmt team got to meet the vice president, yes the #2 guy). I know I played a very small, somewhat insignificant role in that victory, I was extremely proud to be part of the team.
When you’re laughing/cringing at some of these rants and you hear that little voice in the back of your head say:
“I shouldn’t be laughing.. Screenshots of my code will probably be posted here when the next guy takes over my project..”
I’ve written fast and dirty code back in the days that still makes me nervous, but we don’t have the time and resources for a rewrite and besides.. My code works, so.. 🤷🏻♂️💅🏻
So, the main system we develop and "maintain" is a horrible monolithic huge project that has the majority of the code in one and only one god class.
On top of that, all the main logic is implemented directly in the "main" method (yes, the "public static void main"). Now every time you have to create a method to use it in the main logic, it has to be static!
God, I hate to even look at this class, let alone touch it, I feel dirty, like I'm touching a pile of shit.
When you spent few hours to solve a problem and then restart the application as nothing worked but then you see that the problem is not anymore...
you're in the situation when you can't decide if should commit your dirty code changes or should revert them back.2
When you have 5 hours on a task, struggle for the first hour procrastinating , second hour trying to look into the problem ,then convincing yourself you cannot work until this mess of a file is sorted out, spends another hour restructuring the whole file , adding comments and moving related logic together.
Great 2 hours to do a 5 hour job
Once again spent a day MacGyvering together all the missing pieces of the app for tomorrows presentation deadline. This time the code base is 95% good code and 5% of dirty hacks which are essential for the rest to function properly.
One day I'll enough time to finish a development cycle on time. One day...
I have a habit to comment every single line of code, this helps comprehension but this dirty the code and everyone complain. Is it any way to do such task.6
Tldr check out http://guitarprohub.mrstebo.co.uk/
And ignore the stats on the first page. That is my next job to track downloads and searches 😄
I have never been taught how to "plan" projects, but with a small plan I managed to get this site running in about a 3 days (in between having to look after the kids!) only running on a free heroku instance for testing.
If anyone wants to get their hands dirty with the code then let me know. Not a pro at rails yet, but from the stats in new relic it seems to be running pretty quickly! Even with contacting an external site it was only taking 2ms to load a page of tabs!