October 16, 2019
Interviews are hard. You should not just aimlessly ask questions. You need to have a plan. You need to concentrate on these five areas: Personality fit, software engineering skills, specific technical requirements of the job, a passion for software development, and a history of getting jobs done.
Make your point and stop. The interviewers will normally be too polite to stop you, but just stop talking after you answer their question. Just stop.
Few people will know all the answers. It's best not to pretend you know and try to make up things. Just say you don't know, so they can ask you questions about things you do know.
If you feel you didn't answer a question to the interviewer's liking, ask them what the answer is they were looking for. You can learn a lot on today's interview for your next one.
It's helpful in followup conversations.
It's not much fun to interview possible candidates. Don't be too serious. Liven things up. But not too much.
A class should only do one thing.
Software should be able to be designed such that it can extended and used by others without having to crack it open and change things.
Objects should be replaceable with their subtypes (e.g., a Sheep should be able to replace a Mammal or Animal).
Interfaces should be logically grouped into small cohesive units so objects when implementing an interface don't have a bunch of extraneous empty methods.
Objects and methods should invoke interfaces for dependency objects. The implementation of those interfaces should be given to the object e.g., in the constructor.
Classically, Object-Oriented Design was defined by three characteristics:
The same message passed to different objects can result in the objects doing object-specific functions. For example a "calculate_area" message sent to a rectangle and triangle use different formulas.
Objects receive fields and methods from parents.
Members and methods are hidden from the outside world and only accessed through public helper methods.
Scrum is a lightly prescibed process management system, which can be used for software development.
The type or member can be accessed by other code ...
By any class in any assembly
Only from the same class or struct. "private" is the default.
in the same class or subclasses in its assembly
in the same assembly
anywhere in the same assembly, or, from the class or a derived class in another assembly
by the same class or subclasses that are in the same assembly only
A delegate is a pointer (reference type) to a method with particular arguments and return type.
this takes up to 16 generic arguments and returns void e.g, void Action<T1, T2>.
this takes up to 16 generic arguments and returns a value e.g, TResult <T1, T2, out TResult>.
this takes exactly one generic argument and always returns a boolean e.g, bool Predicate<T>.
Most objects with managed resources should implement IDisposable. Dispose() is typically called by the code that created the class to release any resources. Finalize is called by the Garbage Collector and you have no control over when the Finalize method is called.
A struct is a value type that typically lives in the stack and not the heap. Setting a struct equal to another struct copies all the contents, unlike with a class that only the pointer is copied. structs are typically used to increase performance. DateTime is a struct, as well as int, double, and other primitives.
Even if you are not going to hire the person, you should be kind and encouraging. The universe is a vast unpredictable place. You may meet them at a professional society event. You may be looking for a job one day and interviewing with this person trying to get a job at their company. Stranger things have happened.
You want to be learning and moving ahead in your career. When looking at opportunities you need to find companies that are doing software right and so can boost your abilities. You need to look at these areas and make sure the future employer is doing a good job:
Building and Deploying,
It's always more fun to work at companies making lots of money.
These days the interview process typically involves coding a small problem in a whiteboard environment like coderpad.io or through Skype. Here's my hints on taking the tests:
Start by describing the role "Pat" is expected to do in the new job.