93 karma · joined February 7, 2020
In addition, I design my programs such that I can confidently rewrite important sections. This is OOP encapsulation's main purpose. In practice, everyone writes getters and setters until every object is an ugly struct.
You deal with boilerplate using either interfaces or code generation. It's not as pleasant as first-class generics, but it's not completely awful either.
As someone who has worked with C and C++ for living for over 20 years, I wouldn't think twice about picking either Go or Rust if I were to start again. Go gives you the fast edit/compile/test loop of an interpreted language with the runtime speed of a compiled language. Rust is the language that the C++ Committee would make if they could start over.
That being said, Go will never take over the C, C++, and Rust niche. Going to and from Go-land and C-land is too expensive. Google has no interest in stepping behind libraries that aren't internet servers. Go will live a long life as a great environment to port your Python, Ruby, and other bloated server languages. It just will never be the next language to write a web browser.
Rust is amazing though. I see this as the programming language of the future until the U.S. Government slams down the hammer and forces everyone to use DOD-approved Ada.
An LSP violation of toString() would be something that returns a string that doesn't represent the object. If you were to return the current time as a string for an object that has nothing to do with time, that would be an LSP violation.
class Base {
virtual int size() { return size_; }
...
class Derived : public Base {
virtual int size() { return rand(); }
...
Here we see an issue. Derived is overriding Base's size method, which has a straightforward implementation, with something wild. If a Derived is sent to a method expecting Base-like behavior, something bad is going to happen.Derived should act like a Base with slightly different implementation details. This is all LSP is. It's a fancy phrase for a very simple concept.
Even when the case agents get access, policy dictates what evidence is allowed to be taken to a public trial. Otherwise you get repeats of the FBI/4chan/8chan debacle. This is especially true for legal "grey areas" like mass surveillance. This means that agents will often get evidence they won't use in order to guide active surveillance using more legal means in order to collect evidence they feel comfortable admitting in public court.
I work with software that has been continuously worked on since the 60's. It has the dreaded legacy if's like below everywhere.
if(obtuse variable) then
change a few other obtuse variables
There have been at least three attempts at major rewrites done of the software. The main goal was always to get rid of those corner case ifs everywhere. Every single attempt failed because we lost our ability to handle massive amounts of our customer's projects. Each of those ifs does something important.One of my main projects throughout my stay has been to reduce these with small, disciplined improvements. I have made major headway in this fashion. You have to find the leaves of your software and work your way up while rigorously testing your changes. This is the exact opposite of the human gut reaction of a massive top down rewrite. It's impossible to tell how far you are off-course until it's done. It's the waterfall method of refactoring.
They both focus on you projecting "good vibes" and only allowing others who also project good vibes around you. If you can do this, then (Nature/God/the Universe) will reward you.
The real issue is that courts hesitate to turn the screws on the companies that get caught doing this. If Sony was forced to pay 5x original cost in penalties, the cost-benefit analysis wouldn't have been in their favor.
I am today about to replace my Android because I can no longer update because the install gets bigger every year and I have run out of space. I am seriously considering going to a flip phone and using a small laptop or something else linux powered for my previous smart phone usage.
Doing 7 hours of whiteboarding interviews for every candidate won't flush out any of these. Not a single one. If you can tell me the magic 8 ball I need to shake to fix this, I am wide open to suggestions.
I don't think false negatives are good. How many positions go unfilled for months and years? A lot. At a larger company, it won't take long before they remove the position entirely. They might not be wrong to do so either. Eventually your bus factor goes to zero, and whole teams go away. I have never seen anything beyond FizzBuzz, experience, and conversations be predictive for actual work. Even these only weed out the most outrageous candidates.
I work in the chemical engineering industry. They sort resumes, ask questions, and call references. They don't ask them to do sophomore level process energy and mass balance with multiple components and vapor-liquid equilibria on a whiteboard. Most aren't Professional Engineers either. Junior engineers used to be a crap shoot. Now there are so many graduates compared to junior positions that most companies will only hire people that interned with them.
An interview only has one question to answer: How long will it take this person to do what I need? Everything after that is you trying to sell the company to the candidate. After you do the interviews, you pick the person who needs the least ramp time.
Quietly staring at a person writing on a whiteboard while taking notes isn't communication. It isn't normal. It tests nothing except the candidate's whiteboard interview technique. You test their communication ability... by communicating with them. Have a conversation.
Testing someone's determination to do useless studying for your ridiculous company is pointless. I am not here to get you to join my cult. I am here to pay you to do things. That's it. Unless your job is to design and review algorithms, I don't care if you can draw depth first search on a whiteboard blindfolded.
There are a million ways to figure out how long it will take to get a person up to speed. I make a list of the skills needed for a position. I write down an approximate time to learn each one. In each interview, I figure out what skills the person has by discussing that skill. That's it.
This is the real problem with giving feedback in our industry's interviews. The interviews are usually random circuses.
All interviews could be simple Q&A sessions to make sure the person isn't a charlatan and then sell them on the position.
HR isn't a science, and it never will be. The FAANGs spend god knows how much time and money on it, and they admit that their interviews aren't better than a coin flip.