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


今日推荐开源项目:《PDF 表格提取 camelot》传送门:GitHub链接

推荐理由:这个项目可以让你提取出 PDF 文件中的表格,虽然不能做到 100% 的精确,不过也总比使用手动重新制作表格来的更方便一些。尽管现在已经有了不少同类的工具,但是它相比起其他人来说还是有不小的优势,关于这些项目之间的对比可以参考下面的链接。当然了,如果你不喜欢命令行工具,它也有使用浏览器进行操作的版本。

项目对比:https://github.com/socialcopsdev/camelot/wiki/Comparison-with-other-PDF-Table-Extraction-libraries-and-tools

浏览器操作的另一个版本:https://github.com/camelot-dev/excalibur


今日推荐英文原文:《What Students REALLY Learn from Computer Science》作者:Hsuanwei Fan

原文链接:https://medium.com/edmodoblog/more-than-coding-what-students-really-learn-from-computer-science-3d6870387fbc

推荐理由:学生在学习 CS 时不仅仅只学到了知识,他们还会得到各种思考方式上的提高

What Students REALLY Learn from Computer Science

Photo by Fotis Fotopoulos on Unsplash

In January of 2016, President Obama launched a new “Computer Science for All” initiative to help increase the availability of Computer Science courses in U.S. public schools. This was in response to the growing number of STEM jobs in computing as well as the gap between that demand and the number of students graduating with CS degrees.

Since then, district and school leaders around the country and the world have taken steps toward adding more CS classes to their curriculum, as well as asking teachers to find creative ways to embed programming lessons into their respective subjects.

However, some doubts about narrowly focusing on giving students coding skills have loomed. From worries that artificial intelligence might eventually replace the need for human programmers (much like automation may eventually replace manual labor) to critiques of teaching coding without also teaching critical thinking skills, some researchers and educators are wary of teaching programming simply because it’s trendy.

This is the model of CS education that I believe in.

As a secondary science and CS teacher, I was thrilled to discover CollegeBoard’s new AP Computer Science Principles class. The course was designed not just to give students basic coding skills but also introduce broader, multidisciplinary concepts, including ways to think about technology and how it will continue to impact society.

This is the model of CS education that I believe in. We need to expose our students to skills that will allow them to thrive in a rapidly-changing world — including ways of thinking, questioning, and working together, as teachers have always aimed to do.

When students study computer science, they learn so much more than a new programming language. Here are 5 valuable skills that students gain from a thoughtfully-designed CS lesson:

Computational Thinking

Computational thinking is an incredibly useful approach and skill set for students and professionals in every field, not just those with computers. Breaking down what seems like an immense problem into smaller pieces that can be tackled step-by-step is a skill students will practice from their very first programming lesson. What basic functions does your app need to accomplish? What are all the inputs, assets, and interactions required to make it work?

Photo by Chris Ried on Unsplash

As students learn to build apps, web pages, or programs in code, they’re also learning to recognize and make use of repeating patterns. (And if you recognize similarities between a current obstacle and a problem you previously solved, what can you learn from your past approach?) Abstracting data into representations that humans can easily understand and interact with is a highly sought-after skill, no matter your field.

When asked whether CS should be mandatory for every student, the CEO of Code.org Hadi Partovi replied:

Computational thinking — which is the logic, algorithmic thinking, and problem-solving aspects of computer science — provides an analytical backbone that is useful for every single student, in any career.

Algorithmic Thinking

Technically, understanding and creating algorithms is a part of computational thinking. But it’s such an essential part of what students learn in a CS class that it needs to be highlighted separately!

Even though it sounds like technical jargon, an algorithm is simply a list of steps or rules you take when solving a problem, whether it’s as complex as calculating rocket trajectories or as simple as the correct order of ingredients you put into your cookie batter.

As your students learn the importance of the order of operations in getting a robot or a computer program to comply with what they want it to do, they are learning an important method of problem-solving that will help them in every aspect of life — not just STEM classrooms.

Visual Thinking

When education innovators started to add the “A” to STEAM (Science, Technology, Engineering, Art+Design, and Math), I was thrilled. My middle school students absolutely loved coding lessons, starting from day one of “Hour of Code” when they tried to guide Moana safely around obstacles in her path to building their own Android apps with MIT’s AppInventor.

But the part that students look forward to the most? Seeing what they created come to life. When they watch characters from Frozen creating snowflake patterns that correspond to the instructions they wrote in code, whether they pass each stage or not, they’re thrilled.

CS lessons allow students to see the relationship between the code they write and the stunning visual results they produce, whether you’re teaching them how to format a new website, personalize a blog’s appearance, or create animation with Scratch.

Teamwork

For a couple of years, I used Project Lead the Way’s CS curriculum in my middle school class. One of my favorite aspects of the curriculum, both during training and in my classroom, was that it constantly required students to solve problems, program, and design in pairs.

Photo by Val Vesa on Unsplash

Initially, this practice was met with a lot of complaints and despair. (Reactions ranged from “They have cooties,” to “You have enough laptops so each of us can just write our own program!”) Over time, though, even my star coders realized that everyone had valuable contributions to share. Coding is a complex process that often requires multiple pairs of eyes to scan for little errors or recognize elusive patterns. Professional software engineers constantly work collaboratively in project planning, task prioritization, and the implementation of code.

Stubborn students might find the activities in your first few CS lessons to be manageable on their own, but once they’re tasked with a multi-step project, they’ll be grateful to learn the value of teamwork. After all, that project requires researching the needs and desirability of potential users (to make a program or app appealing and easy to use), visually designing its interface, and creating an outline (or pseudocode) for the complex code that will eventually make the program run.

Grit

Last but certainly not least, programming can become gruesome for students. When a student has edited their code 30 times (and asked several classmates to provide a fresh pair of eyes) but still can’t figure out why their program is not working properly, the frustration is palpable.

It is important for us as teachers to hold back on providing the solution right away, as tempting as that may be. I find it highly rewarding to guide students closer to the concept that we are exploring for the day in inquiry-based science lessons and the same is true in teaching CS. Students may be able to take a shortcut and plug math equations into Wolfram Alpha to see possible solutions, but the “right answer” is harder to find when they’re creating something from scratch.

As a mentor, you can help guide students with questions, and keep them motivated by reminding them how rewarding it is to finally solve a problem at the end of a long road of perseverance and tackling the obstacle from multiple creative approaches.


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