Bits of change
Computer science is a changing landscape. The truths and limitations of today may not necessarily hold for the next. The rate at which new innovations in computer science are developed is dizzying, and this is an exciting yet somewhat humbling fact.
The rapid advancements within computer science allow not only for computers to have greater capabilities, but also for people outside of the field to find a place in it. Incidentally, however, this draws into question the need for skills that are based on the field’s past limitations.
Just take a look at developments in coding languages, for example. One of the earliest programming languages developed was called ‘assembly language,’ a language which is essentially a text-based transcription of the machine-level, binary code that computer processors can understand. Assembly language is specific to the type of computer it is being run on, and oftentimes a strong understanding of binary manipulation and transformation is needed in order to program well in assembly language, let alone understand it.
However, assembly language was slowly phased out as the prime programming language of the land by new languages, notably C++ and Java. These have the advantage of abstraction, or a layer of separation, allowing for more readable code that, under the hood, translates into assembly code for the specific computer it’s being run on.
As a result, a majority of today’s computer and mobile application development can be done without knowing assembly language. In fact, newer computer languages, such as EV3, are being developed so that users needn’t even type, but only need to drag and drop shapes and symbols in order to create programs that can do complex things like control robots.
And this is just one of the many developments in computer science that change the nature of the field itself. The advancements of the field allow for this kind of abstraction, in which the complexities of the field are hidden away, allowing for it to be much simpler to understand and much more accessible. But, as dazzling and exciting as these innovations may be, they raise an interesting question: how can computer science educators and students keep up with the changing times?
Fields like biology and chemistry have been faced with this question before due to breakthrough scientific discoveries that shake conventional wisdom, and the usual response is to change textbooks and teaching to reflect those discoveries — an innately slow process. However, with a field like computer science, where change is constant, the challenge is more imminent, as outdated teaching leads to outdated solutions. For example, in this day and age, if a computer scientist were to design a software application, it wouldn’t be very practical for him or her to whip out a dusty, old copy of Algorithms in Snobol 4, SNOBOL being an archaic language and one of the many predecessors of C++.
The answer to this challenge is somewhat counterintuitive: Emphasize the fundamentals. The approach that many successful university computer science departments have taken to address this challenge is to bring the computer science fundamentals such as mathematics, algorithms and programming to the forefront. The UCLA computer science curriculum, for example, grounds students in the computer science principles by teaching the C++ coding language, a fundamental programming language, while complementing it with a heavy base in mathematics and science, thereby equipping computer science students with the skills needed to adapt to changing times.
Now, while this solution is effective in creating versatile problem-solvers, it consequently raises another question: If computer science education builds heavily on the fundamentals, how can students outside of the computer science major who may not have a strong understanding in math and science take part in the field?
Interestingly enough, it is the constant advancement in the field itself that makes it growingly accessible to those outside of it.
The abstract and the abstraction
Oftentimes, when we look at fields of study outside of our own, the deterrents for studying those fields can often be traced to not understanding the field’s technicalities.
For example, one could find it particularly difficult to suddenly jump into the field of chemistry if he or she does not, among other things, understand electron orbitals, catalysis or chemical equilibrium, to name some foundational principles in the field. Of course, it’s not entirely impossible for someone not previously exposed to the field to find a place in it, but this usually can only occur through understanding the fundamental ideas of that field, which usually requires pursuing that field in earnest, which not everyone has the time or energy to do.
Computer science, however, is less burdened by this challenge, even as it is always changing. Think back to the example about coding languages: While not everybody could code in assembly language at first, through the advancement of programming, coding languages such as EV3 have come about, allowing for kids who are still in fourth grade to get their hands dirty with computer science. Fields like chemistry, on the other hand, requires such things as internalizing countless organic structures and conformations before being able to gain such practical experience.
From this, we can see that innovations in computer science can abstract it from its underlying difficulties. And it is this abstraction that makes the field more and more accessible to those outside of it. For example, innovations in computer hard drive systems allow for programmers to worry less about the memory overhead their applications may have, and advancements in router security allow for users not in the computer science field to set up firewalls and fairly complex network security measures with only a few mouse clicks.
Hence, it’s no wonder why people already deep in fields outside of computer science can pivot over and pick up some skills in the field, be them in programming or managing networks, and apply those ideas to their respective disciplines. That’s exactly why there are disciplines such as computational chemistry, bioinformatics and game design, which all employ elements of computer science that are made accessible through its constant advancement.
Certainly, one could argue that in order to really be well-versed in computer science, one ought to dive deeper past the abstraction and understand the underlying difficulties like assembly code and the mathematical complexities. But that’s why students pay for a college education in computer science — to understand the nuances of the field and be uniquely skilled to handle highly technical problems.
The constant developments within the field, however, allow for those who may not understand or appreciate its intricacies to test the waters and tap into the field’s potential, and that’s an encouraging idea to consider.