application view, breadth and depth of learning computing science

The breadth, depth and the application view of the cs

this is the scripts of the online video

No matter for the people from the computer science major, or people with non-cs backgound but interested or use knowledge related with the cs, you may ask yourself “how to learn cs efficiently?” sometimes.

Here are some useful ideas for you.

the basic framework to organize the knowledge in cs

Courses of computer science major in colleage are usually divied into two main tracks, namely the algorithm and system. The courses such as math, numerical analysis, data structures, machine learning/Deep learning are belong to the algorithm track. For the system track, it includes courses such as operating system, computer architecture and networking, and so on. Courses in this track are mainly focuse on how to wisely manage all kinds of resources of computer such as CPU cores, networking and storage devices in an efficient way. I believe Theses two tracks are common for most people.

But is it enough? Is it enough even if you are a specialist in computer algorithm or system?

If you are a CS students and got A for all of these coureses, you may get an decent offer from the high tech company but these knowledge could not gurantee you to make a big success in your career. If you are a non-cs student you may find there are all kinds of fancy technoligies, 5G, blockchain, Cloud computing, Big Data but when you try to learn these courses, these knowledge may not necessary to help you in a large degree, how to find a most suitable one? and so, what is the gap here?

Another dimention we may easily neglect is the view of the Application. That is a crutial part and is always ignored by people. In particular, the thought in the application view aims to use the knowledge and the tools or softwares of the computer science to facilitate applications from different kinds of industries or use case senorios.

The key point here is to realize that the software or cs is just a kind of tool in some degrees, the more important thing is the application. The tool should serve the application. The development of the softwares should be driven by the application. That is why that only programming is not enough to create profits. only programming for the right thing can creat the profits. Even if your are doning research works about the cs, if you could not explain how your porject may serve the application and make it faster, more accurate, or save more time, your project might goes to a wrong direaction.

On the other hand, if you do not have a deep understanding about your application and use case senorios, you may not find which part can be accelerated or automated by the tecnnolgies from cs. The new tech is not free, only if putting it in a right place can create values.

The value will be created if we use the knoledge from the cs to solve a proper problem in specific area. Unfortunately, the shool does not provide these kinds of courses, and we need to explore step by step after we graduate from the colleage.

This is obvious in the design of the domain specific software, sometimes you may find even for people from the cs background, they may not quite understand the works from other people even though they both have a good understanding about the algorithm and system. This is because the gap of the application levels.

breadth requirment

In a real project, the first requirment is the breadth requirment. Since the workable project require the knowledge from application, algorithm and the system view. The ideal case is that you know necessary knoledge in these domains. But it is hard for one people to know everything.

Even if you are a specilist in cs, you still need to work with domain experts to figure out what they really want in application view. For exmaple, if you develop clinic softwares, you may need to understand how the doctor want the software to work. If you develop softwares for the financial service, you may need to figure out the basic process about the financial transaction.

In the colleage, only some high level courses may fall into the category of the application view, such as how to use AI in CV or NLP, how to use parallel computing in scientific simulation, how to use AI and computing graphics in robotics. These kind of courses break the boundies of the algorithm and system, and consider the problem from the perpective of the application, you may find both the knowlege of the algorithm and system are used and these knowledge are organized from the application’s perspective and driven by the application. That is how breadth requirent works.

depth requirment

non-cs major

You may even not need to understand the detail about the algorithm and the system.

The most important thing is to konw how to use the particular software tools related with your domain. The crutial part is the deep understanding for the domain knoledge and how it can be improved based on the new technologies. It is also crutial to get familiar with particular softwares in your domain, you just need to know how it works instead of why it works

And you may need to try to learn how to cooperate with the people from the CS background and have the general picture about he limitation of the cs techniques.

cs background

For people with the CS background, Depth requirement means that you should choose a specific direaction as your main direaction, namely the system or algorithm. By this way, you could have enough understanding for this direaction.

For example, if you focuse on machine leaning algorithm for the most of your time, maybe use 80% to learn the specific algrithm and maybe use 20% of your time to learn how to deploy them on diffenrt system, how to store the data and how the infrastructure handle the underlying communications in distributed system. That may provides you different views of understanding the algorithm.

If you focuse on system part such as compiler or storage system, maybe it is also good for your to take 20% of your time to learn the latest algorithm in machineling or AI and to see what algorithm can be used to better solve the system problems. you may not need to understand every details about theses algorithm but it is useful to konw the general ideas and what they can do.

real worls use case

you could see that the popular project in real world always cover basicly all these categories, and it is intersting to consider what kind of knowledge are used in different views.

For example, the tensorflow framework, if we consider it from the application’s view, cv and nlp are typical using senorios, you can use the framework to train classifiers and detect object in figure or vedios. The system view, it can run on distributed system, or smart phone, we could consider how the service interact with each other, what RPC are used here. For the mathmetical view, it coveres all kinds of fancy machine learning technologies.

maybe that is a one reason it is so successful, you could find the state of the art techniques from different view in this project.


What is the conclusion in this vedio?
CS or programming is just like a second language, if you are only a specilist in it, you may become a good teacher for programming, but how to let it to create values is more important, you may need to consider how to convey your ideas and tell your story by this tool, that is how it works in real world. It is importnat to find your location or coorprate with other people and to do it in a wise way


why coding is not enough

refer to this vedio