Updates: typos and added better photos. Changed to mainly/only teach front-end because there is now some focus on other types of development. Added more to final thoughts. Renamed the post, was originally named: Thoughts based on my path to CS, and opinions on CS Education
Some Lore
When I was in my first year of university, I began to believe that I wasted my time in high school. I wished that I started learning about computer science sooner. I had invested a lot of time into chemistry in high school and then pivoted to majoring in computer science in university. These two subjects don’t have much in relation at all. It seemed like while everyone else (in computer science) was learning about AI and web development, while I was busy learning chemistry and other IB-related things (English IB HL people know how tough this course was).
By the end of my first year, I was utterly confused. In class, we learned about graph traversals, proofs, and logic, but I kept hearing everyone talk about doing "Full Stack" development. So I decided to learn more about that and had a horrible time learning about it. I wasn’t interested in HTML or JavaScript, and I didn’t want to build websites. Due to my limited exposure to computer science, I was lead to believe that computer science was just building websites! I did some hackathons and tried learning stuff over the summer, but nothing stuck and I began to feel like this wasn’t the path I wanted to take in university.
At the beginning of my second year, I was thinking of switching my major (which was currently in computer science) to a major in chemistry. That’s when I started taking more chemistry and health science courses. And being in those chemistry classes was a fresh of breath air for me; no one talked about JavaScript, internships, or side projects. There was occasional talk about undergrad research, but the environment in health science classes was less stifling for me than computer science classes.
I think a reason for this is because everyone in health science classes had more or less the same amount of knowledge. First and second-year chemistry classes were enjoyable for me because I had taken Chemistry IB HL. Biology, biochemistry, and microbiology classes were enjoyable for me because I had the same basis of biology and chemistry as everyone else. I didn’t feel like I was very behind in the same way that I did in computer science classes. In my organic chemistry class, we were collectively confused, which is a nice feeling to have vs. being the only one confused.
In computer science, many of my classmates (mostly men) had already started programming in high school. They talked among themselves about topics I didn’t understand and were able to easily answer in-class questions. It felt like a club I was shut out of because I wasn’t spending time in high school programming. But when the midterm mark distribution came out, I was never terribly below average; sometimes above, and sometimes just average. So why did I always feel intimidated and out of place?
I’m not sure. But now in my third year, I’m no longer regret how I spent my years in high school because I enjoyed my time in high school. Chemistry will always be something I love. For the longest time, I couldn’t justify taking courses in chemistry or biochemistry in university because I thought I should only spend money on courses that had better a return. Wouldn’t it be better to spend money on a computer science course that could allow me to make more money, than a chemistry course that I was just interested in? I had this mindset for the first two years of my undergrad degree. This resulted in me flip-flopping between courses (never having a good timetable) and choosing courses that "sounded good", rather than if I actually wanted to learn about the topic. Eventually, I realized that I was wasting more time trying to force myself to like some courses; what would happen if I took that organic chemistry course instead of the databases course? Hopefully, nothing much, because I’m in that organic chemistry course right now. Additionally, I’ve found out that I’m interested in programming languages (how they are designed) and operating systems/compilers (how that programming language is turned into assembly and how hardware and software communicate with each other). So I don’t think I’ll be taking that database course.
Why I no longer wish that I did computer science in high school
One large reason I never ventured into computer science in high school was that I didn’t have good resources near me. Out of all the women in my IB class, only 2 (including me) decided to not do a degree in the health sciences. In my daily life, no one I talked to talked about computer science.
One reason why I loved chemistry is that I had a wealth of resources near me to foster that passion. I started learning about orbitals in junior high and hand drew a periodic table that has hung in my room for 8 years. My father (who also shares the same passion for chemistry) actively encouraged my interests and gave me resources so I could self-learn at a young age. Additionally, the Science 10 (and junior high) curriculum had chemistry integrated into it, so I didn’t have to do much self-directed learning once I entered high school. I also had friends I could talk to about chemistry, a teacher who was passionate about teaching chemistry, and an advanced curriculum in chemistry thanks to IB that went above and beyond the Alberta high school chemistry curriculum.
On the other hand, I didn’t have any external factors for pursuing computer science. The computer science program at my high school in Calgary was unbeknownst to me (I didn’t know if they had a computer science program at the time), my parents never really mentioned computer science to me, and no one around me was talking about computer science. I had never learned about computer science or even had it mentioned to me until my last year of high school, which was when computer science became the next hottest thing to major in.
I was scared that a major in chemistry would result in a futile career, which is why I decided to major in computer science: so I could secure a good job. I don’t like that this was the reason for me to set foot into computer science, but I’m glad this is no longer the reason that I’m staying. There are many reasons why I’m staying:
-
computers can help us in many other areas, like drug research and DNA sequencing
-
the way computers work is very interesting; it’s both fragile and robust, like the way our bodies work. Crazy stuff.
-
I like knowing exactly how something works. This is a reason why I’m interested in low-level computing/compiler/operating systems. Lots of abstractions hide the ugly details, but I like to know those ugly details.
Many university courses helped me realize those reasons why I’m staying in computer science; CPSC 110 and CPSC 213. Not only did I enjoy the content, but the professors inspired me and interested me!
CPSC 110 taught me so many concepts I didn’t even know I was learning. I learned about:
-
data structures like graphs and linked lists and how we can use data structures to model data from the real world
-
graph traversals, to extract relationships out of data structures
-
program design
-
test-driven development
-
abstraction
CPSC 213 was the course that FINALLY allowed me to understand:
-
pointers
-
how code becomes understandable to a computer
-
how and why a stack overflow can occur from too many recursive calls
-
why we care about memory usage
I’m excited about higher-level courses, and to also combine what I will learn in computer science with chemistry and biochemistry. I don’t think learning computer science in high school would have resulted in where I am today. Taking my first computer science in university from a world-renown professor who tailored the course for years, has shaped the way I think about programming and computer science differently; I think about code in a more functional paradigm than an imperative paradigm. The computer science curriculum at my high school touches on OOP concepts and imperative programming before recursion and functional programming concepts. I’m glad I was introduced to functional programming concepts before imperative ones because this has made learning concepts in other classes much easier. The way a university lays out its computer science curriculum is more thought out than a high school one (I think, at least in high schools from Calgary), so this is also another reason I no longer regret how I spent my time in high school.
I’ve always wondered if it would of been better had I been introduced to computer science through programs like KodeWithKlossy or SheCodes, which claim to fight the gender imbalance in computer science. With the points I discuss below, I’m glad I didn’t partake in any of these programs, as I’m sure I would of actually been turned off from computer science.
My thoughts on "minority" focussed programs
There’s many programs that are targeted towards minorities in computer science. To me, most of them seem to almost be preying on this minority issue in computer science for their gain or don’t seem to actually be helping.
One I don’t particularly like is KodeWithKlossy. Their programs seem highly inaccessible to those who really need it and have a lacking curriculum. Their programs focus on web development and iOS app development. iOS app development is already inaccessible; only MacBooks can run the required software (XCode) that is needed to develop an iOS app. If you don’t have access to a laptop, you sure aren’t buying a MacBook as your first. I never (and still don’t) have had MacBook, so that program would simply be out of my reach. And if MacBooks were provided during the program, I wouldn’t be able to use those skills outside of the program unless KodeWithKlossy gave everyone a MacBook, which they probably aren’t. Additionally, after looking at the final projects created for the web development program, they are very simple and don’t highlight key areas of computer science like problem-solving (through algorithms), abstraction, or operating systems, to just name a few. I’m sure if I took KodeWithKlossy, I would not want to go into computer science because building websites is not very interesting to me.
Another reason why these programs are highly inaccessible is due to cost. For instance, one three-week KodeWithKlossy program[1] cost 8795 USD. If the program ran for 3 weeks, 8 hours a day, this cost comes down to 52 USD per hour.
In comparison, the price breakdown for CPSC 110 at UBC: - 13 weeks of instruction - 3 hours of lecture per week - 3 hours of lab per week - countless instructor and TA office hours (not counted in the calculation)
Would result in at least 78 hours, giving us 9 CAD per hour of lecture or lab. And this is not counting the many office hours students can get in addition to lectures and labs. Additionally, the course curriculum has been developed by and improved upon by many individuals[2].
It is simply appalling for anyone to pay this much for a program that isn’t even a college or university course.
Another program I don’t like is SheCodes[3] which to me seems to prey on women trying to transition to a career in tech by teaching them web development (the number of people specializing in web development is increasing quickly, and the field is becoming very inflated. Telling people that learning web development will get them a job or high salary may not be true in a few years.). Oh, and SheCodes isn’t free.
Reform efforts driven by serving capitalist labor markets tended not to be concerned with who learns, as long as they are learning well and serving industry.
Critically Conscious Computing
This quote drives the point home that programs like KodeWithKlossy and SheCodes don’t seem to really focus on helping those who are economically unable to seek out CS education, but those who have the money and time and who can quickly become low level workers in the industry; women are more likley to be stuck in junior positions and have a harder time being promoted[4]. Skill programs mainly produce employment at the lower rung of the information economy that is temporary, gendered and vulnerable to exploitation[5].
The curriculum also seems very shallow, focussing on trendy and hot vocational skills like web development and iOS development (I tried finding a more in depth curriculum but I couldn’t). Is that bad? I think so, but others may think not, if their aim is to teach gender minorities vocational skills so they can quickly get a job. Maybe focussing on gender minorities frames KodeWithKlossy as doing good (and not harm). But regardless of how many women-focussed boot camps emerge, technical training does not erase race, class, and gender-based assumptions of what technically trained people look like[6].
Another issue is that these programs (KodeWithKlossy and SheCodes[7]) mainly/only teach "front-end" web development, which is quickly becoming a woman-dominated field. Historically, when women enter certain fields, it lowers the value of that field. Front-end development is now seen as easier than back-end development. In fact, "Front-end jobs are easier for women to obtain, and feminized jobs are less prestigious[8]".
Sadly, KodeWithKlossy and SheCodes capitalize on shoving vocational skills, usually in web development, down women’s throats as their path into tech. Skills-based programs like KodeWithKlossy and SheCodes are similar to the skills programs taught to women in Seelampur, which mainly produced employment at the lower rung of the information economy, meaning that these jobs are temporary, gendered and vulnerable to exploitation[6].
The computing historian Marie Hicks can’t stand it when people tout coding camps as a solution to technology’s gender problem. “I think these initiatives are well-meaning, but they misunderstand the problem. The pipeline is not the problem; the meritocracy is the problem. The idea that we’ll just stuff people into the pipeline assumes a meritocracy that does not exist.
If you do like web development, you can learn the same things KodeWithKlossy and SheCodes teaches (and way more) at freecodecamp[9] FOR FREE.
KodeWithKlossy does have a free version too, but the curriculum and topics are lacking (only focussing on front-end for web development) and exclusionary (iOS development). I don’t know much about data science but it’s nice to see that as an area to learn about.
Now, there are programs that I think are doing a better job at introducing minorities in computer science to what computer science actually is. Jane Street[10] has programs ranging from a few days to a few weeks teaching concepts like OCaml, probability, arbitrage, and even some business concepts!
From their INSIGHT[11] program:
In the software engineering program, students will learn about OCaml and the libraries and tools that we use in our everyday work, as well as the fundamentals of building electronic trading systems. Then, they’ll put these tools to use by writing the back-end and UI for a computer game and a program that trades on a simulated stock exchange.
I really like their focus on using a functional programming language like OCaml, their mention of libraries (very important), tools (also very important), and also financial concepts (which I never got to learn and still haven’t). These topics are not only super interesting, but involve topics in computer science like problem-solving, creating tested and robust programs (you would hope a trading system works correctly!), and involving the use of technology that can be installed on any operating system. The program also mentions learning about the back-end (which many boot camps/programs don’t seem to dive into). Oh, and to my knowledge, this program is also free of cost. Below you can see the other types of programs they offer:
Of course, while Jane Street’s programs are much better than SheCodes/KodeWithKlossy’s programs, these programs are not enough. There needs to be a lot of change in society, education and industry for minorities to have their voices heard and to feel like they truly have a place in computer science and tech.
If the exclusion of minorities is naturalized as reflecting their lack of merit, rather than a moral failing within the industry, then diversity initiatives can only be justified in economic terms as a strategy to improve products or make companies more competitive.
Your Computer is on Fire
Including the perception of what is a good "software engineer".
The myth of the superstar coder encourages managers to reward men’s "heroic" last-minute problem-solving over women’s proactive efforts to prevent crises from occurring in the first place.
Your Computer is on Fire
Final thoughts
I think that computer science should be taught the same way as chemistry, biology, and physics for younger children. Learning physics doesn’t mean you’re a physicist, and that should become the norm with computer science. Also, when teaching a child science, you don’t start throwing formulas and abstract concepts at them, you start with examples and talk about endeavours and discoveries done by humans in the field.
Youth should not be introduced to computer science through HTML and JavaScript, which is what many minority focussed CS programs are doing. We need to explore the rich history of computing! Just like how we learn about the models of the atom and different acid-base theories in chemistry in junior high and high school and then utilize models like the valence bond theory and hybridization in university, I think we should learn that computing begins from the invention of the abacus to human "computers" in WWII, and how we abstracted the human computer into the metal and inanimate computers we have today.
Computer science can’t keep being taught as just coding, and we should focus on other areas of computer science like operating systems, memory and data management, history and ethics and programming languages. Orgs focussing on young children should use Critically Conscious Computing as a basis for developing a curriculum.
We can’t forget that computer science is also math; it’s basically applied math, so we should also teach computer science in a similar way that math is taught. This would be the job for universities. Once younger students learn more about the history of computer science, learning the math behind computer science like recursion, graphs, operating systems, compilers, and more will allow them to make connections in what they learned when they were younger. I think the university curriculum at UBC is pretty good, but I am not qualified at all to judge that. This would have been the path to computer science I wished to take. Essentially, teach computer science like science to younger children, and then teach computer science like math to older children.
Boot camps should seek with university professors and industry folks to deliver a condensed but in depth curriculum over a longer span of time. You simply can’t learn computer science or coding in 2 weeks, or even 2 months. UBC’s BCS[12] program is a great program for folks who already have a degree (that’s not in computer science) looking to enter software development, as this 2 year program cuts out all the annoying breadth courses (like first year English) a regular university student would take, while making sure core courses like Algorithm Design and Analysis[13] and Computer Hardware and Operating Systems[14] are included. The program is also at a comparative or even cheaper price than most boot camps, and offer a much higher quality of education.
If boot camps want to be the cheaper and quicker alternative to university, or if organizations want to educate young people on computer science, they must commit to delivering a well rounded education in computer science, that includes theory and vocational skills, or they are simply exploiting people for their own gain.