What is SOLID?

I know what you are thinking and no not the state of matter but in a software engineer capacity. This is an acronym that stands for the 5 principles of software development.

Single-Responsibility Principle

The first principle is called the Single-Responsibility principle, which says that a class should only have one job. So if you have a class that does some sort of calculation and then you have several other methods that print out the calculation in multiple formats then you may want to extract those out into there own class. That is because that class has become something that now does two jobs instead of just one.

Open-Closed Principle

The second is the Open-Closed principle, which says that objects should not be able to be modified but should be able to get extended if needed. Another way to put this is that it should be easy to modify the behavior of a class without actually having to modify the class itself. An easy way to achieve this is to create an interface for a class and then pass that class into another object.

Liskov Substitution Principle

The third is the Liskov substitution principle and it has a very formal saying to explain what it means. The short version however is that every subclass or derived class should work as a substitute for their parent or base class. This means that any derived class shouldn’t modify the behavior of the parent class. Essentially you need to have a very generic abstract class that you inherit from. Take an example like having a circle class and a rectangle class. Both of these classes need to inherit from a generic abstract class called shapes. This will allow you to implement things specifically for each class without interfering with the other classes. It also allows you to create new shape classes easily.

Interface Segregation Principle

The forth is the Interface Segregation principle, which states that a client should not have to implement an interface or depend on a method that it does not use. So if an interface is needed to be implemented by a class and it forces that class to actually implement a method that it will not be able to actually use, for whatever reason. Then it may mean that a new interface needs to be implemented that does not have the method.

Dependency Inversion Principle

The fifth is the Dependency Inversion principle, which states that a high level module should not depend on a low level module. Instead the modules should depend on abstractions. This means that when thinking of the interactions between the high level module and low level module it should be thought of as an abstraction. This allows for decoupling between the two modules.


These five principles are easy to grasp in concept and can be very helpful when coding. The hardest part is to remember to use these principles as you code and sometimes things will slip by but that is what refactoring the code is for.

What is a Full Stack Developer?

This is can be a common question to people new to the world of development. It actually just has a simple answer, it means that someone is working on the full range of technologies when working on a project. Specifically the developer is not just specialized in one area like the database, front end (HTML/CSS), or just some language like Java. So a full stack developer will be familiar with all of those technologies and how to use them. Usually this will mean that a full stack developer will make more money then someone who just does front end work. It is important to determine what kind of work that you like to do when finding a job. That is because it would be more beneficial to only work in the front end of things if that is what you prefer then force yourself to work all over the technology stack. Don’t forget that this does not mean a full stack developer is not specialized in any area. They may have a specialty in database development but have a good working knowledge of all the other areas. That is about all there is to the question, “What is a Full Stack Developer?”.

What is an API and Endpoint?

For most developers these concepts aren’t that complicated and are widely used in the project they are working on. However, I do remember that when getting my computer science degree there was no mention of either of these in any of the courses. The only time it was actually mentioned in a class was when a student was giving a presentation, but it never came up in the coursework. This is fine because a degree isn’t supposed to teach you everything, but it is still something to look into before you get a job because you will need to know these things. An API is a set of methods for interacting with an application. Essentially it is a way for you to access information about an application without having to know how the application works. This is done by giving people access to endpoints in an application. These endpoints are essentially URLs that access a certain method that a developer has set up in order to access information from the application. So you can use an endpoint to get data from an API and then use that data in whatever way you need. It is a really simple thing to learn, but can be easily overlooked. If interested then you can click here to get a little more in-depth view of an API.

Also if you have any questions just ask them in the comments.

The Writer’s Glove

If you are a developer then you have probably ran into the problem that your hands get cold after a long session of typing. Keeping your hands extended from the body can make it hard for some people to keep heat in their hands. It is very hard to find a solution because to type efficiently you need to have your bare hands, or at least your bare finger tips. Although if you try those gloves that have no fingertips on them then you quickly realize that this is not the perfect solution. The best way to keep your hands warm would be to have gloves that cover your hands fully but still allow you to type efficiently. This has been accomplished by “The Writer’s Glove”, which granted was developed for writers in mind, but we developers are writing technically. These gloves cover your entire hand, but they are thin enough that you can still feel the keyboard. They are made out of 100% silk, which makes them feel great on the hands. It does take a few typing sessions to get completely used to the feeling of typing with them on, but it becomes just as easy as typing without them. They also make a pair of the gloves that allows you to use the touchscreen of your phone, which means you won’t have to constantly take them off to deal with any notifications you get on your phone. You can get them from here and also supply them with the code SoftwareUpdates to get a discount on your order today.

Design Patterns

This is another topic that was not fully covered in my computer science degree and I think it is a very useful topic for when you actually start working. Design patterns are basically reusable solutions to common problems. They fall under three categories: creational patterns, structural patterns, and behavioral patterns.


Creational Design Patterns

Creational design patterns are all about class instantiation.

Names of Patterns:

  • Abstract Factory
  • Builder
  • Factory Method
  • Object Pool
  • Prototype
  • Singlton

Structural Design Patterns

Structural design patterns are all about class and object composition. It does this with classes by using inheritance to compose interfaces and then composes objects in different way in order to obtain different functionality.

Names of Patterns:

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Private Class Data
  • Proxy

Behavioral Design Patterns

Behavioral design patterns are more concerned about communication between objects.

Names of Patterns:

  • Chain of responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Null Object
  • Observer
  • State
  • Strategy
  • Template method
  • Visitor

As you can see there are many different patterns for each category. Although do not think all of these patterns will answer all of your programming problems. There is some debate on how useful design patterns actually are and when to use them. I would find a pattern that you find interesting and try to implement it in a side project before using it for actual work and be sure that using a pattern is the best way to do things before implementing it in your project.

You can find more information on all of these patterns at Source Making

Top 5 Debates Among Programmers

This is a post that I thought would be funny to do, and who knows you may have overheard some of these debates in one of your computer science labs.

  1. Tabs VS Spaces
    • This is a common debate among programmers and the debate can get really heated. Who knew that a simple things like tabs and spaces could do such a thing.
  2. First Programming Language
    • This is a long-standing debate and usually has a lot of biases. The main reason someone says one language is better to learn first is because it is the programming language that they began with. You can read more about this topic from my article: What is the first programming language you should choose?
  3. Bracket Placement
    • This is another one that doesn’t actually seem like it’s a big deal, but programmers have very strong convictions on where they place opening brackets. Some say you place it on the line of the statement and others say it goes on the next line. I personally prefer it on the same line. What does everyone else think?
  4. Best Operating System
    • This sometimes is a debate that happens between non-programmers as well, but it is definitely something that programmers have strong opinions about. Granted most of this is just bias. Each operating system has its own pros and cons for the job needed to be done. You can see more about this in my article: What is the best operating system?
  5. IDEs
    • All programmers have their personal choice in IDE. It could be sublime, notepad++, eclipse, visual studios, ect. and each programmer thinks that their IDE is better in some way. If you look through my blog posts you will see that even I have a bit of a preference for a certain IDE. There is really nothing wrong with other IDEs and is really up to the preference of the programmer. They are essentially just tools that we use to accomplish our goals.

These are the top 5 debates programmers have with each other, and if you are just getting started in the field you will hear them soon enough. What is your favorite IDE and why?

What is Atom?

If you came to this post wondering what an atom in physics is then I have bad news, I am talking about the text editor Atom. This is a very nice text editor for writing code. It supports many programming languages and has some features, like auto-complete, that makes it great for any programming. It also has several add-ons that can make your life a lot easier, like a nice to-do list add-on.  Another thing that I really like about it is that there is a version for all the operating system and they all work very well for each OS. This means that I can be consistent when switching between operating systems. This is just my preference but it is really nice to be able and work in the same environment on all three operating systems. Granted there may be times when you need an actual IDE for the task at hand, but when you don’t require one then I suggest using Atom. There are other alternatives, like notepad++, but it doesn’t work as well with Mac OS as it does with Windows.

Checkout Atom for yourself.

Easy to access cheat sheets for programmers

One thing that is very different from going to school for computer science and actually having a job as a software engineer is that in school you are expected to keep everything inside your own head and not rely on an outside source. In the world of software engineering you have the option to actually look up anything that you do not know off the top of your head. Granted that you cannot constantly be looking up things and even if you do it very rarely it ends up taking a lot of time trying to find the specific thing you are looking for. That is where cht.sh comes in handy. This website lets you look up cheat sheets on a lot of different languages and even has a way of  searching the web for content if it does not already have the answer you are looking for. It isn’t even necessary to go to the website in order to look things up. You can simply use the command line to access everything. It has some predefined cheat sheets and even has a tutorial over the basics of many languages. There is a command for searching the documentation or if it can not find it then it will simply look up an answer for you. It is a very nice tool to have as a developer and can come in handy when needing a quick refresher on something.

What is the best operating system?

There have been numerous debates on which operating system is the best to use as a software engineer. You will find someone in every corner trying to convince you that the operating system they use is the best. The truth is though it comes down to preference and what kind of software you are using at the end of the day. Even in your job it will come to what the business prefers and what software they are invested in. At my work we are highly invested in Microsoft so it is only natural that we use Windows 10. Granted it’s not my favorite operating system, but that is just my preference. In reality as a software engineer I would suggest that you get familiar with all the operating systems, well mainly Microsoft, OS, and one Linux distribution that you like. This is so you will have experience working in all 3 and be able to adapt when your job calls for it. So I wouldn’t focus on which operating system is better and just learn to use the 3 of them, this will ultimately help you in the long run. Don’t let people convince you that one operating system is better to code in than another either because that just isn’t true. They are all fine to code in and again that really just comes down to preference.

What is the first programming language you should choose?

I decided that for the first post on the blog I would tackle a very common question in computer science. This is a question that has been debated by many people and colleges for that matter. Some people will tell you that you need to learn C++ or C first because they will make other languages easier to learn later or that they are the only way to truly get a grasp on some programming concept. Others will tell you to learn python or ruby because they are easy to pick up and you can see results fast. There is always a reason why someone recommends one language over another. Usually though the main reason that someone suggests a language is because that is the language they have grown to like or it could be an “earn your stripes” mentality. The simple answer is that there is particular language that is better to start with then another. The main thing to do is find out exactly what you want to do. If you want to make websites then you will probably start in a different language then if you want to make an app. Even then you will have several languages to choose from and for that you will just have to pick one and start coding in order to find out which language you like best, because at the start it only matters that you enjoy programming. So just go find a language you like and then start coding practice problems from the internet.