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
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.
If all else fails there's dotPeek and Reflector...
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.
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.
(not to say that this wouldnt be a good thing)
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.
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.
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.
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”.
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.
At this point most people don't even care, just chuckle.
F' me, no? Time to throw my CV in the bin amirite?
"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?
var isEven = require('is-even');
 - https://github.com/avinassh/gg-flip
On is-odd! The actual implementation of is-even starts with
var isOdd = require('is-odd');
Sure it’d take 15 seconds to write a method but why if you don’t have to
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.
You're saying that like it's some kind of defense of the library. In the real world it isn't.
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.
Amateurishness is normal to some extent, but JS has the ecosystem where beginner mistakes are often seen as the right way to do things.
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.
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.
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.
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.
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.
VB.Net, Visual Basic
.Net, VB, Visual Basic
“Must not have VB.Net experience in the last 5 years” isn’t nearly as outlandish as “No .Net is the last 5.”
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.)