每天推薦一個 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