Image for post
Image for post
Photo credits: unsplash.com

Computer Science for modern software engineers

Shalitha Suranga
Aug 4 · 6 min read

Computer science refers to a study which will go deeper into the science behind computers. Basically, how do computers work, how do hardware and software connections are formed likewise. On the other hand, software engineering is about the process or the cycle of developing software systems. The software development process uses computers and software systems are usually deployed into various types of computers (Eg:- server computers, personal computers, handheld devices etc). Therefore, computer science and software engineering is having a great relationship together

Computer science is a vast topic but we are able to identify top computer engineering concepts that every software engineer should now.

Data structures and algorithms

Image for post
Image for post
Figure 1.1 — Image credits: https://dev.to/mrsaeeddev

Applications of computer science are mostly about solving real world problems using the theorems from computer science and mathematics. Consider following examples,

As we can see almost all applications of computer science require knowledge of data structures and algorithms. Indeed, we have to use those in day to day programming too to make solutions for specific business logic in our software systems. For instance, using Set data structure to store unique page numbers that have been read by the application user.

Computer architecture/engineering

Image for post
Image for post
Figure 2.1 — Image credits: https://enrollment.rochester.edu

Software engineers are making software systems with the help of computer devices and also those systems will be deployed into again, to computer devices. Hence, understanding how a generic computer works is highly required. Someone could argue that the modern high level programming abstraction doesn’t require any knowledge about the computer engineering aspect.

Whereas writing well optimized code, working with a programming language such as C or C++ and working with embedded systems may require this knowledge. It is so important to have a good understanding about following topics as a software engineer.

Computer security

Image for post
Image for post
FIgure 3.1 — Image credits: https://hackernoon.com

Software systems usually process some data which are entered by users or captured from another sources. Computer security is about protecting data or the system from external parties who should not have the access. In the modern world most of the software systems are hosted in remote computers and provisioned over the internet allowing its users to access it globally. Therefore, nowadays application security coverage is a mandatory requirement(Legally there are critical certifications such as GDPR).

Having basic knowledge about computer security is highly required for every software engineer because there is a chance to identify possible vulnerabilities of the system in the first place before the actual implementation process.

Databases

Image for post
Image for post
Figure 4.1 — Image credits: https://jappeclass.weebly.com

We already know the basic behavior of computing is like the diagram shown above (Figure 4.1). It’s same for generic software systems too. Databases help us to store our data in a manageable structure also offering the ability to apply logical inputs to retrieve persisted data(also known as querying).

Since the data persistence is used in almost all software, experience about databases and knowledge about database concepts (indexing, joins, querying, performance factors etc.) are needed as software engineers.

Computer networks

Image for post
Image for post
Figure 5.1 — Image credits: https://www.nicepng.com

There are situations where we need to interconnect computers in order to share resources or computation power. Nowadays computer network theory plays a big role in the world since almost all things are available as cloud services.

Following things could be very useful for software engineers.

Computer graphics

Image for post
Image for post
Figure 6.1 — Image credits: https://www.awn.com

Computer graphics related industries are growing rapidly because computer based visualization is a great way for entertainment and also for detailed explanation of things. Some popular technologies/industries that are influenced by computer graphics are,

Having fundamental computer graphics knowledge is a good thing for developers and it is extremely required for developers who work with industries mentioned above. Human Computer Interaction principles also could be related with computer graphics and those principles are needed for developers who work closer to the front-end of software systems.

Design patterns and architecture

Image for post
Image for post
Figure 7.1 — Image credits: https://medium.com/better-programming

There are infinite ways to solve a specific business problem using computer science. Whereas there are few manageable and well organized approaches of doing it. Therefore software engineers should use proper design patterns and architectural patterns. Having experience with following points is great for any kind of software engineer.

Artificial intelligence

Image for post
Image for post
Figure 8.1 — Image credits: https://www.gettingsmart.com

World is going towards automation of things with less human interaction to get something done using software systems. One of the great example could be searching something on Google, we usually enter only the name of things when we need, for instance,

Furthermore, When we are typing a new email on Gmail it will try to autocomplete the email by matching phrases according to our normal writing style. All of these things are applications of artificial intelligence concepts. Knowing about basic artificial intelligence concepts is nice for software engineers. Especially if you are going to work with data science related software projects, having experience with these stuff could be compulsory. Here are some AI concepts to get familiar with,

Conclusion

Indeed, all the points mentioned here are focused on the theoretical side of computer science. But, each and every framework, library or tech stack is built based on these principles. Therefore, learning every new technology is practically not a wise choice. Instead, improving knowledge and experience about computer science fundamentals could be priceless since one day you may write your own framework or a library.

softwareengineer.lk

All you need to know about becoming a software engineer in Sri Lanka

Shalitha Suranga

Written by

Software Engineer at 99x | Apache PMC member | Open Source Contributor (Author of Neutralinojs) | Technical Writer

softwareengineer.lk

softwareengineer.lk will teach you the correct and easy path to become a software engineer in Sri Lanka to get your dream job at a well reputed Sri Lankan software engineering company

Shalitha Suranga

Written by

Software Engineer at 99x | Apache PMC member | Open Source Contributor (Author of Neutralinojs) | Technical Writer

softwareengineer.lk

softwareengineer.lk will teach you the correct and easy path to become a software engineer in Sri Lanka to get your dream job at a well reputed Sri Lankan software engineering company

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store