I’m focusing on helping my kids learn analytical skills, everything else they need to learn will be more accessible to them than this, now and in the future. STEM, leadership, and other career-specific skills are often (but not always) learned while working, most adults would agree with that.
A big difference between poor kids and rich kids are the options they are given from an early age. Kids from a low-income family are often given directions to do things, instead of analyzing things and make decisions on their own; they have little or no choice about the things they can do.
When people are given options from an early age, they learn to analyze them; they learn to compare and choose what option(s) are better for them. They learn critical thinking skills and use this knowledge to solve problems and make decisions.
One of the most significant differences in early education between different social classes, in my opinion, is the access to options and the ability to make decisions about those options.
Allowing kids to think and showing them that they can pick their homework, their chores, their schedule, etc. based on the information they have at hand, and letting them discover the output based on these decisions is critical.
Analytical skills will prepare them better for life, and this, in fact, might have a more significant impact than learning technical skills for example. This is one of a thousand things that can help with the inherited disadvantage.
STEM skills should be taught, but not instead of analytical skills, especially to those kids in disadvantaged households. Most technical and job-specific skills are learned while working. So, while it is great to bring attention to the gap in STEM education for example, I believe it is just as important if not more, to teach our kids analytical skills to teach them how to think, how to make decisions, and how to have a perspective on the things that they will encounter in their future.
Before becoming a software developer, I had no clue what this job required or what did a developer did through the day. Many years later, I have a pretty good idea about the workload and can share some advice on what the ideal workspace for someone that writes code is.
First of all, let’s get something clear, software developers do not write code all day, it isn’t the same as writing a blog post or anything else. Working as a software developer is something like 20% code writing and 80 problem-solving. This 80% involves thinking about a problem or a new feature. Sometimes this is a back and forth exercise where the input of other developers or other collaborators might be needed. It isn’t until you have a pretty good understanding that what can be done that you actually get to write software. And because of this, a quiet place with little or no distractions is needed to be productive.
A quiet place is preferred and often required if you want to focus on a problem and a solution. Many companies have resourced to open office spaces with the idea that this sparks collaboration and communication between employees. I can tell you from experience working for years at an open plan office, it doesn’t work for thinking, focusing, or getting things done. When you walk into an open plan office the first time you’ll notice is people wearing headphones, and if you look closely, many of them will be wearing noise-canceling headphones. Software developers need a quiet place to work, private offices, a spacious cubicle, or a desk at home are ideal places for this type of work.
A distraction-free work area is also important, this isn’t to minimize or avoid collaboration, the idea is to not let co-workers or other people or situations have access to a software developer unless there are a clear need and an intention to do it. And don’t worry, people can still just chat or hang out at times when walking on a hallway or via an electronic communication channel.
While it is OK to use any coffee shop chair or your couch at home, any longer-term seating setup needs to include an ergonomic chair and a stand-up desk preferably. Anyone who spent hours in front of a computer screen will benefit from a good ergonomic chair and a stand-up desk. The right size desk should fit at least two large computer monitors and a laptop, this is a very common setup for software developers.
If you are looking for a good quality desk and chair at a reasonable price I recommend the Autonomous.ai standing desk and chair. I’ve owned both for a while, and I’m pleased with it.
When working from home
If you are a remote worker, having a quiet and distraction-free place is also necessary. This isn’t difficult to achieve, most people working from home will enjoy from a quiet home during working hours as kids go to school and spouses will be at an office, or working at home and focus on their own tasks.
If you work from home and don’t have a spare room or office to work from, find a quiet corner away from the front door and the kitchen (which tends to be a place for families to hang out). Your bedroom might be the perfect place for it, that is if your partner allows it and you are disciplined about working and non-working hours.
When working from a coffee shop or other public space
Ideally, you’ll find a place with comfortable seats, good internet connection, and great coffee and reasonably priced snacks. This isn’t always possible, but if you spend enough time to find the right place(s), you’ll be surprised at how accommodating public spaces can be for you to get stuff done. You’ll need to be prepared to work at these places and to do it successfully I recommend you read this blog post which includes tips and advice about working successfully at coffee shops, etc.
Conclusion
The ideal workspace for software developers continue to be a private office and having the option to work remotely whenever needed. This gives the software developer both a quiet place and a chance to work the hours that are more convenient for her/him. The private office can only help so much avoiding distractions, the best thing to avoid distractions is to form a culture of independence where people collaborate when necessary, without interrupting a co-worker, especially if it isn’t without a purpose
The advice above is by no means a recommendation to isolate software developers. However, to do their job and do it well, software developers need the time and space to focus and work on hard problems and to create solutions. Software developers will always be able to interact with others whether in person or online when needed to collaborate or just to socialize. What’s important here is to have that quiet place when you need it.
I have been a software developer for many years now, and for the last 5 years, I’ve been working remotely 100% of the time. What does this mean? It means I’ve been working primarily from home, but it doesn’t mean I’m always home; instead I try to balance my time between multiple places inside my house AND more importantly, I go out and about when I can and when the weather permits it.
Working from a place other than your home is essential in my opinion, having a different environment, a different view, and a different location to code is stimulating, and if I might say it, empowering and motivating too. Many times I will walk outside my home and just pick a random direction, but I’m lucky to live in Seattle (just moved here recently) where I know I’ll find a coffee shop (and a good one that is) in almost every block.
What happens if you don’t live in the city you might ask, well, the majority of my time as a remote software engineer I lived in the suburbs of Austin, TX. Of course, my options were much limited than now, but none the less, I was always able to get in my car and drive to a coffee shop or any other place with a good WiFi and simple food and beverages at reasonable prices, like Panera Bread for example.
OK, so enough about my own experiences and on with the tips. Below is a list of things that will help you be more successful when working outside of your home, at a coffee shop, at the airport, at a restaurant, etc.
Here’s what you are looking for
Portable power
This is by far the most essential item to have, never assume that your laptop or tablet will have enough power to last as long as you need. Invest in a portable battery that can charge both your laptop and other devices such as your phone or tablet. Personally, I use an Anker portable battery, and it is enough to fully charge my laptop once + my phone.
Good headphones (ideally noise canceling + mic)
Why? Well, as a programmer I need to focus on my code, and public places tend to be full of noise. While I don’t use them all of the time, they are definitely a handy item to have when working outside of your home and in a noisy environment. Also, if you collaborate with other people, make sure to get headphones that include a mic so you can have a conversation with your team when needed. I use the Bose QuietComfort headphones, and while they aren’t cheap, they were a good investment for me.
A good cell phone plan (with unlimited data preferably)
I cannot say this enough, you need to make sure you can provide yourself with a good, fast AND secure internet connection to your laptop or tablet when working outside of your home. Yes, nowadays coffee shops and most public spaces do offer free WiFi, but most of the times the speed and the security of these WiFi connections is questionable. If the free WiFi at your local coffee shop is enough for you then fine, but for me, it is not. I recently switched from Verizon to T-Mobile which has an unlimited data plan (and it even works internationally!). It costs me less per month, and it works much better for my family and me. I often turn on my Personal Hotspot to share my data connection with my laptop, it has saved me from poor free WiFi connections many times.
A newer laptop/tablet
While it isn’t required of course, with a more modern device you’ll benefit from the longer battery life, and while you’ll want to carry a portable battery, it is still a good idea to have a laptop or tablet that has a great battery life, if possible. I recently got a Microsoft Surface Book 2 from work and the battery life is pretty good. Tablets in general also enjoy a great battery life as many other light laptops do such as the MacBook Air, etc.
A great backpack
This is important, while any backpack will do to carry your laptop, portable battery, multiple charges, and other cables, headphones, etc. I do recommend getting something that can help you organize these items quickly and also comfortably. I have been using this backpack for a few years, and while small, it can carry all of my devices, a 15″ laptop, an iPad Pro, a mirrorless camera and a Kindle along with my cables, portable battery, and a few other things. The backpack is compact and very comfortable, and this is the reason I like it. I can walk for miles with it, and it doesn’t bother me, and at the same time, it’s small enough to place it by my feet anywhere I land. It also fits perfectly under airplane seats.
This is all folks, these are the most important things I can think of that has helped me be very productive while working remotely and outside of my home. If you have other tips, please share them below in the comments.
Parallelism refers to the technique of running multiple calculations at the same time to speed up a computer program. Historically, this has been a complicated thing to write requiring a developer to do complicated coding including low-level manipulation of threads and locks.
A program will generally run faster if you allow it to execute multiple calculations at the same time. For example, you might have a program where you need check how many orders a customer has, and instead of looping through each customer to check on their orders, you could check on multiple customers at the same time by using something like Parallel.For.
Code example:
private IEnumerable<Orders> MyMethod(List<Orders> orders)
{
// Converting the List<Orders> to ConcurrentBag for thread-safe purposes.
var result = new ConcurrentBag<Orders>();
Parallel.ForEach(orders, item =>
{
// Some data manipulation
result.Add(new Orders(/* constructor parameters */);
});
return result;
}
The .NET Framework makes writing parallel code a much simpler task than before. A variety of enhancements and additions such as runtime, class library types, and diagnostic tools were introduced with the .NET Framework 4.0 to help developers write safe and efficient parallel code.
Below are some of these tools and enhancements, you can click any of the links for access to Microsoft’s documentation for each one of these:
Parallel LINQ (PLINQ) A parallel implementation of LINQ to Objects that significantly improves performance in many scenarios.
Data Structures for Parallel Programming Provides links to documentation for thread-safe collection classes, lightweight synchronization types, and types for lazy initialization.
Task Schedulers Describes how schedulers work and how the default schedulers may be configured.
Lambda Expressions in PLINQ and TPL Provides a brief overview of lambda expressions in C# and Visual Basic, and shows how they are used in PLINQ and the Task Parallel Library.
The benefits
The benefit of using parallel programming is gaining the advantage to execute multiple instructions at the same time. This offers the benefit of making your program faster by reducing the time for the same code to execute sequentially. While this is a great way to speed up your code, you should still consider other ideas as well and not use the framework features around parallelism before knowing more about it. Believe, I know by personal experience, unfortunately.
The disadvantages
The disadvantages of using parallel coding are the increase of use of CPU for it (something to be aware of) and also the potential for issues when using collection objects that aren’t thread-safe. Thread safe means multiple threads can access the common data without any problem. When using something like Parallel.For you want to use a thread-safe object such as ConcurrentBag<T>. Bags are useful for storing objects when ordering doesn’t matter, and unlike sets, bags support duplicates. If you need your collection to be ordered, remember to sort it after converting it to a List<>.
As with everything else, test your code and find out if using the Parallel library or PLINQ in your existing scenario is the right thing for it or not. While it might seem that running things in parallel will always be faster, this isn’t always true. Read more about it here.