I’ve written before about the importance of having a solid foundation. But what does it mean to have a solid foundation? There’s more to it than I can do the job. Can you do the job well? Do you know the things you should know?
Know the theory
I’m not suggesting that you need to be able to define big-O notation at the drop of a hat (you should), but it is important to have learned the theory at some point. You should know the difference between a class and a struct. You should know when and why to use each. You should have a good idea how memory is allocated and how objects are managed. You should know basic operators and how you might optimize in most situations.
Know your language
I’m a C# programmer by trade. The core C# offering has it’s own set of features. There are things such as preprocessor directives and generics that a developer should be aware of. Unary, binary, and compound operators are language features that should be second nature to the developer.
In addition to the core language, I’m also a web developer. What that means these days in the .NET stack is that I must have a solid understanding of MVC and Web API. With the most recent release of MVC 6 and Web API have become one singular framework. Of course there are things like OData and OAuth to be familiar with as well.
Make that “languages”
A more well-rounded developer may find that they need to know several different languages inside and out. You may find that this makes you more marketable as well as more valuable to your team.
As a full-stack web developer, you should also have a good working knowledge of HTML and CSS. With HTML5 on the rise of adoption, there’s a fair amount that’s new or different. As adoption continues, your HTML may look vastly different than in years past.
With regard to CSS, you should know how selectors work, and be familiar with media queries. Learning to utilize the cascading nature of CSS effectively will go a long way.
There are a number of frameworks such as React and full-blown run-time environmets such as Node.js. More and more seem to be introduced each day.
I’m utilizing Knockout.js and Angular.js, which have their own ideologies and idiosyncrasies. I find the documentation and examples for Knockout to be far superior than what’s available on the Angular site. Luckily there are people like John Papa who have published their own articles, such as the Angular Style Guide.
The world runs on data
Of course few applications can survive without data. You should probably have at least a cursory knowledge of some sort of database.
My database experience mostly revolves around SQL Server. Having started with SQL Server 7 up through the most recent release, I’ve seen more and more features added, but the core has stayed relatively consistent. As new features are added however, I find it important to become familiar with them, and add those to my repertoire.
Know your craft
There are a variety of non-language specific concepts that you should have knowledge of as well. Object-Oriented Programming (OOP) concepts such as Encapsulation and Polymorphism should be second hand to any developer these days. The SOLID principles I’ll be covering in a future post.
I find requirements gathering and project management skills are increasingly more important as a more senior developer. It’s important to know how to gather requirements so that you may find out what needs to be done on an individual project.
Narrow your focus
Once you gain a broad understanding of the languages with which you develop, you may find it beneficial to narrow your focus to become specialized. Become the expert with a given technology or with a more focused stack. There’s a lot to learn, and more coming out each day. With a solid foundation however you should find it relatively easy to pick up a new item when warranted.
Without a solid foundation you may find it difficult to learn new concepts, as newer technologies are often built on common concepts. But, I want to know what you think. What makes for a solid foundation for a software developer? What are the important concepts to know?