Thoughts based on my path to CS, and opinions on CS Education
2022-02-14 , 2812 words, 15 mins
This is inspired by Critically Conscious Computing, and I take quotes from that book.
When I was in first year of university, I started 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, I was busy learning chemistry and other IB related things (English IBHL 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; this lead me 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 in computer science and going for a major in chemistry. In fact, that's when I started taking more chemistry and health science courses. And being in those chemistry classes were a fresh of breath air for me; no one talking about JavaScript, internships, or side projects. There was occasional talk about undergrad research, but the environment in health science classes were less stifling for me than computer science classes.
I think a reason for this is because in everyone in health science classes had more or less the same amount of knowledge. In fact, first and second year chemistry classes were enjoyable for me because I had taken Chemistry IBHL. 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 every "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 really sure. But now in my third year, I'm no longer sad that I wasn't coding away during 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, then a chemistry course that I was just interested in? I had this mindset in first and part of second year. But this resulted in me flip flopping between courses (never having a good timetable) and choosing courses that "sounded good" and not if I actually wanted to learn the topic. Eventually, I realised 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 actually 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 because 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 don't actually know if they had a computer science program), my parents never really mentioned it 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 then computer science became the next hottest thing. I was scared that a major in chemistry would result in a futile career, which is why I decided to major in computer science. 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. Absolutely crazy stuff.
- I like knowing exactly how something works. This is a reason why I'm interested in low level computing/compiler/operating systems. Lot's of abstractions hide the ugly details, but I like to know those ugly details.
There's also many university courses that helped me realize those reasons of 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 without even knowing I was
- I learned about linked lists without even knowing I was
- I learned about graph traversals
- I learned about program design
- I learned about test driven development
- I learned about 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 actually need to care about memory usage
I'm excited for more 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 of 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 in a different way; I think about code in a more functional way, than an imperative and object orientated way. 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 their 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 (learning about things I liked).
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 own 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 in it's nature; 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 out of my reach. And if MacBooks were provided, 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 in nature 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 every interesting to me.
Another reason why these programs are highly inaccessible is due to cost. For instance, one three-week KodeWithKlossy program cost 8795 USD. If the program ran for 3 weeks, 8 hours a day, this cost comes down to 52 USD per hour.
The price breakdown for CPSC 110 at UBC:
- 13 weeks of instruction
- 3 hours of lecture per week
- 3 hour lab per week
- countless instructor and TA office hours (not counted in 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. And our professor has been shaping this course for years.
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 which to me seems to prey on women trying to transition to a career in tech by teaching them web development (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. I also personally don't like web development). Oh, and it's not free.
This quote drives the point home that programs like KodeWithKlossy don't seem to really focus on helping those who are economically unable to seek out CS education, but those who have the money; as long as there are women/gender minorities in our program (who can pay), who cares if they actually need help accessing CS programs or are the groups of people that need the most help? The curriculum also seems very shallow, focussing on "hot" skills like web development and iOS development (I tried finding the curriculum but I can't). Is that bad? I think so, but others may think not. Focussing on gender minorities frames KodeWithKlossy as doing good (and not harm). This trend is also seen in SheCodes and other bootcamps.
Another issue is that these programs (KodeWithKlossy and SheCodes) only teach "front-end" web development, which is quickly becoming a woman dominated field. Is that good? I don't think so. Historically, when women enter certain fields, it "lowers" the value of it. Front-end development is now seen as "easier" then backend or frontend. I'm a firm believer women should not pick up front-end as their "path" into tech. Sadly, KodeWithKlossy and SheCodes capitlizes on the "easiness" of front-end development and shove it down women's throats.
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 totally 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 teachs (and way more) at freecodecamp FOR FREE.
Now, there are programs which I do think are doing a great job at introducing minorities in computer science to what computer science actually is. Jane Steet 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 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 backend 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 involve the use of technology that can be installed on any operating system. The program also mentions learning about the backend (which many bootcamps/programs don't seem to dive into). Oh and to my knowledge, this program is also free of cost.
Final thoughts
I think that computer science should be taught the same was 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 off with examples and talk about scientific discoveries. Additionally, computer science should not just be taught as HTML and JavaScript; we need to also talk about its history. 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 all the way to the invention of the abacus, to human "computers" in WWII. Children and younger students should see the motivation for learning about certain concepts in computing and how they came about. What exactly should and shouldn't be covered though is for someone else much more involved to decide (not me).
But 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. 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 of been the path to computer science I wished to take. Essentially, teach computer science like a science to younger children, and then teach computer science like math to older children.
ᐊ go back to the blogfrom Hacker News https://ift.tt/o9drz1E
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.