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.