开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
  • 今日推荐开源项目:《自由价更高 awesome-free-software》
  • 今日推荐英文原文:《Why Academia Needs to Get Better at Teaching Programming》

今日推荐开源项目:《自由价更高 awesome-free-software》传送门:***GitHub链接***
推荐理由:一个自由软件的列表。自由软件指的是那些允许用户对这些软件自由的进行诸如使用和改进这些行为的软件,而并不是只是指的免费的软件。如果你对自由软件感兴趣的话这个项目正好适合你,兴许这些软件里面就有一些能够帮上你的忙;或者说只是把这个列表当成一个软件列表来寻找适合的软件也是一种可行的应用方式。

今日推荐英文原文:《Why Academia Needs to Get Better at Teaching Programming》作者:Dan Spector
原文链接:https://medium.com/@danno2423/why-academia-needs-to-get-better-at-teaching-programming-4da2ef01dab0
推荐理由:学术界应当增强编程教学的原因

Why Academia Needs to Get Better at Teaching Programming

I wrote this in 2017, when I was a grad student struggling to learn to code. Fortunately, I understand things a lot better now. But I had some insights that I thought were important to share with students and educators who might be experiencing difficulties with programming in an academic environment. I’m trying to learn something called Data Driven Documents, or D3. It’s a JavaScript library that visualizes data. But before you can make an awesome visualization comparing how many gallons of hair gel Trump used in his lifetime, or how many toenail clippings could be transformed into organic matter to power an ecohome, consider this — one must actually learn to code to get to this high-level thinking. And you know what coding involves? A lot of tedious, small, complicated parts of a whole. I’m talking about arrays, anonymous functions, key-value pairs, markup languages, accessor functions. I could stack up this jargon from here to the moon and we would still have plenty left to get to Pluto. But the thing about coding is, it’s more like riding a bike than memorizing a textbook. Once you understand how it works, you kind of just do it. The problem lies in getting to that point. Coding is hard, at least to me. It’s learning an entirely new language and set of logic. It has foundations in things like math, which unfortunately is difficult. And while a strong programming foundation can be applied across languages, the technologies themselves change rapidly. This JavaScript library I am learning hardly existed five years ago. And yet it’s managed to change the way people think about journalism, data, and even communication. The pattern I am seeing is that the younger the person is, the more likely they are to have coding skills. I’ve had four teachers in my lifetime that have taught me programming in a formal classroom setting, and they’ve all been under the age of 35. It’s almost as if programming, especially web technologies, has only become ubiquitous in the past 15 years. If you knew programming before the web existed, you were probably a super nerd who coded on punch cards. Anyhow, the upshot of this is that I don’t see many qualified older teachers who can teach these valuable skills. Tenure-track academia tends to be chock full of people who are good at teaching theory and principles. But when it comes to explaining how Fizz Buzz works or even why a div is useful, they are totally in the dark. Skills-based training often gets placed on the shoulders of adjunct faculty, many of whom do not have adequate time and resources. And that is a problem. The job market today is the most unforgiving it has ever been. Not because the work doesn’t exist, but because it requires skills that have high barriers to entry and are very difficult to obtain. This is especially true among entry-level jobs. Unfortunately, many entry-level jobs do not place the emphasis on higher-level thinking. It is more about skills — i.e. can you actually do the work? But for some fields, higher-level strategic thinking and skills are intertwined. This is certainly true for programming. But the problem with programming is that in terms of writing functional code, syntax is everything. You are writing instructions that are interpreted by a computer. Even in so-called higher-level languages with more room for error, one mistake can break the entire application. Naturally, it is tough to move onto the fun design thinking when you don’t even understand the basics of JavaScript. This is where I am frustrated. I do not feel that traditional academia is well suited for skills-based education. Classes meet for short periods of time and are often varied in breath. It is hard to spend the necessary amount of time learning an incredibly difficult skill like programming if one is juggling many other classes. Also, a lot of the classes I have taken are very principle-focused and already expect you to possess the technical know-how in order to apply the theory. I can unequivocally say that the hardest part of graduate school has been mastering the technical tools to execute design concepts. One might counter, isn’t the only way to learn a skill is to try and fail in one’s own time? This method might work for GUIs or other more user-friendly applications. But for programming is an entirely new paradigm of thinking. It needs to be taught carefully and iteratively. It is like a system of building blocks, and if one doesn’t understand the basic elements, there is no way to learn more complicated concepts. Right now, I am teaching myself the very basics of JavaScript and D3 because I did not understand the tool I built. I was helped very heavily by my teachers, who graciously lent their expertise to polish my project. Could I have built it from scratch, on my own? Or even explain why some parts of it were coded the way they were? To be honest, no. I don’t want to blame the teachers here. The coding instructors are mostly all adjunct, trying to pull off something very different than what academia was designed to achieve. In my coding class last semester, the teacher had 12 weeks to teach HTML, CSS, JavaScript, and D3. Unfortunately, 2 of the classes fell during breaks, so there were only 10 classes in total. How do you teach so much content in 10 classes, when classes meet once a week and there are 15 different people who not only need to learn concepts, but also require individual help? Somehow the teacher, who was fantastic, managed to squeeze everything in. But because of the time crunch, many people (including me) did not truly understand what they were doing. But is this problem just limited to academia? It’s clear there is a big push to get people excited about STEM. But learning the basics can be difficult and tedious. Excitement alone cannot save us. Maybe the question is, are there enough resources to help people learn this stuff? Do we have teachers who actually know these skills? And if not, how can we better prepare teachers and incentivize them to actually want to teach? A lot of the problem falls within the primary and secondary school systems. If programming is so difficult and yet so integral to being useful in today’s economy, it should probably start being taught in middle school. It is hard for post-secondary education to teach such a daunting skill to people who have no background, while also requiring students to receive a well-rounded education. But to get even more extreme, what if the entire model of education was changed. What if colleges didn’t have breath requirements, but instead only expected you to get good at one thing? It turns out these things do exist, in the form of coding bootcamps and other trade schools. It is kind of ironic that people spend a lot of their lives receiving a well-rounded education, but then default to going to an extremely specialized place that teaches such a specific, technical ability. But that’s what the economy wants today, especially in an entry-level position. If someone doesn’t know how to write a sentence, why would someone hire them to be a journalist? And if they can’t code Fizz Buzz, why would they be hired to visualize data? It’s almost as if the cart is being put before the horse, and no one knows how to ride the horse. In fact, the horse didn’t even exist 30 years ago, because it was a punch card. If you can’t tell, I think about this often and it makes me frustrated. I do not mean to throw any of my more theory-based teachers under the bus. Most truly recognize the challenges of the modern learning environment. I suppose I just want to get people talking about academia can better teach hard skills. At the risk of sounding like a cold-hearted you-know-what, I do not want to discount the importance of liberal arts thinking and being well-rounded. I am the ultimate liberal arts cheerleader who majored in political science, loved every minute of it, and then lived with his parents for three years after school. There is nothing I love more than reading a novel. I am a writer first and foremost. In fact, I would probably only be a writer if it wasn’t for things like the Internet upending the entire economy and making it hard for people who don’t know computers to get a job. But the this doesn’t have to be a funeral procession. These are exciting times. I’m not going to go into the whole power of technology thing. But to quote a masked hero, with great power comes great responsibility. If we don’t understand tech, it’s going to replace us (and to a degree, already has). Academia is going to be a major casualty, as skills become more degree-agnostic and knowledge is offered cheaply and conveniently online. Soon, the only advantage academia might have over the Internet is that it can hire real live humans to teach stuff. Shouldn’t these humans be equipped with the skills that their students need to survive in this crazy world? And maybe even health insurance and job security? (A person can dream..) Academia is a frustrating, hair-wrenching, awkward as hell, and occasionally wonderful place. For all the innovations it produced, teaching must continue to be one of them. Here are some suggestions I have to make a classroom a better environment to learn coding:
  1. Teach students the importance of learning programming fundamentals. If a student just wants to skip the boring stuff and “make art”, be honest with them about the long road ahead.

  2. Concentrate on get something working first, no matter how verbose, before worrying about efficiency.

  3. Discourage copying and pasting.

  4. Let them know about all the amazing resources outside of the classroom for learning to code. Stack Overflow is a necessary part of any programmer’s life, and half the battle with coding is learning how to ask the right questions. Making an account and figuring out how to write questions has really helped me on my journey. In addition, there are a lot more fun and beginner-friendly resources out there. For instance, I really enjoy The Coding Train.

  5. Above all, concentrate on programming in the vanilla language before moving onto more abstract libraries. In my opinion, learning how Fizz Buzz works is infinitely more important than starting out with something a bit more sexy. And it still is the most common weed out question for programmers, so why not get it out of the way now?

  6. Sorry, this is a bonus. Coding isn’t for everyone. In fact, I disliked it for quite a while. If it wasn’t for a couple of amazing instructors, I probably would be struggling a lot more than I currently am. A lot of the problem was that I had no idea what was going on, I didn’t think it was creative, and I didn’t know I could combine it with my other interests. I literally thought that by learning to code, I would get sucked into the void and abandon my identity as a writer/journalist/actual human being. But it only takes one talented teacher to convince someone otherwise 😉


每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,欢迎关注开源日报。交流QQ群:202790710;微博:https://weibo.com/openingsource;电报群 https://t.me/OpeningSourceOrg