On Wednesday, I blasted through some more Protagonist work, and started sprouting the seeds of a few more projects. Most importantly, I made further progress on thinking about how to make further progress.
At Stacey's Goals Workshop, I submitted the following fill-in-the-blanks exercise:
"This batch I am working on balancing learning a new language (Factor) and getting some concrete projects completed,because I want to feel the creativity of doing something new, but I also want develop my strengths in making real things.
So far I've tried combining those by doing a project idea in Factorand the result was frustration in both areas.
Therefore, my next steps are to develop the project in a language I know (Python), and find other ways to learn Factor."
We went through a process of understanding the goals behind the goals, and other clarifications. I gained two important insights into my current problem.
The first one happened when I was trying to explain why I want to learn Factor. I was able to notice that although Factor has some particularly nice typing and polymorphism properties and constructs that I ultimately want to use, the biggest reason I want to learn it, and the hardest part about it, is the fact that it is a stack-based, concatenative language, which is a new and interesting paradigm for me. Answering this questioned reopened the decision point of which such language to learn, which had become the base assumption.
The central problem that I am having with learning Factor in particular is that there are no teaching resources available, at least that I have found, that can take the learner in a guided way through progressively powerful idioms. If it is the case that there are such resources for Forth, which seems likely, then it might be a good strategy to learn Forth first, and then I will be able to transfer that skill to using Factor for its higher abstractions. A few people suggested this to me before it sank in as a Good Idea. One Hacker Schooler has even offered to pair with me on writing a Forth interpreter.
This brings me to my other insight.
The higher problem that I have been struggling with is how to balance my conflicting goals. I have tried tying them together, and it seemed suboptimal.
(I had a similar problem when I tried to learn Haskell through Project Euler problems — I did much better Haskell learning going through part of a course designed to introduce the language in graduated steps than to try to figure out what I need as needed. The strategy of doing projects in a language to learn it seems to be appropriate only after a certain base level of competence.)
If I do two things at once that are not tied, then I have to choose how to allocate time, and when to switch. A colleague who was listening to my problem suggested that I make switching be goal based, rather than time based. That is, I could work on Protagonist until I reach some minimal satisfying feature set, and then do something goal-based for learning a concatenative language, and then if I want to do another round of features on Protagonist I can. Or I could do something else. This seems quite sane.
I got to chat with two other women yesterday who came to Hacker School leaving children behind, and who are facing or have faced the challenges of building a post-motherhood career. This helped me process some feelings of guilt and fear that have been lurking.