Hacker News new | past | comments | ask | show | jobs | submit login
Engineer – must not have experience in Node, Ruby, PHP, ASP, .NET (twitter.com/wabzqem)
58 points by jack_riminton 8 days ago | hide | past | favorite | 66 comments

I deliberately omit C# from my resume because while the language is fine, the kind of programs C# programmers tend to write are an AbstractAggravationFactoryPattern of misery.

This posting is extreme but any time I'm interviewing a Java/C# programmer I'm definitely watching to see if they've been brain damaged by the horrible aesthetics and loopy engineering cultures that those languages seem to have for whatever reason

While this was certainly true for C# that was written a decade ago, that is no longer the case with frameworks like .NET Core. Hate it all you want, but no other language does async/await as well as C#. Its ubiquitous in C# unlike all other languages out there. It's surprisingly easy and concise to write but doesn't come with the performance penalty associated with languages like Python. It also runs without any hiccups on Linux now. The only thing that seems to work against it, is it's reputation.

I work in a primarily C# shop. I am often quite annoyed at some of coworkers code due to it being what I feel is needlessly over abstracted. I don't know if it's my lack of experience with this style of code, or perhaps I don't know the concept of OOP as well as I should. But it is quite aggravating.

Abstraction if necessary but not necessarily abstraction. That's my rule of thumb.

I think it's the frameworks. If you are using something like .Net Core it really encourages you to break everything up into services that can be selected via dependency injection and you naturally seem to end up several layers.

I'm sure there are times when that's absolutely the way to go, but something simpler that solves the problem directly will often do.

The way Asp.net encourages inscrutable code through spooky action-at-a-distance dependency injection patterns is one of the things I actively dislike about working with C#. Fortunately, you can avoid most of it and be more explicit if you want, it's just not the idiomatic way. There's almost always an escape hatch to ditch the overblown abstraction layers and get down to what's actually happening.

If all else fails there's dotPeek and Reflector...

And thus killing of the ability to do proper unit testing.

If that pattern is required for proper unit-testing, I don't want to do 'proper' unit testing.

You can write code where your dependencies are injected and can be swapped out for testing without buying into a framework that makes it that difficult to reason about what code is actually being run and in what order.

I don't have experience with .NET core but taking example of Spring in Java (which gets targeted a lot for this sort of thing), you can get away with putting the logic at the outer levels without using services. However, more often then not, you end up using similar chunks of related functionality that then gets put into some common class to avoid repeating it everywhere. If you are already doing that, then why not put them in a service - its just a class with a @Service annotation that the dependency injection can take advantage of. Further, the fact that services are logical containers of such related functionality, creating them actually follows the principle of least surprise (viz. audit related stuff goes in AuditService) and testing/mocking etc becomes cleaner.

Of course, if you are writing a simple utility, then none of this is necessary - you'll probably not use Spring for it anyway and just core Java is fine.

whereby the only injection ususally is the same servuce over and over. with the occassional DatabaseMock sometimes...

Unit testing is not "sometimes" is 50% if the code you write

in your dreams maybe :-)

(not to say that this wouldnt be a good thing)

I’m curious how many are still using WebForms or the new equivalent? Then claim they know C#

Most of my experience is in C++ and C#. I adore C#... but I agree: it’s as though developers have difficulty getting to the task at hand when using it.

Maybe it’s because attempting even simple abstractions in C++ can foot-gun yourself in some esoteric way? In comparison, the cost to build unnecessary abstractions is lower in C# so many live on.

The ability to gauge the right level of abstraction is the mark of a good developer.

That being said I rather rework an over abstracted C# codebase then a hyper templated , singleton using, multiple >5 inheritance, no STL, void pointing C++ madness.

I never wrote, and will never write, in my resume that I have a good amount of experience writing COBOL for AS400 :)

These systems in my country are still used a lot. Go to a store, look behind the counter and you will see Windows 10 with opened only a maximized window of a green/black terminal connected to an AS/400. I've seen it even on store opened this year! And as they tell me programmers are even well paid since more and more retire every year and the young one doesn't know these systems.

The funny thing is that I'm not even that old, reading my initial comment you would think I'm talking about the 80s or 90s, but I got my experience with COBOL in 2009-2013 (not 4 years straight, I did other stuff too) when working at an insurance company. At the time almost the entire company was run from a few AS400 (and A LOT of office-people doing insurance stuff, of course).

You are probably not getting paid your worth then, experience with these is gold and all the new upstart programmers can't even compete with you on the high-paying jobs that rely on this knowledge.

Im not sure thats true. Last year when the unemployment systems got overwhelmed, I read a state was desperate for cobol developers and was offering some laughable salary. Searching for 'cobol developer average salary' seems to confirm it's not worth much.

These systems are now so old that the only people running them are those that have consistently under-allocated resources to IT. Penny pinchers arent known for paying out huge salaries to people.

Much more likely they'll continue paying as little as possible, and then award a huge contract to Oracle et al to rewrite it when they cant find anyone.

The state might be, however they’ll likely contract the work out and the company who’ll pick it up will pay a lot especially if they taking on that specific contract to get their foot in the door.

You also have a lot of financial institutions, insurance companies, health providers and big retail/manufacturing companies that have a lot of legacy systems and they pay quite well.

I don’t know about that specific case but quite often government institutions are locked into salary tiers they can’t offer more nor do they actually expect to find anyone for that position it’s just often a requirement proper to issuing a tender.

Basically it goes like this “we tried and we can’t find anyone for $56,000 per year to fix our system, we issued a tender and got proposals for $350-400K so that’s the budget we need”.

That's fine, I'm not optimizing my life for money. I'm glad I don't have to deal with IBM mainframes anymore.

I suppose that is fair, though I still think the skillset is a valuable and marketable skill worth noting you have. I work in an environment that has both IBM mainframe and modern technologies, and familiarity with both would presumably count as an asset.

I can't help but feel that this job posting subtly reveals deep-seated ageism in the industry already knee-deep in fashioning and championing latest tech regardless of its merits when in reality these decisions and choices are rooted in tech-bros feeling inadequate and insecure, which also kind of exposes the reason behind a blatant lack of respect for what came before because being a thought-leader is a path way to being a 10x eng-influencer or something.

Not sure you can reach for ageism as the answer when "node" and "Ruby" are on that list. Over the past 5 years those have been two of the hottest bootcamp languages churning out resumes with those keywords on them. I'm shocked to see it, but I would say its more likely they are targeting bootcamp grads than older developers.

And on the other hand they want Java, which is hardly a "latest tech".

Fits with the bootcamp idea. Typical fresh-grad language.

> Must not have experience with Oracle.

Dear god why? They're a fin-tech company for God's sake. It's just a database, and a damn good one at that. Sure it's not trendy like Postgres, but the founders will be in for a shock when they scare off big bank they're trying to sell themselves to, because the bank's CTO won't have any clue what the hell DynamoDB is.

I get that they want to avoid code monkeys who've been stagnating in a big bank writing P/SQL reporting software for the last 5 years. But that's why you read CVs. Obviously you need to holistically look at each candidate.

I work at a startup that uses Oracle just for that reason; banks care about that kind of stuff. Auditors will ask basic questions like, "is their data consistent". If the tech team gives the auditors a spaghetti diagram of how their data might be eventually consistent, they'll face an uphill battle being acquired.

This industry has always been a tone-deaf juvenile bunch ence the success of shows like Silicon Valley.

At this point most people don't even care, just chuckle.

Yes I think the prevailing tone is one of ridicule

At my current job I'm doing solely Java with vanilla JS to maintain a google maps like product. Heavy stuff. But this year, I also did about 10 hours of Wordpress because our website is on Wordpress and the guy who programmed it barely responded to finish some stuff. And I wrote a Wordpress plugin 10 years ago so I had some experience.

F' me, no? Time to throw my CV in the bin amirite?

Sorry buddy, you ate the forbidden PHP apple. You're out.

"The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense."

"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."

- Edsger W. Dijkstra

Maybe php and node are the cobol and basic of our generation?

I definitely assume the worst of a person if I hear that they primarily develop in Node since the first thing I think of is this:

    var isEven = require('is-even');
786,000 monthly downloads btw and only one direct dependency.

You need to use a callback. That's not asynchronous or non blocking.

I created a joke package called gg-flip [0] which just flips the signs and even it gets downloads on npm sometimes :|

[0] - https://github.com/avinassh/gg-flip

> only one direct dependency.

On is-odd! The actual implementation of is-even starts with

    var isOdd = require('is-odd');
(That said, the implementation of is-odd looks like it covers some subtle cases that people might mess up rolling their own...)

This is why I love Ruby, because there’s an inbuilt method for that e.g number.even?

Sure it’d take 15 seconds to write a method but why if you don’t have to

What happened to imports lol...

So you see a thriving ecosystem of millions of developers and you choose to nit about some quirky library? I definitely assume the worst of elitist statements like that.

The question I'd ask is whether they're up front about it. It's one thing to ask and see whether someone knows how to check if a number is odd or even - for that matter, it's one thing to use it as a programming quiz! Probably better than Fizzbuzz, everybody knows that one anyway. That's fine.

What would not be fine is to just quietly have that attitude and assume without checking that no one who uses Node a lot has any idea how to do basic things without relying on a library. It's not terribly uncommon for people to think that at least here on HN, I suppose, although I have yet to run into it in an interview or an engineering culture. But if your engineering culture is host to such attitudes, it's best for all involved to be open about that. You'll avoid wasting both candidates' time and your own.

It's particularly absurd. I work on a product that has tens of millions of users built on Node with a team of dozens of talented developers. The aforementioned library checks both the number version and the string version of a number, to indicate it's "even" or "odd". That Node.js makes it easy and cheap to package up small utility libraries like this is a feature, not a bug, and quite in line with Unix-philosophy. Very easy to troll through a list of millions of packages on a marketplace that's as big and broadly used as NPM, which covers not only backend dev, but also front-end dev since the front-end ecosystem is largely powered by NPM these days. So it's a particularly ignorant hot take.

> both the number version and the string version of a number, to indicate it's "even" or "odd"

You're saying that like it's some kind of defense of the library. In the real world it isn't.

Eh. Evenness is a property only of integers, so if someone's going to pull in a library to check it, I could argue it makes sense for that library to enforce that the comparison only be attempted over values where it's defined.

Granted that this seems a lot of effort to put into analyzing the contents of a Github repo tagged "troll-bait", from the user "i-voted-for-trump". But hey, this is HN, so it's whatever I guess.

Have we forgotten the left-pad fiasco already? These kind of things just keep happening in npm-land.

Yeah we forgot it years ago because it was only an issue for a few hours and then lock files were introduced into NPM along with a CLI warning system for vulnerabilities.

Lockfiles don't fix a fundamentally broken dev ecosystem. Users of left-pad fell into one of two categories: people who don't understand the most basic programming tasks, and people who do understand these tasks but are so apprehensive about their own ability that they pull in random libs without even glancing at the source (a single glance would have informed them that they didn't need it). These are both signs of inexperienced programmers.

Amateurishness is normal to some extent, but JS has the ecosystem where beginner mistakes are often seen as the right way to do things.

Or maybe even people who have made ungodly contributions to the science of computing (Dikstra, not the Twitter Twat) aren’t immune to being full of shit from time to time also?

Cripples the mind but greases the wheels.

COBOL is from a different time and family of what we ( mainstream ) understand today as "programing languages". How many "crimes" are committed today writing business rules in Java or C#, etc?

Dijkstra's statement, like anything else has a time and context and I hope something solid from the COBOL family existed today.

I cant speak to ASP and PHP. I've programmed .NET in Mono a little, back on the Aurora OpenSim client (emphasize a little). I can see that reaction to .NET, I had the same reaction to folks who liked DCOM.

Node and Ruby can be used to create pragmatic programs though, but those are typically created by programmers that came to those language from other, more typed, languages. Once you have three or more languages under your belt you start to look for and find each language's pitfalls and architecture astronautics - every language has them. Every language shapes the mind of someone who learns, none more so than the first language you learn. Some anti-idiom pitfalls are found in multiple languages: monkey patching, everything exposed as getters/setters rather than exposing the behavior, AbstractFactoryServiceClientFactory, etc.

However, I don't consider abstraction a dirty word. It has its place, if not overused. I try though to use what I call the 2-4 principle.

I have either 2 levels of abstraction (interface-implementation), or 3 (Abstract, Logical, Concrete) or 4 (Abstract, Logical, Concrete, Functional), and no more. I also try to use the lowest number of levels that makes sense. The You Ain't Going To Need It (YAGNI) principle goes hand in hand with this. I will go back and look at old code to see what I could have done better. Where I've gone wrong with abstraction is usually due to premature anticipation of future architecture.

They really wouldn't like me! I've done Ruby style monkey patching of immutable system libraries in C# and deployed it in production on Heroku.

I have carefully avoided VB, VBScript, Bash, Perl, JavaScript, and Python. I used to do C/C++ but now refuse to touch either.

If it's trivial, I'll just use PowerShell. If C# isn't fast enough, I can always use Rust. If Rust or C# don't have some library I need, Java probably does. If I want something abstract, I'll get around to learning F# or just roll up my sleeves and get back into Haskell. Worst case, if I need to throw the kitchen sink at a problem I'll get back into writing substantive code in Mathematica.

I am curious what skills they did want.

Edit: For all the people who upvoted me, you can click the photo and see the whole job description. It wasn't cropped like I (we?) thought.

I don't like the execution but I like the idea

If your candidate mentions a certain technology that is awful it is hard to not think it's an awful candidate. Especially if this is not central to the problem at hand.

Yes, CVs mentioning ClearCase go to the bottom of my pile

Mentioning CMMI, SAFe, ITIL or other acronym made to take money out of clueless managers also are heavy clues that you'd be not a good fit.

Visual Basic is listed twice just to be extra sure.

From the context, it looks like a mangling of the tweet from

  VB.Net, Visual Basic

  .Net, VB, Visual Basic
rather than an outright 5-year ban for all of .Net.

“Must not have VB.Net experience in the last 5 years” isn’t nearly as outlandish as “No .Net is the last 5.”

Tone deaf it is.

I got started in Ruby by following “Rails Tutorial”. Back then I was a bit arrogant about it and parroted a bunch the DHH bunk.

My charitable reading is they are looking for someone who sees the language as a framework around the OS.

That’s the kind of programmer I feel like I am now. It comes more than anything from learning Objective-C where the fact that the language is a construct is obvious once you encounter an `objc_msgSend()` alongside a [myString uppercaseString]; (or any other message send.)

Sounds like: Engineer -- must be afraid to make hands dirty.

Hey someone just called my number. Well except for Django's ORM which is fine for low duty cycle queries.

What proportion of fin-tech is dodgy crypto bubble? Is it a reputable field wholly or in part?

Wha's wrong with Heroku?

What's wrong with Ruby but Python is fine?

Fashion, presumably

Apparently VB is so bad they listed it twice.

I like how they list Node as a language lol.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact