• Member Since 11th Apr, 2012
  • offline last seen 13 hours ago

Bad Horse


Beneath the microscope, you contain galaxies.

More Blog Posts758

Aug
14th
2015

My last job · 2:41am Aug 14th, 2015

My last job ended in July. I lost it months earlier, when (according to my former boss's boss's boss) my teammates "almost unanimously" said I was "too argumentative". I still don't know what they meant, or whether they said that at all, or that was one end of a long game of telephone (from them, to our boss, to his boss, to his boss, to me), or whether my boss's boss, who was never eager about hiring me, just made it up. There was one guy who constantly tried to bait people into arguments because he was a grumpy old man, and I sometimes argued with him. There was another guy I disagreed with about stylistic questions, and a third guy who told my boss instead of me if I did something he didn't like. No one ever told me they had a problem with me. No one was ever anything less than friendly and helpful.

Yet, on my last day, no one offered to take me out to lunch. No one came by my desk to say goodbye. No one responded to my goodbye email. When I stood up at the end of a meeting at the end of the day and said I had to leave, no one even looked up from their laptops as I walked out the door. Only one of the 10 people I'd worked with every day for 4 months said goodbye back to me.

I say "my last job" in both senses of the word, because screw that. I don't want to be an employee anymore. The puzzling randomness of how I lost my job is typical of my work experience. I'd been afraid all along of losing the job because I was so bad at it, but that turned out not to matter. Like most of my jobs, I was struggling to perfect my baseball game when I found out we were doing improvisational theater.

We were working on a web application written in Perl. I thought Perl was an okay language before I worked there. But these guys knew Perl inside and out, and they taught me what a horrible language it really is. It gives you a thousand ways to shoot yourself in the foot, and they used all of them. Not by accident; they sought them out. In Perl culture, "idiomatic Perl" means "our agreed-on recommended style." The overriding principle of idiomatic Perl is that you should use whatever Perl construct will be most confusing to anyone who uses any other language. The point isn't to write clear code; the point is to isolate your people, the Perl tribe, from all other coders, to keep insiders in and outsiders out, and to take a perverse pride in doing everything differently. Sort of like being Jewish in the middle ages. So instead of writing

foreach my $x ('Alabama', 'Alaska', 'Arizona', 'Arkansas') { print $x if $x =~ /a$/; # print states that end with an 'a' }

you're supposed to write

map { print } grep { /a$/ } qw(Alabama Alaska Arizona Arkansas);

Then you have to spend 2 hours redoing your testing because the guy doing your code review changed your 'foreach' to a 'map' because he thinks it's cooler that way. If I were truly argumentative, I might have at some point complained about this.

The code was full of magic. By 'magic' I mean code that does something different when you run it than the code says it will do. This is because there's some other piece of code hidden somewhere else that inserts a hook into your code before it runs and makes it does something else. Perl culture loves magic. Perl is supposed to be a "do what I mean" language, and they think this means it's a good idea for your code to try to guess what you want it to do. Moose, the popular Perl extension, is a big bag of magic that lets you create methods without defining them, or change how methods work without changing their definitions. They loved Moose.

I had a timezone conversion bug. It turned out there was a magic Moose wrapper secretly called whenever you copied a timestamp variable, and there was a magic validation field for that Moose wrapper that silently converted the object to a different type of object under certain circumstances, and the function that did that conversion silently subtracted 3 hours from the time under the assumption that you were giving it California time and wanted East Coast time, because ???

I had to figure out what a function was doing that wasn't defined anywhere. There were lots of those, but this one was special. Eventually I found out that one of the team had encoded one of the function's parameters into its name instead of having you pass it in as a parameter. Instead of calling foo(1), foo(2), foo(3), you'd call foox, fooxx, fooxxx. He wrote a method that injected all these function definitions into the symbol table at runtime.

I'd never worked on a web application, and these guys were obviously very knowledgeable, so I gave them the benefit of the doubt and supposed that web applications are inherently horrendously complicated. But you know what? Fuck those guys.

Everybody knows you're supposed to use a Model-View-Controller (MVC) structure for your web app. So you write a set of model classes, a set of view classes, and a set of controller classes, and keep them separated, right?

But if your View methods keep needing data that exists only in the Model objects, and the Model methods keep needing data that exists only in the View objects, and the Controller methods all rely on knowing the internals of both of them, "keeping them separate" by changing method calls to AJAX calls is NOT HELPING. Just put them all in one or two classes and bite the bullet if you ever have to refactor, 'coz your MVC is bullshit.

And if you put a dependency injection framework that uses factory objects in between Model, View, and Controller, so that you can't easily see which Model object or View object or Controller object it is you're talking with--and half of your user's data exists only in the database, which only the Model objects can talk to, and half the data exists only in the Javascript embedded in the user's HTML on his browser--and the only way for these things to interact is through AJAX calls to the Controller, so that to make what should be a simple method call you have to stringify all your data, encode it in base 64, store it in hidden fields in an HTML form, and pass the HTML form to a library that does God-knows-what to it so that it eventually can be redirected by your web server to another Perl object on the same computer that then has to undo the entire conversion process--and the client side has no way to find the process on the server side that created it, so each time you call the server to retrieve one piece of data, you have to pass back every piece of data the client has, and reconstruct the entire report on the server just to get that one piece of data--and you write this using every hip framework, meta-language, and middleware you can, so that to get the value of a single variable from the client to the server requires using Perl, Moose, Bread::Board, SQL, DBIx, HTML, the Template Toolkit, jQuery, Datatables, Plack middleware, and YAML config files--
-- that is fucking retarded.

If that's how everyone in the industry does it, everyone in the industry is wrong.

In my last month there, I added a button to the app. The button says "PDF". When you click on the button, it pops up a checkbox menu that asks you for paper size, orientation, and report title. Click on "Download", and it downloads a PDF of a spreadsheet.

It took me 3 weeks to add that button. There were something like 40 object classes involved, several of which I had to create. My outline of the transactions required to get the paper size, orientation, and report title to travel from the user's computer to the server and meet up with the report data was 5 pages of single-spaced 11-point font. I had 4 or 5 meetings with other team members to try to figure out how to add that button.

I'm glad I had that job, but I don't miss it.

My boss's boss's boss, BTW, and the other company founder, are both incredibly cool guys, and they built a great company that builds great products. The web app I worked on works great and is much better than the competition's. The people I worked with seem, individually, to be nice guys (except for the backstabber and the grumpy old man). I don't know what went wrong.

Report Bad Horse · 6,730 views · #rants #coding #Perl #work #jobs
Comments ( 92 )

There are days when I wish I was a programmer like I went to school to become, instead of an end user technical support guy like I wound up. Thank you for making me realize how lucky I really am to be doing what I'm doing.

(And I thought PL1 was a screwy language back in 1986. You could multiply a floating point variable times a character string and assign the result to a constant. Yes, a CONSTANT, like e.)

This is... some emotional whiplash here.

On the one hand, I'm really sorry to hear about the job situation. Well, sort of. Having gainful employment is nice, but it's hard to imagine putting up with what you describe.

On the other hand, I'm a big fan of absurdist humor and this blog post had me in stitches repeatedly, because oh my God, how does this happen? I hardly know what to say.

Oh wait.

I think the word you're looking for, Bradel, is "Kafkaesque".

Good heavens...

I hear your pain, even though comprehension of the coding stuff is far beyond my poor Allied Health college degree.

If this is your last "job," what are your plans?

Ugh, that's awful. You have my condolences.

I've always been a little socially dense. I've improved substantially over the years, but I've been through some firings (in the past) due to personality issues. It's made me pretty paranoid. I kind of assume I'm always about to get the axe for something dumb I didn't realize I did that pissed off my peers. This tends to be a problem only if the situation I'm working in is bad to begin with, though. In a good job you'll get constructive feedback when there are personality conflicts.

It doesn't really matter what the deal was in this case, because you don't have useful feedback, plus the guy that fired you is an asshole. It isn't appropriate for you to be terminated without a process, which is one of the big downsides of working for a tiny company.

And Perl is a HORRID language. It's jokingly referred to as a WOL: Write Only Language, because you can't read what you wrote after the fact. I took Perl in grad b/c my adviser used it and that was not a good reason to take it. It's fine for short one-line scripts where you can easily confirm whether or not it worked, but you cannot expect to debug it. Anything larger than twenty lines should not be written in Perl, except for recreational purposes.

3318374 This read like a lot of XKCD or SMBC comics in that regard.

Well, shit. Sorry to hear that, on all fronts. :(

Please picture, in your mind's eye, my face gradually transforming into the Coding Horror logo as I read the description of the codebase. At a minimum that sounds like a product deeply mired in technical debt. In between that and the fact that your last day suggests that you and your team had very different ideas about how you were doing there -- especially the fact that this came as a surprise to you -- it sounds like some critical management failures. A herd of very smart cats is still a herd of cats, and if they're not all pointed in the right direction and kept on the same page, you get a lot of brilliant and completely non-interoperable stuff, and a group of people that's a team mostly in name.

I hope you have a much better experience with whatever you're going to do next. Secondarily, I hope pony can stay a part of it.

Internet hug?

I've been on the receiving end of a similar situation. Suffice to say, certain people at a certain aerospace company can eat a bag of dicks. (The rest of them were rather nice people)


Knowing your background with R, perl, and textual analysis, you may find said skills in demand with electronic discovery in litigation support. Assuming you want to join the rest of us VA/DC/MD zombies, that is.

3318407 3318386 There was a process. It just wasn't very helpful, because it was like a trial where I was never told what the charges against me were. But they told me in May that they'd be letting me go at the end of July.

If that's how everyone in the industry does it

It's not. I'm writing a web application at my job right now using AngularJS and a Java Application server that runs some web services that take care of the heavy lifting for data retrieval and validation, spitting it out automatically as JSON that my application directly consumes without any conversion. Same goes for sending data back. I give the Java server JSON and it turns that right into something I can use natively in Java. A PDF download button doesn't take anywhere near 3 weeks to implement in this setup, which is not an uncommon one. Web applications shouldn't be evil and can actually be quick and fun to develop.

Sorry the job turned out the way it did. :(

I'm very sorry to hear about the loss of your job, especially from a direction you weren't anticipating. This just sounds like an unpleasant situation all around.

Man, I love Cache, derived from M, which allows you to do a lot of dumb things, and I think what you're describing with Objective Perl sounds awful. And I can't think of the idea of "do what I mean" working out well, consistently, while also being debuggable and maintainable. As frustrating as it can sometimes be, it seems to me that in the long run it will always be better for a language to do what you say.

the function that did that conversion silently subtracted 3 hours from the time under the assumption that you were giving it California time and wanted East Coast time, because ???

Good god, they didn't even think UTC? Also, that might be the most "flyover" mentality thing I've ever heard.

Eventually I found out that one of the team had encoded one of the function's parameters into its name instead of having you pass it in as a function. Instead of calling foo(1), foo(2), foo(3), you'd call foox, fooxx, fooxxx. He wrote a method that injected all these function definitions into the symbol table at runtime. Because that's cool, right?

This is the kind of thing I associate with the Wally type: make things difficult to work with, and preferably undocumented and hard to trace, so that they can't be removed without, in effect, breaking all the code they wrote.

But if your View methods keep needing data that exists only in the Model objects, and the Model methods keep needing data that exists only in the View objects, and the Controller methods keep needing to call both of them, and anytime you recode a Model object you have to recode its View and Controller objects, and vice-versa, "keeping them separate" is NOT HELPING. Just put them all in one or two classes and bite the bullet if you ever have to refactor, 'coz this is bullshit.

I don't even do or particularly get object oriented programming, and this sounds like the exact opposite of the point to me. Hell, basic modularity suggests that something wrong has gone here.

each time you call the server to retrieve one piece of data, you have to pass back every piece of data the client has, and reconstruct the entire report on the server just to get that one piece of data--and you write this using every hip framework, meta-language, and middleware you can, so that to get the value of a single variable from the client to the server requires using Perl, Moose, Bread::Board, SQL, DBIx, HTML, the Template Toolkit, jQuery, Datatables, Plack middleware, and YAML config files--

-- that is fucking retarded.

See, that's why I'm glad I was working on the server side of an enterprise software package. But, well, the state of the art is terrible.

I'd like to echo Horizon's ending sentences, and express my hope that whatever comes next for you, whether that be self-employment, retirement, another job, or something else, goes better than this. And that you may be able to continue pursuing your writing-related goals, pony or no.

The only lesson I really learned about being fired was this:

"Boss, you don't have the balls to fire me." is probably not the best thing to say.

On the other hoof, now they're trying to hire me back, with a 30% raise. I told them no.

God damn, who actually uses Perl for web programming these days? It would not be my preference to work somewhere that did.

Jeebus. I just got done ranting about my work day for two hours, but this... Like, I understand the sentences you are saying, and have worked with some of these technologies myself.

...and the only way for these things to interact is through AJAX calls to the Controller, so that to make what should be a simple method call you have to stringify all your data, encode it in base 64, store it in hidden fields in an HTML form, and pass the HTML form to a library that does God-knows-what to it so that it eventually can be redirected by your web server to another Perl object on the same computer that...

And so when I read bits like this, and honestly have no idea what the fuck is going on, that is a problem.

Flee, beautiful stallion. May your hooves swiftly take you from these lands, ere they sink into the abyss.

I'm very sorry to hear this, BH. :(

/also offers an internet hug

I like Pascal. It is a language you can code in where 98% of errors can be found easily by the compiler, even if you are writing tens of thousands of lines of code without debugging each segment as you write it. It was very annoying when the industry went in the C direction instead which is the exact opposite.

Man did I just date myself.

3318463
I am very explicably reminded of this video.

There's something to be said for strong typing, and even statically typed languages. I used to be more of a Python fanboy. I still love Python, but I wouldn't use it for a large web app. I've found it's much easier to follow the flow of something that is statically typed. On top of the weird implicit typing via Moose, Perl is an ugly language to read and very confusing. When you add in people trying to be very clever, you end up with code that takes days to understand let alone safely change.

I may not agree with everything Uncle Bob says, but I'll always strive for Clean Code.

Wow. That's...

Awful. How did that company even survive operating like that? Were they all trying to make themselves "indispensable" by writing the most obscure code possible? Are they trying to start their own obfuscated C competition?

I feel terrible that I actually understood all of this.

I'm so glad I didn't actually end up doing programming for a living. Now I get to go harass the programmers and tell them how terrible their code is, and that the answer to "why is the application slow?" isn't to "throw more hardware at the problem". How about you deconstruct that 5000 line stored procedure and create a real middle tier to the application instead?

Well, I guess you can be, at least partially, happy to be out of there. Not that I knew anything about programming, but this doesn't sound like a very fulfilling job, to say the least. Working with such a behemoth of fuck-uppery is sure to leave very little room for actual accomplishments.

I'm sorry that the human side of this experience is something you seem to have encountered a lot of times. I can very much empathize with that and could tell you similar stories of back-stabbing and absolute indifference. It's interesting to hear you're done being an employee... what are your plans now? Freelancing?

Holy moly. That sounds like one hella nightmare of a work culture. I keep expressing sentiments to the lines of "I should probably have done programming instead of engineering for the work" but - well - I have no clue what I'm saying...

My condolences about the job, and here's to finding much greener pastures.

The Kafkaesque nature of bosses and employment is a large part of why I ended up self-employed. Plushmaking doesn't exactly pay like some jobs, but it beats having to put up with that kind of absurdity.

As a fellow coder, I can confirm that there are two ways to write code: the right way and the way everyone does it. Sorry to hear of your tribulations and loss of job...

3318513 *obfuscated perl. But I repeat myself.

3318374 If you want some absurdist humor, try this stackoverflow post:

Why is this program valid? I was trying to create a syntax error

I'm running 32 bit ActiveState 5.14.2 on Windows 7. I wanted to mess around with a git pre-commit hook to detect programs being checked in with syntax errors. (Somehow I just managed to do such a bad commit.) So as a test program I randomly jotted this:

use strict; use warnings; Syntax error! exit 0;

However, it compiles and executes with no warnings, errorlevel is zero on exit. How is this valid syntax?

My face did the same thing as Horizon's. I already knew you could perpetrate some very special atrocities with Perl, but seeing a company culture that actively encourages them...

i.imgur.com/lkdLDGR.png

It puts the arguments about PHP in context.

Instead of calling foo(1), foo(2), foo(3), you'd call foox, fooxx, fooxxx. He wrote a method that injected all these function definitions into the symbol table at runtime. Because that's cool, right?

:raritydespair:

And if you use a dependency injection framework [...]

:pinkiesick:

Surely there's grounds to call this psychological torture...


The worst codebases I've seen are in Java, which has the complete opposite philosophy to Perl. Any sufficiently large codebase, especially one subject to deadlines and worked on by many disconnected people, will end up a giant mess.

I'm actually surprised you even stumbled upon a business using Perl. Every job listing I see is Ruby/Python/.NET/<JavaScript framework of the month>. The occasional one that mentions Perl has it purely in the context of sysadmin stuff, probably in reference to old monolithic scripts that nobody dares touch.


Using map for operations with side effects is bad code in any language, Perl included. It should be,

print for grep /a$/, @states

Whoa. Not gonna lie, I don't understand a lick of the computer talk you got here, BH. But I did understand stuff about jobs. I've been working for the same grocery dept retail company for almost a decade – pretty much all my entire adult life. Therefore, I should know a bit on how to keep a job, right?

Eheh, I guess I might express more individuality online, but at work, it's about conformity. As in, conforming to the ideals of whoever your current boss is at the time. Like, the simplest way is working hard. Bosses like hard workers. And they like you even better if you've figured out how they what their parameters for getting work done are and staying within those ideals. Like, I dunno, I had a supervisor who was especially pleased I could fit out discontinued stock for crap like Bakugon on the shelf with the other newer Bakugon, despite it not being on the planogram. Our manager at the time didn't seem to mind, either. He only cared that excess crap was out on the shelves and getting sold (crappily. I mean, the shit wasn't popular enough. Kids weren't buying enough). It's out of parameters with the company, but within my boss's and my boss's boss's. A worthwhile enough risk (it makes sense to have similar stock right next to similar stock so kids don't have to go running around to some non-existant clearance aisle to find it, right?)

And there's a simple matter of doing exactly what you're told. Bosses like it when that happens and you exceed expectations.

As for other coworkers, you want to be in a good relation with them. I used to do lots of favours for coworkers. They're mostly older people who don't have the strength or physical stature to deal with things as readily in a physically demanding job. I would listen to them bitch and moan and say something of comfort if it was necessary (but people mostly want to vent their frustrations and will be happy is someone simply listens). If there were arguments, it was usually best to stay neutral, unless they're planning on doing something against the company, then it's best to set them straight. I dunno. Be friendly if you aren't sociable like I am. Let them come to you, saying the "hello's" and tedious mundane "how's it going's?" Answer with a "hey." Only a few people will notice that that answer doesn't make sense to, "How's it going?"

Of course, there are disadvantages to these behaviours, especially to free spirited folks, like the ones here meandering about this blogpost, eh? The big one is that you're conforming to the ideals, wills, and desires of a company. Some people can't exactly cope with that, and it's ok. After all, you got your own sets of morals and ethics you abide by. Like, who wants to deal with some corrupt, soul-stealing, conformist bull company, eh? Like, you want things done your way. Not their way. Your way.

Doing favours constantly leads to people taking you for granted. In some extreme cases, they might "forget" how to do the action they ask of you themselves. I'm, to my own detriment, one of those nice guys who'll do favours for everybody if they ask [1].

Listening to people bitch and moan is stressful to yourself, especially if those people don't want anyone else to know how they feel. Their are times when you get frustrated and think, UGH! Shut the fuck up already! Some people can't handle it. I know I barely can. Thankfully, it only happens if you reach any sort of management position. Or if people somehow trust you enough.

Staying neutral in arguments sucks. If internally you feel strongly against something a coworker is saying, but it will not be in favour of the company to speak up, continuing the discussion longer than it would have been, it will suck to just stand there. Or at worst, agreeing with the person if you absitavely do not agree, just to get them to stfu so you all can get back to work.

Worst is people grow on you who you don't want growing on you. It makes decisions harder.

Heh... putting up a mask, not acting true to oneself... this is not an option for some people, and understandably so. We have enough sheep, and simply not enough individuals in our world.

[1] My current boss loathes doing favours for anybody and makes it so we follow her example. Like, I don't do favours for anybody anymore, not even getting pallets off racking, unless the colleague has my supervisor's explicit permission allowing me to do so. Or they're a manager, of course. It's led me to see how much people have taken my abilities for granted. In effect, it's at the worst of times stifled the growth of their own skillsets if they're perfectly capable of handling the job themselves.

Amazingly, I found out about a third of my work time was spent on doing favours and have subsequently I have now time to slack. I have found this to be disturbing, but I have had my friends for support. They're expert slackers at their jobs. They've taught me well.


It takes a lot of focus to keep a job. Eheh... my job gave me purpose in life. I had come off of dropping outta the last stretch of grade 12. I wasn't really doing much other than playing Magic and vidya. And tbh with myself, I never ever bothered thinking of any sort of career to strive towards in high school; I had no career goal in life in the first place and school had very little interest to me. It was a pretty depressing time in my life. I was getting pissed off that I wasn't getting along socially with any of my coworkers and I hated them, so I began channeling that hatred of people into working harder than them, hammering more stock out than them, being better than them. They took notice and it surprised them. My new supervisor at the time took careful notice and began grooming me to be her assistant. I had purpose in life and have felt indebted to my job ever since. I have a sense of duty, despite how waning it may feel in recent times. It's nothing big. It won't ring down the ages as some great act. That comes much later. For now, I don't feel so bad about life.

But really, I'm an extreme case in this regard. A lot of people's purpose in life thankfully ain't found in their jobs. Perhaps in cases here it is to break out to be authors and to somehow make a living off it. Or some other form of art. Maybe it's to cause diabolical plots. Maybe it's to stop diabolical plots. Maybe it's to get married and have kids. Maybe it's forgoing love and destined for greatness. Maybe it's to invent something. I dunno. There's other things to grant purpose in one's life. It's not devotion to the job in all cases.

For some people, maybe the job ain't the right fit for them and their capabilities, and it's best they get let go or quit, as harsh as it may sound, for it frees them up to explore venues where they might fit in better with their skills and abilities. So in a way, losing a job may be a good thing.

And I've been going on too long. Lemme try to wrap this up on a less weird (maybe) and friendlier note.

A few years ago, my friend lost his concierge job at some rich people apartment complex. He believes it's because he didn't sleep with his boss at the time. She was feeling unhappy and lonely at the time, and he was having some family issues (believe me, he would've gone for her if he could cuz he's simply that kind of guy). A short while later, he got fired. He then had to pick up a job at The Real Canadian Superstore, the retail chain I worked for. I urged him not to, since the company was going through physical and managerial restructuring and was treating employees like shit. I face palmed when he told me he got the job.

From there, the stories he told me were what I expected. Shit hours, hours that never followed consistency, not being amply trained, shit supervisor, shit manager, shit store, shit customers, shit colleagues, shit everything. Money was an issue and he told me of times where he would go without eating. But later he told me some good news. He had gotten a job at a company contracted for repairing airplanes for FedEx, and it paid swell. I later found out that he wasn't technically qualified for the job, not having any post secondary, but having taken an airplane steward class. Apparently the boss was tired of interviewing people, and simply stopped at my friend. Actually, he was unofficially qualified for the job. It came as a surprise to me, but as a hobby he studied up airplanes and liked collecting random airplane parts; he was really into airplanes. His job is ordering plane parts now. His boss is hilariously slack and my friend has quite a few stories of gross company incompetence and shenanigans. He also has access to expired airplane supplies and we learned on a country outing that mixing certain adhesive chemical components together in massive results in catastrophic nuclear meltdown [2]. Also, $200 per roll aluminum tape is more fun to use than duct tape because extravagance and shiny :B

Shortly after he got that job, he stopped appearing on the Superstore schedule. Weeks later, he found he had been moved to a different dept without anyone telling him, and had been fired for no-showing but nobody told him that either. Not even a letter.

THAT'S FUCKING SUPERSTORE FOR YA, EH?!

Either way, working for an airplane maintenance company was quite an excellent fit for him, even if there were a few jobs lost along the line. Fuck, he makes more than me and my other friend now, AND is living his dream job.

Might happen to you, Bad ;)

[2] I exaggerate. The components to make the aircraft adhesive glow bright and heat up would have, if they weren't expired, which is the very reason my friend's boss let him have them (he doesn't like paying the waste disposal fees). Yeah, it was underwhelming for it to not blow up. But it was a fun outing anyways.

The aircraft adhesive does effectively turn to molten lava when mixed to a 1:1 ratio, though. One aircraft repairman accidentally mixed too much together and let it sit while doing something else. When he came back, it had melted the can. There is now a permanent black mark on one of the airport runways. My friend's boss thinks this is hilarious as fuck. It's a rather big mark, eh?

I also forgot to add that you follow the boss, even though what they say is, like, fucking dumb and shit. Because your boss's happiness is priority in keeping your job because conformity or whatever hurr durr. Besides, realistically, if they're higher ranking than you, they're the ones who'll get into shit for giving you shit orders.

Also, unionized jobs can prevent you from outright being fired. Dunno if they're in all fields of work. They do have a stigma to them. Some people believe in them. Some people don't.

3318572
You make plushies, eh? Care to share your wares?

The code was full of magic. By 'magic' I mean code that does something different when you run it than the code says it will do. This is because there's some other piece of code hidden somewhere else that inserts a hook into your code before it runs and makes it does something else. Perl culture loves magic. Perl is supposed to be a "do what I mean" language, and they think this means it's a good idea for your code to try to guess what you want it to do. Moose, the popular Perl extension, is a big bag of magic that lets you create methods without defining them, or change how methods work without changing their definitions. They loved Moose.

I have limited programming experience, mostly because I had to take a couple courses for a degree (a degree that never actually required you to use programming, ever) and this sounds abso-fucking-lutely terrible as an idea, the kind of idea that you shouldn't even need programming experience to see is terrible from a functionalist perspective. It sounds like a quick way to turn simple code into an overly complicated mess. The only purpose I can see is to make the people who knows how this particular mess works irreplaceable because no new person can figure it out on their own.

Actually that might have been behind what happened. If the old man and the back-stabber complained enough and made it a 'him or me' situation, the boss may have had to choose to fire the new guy because they were not people he could do without.

Ugh, dynamically created forms and nested web pages created completely from the database in a completely opaque way so there is no way for anyone to trace how a webpage is displayed or where it comes from? Was this a trend in the mid 90s? Was it a government project?

>having a job
what did you expect

Oh my! I’m truly sorry for you. Bad Horse, you definitely deserve better than this.
Obscure Perl, you know, that’s a pleonasm.

Have you ever worked with people that you respect admire? Maybe people that understand the philosophy behind good software development, or similar, better than you. It is worth trying if you haven't, before you give up traditional employment.

3318438
This is more a response to the article you linked, which I think you agree with. It's easy to think that things are hopeless when you see no way to get what you want, and it's easy to think that there's not much to see when you underestimate the complexity of "the system".

Today companies decide what tools you will use and the manner in which you use them, and are driven by profit, not progress.

Companies are driven by people. You can simplify this by assuming that the people in companies are driven ultimately by profits, but my experiences, and the experiences of others here, suggest that this is an oversimplification, and that it is not a reliable heuristic.

While I don't understand coding enough to even pretend I understood any of that, the attitudes are familiar enough. Particularly applicable to lower management, actually. At least in the few jobs I have had, it seems that management is entirely based around being as counterintuitive as possible, and then wondering why your employees have trouble with it.

3318809

Bosses like hard workers.

In my experience that is a bit of a trick, actually. They don't care about hard workers. They like workers who give the appearance on paper of working hard. The actual amount of work is irrelevant, as long as the numbers look good. At least at my current job, the people who actually work hard often get written up, because the people whose numbers are the best usually get there by wrecking everything they do, then leaving the actual hard workers to work around it. It's gotten to the point that whole departments are simmering now. Management studiously ignores it.

Bosses like it when that happens and you exceed expectations.

Exceeding expectations always results in expectations being moved higher and higher. Sucks, but there it is.

3318823

if they're higher ranking than you, they're the ones who'll get into shit for giving you shit orders.

Unless they happen to be good at deflecting blame. Which far too many managers are. "It's not the god-awful management I give! The workers just aren't working hard enough."

3318651 That's BEAUTIFUL. I must quote the answer:

Perl has a syntax called "indirect method notation". It allows
Foo->new($bar)
to be written as
new Foo $bar
So that means
Syntax error ! exit 0;
is the same as
error->Syntax(! exit 0);
or
error->Syntax(!exit(0));
Not only is it valid syntax, it doesn't result in a run-time error because the first thing executed is exit(0).

Sorry to hear that your last job didn't work out, also, the way they fired you sucks and isn't very professional on any level.

If you want to work with sane(ish) coding practices, go into another branch of the industry, possibly something where they have structured release cycles and a good testing department. Probably somewhere where they work with machines and automation. It is slightly less glamorous but my experience is that they at least have more often than elsewhere sane guidelines. My own brief experience with web-programming is reading up on PHP, screaming and then going back to something else, probably it isn't the right thing for me (I hate developing GUIs). Also, low level stuff can be fun.

I know absolutely nothing about programming so half of this page looks like you fell asleep on the keyboard and then had several night terrors.
Sorry about the job though wish you luck in finding a job that is stable and not overly complicated.

On another note as a high schooler about to enter the job market this post and the comment section are making me feel a bit terrified.:applejackconfused:

I'm really sorry you got treated so poorly at your job. It sounds appalling in every possible way.

As for the tech stuff... AAAAAAAAAAAAAAAAAAAAAA!

map { print } grep { /a$/ } qw(Alabama Alaska Arizona Arkansas);

I might defend that. I mean that sort of thing is idiomatic for languages that have some sort of list comprehension. Using qw is a Perlism that's pretty damn stupid, but I can see how you might use that as an agreed-upon style.

I had to figure out what a function was doing that wasn't defined anywhere. There were lots of those, but this one was special. Eventually I found out that one of the team had encoded one of the function's parameters into its name instead of having you pass it in as a parameter. Instead of calling foo(1), foo(2), foo(3), you'd call foox, fooxx, fooxxx. He wrote a method that injected all these function definitions into the symbol table at runtime. Because that's cool, right?

AAAAAAAAAAAAAAAAAAAAAAAA!

WHY?!? WHY WOULD YOU DO SUCH A THING? I mean, yes, I've edited the symbol table in Perl (who hasn't) for the sake of amusement and Perl golf, but in production code? That I'll have to debug at some point?

And if you put a dependency injection framework that uses factory objects in between Model, View, and Controller, so that you can't easily see which Model object or View object or Controller object it is you're talking with--and half of your user's data exists only in the database, which only the Model objects can talk to, and half the data exists only in the Javascript embedded in the user's HTML on his browser--and the only way for these things to interact is through AJAX calls to the Controller, so that to make what should be a simple method call you have to stringify all your data, encode it in base 64, store it in hidden fields in an HTML form, and pass the HTML form to a library that does God-knows-what to it so that it eventually can be redirected by your web server to another Perl object on the same computer that then has to undo the entire conversion process--and the client side has no way to find the process on the server side that created it, so each time you call the server to retrieve one piece of data, you have to pass back every piece of data the client has, and reconstruct the entire report on the server just to get that one piece of data--and you write this using every hip framework, meta-language, and middleware you can, so that to get the value of a single variable from the client to the server requires using Perl, Moose, Bread::Board, SQL, DBIx, HTML, the Template Toolkit, jQuery, Datatables, Plack middleware, and YAML config files--

This is a prime example of cargo cult software architecture. Oh, we hear dependency injection is all the rage, yeah sure we'll put some in. MVC[1]? Why not, chuck some in. Aspect programming? I don't even know what that is but we'll put some in, just in case. As if encrusting your code with fifty mutually incompatible architectures and approaches will somehow mollify the spirit of Edsger Dijkstra who will bless your code.

[1] A particular peeve of mine. Unless you can rip out your model code and put in an entirely new one without touching anything but the lightest glue layer in the remaining code YOU DON'T REALLY HAVE A MVC PATTERN SO MUCH AS YOU HAVE A GODDAMN MESS. If you have to subvert the MVC pattern to make your code run, you shouldn't use MVC. It only ever works if the layers communicate only through strictly limited and per-arranged channels. It's not a magical make-my-web-app-awesome spell that you have to cast.

It took me 3 weeks to add that button. There were something like 40 object classes involved, several of which I had to create. My outline of the transactions required to get the paper size, orientation, and report title to travel from the user's computer to the server and meet up with the report data was 5 pages of single-spaced 11-point font. I had 4 or 5 meetings with other team members to try to figure out how to add that button.

...wow.

Just... wow.

3318991
...no words. No words. They should've sent a poet.

Y'know, proponents of AI risk should really consider programming languages. Because you can't imagine that the language people use won't affect the, ah, character of the created superintelligence. I mean if they write the super-AI in...

...LISP it will be a brilliant mathematician, but it will only communicate in self-referential Zen koans encoded in haiku.

...C it will work perfectly until it dereferences a NULL pointer at which point it will kill us all. Or turn us into flowerpots. Or eat Jupiter. Or something. That behavior was left undefined by ANSI.

...Prolog then all the programmers will look up and shout "Save us!"... and it'll look down and whisper "False."

...Java it will take over the world and optimize it away. Luckily it will take it ten thousand years to do it and halfway through it'll run out of heap space and crash.

...C# it will take over the world and optimize it away. Luckily it will take it ten thousand years to do it and halfway through it'll run out of heap space and crash.

And if it is written in Perl it will upload all the giraffes into a simulation of the Battle of Verdun, and then set off to colonize Pluto and turn it into computronium. It will also order everyone on the planet a pizza from the same Pizza Hut outlet in Tulsa, Oklahoma.

3318374
I don't know if you ever red the Laundry Files series by Stross[1] but he was inspired to write his story of geeks in a moribund bureaucracy grappling with Lovecraftian horrors by his time as a... uh... Perl Web developer, actually.

[1] You probably told me and I certainly forgot. Sorry.

In my last month there, I added a button to the app. [...] It took me 3 weeks to add that button.

And you wonder why you lost your job... :trollestia:

Ok, OK, stop hitting already! I meant it as a tease. :twistnerd: I hate perl as much as the next guy, but - thank God! - haven't been forced to program anything serious in this crap... yet! Might as well come to it eventually, though. I got an Android project a couple of weeks ago from my PM... :twilightoops: Makes me wonder what he'll dump on me next.

Yet, on my last day, no one offered to take me out to lunch. No one came by my desk to say goodbye. No one responded to my goodbye email.

Did you bring candy to your workplace? We lost one of the mates yesterday too, and he brought candy as a farewell gift. We gave him a proper (I hope!) send-off in return. :yay:

:raritydespair: Oh good lord, that's disgusting. All of it, both the toxic corporate culture and the masturbatory coding practices. I can't really add anything that hasn't been said more eloquently than I ever could, but you're clearly well-rid of that hive of insanity.

3318951 I use Perl all the time, and have for many years. This job, though, took me much deeper into the Perl community, into contact with its developers. I no longer have any interest in Perl 6, because I think the people making it can only make Perl 5 worse.

This is unfair to some of the original developers. There was a war inside the Perl community between the old guard and the new, triggered by Moose. Some of the key developers of Perl hate Moose as much as I do, for the same reasons. Coding in Moose is not programming in Perl, and it make very hard to read a program, or to write Perl code to analyze a program. It's a horrible chimera; once you start adding Moose to a program, it can never really be Perl and it can never really be Moose. But I think Larry Wall may have taken the side of the new guard. Anyway, it's over and the new guard has won.

3319090 The corporate culture there is the best I've seen anywhere. I'm not being sarcastic; they have a great corporate culture. The leaders of the company are genuinely concerned about the people working for them. That only makes my experience more mystifying.

PresentPerfect
Author Interviewer

Sadly, in my experience, your only choices in life are "subservient to another's whims" or "starving". The only reason I'm not the latter is thanks to overly-permissive parents. :/

3318803 These guys really are very good at what they choose to do, so they would probably know that. But map is just a for loop in Perl--order of execution is guaranteed and non-parallelizable--so it doesn't matter.

I disagree, if you're serious, that what you wrote is clear, though it's concise. You can become fluent enough in Perl that it's clear to you, but when people maintain that it's more clear in general, to anyone, I think they're just showing off.

'map' in particular was originally meant for applying lambda expressions to lists. It's convenient in Perl, but hardly ever clear.

3319236
I love C trigraphs. They permit really emotionally expressive code.
!ErrorHasOccured() ??!??! HandleError();

I think it says a lot about your ability as a writer that I understood almost none of this -- The only code I've done was for game design and database entry, nothing approaching near this complexity -- yet still felt your pain emanating from every individual sentence. I also didn't get bored, which seems to be something intrinsic to "Not understanding".

So, take some solace in that, I suppose?

And hey. You're appreciated here.

As a second year programming student, that code sounds like what you'd get if you threw a bunch of first year students at a problem and used whatever they came up with.

3318823 I've got a boatload of them posted here: http://bladespark.deviantart.com/

Login or register to comment