Malawi is a poor nation with a large young population. Heavy reliance on foreign aid. Need for more innovative thinking. Not many exports.
My plan is to teach functional programming in Malawi, give people access to a global market, and ignite tech culture at a grassroots level.
This is the total amount allocated to Cardano and FP in Malawi.
Timeline ( After receiving funds ):
-- Month 1 --
-- Month 2 --
-- Month 3 --
-- Months 4 to 6 --
Budget (500,000 Ada requested):
-- 240,000 Ada --
-- 260,000 Ada --
Team Members So Far:
Some more about me:
I love Programming, Physics, Linguistics, Category Theory, System Dynamics, Cultural Anthropology, Cellular Biology, Astronomy, and Graphic Design. I started programming when I was 12 (25 years ago) in QBasic with the help of my mom who did some Basic programming for work in the early 80's. For the last 15 years I've spent 2-4 hours a day studying, and mostly focus on programming language design and how language features affect your productivity, developer experience, and the way you think about structuring your code. The things that brought me to Cardano were the use of Haskell, formal verification, and the fact that a hero like Phil Wadler was working on the smart contract language.
My favorite language is probably Elm, in which I'm highly confident in my skills.. I've also spent a lot of time reading Haskell code.. mostly the Elm compiler. I think Elm is a good place to start teaching, because of it's notoriously helpful compiler messages. It's like Haskell, but simpler.. a good gateway drug to Haskell.
I don't have a lot on my Github page (mostly silly little Elm apps), but I've linked it to my proposal.
Learning and Teaching
-- Some Theory --
When someone teaches something, there's often a mental model for the subject in the teacher's head. The goal is to replicate the mental model in the minds of the students, building up new knowledge upon prerequisite structures.
This is a valuable approach if the subject you're teaching has a rigid structure, like how an algebra builds upon simple rules to provide structure for describing more complex problems, but relying on a limited source of information and possibly taking a standardized testing approach to assessing a student's competency in the subject produces a more static equilibrium in understanding of the system space of problems to solve related to the topic at hand.
Restrictions are often beneficial if they can steer someone clear of avoidable pitfalls. Such is the case in functional programming where things like immutability can give you assurance that data isn't being changed from underneath you and that you can easily test the correctness of your functions, because the lack of side-effects means that the same inputs won't produce different results. This gives you the freedom to work on the function in isolation from the rest of the system which means holding less code in your head at a time. When you're trying to learn how to solve a problem in the real world, restrictions on how you can approach the problem will structure your strategy for implementing a solution, but the learning process benefits from being able to reach out into the unknown and destructure information from a potentially infinite source.. This is the categorical dual to teaching a known structure.
Having a medium that allows you to prove the viability of your ideas is a good step towards weeding out any knowledge structures that may contain misconceptions, and if you require students to teach each other what they learn, it forces them to take mental note of the dependency hierarchy of information they are trying to share and also how to explicitly articulate things in a way that's easier to understand.
If students are taking their education into their own hands, there is potential to produce a wider range of knowledge in the group, which allows for more dynamic coverage of the system space of solutions to a problem. It also means less a reliance on an instructor. There's only the need for someone to focus on facilitating the desired environment for learning to take place and maybe steer people in the right direction if they go off course. It's also easier for students to take the teacher's role after they've gained a little experience, which produces the possibility for exponential growth in the reach of education if you have teams that split and produce more teams.
-- Some Application --
I see mob programming as a good model to allow students to teach each other and figure out solutions to problems as a group. It also requires less computers, which will make it cheaper to scale up. More eyes on a problem would mean less of a chance of mistakes and more insight into the trade-offs between different approaches.
A group engaged in mob programming also wouldn't require much to scale into a startup because the style of learning involved models how teams usually work in the real world anyway.. People discussing how to move forward, while they take turns at the keyboard typing what the others decide they should. New developers get to start out with opportunities to actually write code even before they might entirely understand what it is that they are typing while the others help them learn.
Struggling through problems, with insight from mistakes in approaches taken, can also produce perseverance in finding a good solutions, even if they might take more time and effort to implement. A well researched and proven system design is often worth waiting for -- which is why, I think, people in our community appreciate Cardano.
Project Ideas:
6 Months living in Malawi. 15 years working with Malawians to achieve goals in their communities. 25 years as a hobbyist programmer.