Stacks — An Outlook on Software Development From a Newbie Coder’s Perspective
So guys (and gals), as usual, I’ve been studying my rear-end off this past week and I’m going to break down exactly what I’ve been learning because I have a lot of questions about these technologies myself and I’m sure other people new to software development would benefit from a run-down. I’m going to present this information in story-mode for entertainment value and just because it makes the most sense, but inside of this story will be a lot of useful information for a new developer.
On May 22, 2016 I first began learning the C# programming language, I spent probably about a month learning the basic concepts of the language. This included subjects like value types, while loops, for loops, if statements, switch statements, objects, classes, inheritance, polymorphism, abstraction, delegates, lambda expressions, etc… The basic concepts of the language itself. But I decided to learn to program for a reason and that reason was to make products… More specifically, I want to make products that solve a problem that people face in society and change how the society operates in some way. While that may sound like a big deal, really it isn’t that difficult to do with software. I mean, look at Pokémon GO which was released just a few days ago. It adds nothing but pure entertainment value to society, however it has stimulated business (yes, those are 2 separate links) everywhere. It has, in fact, changed our current society.
Moving on, I said to myself “OK, I learned the language… Now how do I start making stuff???” and we all know that modern applications don’t simply write “Hello World” onto a black console screen; that’s silly. Even though I knew what ifs, whiles, fors, classes, and instances were… It still was not clear exactly how to start making cool stuff. This is where I really had to put down my textbook and get on YouTube. I searched terms such as “C# simple program” and “C# application tutorial” amongst many other search phrases including the keyword “C#”. This led me to start learning WinForms and toying around with actual “Windows Applications.” If you don’t know what WinForms is… Actually, you do know what WinForms is… It’s simply the designer that allows a programmer to create the Windows Graphical User Interface (GUI) that we’re all so familiar with. In fact, there’s quite a chance you’re looking at a WinForm (or a variation on one) as you read this — your web browser.
But.. But… I wanted to
- Make a program that uses your location
- To find the best restaurant deals in your area
- Based upon the current day and time
- And allows users to edit or update that restaurant information
Sounds simple, right? HA! Not so fast there cowboy! The downside is, I needed to learn… about TEN more technologies besides just plain-old C# to do this… The upside is, now I’m learning/have learned these technologies.
So, if you’re like me, and you are a beginner software developer or have just learned a programming language but you’re wondering “Ok, how do I start using this??? ” READ ON!! If you’re already a master and not interested in reading the silly findings of a lowly newbie like myself, well, then maybe you can shoot this article over to that guy who’s always asking you how to get started.
STEP 1 — Learn a Powerful Language
Step 2 — Learn Application Programming Interfaces (APIs)
You may or may not have heard of these. When I started with C# in May, I had definitely heard of these but I had absolutely no clue what the heck they were. Know a language but have no idea how to actually start using it? Well, APIs are your answer. APIs are made by all kinds of programmers out there but big companies such as Yelp, Google, Google Maps, Twitter, Facebook, etc… All have their own APIs. APIs are libraries of code and methods of doing things that you plug in to your own program in order to use pre-defined functions. Put more simply, they are what allows your program to tap into things such as Google’s location services, Yelp’s business information, Microsoft Windows’ operating system functions, and even WhatsApp Messenger’s messaging service. There are a ton of APIs out there for almost everything you can think of. If you are wondering about a specific service’s API, just Google that service or website’s name, followed by “API”. In fact, many popular technology sites such as Yelp and Twitter have a Developer’s section which gives you the proper information on how to download, use, and work with their API. Typically, the links to these developer areas will be api.website.com, website.com/developers, or dev.website.com etc… The format of the URL is not important with the power of Google (or Bing) at your fingertips but you get my point.
In a nutshell, APIs give you access to pre-defined and customized functions and methods, created by other programmers (often at big organizations) which allow you to implement (or at least reference) their technology in your programs. The way these are used is literally, you will reference the API in your program, write a “using” statement like using Yelp.API; At the start of your program file, and then call a function or method from that API library like GetBusinessLocation(string businessName, string businessCity, string businessState); which will return what you are looking for.
In actuality, learning APIs can be a little more complex than downloading one and calling up a function 5 seconds later, but it is almost that simple sometimes. However, each API is written differently and there really is no “standard way” of learning APIs… You have to go to that APIs website and read that they call “THE……………..(wait for it)…………… DOCUMENTATION” (DUM-DUM-DUMMMM). Sounds intense, but all it does is define how to use the classes, functions/methods, properties, and fields in that API — which is exactly what you want. Some documentations are more clear than others, but if you can’t figure something out, you can always Google (or StackOverflow) it. Chances are, if you are trying to do something, someone else has wanted to do the same and you can use that to your advantage by way of searching. Which brings to me to a quick aside — get used to searching… A LOT. In fact, I recently starting using Bing because they’re offering a rewards program similar to a supermarket where you get a point for each search you do (pretty ingenious) and I do so much searching learning all of this software development trash that I’ll probably be a millionaire in a few hours… Anyway, always search before you ask is definitely a golden rule of the software development community, and rightly so. It’s actually less work for you to find your question which is already answered than it is to type out a whole post and wait for replies… Plus you piss off a lot less people… Who woke up on the wrong side of the… stack… Erm…
Back on topic, the Windows operating system itself has APIs which allow your program to perform functions such as creating, editing, and modifying files, checking out your computer’s performance (memory usage, CPU, etc…), playing sounds, creating Windows (WinForms) and changing the color of the Console, amongst many, many other things.
Turns out, anybody can make APIs and you can go look through all kinds at GitHub. For example, if you wanted to see a list of APIs that you could access with the C# programming language, you could search GitHub for C# APIs. Of course, you would likely want to narrow down the search a bit more with keywords of what you are trying to get your program to do. So, in summary, if you want your program to do useful stuff, learn APIs.
STEP 3 — Learn DATABASES and MODELS
Ok, so now you’ve gotten your new flashy app to find businesses via Google Maps or Yelp and you realized… Hey, I need my app to store this information somewhere…. Crap… How do I do this? Do I use a text file?? I think I’ve heard of those things called databases but I have no idea how to use one…
Well, I don’t know if that’s run through your head, but it definitely ran through mine… Time for another heap of lessons… Yep… So, you are correct. You need to learn how to use a database, run queries (database commands, basically), and then get your program to do these things… Which is yet another 3–5 courses of learning. You really can use a text file to store your data — many older programs did, and if your program is simple, that may be a great option. However, if you want to make a program that will change the world and get more hits than Pokémon GO, you’re going to need to learn how to work with a database.
So, this is how my dark, twisted, but fun database education path has gone…
- I joined a fun project with other coders. One of the golden rules in life is, don’t just sit in your bedroom and learn something… It’s so important to work with others. It expands your knowledgebase tremendously, allows you to get real-world teamwork experience, and allows you to network. These are all very very important in today’s society. I don’t know how many times I’ve heard someone say “OMG, I can’t believe they hired Johnny, he has no degree and half the experience I do!” Well, Johnny knows how to network.
- I ended up learning the MVC Architecture (More on that down below) and as part of that, I needed to work with data… Which led me to have to finally learn how to set up, use, run, edit, and play with a database. Specifically, an SQL database.
- Shortly thereafter, I learned that one of the most modern, effective ways of working with a SQL database in C# is to learn the Entity Framework.
- However, the Entity Framework can be used with a simple, powerful querying language called LINQ, prompting me to then go and learn that as well.
- But wait, there’s more… LINQ queries are based off of SQL queries (with some key differences though)… Which I didn’t know… Prompting me to…. You guessed it, go learn SQL. Specifically, Transact-SQL to work with my SQL Server.
True, it is a lot of stuff to know, but hey, developers get paid well! *Note that I purposely didn’t link to the exact salary ranges because I am confident that it is in your best interest as beginning programmer to read the entire survey… It’s interesting and will surely help you start out your career. Knowledge is power!
STEP 4 — Learn Frameworks
If you’ve been around the programming block at all online, chances are, you’ve heard things such as AngularJS, Bootstrap, The .NET Framework, Choco, Knockout, PureMVC, Backbone.js, Ember.js, blah, blah, blah, the, list, goes, on, and, on.
These are called frameworks and I’ve already mentioned them a zillion times in this article even. I’m going to quote Wikipedia here because although I had all of this resting on my tongue, I was having a hard time spitting it out and Wikipedia does just fine:
“A software framework is a universal, reusable software environment that provides particular functionality as part of a larger software platform to facilitate development of software applications, products and solutions. Software frameworks may include support programs, compilers, code libraries, tool sets, and application programming interfaces (APIs) that bring together all the different components to enable development of a project or solution.”
Quite a broad definition. But in my entry-level experience, I’ve found frameworks to essentially be… ways of doing things. By now, it’s clear that to be a decent coder, you have to know more than just a programming language. You also have to know standards and ways professional coders do things… For example, the Entity Framework is a framework that .NET (another framework, lol) developers can use which allows them to work with data and databases without having to spend all of their time learning and screwing with whichever database (or databases) they are using. MySQL, MongoDB, PostgreSQL, SQL Server, Oracle, Cassandra, Redis… These are all different brands of database management software. Just like programming languages, they are all very very similar, but they do things differently. Rather than having to become a master at every single one of these database systems and also just spend a lot of time messing around with them, it can serve a developer better if he/she is able to focus on well…. coding the application at hand. Entity Framework helps make this happen. Essentially, Entity framework is a collection of APIs/Libraries of pre-written code, other software, and simply ways of doing things which allows coders to “work at a higher level of abstraction” when it comes to interacting with data and databases. Essentially, it’s supposed to make things easier for developers… But that’s subjective so I’ll let you decide how you feel about that once you get some experience under your belt!
Another popular Framework, and perhaps a bit simpler to take in, is Bootstrap. Bootstrap is a collection of Cascading Style Sheets (CSS) libraries which allows front-end coders and developers to better style their websites, but perhaps more importantly, make them robust and adaptable to all platforms. Wait… What’s a “platform???” A platform is simply a device… Smart phones, tablets, so-called “phablets”, laptops computers, desktop computers, televisions, media boxes, etc… These are all platforms. Obviously, they vary in screen size so when your viewers want to check out your website or app on their phone instead of their computer, you don’t want it to turn into an ugly mess… This is where Bootstrap comes in. And boy, is it ever popular right now! You can read more about it on Wikipedia but there really isn’t much more to it. Check it out at GetBootstrap.com.
Well, there you have it folks, I’ve given you an example of a “back-end” framework and a Front-End framework. But what I want you to take most out of all of this is, this stuff isn’t as scary as it sounds. The programming world uses a lot of jargon and lingo that can often be easily broken down and conceptualized in simple ways. As a newbie, when you think of a framework, just think of it as a way of doing something and you’ll find learning frameworks is no big deal but extremely valuable… In fact, knowing frameworks is so valuable that frameworks are often listed on job postings for developer jobs.
One last part I want to mention before the next step are libraries. Libraries are technically included in frameworks and APIs a lot of times, but you may be wondering what the difference is… The best way to explain the difference is simply to state that the definition of a library as most coders understand it is a collection of pre-written code that can be re-used by either oneself or other developers. That’s it. So, technically all APIs and many frameworks actually include libraries but not necessarily the other way around. Examples of popular libraries are React.JS and jQuery. You can go make a library right now by going into Visual Studio, for example, and creating a new “Class Library” file or simply a coding file with a bunch of classes and methods in it, and then simply referencing and using these classes and methods in the various applications that you develop. Boom. However, what I want to leave you with here, is I’ve noticed some of these terms tend to overlap out there. For example, some people will call APIs libraries and libraries APIs, and APIs frameworks, and etc… And to some degree, that’s proper since in many of the definitions of these things, they can actually include each other… But in the end, it’s all software that coders are essentially sharing and re-using, oftentimes with standards and methods attached. Done.
STEP 5 — Learn Architecture and Design Patterns
Cool, you know English… Now, go become an architect… Literally, that’s how It is when you learn to code. Just because you know the language, doesn’t mean you are competitive in the software development market… No sir/mam. And rightly so… Should an architect be allowed to make skyscrapers simply because he knows English? Alas, at least when coders mess up, a building doesn’t come crashing down, but a program sure can, as well as a business’ profits. Coding in the real world involves program and system architecture, design patterns, and clean coding. If a program is not designed well to begin with, chances are, it’s going to fail when it is truly tested, much like a building. So what are these architectures and design patterns may you ask? I’ll start with a popular architecture example…
MODEL VIEW CONTROLLER (MVC)
Okay, if you have Microsoft Visual Studio, I’m sure you’ve created a new project and happen to see this thing called “MVC” in the project template area… Or more specifically, ASP.NET MVC. What the hell is an MVC?
Why… It’s a Model View Controller! Duh!!!!
So, turns out, when you go to a website… Things happen. Namely, you hit enter or click a link, and your browser contacts the website’s Controller which grabs the information for the page that you are navigating to out of the Model and then shoots that info over to the View which is displayed in your browser… All within milliseconds of course. Wait… WHAT?? Think of it like this:
- The View (Not you Whoopi. Not this time) — Everything you see when you visit a website.
- The Controller — The brains that interact and boss around the View and the Model. This is also called a “server.”
- The Model — The software which interacts with (gets info from and writes to) the Database which stores all of the information on a webpage. It is important to also stress that the model is the middle-man between the rest of your software (website, application etc…) and the database. For example, this very blog post that you are reading is actually within a database field in a table, thus it is being presented by the Model and when you are reading it, you are looking at the data from within the View. Get it? You will..
A website can also be a lot easier to design from the get-go when thought of in these three segments, and designs will be a lot more practical and applicable. Eventually, you learn the possibilities and limitations of each component of MVC and this helps you build real-world functioning websites and web apps.
*Also note that the MVC is simply a design architecture and it does not only apply to websites and web apps. Actually, other types of software such as a Windows Desktop Application can use the MVC architecture… All that is needed to use this architecture is data, a user interface, and program logic.
Excellent resources to get you started on MVC can be found on YouTube as well as Udemy. I recommend ASP.NET MVC 5 by Mosh Hamedani. I have taken the course myself and it is excellent. However, it most certainly not for complete newbies. You need to be familiar with the ins and outs of C# (delegates, lambda expressions, LINQ, as well as SQL Databases). Huh??? I thought this article was for beginners??? Well, it is, but typically, when you are just starting programming, you want to learn the language itself before you worry yourself with program architecture and design patterns. I suppose you could try learning those things first, but I also suppose that would be quite frustrating and confusing.
Since this is an article geared towards beginners, I’m going to leave the explanation to one architecture, however, know that there are quite a few software architectures out there for you to learn, and who knows, you may develop your own some day. Another popular model which is similar to MVC is MVVM or Model View ViewModel (Alright, I know, that’s enough). The curious can go Google it… Or Stack It. Speaking of Stack Overflow, it is definitely the best programmer question/answer website on the internet right now — just make sure you search before you ask or you may find yourself overflowed with something they call a terrible reputation.
STEP 6 — Learn GIT and GITHUB
GitHub is the standard way most programmers work on projects together and do what they call “version control.” This just means that the website is set up to allow you and your coworkers/buddies to store your project’s code on their server and they have special software that tracks the changes you each make to every line of code in every file and it creates a history of changes, allows multiple people to edit the same files, tracks who did what, and overall allows you to organize your project and keep tabs on everything. GitHub has its own ways of doing things and the full explanation of it would be a tutorial in and of itself, however, I will link you in the resources at the bottom of this article. But for now, get on there and get familiar with it because in the programming world, everyone uses it. It’s even on job descriptions.
I want to make it clear that you don’t have to be a web developer to be successful; although the current trend is seeing a ton of web apps pop up (mainly due to their ability to be cross-platform), there is definitely still a place for desktop apps out there… I mean, let’s face it, you’re likely viewing this page on a desktop app and there are things that desktop apps can do that web apps just can’t do or can’t do as efficiently such as heavy-duty 3D gaming and special scientific and enterprise applications. This is not to say web apps aren’t good, but I know that with a lot of these code academies out there, as a newbie, it can begin to feel like if you aren’t down to build websites or aren’t into HTML, you can’t be a programmer and that’s simply not true. Just know that the current job market puts web developers in the highest demand. Earlier I linked to the Stack Overflow survey which clearly shows this.
I did a fair bit of linking in this article because rather than try to explain every single one of these technologies in full detail, I would rather send you to the source to research them on your own. If you are indeed interested in getting into this field like I am, you will inevitably be doing a lot of reading, trial an error, and Stack-Overflowing, trust me. The purpose of this post was to give you an outline of some of the core technologies and terms that a new software developer in the current market needs to be familiar with. It was also to provide a real-world story of my experience having just started learning coding this past May (albeit many, many hours per day) in hopes that you may find familiar aspects within your own personal story. By the way, if you haven’t done so, start your own blog and shoot me a link on Twitter, I’d love to check it out! I love reading these things! Take care.
PS: Will update this article to improve links, make edits, and add more resources as time goes on. Don’t worry, I won’t remove any of the goods.
People who’ve helped me on my journey and their pages:
Venkat from Pragim Technologies — Great EVERYTHING… This guy is a beast. He has courses on nearly everything discussed in this article on YouTube and/or his website, Pragim Technologies.
Mosh Hamedani — Excellent, high quality, concise courses mainly with the .NET Framework technologies like C#, Entity Framework, ASP.NET MVC, Visual Studio, etc…
Udemy.com — Extremely educational, very beneficial courses for a great price that will turn you into a pro in no time. Simply go to their website and type in the search bar whatever you want to learn and guaranteed, there are great courses on it. The best part is you get to read the reviews first and also watch preview videos to make sure that the instructor’s style suits you before you buy. Even if you don’t like it, you can get a full refund within 30 days. The courses even come with handouts and in some cases, quizzes. All of the above instructors have videos on this website in addition to their own websites and YouTubes.
Bill Sourour’s Practical Guide to Becoming a Web Developer — GREAT Read.
Please Don’t Quit by Ayoub Nejjari — Motivation
GitHub Tutorial by Jason Taylor using Command-Line interface — Intro to get you started using GitHub. Also, sign up for an account and use GH’s own tutorial as well as YouTube for more info.
Another GitHub Tutorial by Kathryn Hodge using graphical user interface instead of command-line.
That’s all! Nobody on this list has paid me, these are simply pages that I found extremely helpful in my journey.
Originally published at www.thelifeofacoder.com on July 18, 2016.