Scratch (ngôn ngữ lập trình)

Triết lý

Scratch khuyến khích chia sẻ, tái sử dụng và kết hợp mã, như được biểu thị bằng khẩu hiệu của họ, "Tưởng tượng, Chương trình, Chia sẻ".  Người dùng có thể tạo dự án của riêng mình hoặc họ có thể chọn " phối lại " dự án của người khác. Các dự án được tạo và phối lại với Scratch được cấp phép theo Giấy phép Chia sẻ Chia sẻ Ghi nhận tác giả Creative Commons . Scratch tự động cung cấp tín dụng cho người dùng đã tạo dự án và chương trình ban đầu.
Đây là một phần của nghiên cứu nhằm thiết kế các công nghệ mới để tăng cường học tập tại các trung tâm sau giờ học và các môi trường giáo dục không chính thức khác, đồng thời mở rộng cơ hội cho thanh thiếu niên có thể trở thành nhà thiết kế và nhà phát minh. Scratch được phát triển dựa trên sự tương tác liên tục với thanh niên và nhân viên tại Computer Clubhouses . Việc sử dụng Scratch tại Computer Clubhouses được dùng làm mô hình cho các trung tâm sau giờ học khác cho thấy cách các thiết lập học tập không chính thức có thể hỗ trợ sự phát triển của sự lưu loát công nghệ.

Lịch sử

Nhóm mẫu giáo trọn đời của MIT Media Lab , do Mitchel Resnick dẫn đầu , hợp tác với công ty tư vấn có trụ sở tại Montreal , Công ty Playful Inocate, do Brian Silverman và Paula Bonta đồng sáng lập , đã cùng nhau phát triển phiên bản Scratch duy nhất dành cho máy tính để bàn vào năm 2003. Nó bắt đầu như một ngôn ngữ mã hóa cơ bản, không có danh mục được dán nhãn và không có cờ xanh. Scratch được thực hiện với mục đích dạy trẻ em viết mã.
Vào ngày 6 tháng 5 năm 2013, Scratch đã đóng cửa trong ba ngày để cập nhật lên Scratch 2.0 và được phát hành vào ngày 9 tháng 5 năm 2013. Bản cập nhật đã thay đổi giao diện của trang web và bao gồm một trình chỉnh sửa dự án trực tuyến. Một trình soạn thảo Scratch 2 ngoại tuyến cũng có sẵn.  Với phần giới thiệu, các khối tùy chỉnh có thể được xác định trong các dự án, cùng với một số cải tiến khác.
Vào năm 2017, Scratch 2.0 đã có sẵn trực tuyến và dưới dạng một ứng dụng cho Windows , macOS , Linux ( bắt buộc phải có Adobe Air ) và không chính thức cho Android dưới dạng tệp APK . Trình chỉnh sửa ngoại tuyến Scratch 2.0 có thể được tải xuống cho Windows, Mac và Linux trực tiếp từ trang web của Scratch nhưng sau đó, hỗ trợ cho Linux đã bị loại bỏ. Phiên bản di động không chính thức phải được tải xuống từ các diễn đàn Scratch.

Scratch 3.0

Scratch 3 được Scratch Team công bố lần đầu tiên vào năm 2016. Một số phiên bản alpha công khai đã được phát hành trong khoảng thời gian từ đó đến tháng 1 năm 2018, sau đó các phiên bản "Preview" tiền beta được phát hành. Phiên bản beta của Scratch 3 đã được phát hành vào ngày 1 tháng 8 năm 2018, thay thế "bản xem trước" beta trước đó và có sẵn để sử dụng trên hầu hết các trình duyệt, ngoại trừ đáng chú ý là Internet Explorer . Phiên bản phát hành đầu tiên của Scratch 3.0 được phát hành vào ngày 2 tháng 1 năm 2019. Sự khác biệt đáng chú ý nhất giữa 3.0 và các lần lặp trước đó là một thiết kế "vật liệu" trải dài trên toàn bộ giao diện. Phần "trình phát dự án" của trang web cũng được cập nhật lên thiết kế này khi phát hành Scratch 3.0, vì trang web đã được cập nhật chậm từ năm 2016 sang thiết kế vật liệu.
Scratch 3.0 không dựa trên 2.0 - thay vào đó, nó là một cơ sở mã dựa trên JavaScript hoàn toàn mới được tạo thành từ nhiều thành phần như "Scratch-GUI", phần chính của chương trình, "Scratch-VM", phiên dịch mã và "Scratch-Render", công cụ kết xuất.
Trong 3.0, sự hiện diện của sân khấu cũng được đặt trở lại ở phía bên phải màn hình như trong các phiên bản 1.14, thay vì bên trái như đã thấy trong các phiên bản 2.0. Các tính năng khác bao gồm dịch ngôn ngữ, chuyển văn bản thành giọng nói và khả năng tương thích với một số phần công nghệ vật lý như micro-bit của BBC ; các tính năng này khả dụng thông qua các plugin tích hợp được gọi là "tiện ích mở rộng". Người dùng cũng có thể tạo các tiện ích mở rộng của riêng mình cho Scratch 3.0 bằng Javascript , tương tự như cách người dùng cũng có thể tạo tiện ích mở rộng bằng JavaScript cho phiên bản Scratch 2.0 đặc biệt có tên là "Scratch 2" (bản thân nó không còn được hỗ trợ do phát hành 3.0). Các tiện ích mở rộng khác đã được thêm vào bao gồm Makey Makey ,Chuyển văn bản thành giọng nói , LEGO MINDSTORMS EV3 , LEGO Education WeDo 2.0 và BB3. Ngoài ra, một số tính năng của Scratch 2.0 đã được chuyển sang các tiện ích mở rộng, bao gồm âm nhạc , cảm biến video và bút .
Không giống như Scratch 2.0, Scratch 3 tuân theo phiên bản ngữ nghĩa , do đó, số "phụ" của số phiên bản thay đổi, thay vì chỉ thay đổi số "bản vá". Tuy nhiên, hiện tại, không có phần nào trong mã Scratch 3 thực sự chứa số phiên bản và hiện tại không có hộp thoại "Giới thiệu" để báo cáo số phiên bản.
Scratch 3.0 được MIT phát hành chính thức vào ngày 2 tháng 1 năm 2019.

Sử dụng giáo dục

Scratch đã phổ biến ở Vương quốc Anh thông qua các Câu lạc bộ Code . Scratch được sử dụng làm ngôn ngữ giới thiệu vì việc tạo ra các chương trình thú vị tương đối dễ dàng và các kỹ năng học được có thể được áp dụng cho các ngôn ngữ lập trình khác như Python và Java .
Scratch không dành riêng cho việc tạo trò chơi. Với hình ảnh được cung cấp, lập trình viên có thể tạo hình ảnh động, văn bản, câu chuyện, âm nhạc và nhiều hơn nữa. Đã có nhiều chương trình mà học sinh có thể sử dụng để học các chủ đề về toán, lịch sử và thậm chí là nhiếp ảnh. Scratch cho phép giáo viên tạo ra các bài học về khái niệm và hình ảnh và bài tập trong phòng thí nghiệm khoa học với hình ảnh động giúp trực quan hóa các khái niệm khó khăn. Trong khoa học xã hội, người hướng dẫn có thể tạo ra các câu đố, trò chơi và hướng dẫn với các yếu tố tương tác. Sử dụng Scratch cho phép những người trẻ hiểu logic của lập trình và cách xây dựng và cộng tác một cách sáng tạo.
Scratch được dạy cho hơn 800 trường học và 70 trường cao đẳng của tổ chức DAV ở Ấn Độ và trên toàn thế giới.
Giảng viên Đại học Harvard, Tiến sĩ David J. Malan thích sử dụng Scratch hơn các ngôn ngữ lập trình giới thiệu thường được sử dụng, như Java hoặc C, trong khóa học khoa học máy tính giới thiệu của mình. Tuy nhiên, có một lợi ích hạn chế trong giáo dục trình độ đại học. Malan chuyển ngôn ngữ khóa học của mình sang C sau tuần đầu tiên.

Phê bình

Đã có một lượng đáng kể những lời chỉ trích của Scratch như một ngôn ngữ lập trình giới thiệu do phong cách kéo và thả của nó có khả năng mang đến cho trẻ em (đối tượng mục tiêu của nó) ý tưởng sai về lập trình và quá "phủ đường" hoặc xuống nước so với các ngôn ngữ lập trình khác như C++, C, Java hoặc JavaScriptt . Tuy nhiên, một cơ sở dữ liệu có thể được mô phỏng với một biến đám mây.
Đã có những chỉ trích về Scratch 2 rằng nó dựa trên công nghệ Adobe, với một số giả định rằng nó dựa trên Adobe Flash đã lỗi thời  từ ngày 9 tháng 4 năm 2019. Sự phụ thuộc chính của Scratch 2 là vào Adobe AIR , mặc dù chỉ có sẵn cho các hoạt động của máy khách trên Microsoft Windows và Apple Mac .
Nền tảng lập trình dựa trên web của Scratch 2 có thể rất chậm.
Tuy nhiên, Scratch 3.0 sử dụng JavaScript bao gồm WebGL , một nền tảng cập nhật hơn cũng hoạt động trên thiết bị di động.
Khi phiên bản đầu tiên của Scratch 3 được phát hành, nó đã nhận được phản ứng trái chiều từ cộng đồng. Mặc dù một số kháng cự được quy cho sự thay đổi nói chung, các khiếu nại đã được đưa ra rằng thiết kế lại trông không chuyên nghiệp và trẻ con. Scratch 3.0 cũng đã bị chỉ trích vì có khả năng tương thích ngược kém với các dự án được thực hiện bằng các phiên bản cũ hơn của Scratch, bao gồm các lỗi và dự án không tải.

Giao diện người dùng

Giao diện Scratch có ba phần chính: khu vực sân khấu , bảng khối và khu vực mã hóa để đặt và sắp xếp các khối thành các tập lệnh có thể chạy được.
Khu vực sân khấu có các kết quả (ví dụ: hình động, đồ họa rùa , v.v., ở kích thước nhỏ hoặc bình thường, với toàn màn hình cũng có sẵn) và tất cả các hình thu nhỏ được liệt kê ở khu vực dưới cùng. Giai đoạn sử dụng tọa độ x và y , với 0,0 là tâm sân khấu; sân khấu rộng 480 pixel và cao 360 pixel, x: 240 là ngoài cùng bên phải, x: -240 là phía xa bên trái, y: 180 là trên cùng và y: -180 là dưới cùng.Với một sprite được chọn ở dưới cùng của khu vực tổ chức, các khối lệnh có thể được áp dụng cho nó bằng cách kéo chúng từ bảng khối vào khu vực mã hóa, chứa tất cả các tập lệnh được liên kết với sprite đã chọn. Mỗi cũng có thể được kiểm tra riêng trong các điều kiện và thông số khác nhau thông qua một cú nhấp đúp. Trong tab ScScript , tất cả các khối có sẵn được liệt kê và phân loại. Ngoài ra còn có một tab mở rộng cho phép các khối khác được thêm vào.
Bên cạnh tab ScScript, có tab Trang phục, nơi người dùng có thể thay đổi giao diện của sprite để tạo các hiệu ứng khác nhau, bao gồm cả hoạt hình. Tab cuối cùng là tab Âm thanh, nơi người dùng chèn âm thanh và nhạc vào một sprite.
Khi tạo các họa tiết và hình nền, người dùng có thể tự vẽ sprite bằng tay với "Paint Editor" do Scratch cung cấp, chọn Sprite từ thư viện hoặc tải lên hình ảnh.

Tiện ích mở rộng

Scratch 2 và 3 đều hỗ trợ các tiện ích mở rộng, có thêm các khối và tính năng bổ sung có thể được sử dụng trong các dự án. Trong Scratch 2, các tiện ích mở rộng đều dựa trên phần cứng, nhưng các tiện ích mở rộng dựa trên phần mềm đã được thêm vào Scratch 3. Ngoài việc thêm các tiện ích mở rộng mới, Scratch 3 cũng đã chuyển một số khối mặc định trong Scratch 2.0 vào phần tiện ích mở rộng, như Music và Pen . Kể từ Scratch 3.0, nhóm Scratch có kế hoạch thường xuyên thêm các tiện ích mở rộng mới.

Cộng đồng người dùng

Trang web Scratch sau khi phát hành chia sẻ dự án công cộng vào cuối năm 2007
Scratch được sử dụng trong nhiều môi trường khác nhau: trường học, bảo tàng , thư viện , trung tâm cộng đồng và nhà ở. Mặc dù nhóm tuổi người dùng chính của Scratch là từ 8 tuổi đến 18 tuổi, nhưng Scratch cũng đã được tạo ra cho các nhà giáo dục và phụ huynh. Sự tiếp cận rộng rãi này đã tạo ra nhiều cộng đồng xung quanh, cả vật lý và kỹ thuật số.

Cộng đồng trực tuyến

Trên Scratch, các thành viên có khả năng chia sẻ dự án của họ và nhận phản hồi. Các dự án có thể được tải trực tiếp từ môi trường phát triển lên trang web Scratch và bất kỳ thành viên nào trong cộng đồng đều có thể tải xuống mã nguồn đầy đủ để nghiên cứu hoặc phối lại vào các dự án mới. Thành viên cũng có thể tạo các dự án, bình luận, gắn thẻ, yêu thích và "yêu" các dự án của người khác, theo dõi các thành viên khác để xem các dự án và hoạt động của họ và chia sẻ ý tưởng. Các dự án bao gồm từ trò chơi đến hoạt hình đến các công cụ thực tế. Ngoài ra, để khuyến khích tạo và chia sẻ giữa những người dùng, trang web thường xuyên thiết lập các thử thách "Scratch Design Studio".
Nhóm MIT Scratch đảm bảo rằng cộng đồng này duy trì một môi trường thân thiện và tôn trọng mọi người ở mọi lứa tuổi, chủng tộc, sắc tộc, tôn giáo, khuynh hướng tình dục và bản sắc giới. Tất cả các thành viên được yêu cầu cung cấp phản hồi một cách xây dựng và báo cáo bất kỳ nội dung nào không tuân theo các nguyên tắc cộng đồng. Để đảm bảo hơn nữa cho cộng đồng này, Nhóm Scratch quản lý hoạt động của trang và trả lời các báo cáo hàng ngày.
Ngoài ra còn có một cộng đồng trực tuyến dành cho các nhà giáo dục gọi là ScratchEd. ScratchEd được phát triển và hỗ trợ bởi Trường Đại học Sư phạm Harvard. Trong cộng đồng này, các nhà giáo dục Scratch chia sẻ những câu chuyện, trao đổi tài nguyên, đặt câu hỏi và tìm người.

Scratch Wiki

Scratch Wiki là một wiki cỡ trung bình cho ngôn ngữ lập trình giáo dục Scratch và trang web, lịch sử và các hiện tượng xung quanh nó. Wiki được hỗ trợ bởi Scratch Team (nhà phát triển Scratch), nhưng chủ yếu được viết bởi Scratchers (người dùng Scratch) để biết thông tin về các dự án và những điều người dùng thú vị,  mặc dù các biên tập viên phải trải qua quá trình yêu cầu tài khoản để tránh phá hoại.

Sự kiện

Nhà giáo dục Scratch có thể tập hợp trực tiếp tại Cuộc họp của Nhà giáo dục Scratch. Tại các cuộc tụ họp này, các nhà giáo dục Scratch học hỏi lẫn nhau và chia sẻ các ý tưởng và chiến lược hỗ trợ sự sáng tạo tính toán.
Một "Ngày cào" hàng năm được tuyên bố vào tháng Năm mỗi năm. Các thành viên cộng đồng được khuyến khích tổ chức một sự kiện vào hoặc trong ngày này, dù lớn hay nhỏ, để kỷ niệm Scratch. Những sự kiện này được tổ chức trên toàn thế giới và một danh sách có thể được tìm thấy trên trang web của Scratch Day.

Các tính năng và dẫn xuất

Scratch sử dụng lập trình hướng sự kiện với nhiều đối tượng hoạt động được gọi là sprite . Sprites có thể được vẽ, dưới dạng đồ họa vector hoặc bitmap , từ đầu trong một trình chỉnh sửa đơn giản là một phần của Scratch hoặc có thể được nhập từ các nguồn bên ngoài.
Phiên bản hiện tại của Scratch không coi các thủ tục là cấu trúc lớp đầu tiên và có các tùy chọn I / O tệp giới hạn với Giao thức mở rộng Scratch 2.0; một tính năng mở rộng thử nghiệm cho phép tương tác giữa Scratch 2.0 và các chương trình khác. Giao thức mở rộng cho phép giao tiếp với các bảng phần cứng như Lego Mindstorms hoặc Arduino .
Scratch 3 chỉ hỗ trợ mảng một chiều , được gọi là "danh sách", và chuỗi vô hướng và dấu phẩy động được hỗ trợ, nhưng với khả năng thao tác chuỗi hạn chế. Có một sự tương phản mạnh mẽ giữa các chức năng đa phương tiện mạnh mẽ và phong cách lập trình đa luồng và phạm vi khá hạn chế của ngôn ngữ lập trình Scratch.
Mã nguồn của Scratch và các dẫn xuất của nó dựa trên Squeak , dựa trên Smalltalk -80. Phiên bản 2 của Scratch được triển khai trong ActionScript , với trình thông dịch dựa trên JavaScript thử nghiệm được phát triển song song.
Một số dẫn xuất Scratch được gọi là Sửa đổi Scratch đã được tạo bằng mã nguồn của phiên bản Scratch 1.4. Các chương trình này là một biến thể của Scratch thường bao gồm một vài khối bổ sung hoặc thay đổi đối với GUI .
Vào tháng 7 năm 2014, một chương trình có tên ScratchJr đã được phát hành cho iPad. Năm 2016, ScratchJr được phát triển cho Android. Mặc dù nó được truyền cảm hứng rất nhiều từ Scratch và được đồng sáng lập bởi Mitch Resnick, người sáng tạo ban đầu của Scratch, nhưng dù sao đó cũng là một bản viết lại hoàn chỉnh được thiết kế cho trẻ nhỏ.
Một số sửa đổi cũng giới thiệu các thay đổi trong cách tiếp cận cơ bản đối với máy tính, chẳng hạn như ngôn ngữ Snap! , bao gồm các thủ tục lớp đầu tiên (nền tảng toán học của chúng được gọi là phép tính lambda ), danh sách lớp đầu tiên (bao gồm danh sách danh sách) và lớp đầu tiên thực sự hướng đối tượng với sự kế thừa nguyên mẫu và các họa tiết lồng nhau, không phải là một phần của Scratch.Chụp! (trước đây là "BYOB") được phát triển bởi Jens Mönig với tài liệu được cung cấp bởi Brian Harvey từ Đại học California, Berkeleyvà đã được sử dụng để giảng dạy khóa học giới thiệu "Vẻ đẹp và niềm vui của máy tính" trong CS cho các sinh viên không thuộc ngành CS.