I was fortunate earlier this year to attend the Association for Computer Machinery’s SIGCSE (Special Interest Group on Computer Science Education) conference, where there was a good deal of conversation about what a modern computer science curriculum should include.
Technology changes quickly and it can be difficult for academic programs to keep pace. Still, if computer science students are to contribute meaningfully to the field in either industry or research jobs, it’s critical that they learn modern computing skills. Here are five subjects I think every higher education institution should teach their undergraduate computer science majors:
If you're looking for computer science assignment help, then you can get help from our experts.
1. Parallel Programming
The single, standalone server with one CPU has gone the way of the dodo bird, displaced by the cloud, server farms, and multithreaded parallel processors. Yet colleges and universities are still mainly teaching their undergraduates sequential programming—programs that execute instructions one after the other—as they have for decades.
Modern computing environments and massive data sets demand not just that we process multiple instructions simultaneously across multiple servers (distributed computing), but also that programs be written to process multiple instructions simultaneously on multicore chips within multiple servers and devices.
Too often, parallel programming is relegated to a single chapter in a textbook, easily skipped when time in the semester runs short. To prepare students for high-performance computing, big data, machine learning, blockchain and more, we must teach them to both think and program in parallel.
2. Green Programming
With the widespread use of battery-powered computers the efficiency of energy is more crucial than ever before. The more tasks we request our devices to do what we ask them to do, the more energy they will require to complete the task and the faster they drain their batteries. The same holds applicable to massive server clusters, where fires due to energy consumption are common since we expect the speed and speed of processing increasing amounts of information.
How you architect a software program directly affects how much energy is needed to execute the program, yet few undergraduate programs teach students about this relationship. In a fast-warming world, one in which we dream big dreams about all the ways artificial intelligence and high-performance computing will make our lives better, it is imperative that we write energy-optimized software. Students will not be able to do that if we don’t teach them how.
3. Collaborative Development
Academia continues to try and assess the knowledge of students. In most programming classes students begin from blank screens and write clean code on their own or, in a lesser amount working with a classmate.
But this isn’t how software is engineered in the real world. Professional software engineers almost always start with someone else’s code and work collaboratively in large groups to modify, improve and correct that code, which is then integrated with code written by other engineers in other groups.
It is common for software development teams to have members from different nations, and in various time zones. Being successful requires team members to be able to communicate effectively in different languages as well as across different cultures. Also, another person must be able to read your code and comprehend the code's purpose, therefore adhering to formatting guidelines and making sure that you provide clear and concise comments is essential.
However, in our desire to ensure that each student understands every programming concept and rule of syntax, we overlook opportunities to teach collaborative software development and help students develop critical professional skills.
4. Hardware Architecture
For the majority of high school students IBM, Intel, AMD, the inventors and creators of the multicore processor -- are old news...old companies started by old men. Mobile apps provide the most action happens.
But mobile apps are driven by data, usually by a lot of data, and they won’t be of much use without the processors, databases and networks that power them.
Computing works and advances based on the entire system, from the power source to the user interface, and students will be more successful if they know how to open the box and “kick the tires.” They can then optimize for energy efficiency and write parallel code that makes use of new hardware architectures. They can manage caching, memory architecture and resource allocation issues. They can explain and explore quantum computing.
Computer science doesn’t stop at software or coding. Students need foundations in hardware architecture, too, including electrical engineering and physics. We need computer scientists who can test and push the boundaries of hardware just as much as they push what can be achieved with software.
5. Computer History and Ethics
Something I heard at the Turing 50th Anniversary celebration last summer has stuck with me: Computing is not neutral. It can be used for good or evil. It can be used to help people and it can be used to manipulate and harm them.
For several decades now, we have been making computing advances for the sake of computing, because what we can make computers do is cool, because the challenge of the next thing is too alluring to pass up, because there is money to be made if we can do “X.”
Simply because we can use computers to do something However, that does not mean that we must. Computer power can be so powerful that we require rules to control and regulate it to ensure the safety of our users and their interests.
It’s important for students of computing to understand its history and to take courses grounded in ethics so they can make responsible decisions and guide others.
They should know computing’s historical villains and heroes, its inventors and detractors, and how it has been used to benefit and hurt people. The old saw applies here: If we do not learn our history, we are doomed to repeat it.