Remote work in the times of COVID-19
Hi fellas! We’re witnessing history and trying to make best out of it. There’s a Chinese saying that you shoudn’t wish to live in the interesting times. Guess we don’t have much chance to decide now.
Anyway, half of the web decided to caught on the wave of the virus and every one seems to be an expert on remote work now. Nevertheless, I’ve spent over 5 years working remotely from places with better or worse conditions for remote work and thought that maybe I’ll also share something you might find useful. Let’s cut the story short and move on to the tips:
1. Clean up your environment
Make it as clean and distractless as possible. If you live with other family members and have a luxury of a separate room, use it. It’s difficult to convince roommates that your’re actually working from home. If you’re trying to solve some important problem, focusing on solution, while being often distracted, things can go sideways very quickly. Firstly, you won’t be productive, and secondly it can cause some frustration and have a negative effect on your domestic partnership.
2. Get dressed
A vision of sipping coffee in pyjamas all day might be exciting, but believe me it isn’t. You’ll be surprised how strong negative effect it might have after a few weeks on you mentally.
3. Schedule your day
It’s important to have a schedule for the day planned as daily and evening routines. Don’t sleep longer than usual, finish your work on time and plan your activities. Even when our range of possibilites is strongly limited during the quarantine, try to manage some time for physical activities and some play. As programmers we have this great possibility to learn something new or polish our skills during this hard time. It will keep you sharp and if everything will go apart and you’ll have to look for a new job, you’re increasing your chances.
4. Prepare for the worst
It’s important to show your employer that you care. It’s a difficult time for every one, so prepare as well as you can. What do I have in mind? Try to acquire simple redundancy in regard to the tools that are necessary for your work. Try to have double internet connection, microphone, headphones, camera, pc/laptop (with VPN configuration and ready for work). Ideally we’d like to have a spare electricity provider, however if we run into problems with the electricity, being not able to git push won’t be our biggest issue… Anyway, we all have to meet the deadlines, so it’s worth to keep the trust between parties and show that they can depend on you.
5. Communicate professionally
When we communicate via text only it’s easy to misinterpretate a message, which can lead to conflicts. It’s also quite easy to forget that the someone, who crashed the build in the pipeline is an actual person, after not seeing some one for a few weeks. Be polite, be cool, be positive. Report your progress on the tasks and also find few moments for a daily coffee maker chit chat.
I guess that’s the crucial picks I wanted to share. Take breaks and appreciate that you’re one of the lucky guys or gals that can work remotely :). Stay positive!
Overriding vs Shadowing
Hi, in short, I’d like to describe why using method shadowing in a project can be dangerous.
First, let’s have a short introduction to what method overriding and shadowing is.
Overriding – it’s changing the method body. What’s important is that the method signature is resolved at runtime based on the object’s type. The base method has to be declared with ‘virtual’ modifier.
Shadowing – it’s changing the method body. It’s early bound, thus resolved at compile type based on the object’s type. The base method doesn’t have to have any special modifier. However, in the derived class, the shadowing method can optionally include ‘new’ modifier (it’s not necessary, but without it compilers generate a warning).
Code Complete – Steve McConnell
In this short review, I’ll try to distill key features of this over 900 pages book.
Simply speaking, if the Clean Code by G. Martin is the “what”, this book is the “how” of programming practices. It covers key areas of daily programming tasks from problem definition, through planning, software architecture, debugging, unit testing, naming to integration and maintenance.
70-483 Notes
A while ago I passed the 70-483 exam and thought I might share some of my notes, which I think are the most takeaways from the learning material. The exam itself was fair, but as almost every knowledge test it had some very specific questions such as name of the methods on interfaces (e.g. CompareTo vs Compare on IComparable and IComparer respectively).
1. Parallel LINQ queries does not guarantee preserved order, need to add the AsOrdered() characteristic. It might be quicker than sequential linq query, but it’s not deterministic, need to be tested. Example PLINQ queries:
var orderedCities2 = (from city in cities.AsParallel().AsOrdered()
where city.Population > 10000
select city)
.Take(1000);
var plinqQuery = table
.AsParallel()
.Where(n => Enumerable.Range(2, (int) Math.Sqrt(n.Item1)).All(i => n.Item1 % i > 0))
.Take(10)
.ToList();
How to make scrum planning meetings less useless?
Scrum methodology seems to conquer the project management in IT, outmatching classic waterfall solutions. While being agile, flexible and closer to the goal through the process, it’s easy to lose track of the agile manifesto.
One of the basic pillars of scrum is planning. By definition, it is an event in the framework where the team determines the product backlog items they will work on during that sprint and discusses their initial plan for completing backlog items.
I’ve seen scrums you people wouldn’t believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near.. oh wait, it’s not this kind of dark fantasy.
Let’s see how to make the scrum meetings more meaningful!
Enums Pitfalls
Enums are widely used in the .NET projects. They can save some roundtrips to the database and are self-documented, in theory. I’d like to explain how to and how no to use enums to avoid the butterfly effect in the repo.
8 questions to ask yourself before diving into a new task
Most of the researches regarding the cost of software errors, show that there is an order of magnitude difference between the stages, where the error is found. That’s why it’s essential to take your time during the planning and prepare a detailed implementation plan for the more complex tasks. I created a personal checklist, which I use before starting a new task. Some of the steps may seem rather obvious, but it’s always worth to keep them in mind. Let’s grab a cup of coffee and enjoy the lecture :).