Software Development Fundamentals

I was putting together the outline for another book that I am working on called Software Development Fundamentals. It is intended to be an introduction to the world of software development. More than focusing on a specific language or methodology, it is intended to detail the different things someone would need to learn to become a skilled software developer. Let’s look at the 9 items I have come up with.

1. Programming language. Well, this is kind of obvious but you have to learn a programming language to be a programmer. This chapter will discuss the different languages and their pros and cons. Should you learn an object oriented based language, procedural language, or a scripting language? Should you learn a compiled or interpretive language? Should it be strongly typed or loosely typed? These all depend on the types of development and applications that you will be building. Are you going to be a game developer, enterprise application developer, or mobile app creator?

Every language has the same basics. It has data types(a type system), branching, looping, boolean expressions, arithmatic expressions, and reusable blocks of code you build(methods, functions, classes, etc).

2. IDE. Integrated Development Environment. This is the tool that you will program with. Do you need a full IDE with debugger and other tools, or will a text editor suffice. But either way you have to become a comfortable and proficient with an IDE to be a real programmer. The IDE is your best friend. This is what makes or breaks your productivity and frustration level.

3. Database. It is very hard these days to be a developer and not store or retrieve data. To be a real developer you will need to learn database basics. You don’t have to be a dba but you will need to know how to build a simple database and get and put data into it. The big question here is to learn a SQL or no SQL database. There are many good options of each. SQL database like SQL Server, Oracle, and MySQL are structured with tables, rows, and columns. No SQL databases like MongoDB and DocumentDb typically store data items as documents in JSON format. SQL has historically been the most used but No SQL databases are becoming very popular.

4. Framework. A framework is typically made up of 2 things. Reusable code(objects, libraries, packages, etc.) so you don’t have to build everything from scratch. And an environment that you code will run in. If you are a C# programmer, for instance, the .NET framework is what you will use. If you are a Java programmer you will use frameworks like Swing and the JVM(java virtual machine) to run your code. If you are a web developer you might use the Angular framework on the client and Node and NPM(Node package manager) on the server side.

5. Software design techniques. You will need to learn things like object oriented design, wireframing, use cases, flowcharting, and test driven design. These are all the techniques that you will have in your toolbox to allow you to take a set of requirements and turn them into a working application that solves a problem. This is how you take a concept and break it down into pieces of code that you can actually write.

6. Design patterns. These are common ways to solve problems with software. A common way to tackle a problem. For instances, many graphical user interface applications use the MVC(model-view-controller) design pattern. Others use the MVVM(model-view-viewmodel) design pattern. Another common design pattern is object oriented. You build a set of software objects that model real world objects. OO can also be described as a software design. Pipelining is a common design pattern for developing multithreaded and parallel applications. Design patterns will be you go to way of solving certain types of problems or building certain kinds of applications.

7. Software Development Lifecycles. SDLC’s are ways you manage the the life of a software project. This typically includes the following steps – gathering requirements, software design, coding, testing, deploying, and maintaining. Here will learn the classic waterfall method and newer methods like Agile and Scrum. But the SDLC is how you manage the whole project and life of a software system that you are building.

What do you think? Did I leave anything out? I believe if you focus on learning picking an item in each of these 7 categories you will be well on your way to being a successful developer. Like for instance, if you learn C#(1), Visual Studio(2), SQL(3), .NET(4), wireframing/flowcharting/oo design(5), MVC(6), and Agile(7) you will be able to call yourself a skilled C#/.NET application developer.

What are you waiting for.

Code editor versus a full IDE

This question comes up a lot. Do I really need a full IDE or can a nice code editor work fine for simple projects. A code editor will work fine for writing code, but the problem is that most of the time spent in development is not just writing code. Notepad++, Sublime, and Atom are excellent code editors, but any serious developer needs to be proficient in an IDE. Once you are proficient with an IDE you will feel very limited using just a code editor.

An integrated development environment provides a full platform for software development. It combines a code editor, compiler, and debugger into one tool. It will also provide features like code navigation(where is a method defined? where all is this method called?), package management, dependency importing, code management integration, and performance analysis.

With some of the better code editors like Atom and Sublime you get excellent features for writing code like color coding, intellisense, code formatting, and syntax checkers. But to build or test or interrogate your system you need to use other tools. Even if you are using an interpretive language like javascript that doesn’t require compiling you still need tools to help you run and test your application. You still can use help managing dependencies(think node packages), interrogating your code, and integrating with code repositories like SVN, Git, or TFS.

Now that Visual studio 2015 is free, it is an excellent choice as an all purpose IDE. It is not just for .NET development anymore. With the inclusion of Xamarin  and other items(like NodeJS tools), it can be used to develop MEAN stack applications HTML/CC/JS websites, Android Java applications, IOS apps, etc. It now rivals Eclipse for the breadth of platforms and languages it supports, and it is a more complete overall package(in my opinion). You can use Visual Studio for almost any development. Once you are familiar with it you will find developing with just a code editor very inefficient.