Lesson 1: A brief introduction to software development
We’re going to need a roadmap
If you’re here it’s because you're thinking about getting into development, but if you’re anything like me then you probably don’t have the first clue where to start. People throw around words like languages, Ruby, frameworks, programming, web development, Wordpress and more and without a roadmap it’s hard to navigate the world of software development. So to start out I’m going to give you the lay of the land, explain a few key terms, and create a roadmap so that we know where we are and where we are going.
Types of software development
There are many different types of software development and they are all used to accomplish different things. You can use software development for programming a light switch, programming the onboard computer on a car, creating a video game, creating a website, a mobile application, and more. Anytime there is a computer no matter how small its running source code which was written by a software developer.
Source Code - Code written by a programmer in a high-level language and readable by people but not computers. Source code must be converted to object code or machine language before a computer can read or execute the program.
Let’s start with a few every day items and talk about what kind of Software Development is used for different tasks:
Mobile Apps
Mobile phone or mobile application development is the process of writing apps for smartphones. These kinds of applications live on your cellphone and you usually get access to them from one of the app stores. On Android phones that’s the Google app store and on the iPhone it’s the Apple app store. These applications are usually native apps which means they were built in the native language that the phone uses and are purpose built specifically for that device.
Common apps that you might have on your phone are things like chrome, safari, and if you use socials things like Facebook and Twitter. To access one of these apps you just have to download it, sign in, and you’re in the app. Native apps have the benefit of doing things like accessing your devices file storage, camera, and microphone, and gps. That means developers can build tools and applications which take advantage of these features directly.
As I said mobile apps are build for a device specifically in their language. For Apple apps most are written in a Swift or Objective-C(mostly depreciated) and most Android apps are written in Java or Kotlin, however, other languages can be used for Android apps and are becoming increasingly popular.
So if you're specifically interested in writing Mobile Apps and becoming a mobile app developer these would be good languages to start with.
Of course when thinking of mobile development, we aren’t just limited to developing platform specific applications, because mobile first websites and web-applications are also a popular choice.
Desktops and Laptops
Similarly to mobile development on desktop environments you have a choice of native application development and web development. Native applications are those which run directly on the device and they have the ability to use your computers resources directly to run the application. Examples of this might be using your local ram to run the application, accessing your camera or microphone, for applications like zoom, and they may even have access directly to your cpu to allocate cores for specific tasks.
Good examples of native applications are things like web browsers(chrome, edge), calculators, or generally speaking this would be any application that you go through the ‘install’ process to get up and running. If you're using windows or mac then your system comes with many preinstalled applications and most if not all of these applications are ‘native’ applications.
On windows many games are created as native applications using languages such as C#, C++, and Java. On mac or iOS (iPhone OS) you’ll want to stick to something like Swift.
Automobiles
Almost all cars now days come shipped with multiple internal computers and sensors which all work together to operate every function of the car. They can be used for things like lights, locks, car alarms, navigation, and more.
While many languages can be used for this task, the most popular language used for car electronic control modules is C. C is a general purpose low level language, which basically means it’s a very efficient language. C has been around since the 1970’s and still remains a popular language for many tasks to this day.
Smart Devices
Smart devices are devices that we have around our homes which are connected to the internet. Things like smart fridges, smart doorbell, and devices like amazon alexa are all good examples of Smart Devices. Collectively these smart devices make up something called the Internet of Things or (IOT).
The Internet of things (IoT) describes physical objects (or groups of such objects) with sensors, processing ability, software, and other technologies that connect and exchange data with other devices and systems over the Internet or other communications networks.Internet of things has been considered a misnomer because devices do not need to be connected to the public internet, they only need to be connected to a network and be individually addressable - Wikipedia Internet of Things
Languages used to program these devices range from Python (a great language for beginners) to Nodejs, Java, and C.
With these languages you can program these home devices to do many things from connecting to the internet, to ringing a doorbell, to having a conversation with you and answering questions(like Alexa), and much more. The sky is the limit with IOT development.
Web Development
Last but not least, we have to discuss web development, web development is the process of developing any application which lives online and is served to end users through a web browser like Crome, Safari, or Microsoft Edge. Think websites with web addresses like google.com, facebook.com, and apple.com. If you can get on a web browser and access a website then that was created using web development.
Within web development there are 2 main categories. Web application development and website development.
A web site usually consists of a static web page delivered over the web to a web browser. These can be as simple as a single product landing page or things as complex as 200 page websites for a huge law firm or an ice cream company. Think landing pages, small business listings, and marketing websites.
A web application on the other hand is a bit more complex. Usually these systems are build using complex frameworks and they generally include features like user authentication(logging in), backend storage, visualization dashboards, and other advanced functionality. Examples include facebook.com, gmail.com, twitter.com, and web portals like healthcare portals, apartment complex/rental portals, and other applications like slack and discord.
Many of the programming languages we’ve discussed can be used to program sites on the web and even some which we haven’t mentioned. However, there are a few primary languages which are always in the conversation when it comes to the web stack. Namely we have html, css, and javascript. These are the primary frontend languages and they make up the fundamental building blocks of web both for websites and for web applications.
front end is the part of the website a user or customer interacts with. - codeacademy.com
However, websites aren’t just made up of a frontend interface. There’s also a whole lot that goes on behind the senes. Think about questions like this: Where is data stored? What is the formula that calculator is using? How does my application know what to do when I tell it to update a form? How does the application know that I’m the one using it?
Well, all of these things are handled by the Backend. The backend is used to process data, store information, determine what and who should see what data, determine the current user, and much more.
The back end, or server-side, is everything that happens "under the hood," and its components aren't immediately obvious. - codeacademy.com
You can use many popular backend languages when working with the web a few examples are PHP, Javascript, Ruby, C#, and Python. Of course there are plenty more languages that can be used in web development but these are some of the most popular.
But how do I choose?
By now you should be getting a more and more clear picture and being able to drive the lay of the land so to speak. Software development can mean many things and be used in many different ways. You’ll always pick a language or framework depending on the task that you are trying to accomplish. This may seem complicated at first, but as we go things will become more and more clear.
So first we need to determine what it is we want to do with software development. Do we want to make games? Make websites? Program the computers that run cars? If there’s something specific that you want to do then picking up a language specific to the task is a great start. However, there is a catch.
The Caveat
The Caveat is that not all software development fields are easy to break into. As a matter of fact many are complicated, highly competitive, and don’t have a clear pathway to an entry level career. So what can be done about that?
The Solution
The bright side, is that many programming concepts and skills that you will learn are language agnostic which means that the fundamentals of programming will travel with you no matter where you go and regardless of your starting point, with a solid foundation you’ll eventually be able to branch off in any direction.
Additionally, there are some career paths which have a clear progression and offer clear entry level positions as long as you can prove that you know what you’re doing and capable of accomplishing junior level tasks. That means you don’t have to go to college for 4 years, you don’t really need a coding bootcamp, all you need is a sold foundation in the right things and you’ll be well on your way.
All that being said, the career path that we will be diving into further into in this course is the web dev path. It’s easy to start, there’s plenty of material online, it can be learned at home or in a classroom, and the fundamentals will travel with you where ever you go.
In the next lesson we’ll dive deeper into web development, layout the progression of skills on the web dev path, and get you going on your first development tasks