Why do you need CS Fundamentals in Software Development
Tags: programming, beginners, computerscience, career
Published: 2022-08-12 05:29:00

## Intro
Software engineering is a branch of Computer Science that is responsible for creating, designing, and maintaining software apps, from web apps to local device stored software. It requires enough Computer Science skills including the basics to make the job done. 

The computer science basics are the bridge for the students in learning about the Tech, for introducing them to the concepts, and also teaching them the basics skills they might use in the long run. Take note that these Computer Science basics are also applicable in other branches of Computer Science and not just to Software Engineering.

In this blog, you will be able to learn about:
- The importance of CS fundamentals in Software Engineering
- The CS fundamentals useful in Software Engineering
- Where you can learn them

## Why CS Fundamentals matters in Software Engineering

I discussed some reasons above why you need CS fundamentals. Now, we're gonna take a closer look at them.

### Why CS fundamentals matter in software development
Having enough knowledge about basic skills and principles helps a lot when making software apps. One of the biggest concerns in developing an app is the speed and how much space it consumes. Luck you, most of these basic lessons focus on memory allocation and space management which helps you to identify what part of the program consumes most of the space and time and also teaches how to solve them and/or how to avoid them. Users will keep on complaining if your app is laggy. It may cause you to lose your app's users and prevent newer users to be in your app and start finding a better substitute app from it.

### Advantages of knowing CS fundamentals
As I mentioned earlier, it is a foundation of knowledge in learning. With these basics, you can learn other Computer Science fields. It's like understanding the logic of programming and now you can learn new programming languages with them without hassle and hardships, unlike the first time you did it. Another thing, when you are searching for a job having no experience, most of the technical questions they might ask are from the basics. Since you are applying for an entry-level, they expect you have enough knowledge of what you are doing to make the job done. It's common sense like "how will you know about what you're doing if you don't even know the basics of your field?".

## Computer Science 101

### The CS Fundamentals

I list down some of the CS basics you need in Software Engineering.

#### Programming Languages
Learning how to write a programming language is the most important foundation you need to get started. Programming languages are the primary tools of developers. It covers understanding syntax, using various special keywords, clean coding, and more. Learning multiple programming languages is a great advantage because it gives you the flexibility to work on different projects written in different languages. Another advantage of learning multiple languages is that you can choose the language that best suits your app's needs and satisfies the requirements.

#### Data Structures & Algorithms
The Data structures & Algorithms are responsible for making the right sequence of solutions and data organizing. It also provides an understanding on what is the best solution set for a particular case. One of its concerns is saving memory space occupied and time consumed by using the Complexity Analysis. The Complexity Analysis has 3 tests; Big O notation `(O=n)` tests the worst-case of the algorithm, Big Theta notation `(Θ=n)` tests the average case of the algorithm, and the Big Omega notation `(Ω=n)` tests the best-case of the algorithm.

#### Debugging & Pen Testing
Project software needs to be tested and debugged. Testing helps the developers to catch the errors the user might encounter and debugging solves these caught problems so that next time another user ends up in the same scenario where the error was caught, there's no error raising up anymore. Testing and Debugging were done before releasing the app or while the team was maintaining an app. CS course may teach you simple testing scripts about how to use them. For example, Python's `unittest`. It is easy to learn and to use for testing a code or any software project.

#### Software Designing
Software Designing is the planning and designing part of the app, translating every word that describes all the parts of the software into a big-picture plan, which can be scripted into a working code. This Computer Science fundamental lesson is useful when starting an app from totally scratch, where you only have a text full of requirements.

#### Programming Paradigms
Programming Paradigm is a way of programming based on the language used. Every language has its way of coding. Some use more classes while others significantly use functions. A programming paradigm that mostly uses classes with applied principles and rules for classes is called **_Object Oriented Programming_** or OOP. Some of the programming languages where OOP was applicable are, Java, Python, and Ruby. On the other hand, **_Functional Programming_** mostly use functions and has rules and principles about functions. Some languages that support Functional style are Elixir, C++, and Erlang.

#### Programming Frameworks
The Programming Frameworks are special packages that provide ready-to-use tools for the project you are planning to build. Some examples of this are React & Node JS made from JavaScript, Django & Flask made from Python, and Laravel from PHP.

#### Operating Systems
Operating Systems manage the computer's memory allocation and processes. Proper knowledge about Operating Systems is important in picking the right one for machines and servers depending on their specs. If you can't find the perfect one for your machine, with the right knowledge, you can make your own OS based on Linux or any open source distro you want.

## Learning CS Fundamentals

### In a CS degree
Getting a Computer Science degree in college is the most preferable learning way of the most. You can get a 4-year course in a university where they will provide all the learning materials and step-by-step roadmap you need, and aside from Software Engineering,  you'll be able to learn other branches of Computer Science like Data Science, Artificial Intelligence, etc. Well, this is optional. Remember we are in the information age, and there are plenty of other ways to study it. I'm gonna mention them below.

### Online Courses
Getting an online boot camp or online courses is one of the best options you have. You can access them and learn remotely anytime anywhere. Online Bootcamps and Courses give you certificate as a proof you know to code which you can use when applying for a developer job position. Many of the jr. developers are fresh out from boot camps. 

### Books
Just like the Online Courses, books about learning Computer Science can give you enough knowledge to study. Books are effective in their own way where everything describes detailed providing many different examples for each scenario. Most universities use books as part of their learning tool these days. Except for physical books, you can also download E-books which are easy to access and carry on any place as long as you have your gadgets with you.

## Conclusion
Remember that within the 7 basic lessons I mention above, you can have a head start in Software Engineering. You can also use them in other fields of Computer Science that you may find yourself interested in. If you want to get started learning more about Computer Science, you can pick between a college degree, an online course, or books. Software engineering is actually fun. It allows you to bring your creative software ideas into reality where you can not just visualize them, but also bring them to life and see their real-life purpose.