Everyone should take some computer science. Granted, the classes that everyone should take do not exist at UC Berkeley, but nonetheless, in an ideal school with an up-to-date computer science department, everyone should take some computer science.

I don’t say this because of some prophetic belief that the ubiquity of information technology increasing means the world is changing. That’s long past due — the world has already changed. The productive landscape is already transformed. The heart of every industry has been laced with silicon, every office in America has a computer on its desk — and yet, so few workers can use them to their fullest extent.

Certainly, you don’t need to know programming to operate a computer. The basic button-driven user interfaces are definitely powerful enough for spreadsheets, documents and email. But programming can make using a computer infinitely more efficient. The ability to write scripts in bash or Powershell at the very least allows you to automate repetitive tasks. The ability to knock out a quick python program lets you reduce complicated but systemized calculations to typing a couple of variables and hitting enter. When you need to parse through a massive backlog of files and select only the ones containing the word “cat,” you can use a shell script. When you need to retroactively append a signature and watermark to every document on your hard drive, you can use the scripting tools built into Microsoft Office. When you need to copy-paste long lists of names or numbers or URLs into the correct portions of a comma separated spreadsheet, you can use a python package to do it for you. Any task that can be reduced to a systemic list of basic instructions can be quickly automated by a semi-competent programmer, freeing his time and mental energy from boring robotic tedium and allowing him to focus on human problems.

Moreover, programming becomes even more essential in any occupation that deals with data. The versatility and efficiency that programming offers — the ability to precisely specify a complex series of instructions and quickly parse through a large quantity of data — is essential to any analysis subtler than AP Statistics. And indeed, professional software packages for statistical analysis all include their own programming frameworks and unique languages. Proficiency in ROOT, SPSS, Matlab or R can make physicists, sociologists, engineers and practitioners in any professional field more effective and efficient. But despite how essential of a core skill set programming will be to many of its graduates, UC Berkeley still doesn’t offer any effective training for noncomputer scientists.

The computer science department’s famous introductory class, Computer Science 61A — however excellent the curriculum is for those dedicated to the field — is ill-equipped to the task. The pace and breadth of the class demands a student’s full attention; it is designed to inhabit a space as the “main” class of a semester though noncomputer science majors are likely to give precedence to classes in their primary field of study. Moreover, many topics in 61A are superfluous to most programmers. A statistician doesn’t need to spend a quarter of the semester learning scheme, a language as recursively beautiful as it is wildly impractical. In my first discussion section for 61A, the head teaching assistant told me that “the amazing thing about this class is that after it, everything you learn in computer science will seem familiar.” For someone planning to take upper division computer science classes, that indeed sounds amazing, if a bit unbelievable. But asking that anyone looking to build programming skill undertake this massive curriculum, while competing with those whose career is centrally fixated on the course, is just unfair.

The department does, of course, offer CS10. A wonderful sentiment — an unintimidating computer science course for nonmajors designed to be friendly and welcoming — but it simply isn’t enough. Having taken CS10 doesn’t leave you an effective programmer, doesn’t leave you with the skills to pick up an object-oriented scripting language or a data analysis framework with C syntax. The qualitative approach to instruction in CS10 is fine for those who want to learn about programming but for those looking to expand their skill sets, there needs to be more.

There are other courses at the university focused on introductory programming. None of those are any good. Take, for example, E7, an introductory programming course from the engineering department. It’s a fucking mess. The curriculum meanders about almost randomly, skimming past topics, such as linked lists and recursion, that require multiple weeks to fully grasp; skipping to advanced topics, such as hashing and complex abstract data types, without proper preparation; and taking seemingly random detours to cover basic linear algebra and machine architecture. The goal of the course seems to be superficial coverage of all of the topics in the CS61A-C series, already a fast-paced sequence, leaving even the best students with little understanding beyond programming basic functions in Matlab. And therein lies the problems with most programming courses outside of the computer science department: You learn to program in a specific framework, but don’t gain the depth of understanding to easily move to another. What happens when you stumbled your way through a class in SPSS but the job wants someone who knows R? Only the computer science department has the depth of knowledge to structure a curriculum that makes sense and, except for its own students, it isn’t doing it.

UC Berkeley’s computer science department must offer, like every other science department on campus, utility classes. Calculus is a skillset relevant to physics, economics and many fields of the like, so the mathematics department offers Math 16A-B. Premeds need to know mechanics and electromagnetism, so the physics department offers Physics 8A-B. Reading and writing are abilities essential to every walk of life, so the rhetoric department offers R1A and R1B. But in a professional landscape where programming could be as transformative and as fundamental a skill as reading, writing and arithmetic, the computer science department has failed to reciprocate. It can remain shrouded in its isolationist technical elitism, or it can step up to its responsibility to the university as part of a collaborative, interdisciplinary effort to produce an educated citizenry in all manners prepared for adult life.

Albert Hsiung writes the Monday column on STEM student culture. Contact him at [email protected].