Our projects and activities are designed to move students toward independence in, and mastery of, computer programming. Projects and activities are creative, demand creative input by students, and develop creative thought while also developing critical thinking and problem-solving. Students must code projects—engaging in project-based learning—but they must also engage in problem-based learning, doing thought work (Challenges in Hatch Studio JS and Major Projects in Hatch Studio Python) in order to develop skills that move them toward independence.
Designed around the principle of having a gradual release of responsibility, our software aims to honour individual voices by letting students and teachers choose the projects that they want to create.
One of the principle goals in the design of Hatch Studio software is that the learning experience is inclusive of a range of students while simultaneously facilitating a high degree of achievement for all. We are proud that Studio has been used at private schools specializing in the needs of students with a range of neuro diversities and learning difficulties as well as at highly academic public and private schools.
While Hatch Studio is structured to encourage a creative coding process (students can create what they imagine by coding what we call “Showcase Projects” in the same way that they engage in creative writing, freestyle music playing, or the creation of artwork), its end-game is having students reach what is considered the highest level of achievement in computer programming: mastery of requirements-based programming.
Requirements-based programming is like solving a word problem in maths or answering questions in the social sciences or humanities and is a skill required in industry.
In Hatch Studio, it is developed by:
1. doing many Projects (what we call given word problems): having exposure to a full requirement, allowing observation and synthesis of computational thinking, logic, syntax, and vocabulary, doing a lot of thought work and problem solving, and
2. having opportunities for creative coding in order to build background knowledge and information useful to requirements-based programming (this parallels the benefits of reading for pleasure and response writing).
Students experience a gradual release of responsibility in reading and understanding requirements and move toward independence in their reading comprehension while also achieving greater depth of understanding by solving increasingly more complex requirements.
Many activities can be classified as programmatic research. Some examples include: using the Hatch Studio Reference Manual and the Hatch Studio Debugging Guide as a means of furthering knowledge and understanding of the writing and editorial process used in computer programming, writing in Pseudocode in order to engage in a planning process (similar to writing an essay outline or building an argument with a series of flashcards), using self-documentation, using reference libraries, using reference communities like Stack Overflow, and finding and using many other sources of information that can help in the programming process. We are also exploring the concept of computing immersion and how this influences the student experience.
Programmatic research, which is done whenever an individual is coding with a real-world computer language, like any research process, can be done well or poorly. The more students have teachers who can guide them through the research process, and the more they have opportunities to practice programmatic research, the better the results. While programmatic research is one of the five competencies of computer programming, it is also a means of achieving deep learning of global competencies (and an increasingly important part of digital fluency).
Computational logic is the use of seven logic structures to communicate human thought to a computer. Logic structures interact with one another, impacting the development and expression of human thought to a machine. Complex, free, thought requires, and draws on, all seven logic structures.
The Seven Structures of Computational Logic
1. Variables (unrestricted keywords)
2. Functions (a collection of instructions)
3. Loops (for, while)
4. Conditionals (if, when)
5. Arrays (square brackets)
6. Objects (collections of variables)
7. Operators (AND, OR, NOT, etc.)
Computational thinking is the communication of human thought to a computer. It must be expressed with computational logic and with the intention of making a computer do things, otherwise it is simply thinking with no computational aspect. Computer languages and Pseudocode are the vehicles for the expression of computational thinking and logic.
We engage in computational thinking as a means of solving problems with the aid of a computer; this requires mastering five types of thought processes.
The Five Types of Thought Processes
2. Pattern matching
These thought processes are used to give clear commands to a computer. While they might seem daunting, they are nothing more than an approximation of human thought and communication.
Being an excellent computer programmer means being excellent at expressing ideas. The expressions of ideas requires a) planning the project and b) executing on the project. Being excellent at computational thinking is what makes for excellence in planning the project. Being excellent at technical skills and computer logic is what makes for excellence in expressing the project’s ideas.
The goal of computational thinking is to find the most efficient way to solve problems. It is a key part of programmatic literacy because understanding computational thinking and becoming skilled at its practice represents a savings in resources (time or computing power) that can be put toward solving other problems or toward materially improving the work done by a person.
Guiding questions in computational thinking include questions such as:
What is the most efficient way to solve the problem? What is the fastest way of solving the problem? Does this approach to solving the problem require the least amount of resources? Does this approach solve the problem and give the right answer? Can this approach be used to solve other problems?
Focusing on questions such as those helps to achieve efficiencies in computer programming. The questions themselves are mathematical in nature. Yet the nature of computational thinking—finding the best answer in the best possible way—is aligned with every part of human society, going well beyond the realm of mathematics in terms of the scope of its importance: it is the communication of human thought to a machine. As such, we see echoes of computational thinking in fields other than programming.
For instance, party planning requires asking questions such as:
What is the most efficient way to have guests find their seats? What should be considered when creating a seating arrangement? What problems might arise from these approaches? Does the chosen approach to seating guests create the least possible problems and maximize their happiness? Can this approach be used to solve other problems in planning this party?
Learning a computer language (ie: learning how to program a computer or being able to code) requires the development of thought processes and patterns that help to express solutions to problems (decomposition, patterns, abstraction, algorithms, and design).
Mastery of these thought processes means having a facility in identifying computational problems and being familiar with a range of tools that can help to solve them—or knowing where to find those tools. The best computer programmers have mastered the five thought processes of computational thinking, demonstrating their mastery by finding new, original, and efficient ways of solving problems.
In Hatch Studio, students learn to write with a real-world computer language designed to express a full range of human thought. They do this by learning to use unrestricted words. Since computer languages tend to have less than a thousand restricted (defined or given) keywords (vocabulary), these restricted keywords along with unique syntax are what define different computer languages.
In computer programming, the term “unrestricted keywords” is used to mean the creation of new vocabulary words in a computer program. The use of unrestricted keywords is key to the communication of full human thought to a computer: it allows a highly personal relationship between programmer and machine, and it is easy and important to create unrestricted keywords.
Moreover, most programming is done with the use of unrestricted keywords. The creation of new vocabulary (unrestricted keywords) is done by using computational logic, computational thinking, and syntax.
In industry, programmers periodically learn new computer languages, and when they do, the work involved relies principally on using programmatic research skills to find and be able to use that new language’s unique syntax and restricted keywords. Learning to use a real-world computer language is important in the development of global competencies because it builds confidence and background knowledge that includes deep understanding of the functional nature of using syntax and restricted keywords and using and creating unrestricted keywords.
Background knowledge and understanding about how computational logic and unrestricted keywords are intertwined is also a necessary part of reaching a high degree of achievement both in computer programming and in the global competencies of communication and critical thinking. This is also true of syntax since, without proper syntax, a computer will not be able to understand human thought and logic. To be clear, profound background knowledge and understanding of the relationship between computational logic and syntax and vocabulary is best demonstrated by competence in creative and requirements-based production—with a real-world computer language.
In the workplace, people are often expected to work in teams. All code is created in teams and Hatch ensures that students learn key skills related to communication and collaboration so they are more prepared for the future.