I frequent a huge variety of forums, subreddits, and discord groups and in my experience nearly all the questions from new developers or entry-level developers are the same across the various platforms. I do my best to answer their questions or contribute to the conversation but at times I feel that I can just copy/paste from one platform to another with a cookie cutter response. With that in mind, that is my goal with this quick article. I want to share the most common questions I see and offer my guidance.
What Language Should I Learn?
This is a nearly impossible question to answer directly because of the various factors. Some that come to mind are:
What type of developer do you want to be? Desktop/Web/Automation/Data Scientist?
Do you want an easy to learn language that is extremely high level or one that allows you complete control?
Do you plan on working for the Government or other public entity?
There are far more than I can list here, but you can see my point. Below are my recommendations for any new developer regardless of the answers above.
I highly recommend everyone starts with a high-level language like Python. Python is incredibly easy to learn, has a syntax that is developer friendly, and can handle a huge range of tasks ranging from Desktop Development to Data Science. It definitely has its weaknesses (performance), but it is a great starting point for new developers as it has a huge community across a massive range of industries, has a lot of out-of-the-box packages, and has a very low barrier to entry and can be setup in a few minutes regardless of your operating system of choice.
What I usually recommend in addition to Python is learning Object Oriented Programming (OOP) concepts from day one. Far too many developers, even upper junior level, struggle with OOP concepts and as such have a difficult time in enterprise environments. As you are writing code ask yourself if it adheres to the S.O.L.I.D. Programming Principles and if not, refactor it immediately so it does. Do NOT let yourself off the hook because “no one will see this”, or “I’m learning”. Trust me here, learning the proper standards from the beginning can save you countless hours of frustration later when you must unlearn what you thought you knew to be accurate.
Once you have a strong skillset in Python and you are comfortable with your skills then move on to a lower level language like C# or Java. These are the two most common languages used in the Enterprise today and will be for the foreseeable future due to the roots they have in these environments. They will also help you cement your foundation in OOP by introducing more complex design patterns like interfaces and abstractions. From there, investigate an even lower level language like Objective C or C++.
Whatever your path, be active in forums, ask questions regardless of how the community responds, and always adhere to the SOLID standards. Learn it right from the beginning!
What Should I Build?
This is a pretty simple one to answer. Build something, anything, that is of interest to you. Coding is just like any other skill, the more you do it the better you will get at it. It really does not matter what you build if you enjoy doing it and you are always expanding your skillset.
I do recommend right sizing your projects though. As a novice developer do not set out to build an MMORPG from the ground up by yourself! Instead build a simple app that tells time, calculates the time between lunar eclipses, or fills a need of your own like I did when I built a quick application that gathers the latest results from my Geiger counter and uploads the results to GMCMap.com.
Is it Normal for Me to Google Everything?
YES, absolutely! I have been a developer for nearly 15 years professionally and I use sites like StackOverflow and Google daily. You will find that your searches progress from “For Loop C#” to “Parallel.Foreach C#” and eventually to the much more complicated issues. As I have progressed the questions about syntax have been replace with more complicated problems like “Detect Memory Leak C++” because those day-to-day tasks are muscle memory now.
I have found that it is more important to know that a language CAN DO something rather than memorizing the syntax for HOW TO DO IT. If you know that you can do something in a language, then you will remember that when the time comes to implement it. For example, I know that SignalR works well as an Enterprise Service Bus (ESB), but I could not tell you how to deploy a SignalR solution without some research. The key is that I know there is a solution out there and when I need an ESB I will research SignalR at that time.
What Should I Know to Get Hired?
I have had many years of recruiting experience, all focused on developers, as well having gone through many recruiting experiences of my own. This will not hold true for every company though and is from my direct experience while recruiting. I look for the following when I am interviewing a potential candidate.
Do you understand SOLID programming principles by teaching me one or two them?
Do you write unit tests for your code? If so, what packages do you use? What do you like about the various packages? What do you dislike? Do you test Controllers or only focus on Models/Repositories/etc.
What tools do you use daily? Visual Studio, Eclipse, etc.
Do you name your variables properly and adhere to industry standards?
I usually stay away from trick questions like do you know how to bitshift, or can you conduct a bubble sort on an array. I want to know that you know what those concepts are, but if you must Google how to do it that is 100% OK.
Unfortunately, you will have companies try to test you in a white board setting where five people are staring at your screen asking you to talk through your thought process while you work. I honestly cannot stand this type of interview because they do not truly show your skills. Too many times the companies I work for hire a developer because they knew how to bitshift, but when asked to do menial tasks like create a connection string they cannot.
Should I Get a Degree in CIS?
I strongly believe that you should obtain at least a Bachelor level in CIS if you are interested in making your career in development. Prior to having my Bachelor, I used to think it was not necessary and was constantly being turned down for interviews and roles due to the lack of an education. After obtaining my master’s in computer software engineering, I am a strong supporter of obtaining a formal education. The theory and hands-on experience I obtained through my education have made me a much stronger developer. Looking back, I have no regrets about going into debt to obtain my degrees, and even want to further my education with a PhD in the future.
Education is not for everyone and yes, I will hire developers who have experience over education. I do prefer those with at least a Bachelor, but it is not a hard rule I adhere to. With all of that said, I do think you need practical hands-on experience as well. Having a degree is not enough, you need experience to coincide with your education.