Table of contents
Since October last year I'm taking software development seriously. Almost a year since I got a bad case of Covid.
Here's what I started with.
- Basic knowledge of Python and Data Science libraries like Pandas.
- Some knowledge of the Processing language.
- Passing knowledge of algorithms, from math class. Never wrote a line of code though.
- A lot of experience, but no expertise (here's an explanation) with C# and Unity. Mostly useless as it is very Unity-specific.
I have a long love-hate relationship with C# and Unity. But that is a story for another time ;)
So there's me...
I had absolutely no Idea about software engineering. Nay, software. As programming is just not enough to build software.
But I have one thing going on for me.
Come on Jorch! Don't be so dramatic!
I know, I know. But, hey. I have to sell myself, right?
something, something ... personal branding, something... storytelling... whatever... Hire me!
A scientifically-minded approach to what-you-don't-know
Well, the only thing I know how to do is research. Dry, academic, please-just-end-my-suffering research.
So what if I research what I don't know?
Research to figure out what it is that I am ignorant of.
Research to learn what I didn't know I didn't know. But should know.
Of course, I could just watch tutorials. But then I have no guarantees that they will cover everything I will need. And I would place my bets that they don't. We could mull over the economics behind those bets... another time. Let's not get sidetracked.
Besides. If I have to place the completeness of my skill in the hands of someone. I'd rather that someone be me.
The term "lygometry" was proposed by Amin Toufani. To mean the process of measuring "what we know we don't know". You should watch this TEDx talk where he introduces the idea. Here. I'll just embed it in my post
Here's the executive summary.
- Instead on trying to learn what is already there. Throw yourself at open problems. Either things you know you don't know. Or things everybody knows nobody knows.
- Solving already-solved problems is for the most part, a waste of time.
- Don't mistake abundance of information with sufficiency of knowledge.
- There's an epidemic of knowledge inflation, specially in industry.
- We have failed to create environments where it is both safe and encouraged to openly say "I don't know".
- And we have failed to create a culture where people are encouraged to figure out what it is that they don't know.
- But who does lygometry well? AI and Children.
- Children keep track of the things that don't make sense to them. They don't hesistate to ask. Their egos don't get in the way. Nor does the fear of being shamed for not knowing. As we grow up we get "educated" to avoid behaving like that.
- Some of the most sophisticated AI models keep track of hypothesis that don't map the data they are given. That is, they keep track of the difference between what they know and what they don't know. Then use methodical lygometry to home-in into the open questions.
Lygometry: reprise for a software dev.
Let me elaborate a little about what I think this means specifically for software development.
Do you reeeally need that 10 hr video tutorial to learn the basics of Python? Don't get me wrong, FreeCodeCamp is great and an amazing resource. But really?
With regards to following step-by-step project tutorials. You can only get yourself to the level of millions others just-as-inexperienced-as-you developers by spending your time building that "portfolio-worthy" instagram clone app.
At worst, you are just wasting time. Ask me how I know!
What is knowledge, even.
Traditionally philosophers working in Epistemology (the philosophy of what-we-know and how-we-know-it) have this definition of knowledge:
Knowledge is justified, true, belief
That is. Knowledge is having information which satisfies certain characteristics. But having information nonetheless. I bet It matches pretty closely with what you think knowledge is. Do you search for "memorization" apps? Do images of a brain spring to your mind when you read the word learning?
Well, often times so do I. And with just reason. This notion of knowledge is ingrained in the assumptions of the cognitivist or classical school of cognitive science. Whose ideas are by far the most well-known among the general public.
But you would be wrong to think that that's it. Let me reframe "knowledge" with the help of the philosophy of action (check its entry on the Stanford Encyclopedia of Philosophy if you are curious).
For now, let us arbitrarily change what we think knowledge is. From "having X information" to "being able to perform Y task efficiently and on demand".
Simply. Knowledge is being able to do stuff. Why? Because regardless of whether you have infomation, being able to do stuff implies that you have "stored in your brain" whatever it is required to do the thing!
Be pragmatic, programmer!
If you are curious, these ideas of action-orientedness are ingrained on the 'embodied cognition' movement in cognitive science. Here's a general-public-friendly introduction. And here's the Stanford's Encyclopedia entry.
There are roughly three broad approaches to cognition in cognitive science. Representational, Dynamical Systems-based and Evolutionary. All three have important things to say about what cognition is.
Don't, even for a moment, think that knowledge is not "having information". I am NOT claiming that. I am just introducing an additional perspective on knowledge.
With this post I am introducing just a smudge of the perspective of the (very) broad "systems" view. ...
Go even deeper
Then we can go a little bit more into meta-knowledge. What if, the thing that you are able to perform efficiently and on demand is "figuring stuff out"? And what if the "stuff to figure out" is what no one knows. Or what very little people are able to do?
The plot thickens...
That's certainly an ambitious goal. And it is something you will have to figure out for yourself. There's no guide. Obviously.
But we have some pointers towards that goal. Thats what lygometry is for!
I will attempt to show you the way I try to do this myself. Hoping you find value in it.
Here it is In a nutshell.
- How to research: Turn yourself into a "why" machine. Asking why implies multiple 'whats' along with the relationships they hold with each other.
- What to research for: Relations between things and between ideas are what actually matters. Not so much the individual ideas, nor what things are. This is an insight I learned by studying category theory. In which you shift the focus from asking what is X, intrinsically, to asking what is X, given the way it relates to the rest of the things in its context. In fact, that change in perspective is the whole point of category theory!
- How to figure out what to research: Use lygometry!
- Aquire knowledge from your research: Become able to explain those relations and those why's you uncovered. Remember that we framed knowledge as performance of actions. Also, become able to build that cool instagram clone. Why not!
The plot is now so thick you may choke on it...
None of these steps proceed by use of hard rational deduction. But they are not irrational either. Instead. I go hunch by hunch.
If you have read some of my other posts your mind may be converging into an idea at this moment.
That there is this kind of soft reasoning. That is at the heart of creative exploration. That is very much the type of reasoning that both scientists and children use to satisfy their curiosity. And perhaps, the kind of reasoning some AIs do.
So does this means don't take courses, don't follow tutorials?
Of course not. I am only asking you to reframe knowledge. And to make it a point to get knowledge about acquiring knowledge.
I use courses and tutorials. But with two goals, thanks to this reframing.
- I should end up being able to perform after that experience.
- It should shed light into open questions.
That is. I care very little about "acquiring" information. Or remembering stuff...
Here's one of the most useful tips I have: invest your time in materials that are just uncomfortably above your level. That way, even attempting to understand will make you grow. I really like Manning Publication's books because they tend to be above my level.
Well then. Where am I now?
So, let me paint a picture of where the "edge" of my knowledge is right now.
- I am able to write my own abstract data structures.
- I have a working knowledge of algorithms and data structures.
- I have some knowledge of theoretical Computer Science (complexity, grammars, languages)
- I learned how to use Linux and bash
- I learned what's the deal with NoSQL. I also learned what SQL even is XD
- I am learning about REST-style architectures and system design.
- I learned to use Node and Express with considerations towards architecture.
- I learned about automated software testing, from unit test to E2E
- I'm halfway through the University of Helsinki FullStack MOOC
- I'm halfway through the University of Helsinki Haskell MOOC
- I'm learning about Content Marketing and Storytelling
- I'm learning about UX
- I'm learning about Product Design
- I'm learning how to Draw (could you guess? XD)
- I'm learning Elm.
- I'm learning about Algebraic Data Structures and Typing Systems.
- I'm learning about Functional Programing.
- I'm learning about software composability, architecture and design patterns.
- I'm learning Abstract Algebra and Category theory for functional programming. (and for fun :D)
Am I an expert in any of these? No. Not even close. But these are my open questions.
If you ask me to build a full stack app with React, Node, Express and MongoDB I will be able to figure it out.
I you ask me to build a full stack app with deno, oak and Postgres. I may be able to hack my way through it.
Because, as the title of this new blog series goes...
I Will Code for Food.
So, Hire me already? (Epilogue.)
This section will replace the "Epilogue." section of my "writing everyday" series XD
Wait wait wait! You want some book recommendations?
Mind, Body, World: Foundations of Cognitive Science by Michael R. Dawson. A beautiful introduction to cognitive science in a "history of" format. A book everyone interested on the mind should read. And it's available for free!
The Cambridge Handbook of Cognitive Science edited by Keith Frankish and William M. Ramsey. It prresents a broad perspective of cognitive science.
Category theory for programmers by Bartosz Milewski will shift how you think about what programs are. Has surprisingly little math jargon. And is very readable. I linked the book in blog post format. But it is also available on amazon.
Please let me know if you are gonna start using lygometry in your own life and work.
See you again... one of these days!
Do you find my stuff useful? Give me some feedback! Getting comments is also very motivating!
Would you like to help me keep doing it? With cash!?