Question Everything: Self-Aware Software Artisan
Our goal is to transcend languages, tools, and yourself — so you’re able to learn and use anything needed to achieve whatever you find worthwhile.
Read Self-Aware Software Artisan: Product Development for the recommended technology and the tools for scalable software development.
🏆 Your progress 🌏 🏄♂️
After you’re done reading: check the ⬇️ bottom of the page — you’ll find next parts of this series that cover diverse set of related topics!
📣 Coming soon!
I’m continually refactoring this series.
Subscribe to receive a single-page Manifesto: Scalable Software Development distilled to the ultimate truths; from the viewpoint of an Software Artisan.
Data Sculptor, Architect of Systems and Products.
Founded startups in the fields of Education and Sports and led teams of up to ten people.
Worked, as a Systems Architect, Frontend, and Backend Developer, for a product company, a digital agency, and as a remote freelancer.
For more information, check my Personal Website.
When I was a kid, I would constantly ask my parents “Why?” about everything. When they asked me the same — I’ve responded: “Zato!” (Croatian for “That’s why”).
In my younger years I didn’t know how to express myself; except doing what was on my mind, and replying ‘Zato’. Now, as I grew, I’m able to explain things, relatively, better.
This whole essay is but a series of answers to ‘Why’, which I’ve collected throughout my life. As time passes, the depth of touched ‘Whys’ increases, thus the answers become better, more universal, and more truthful. But that doesn’t mean that my original “Zato!” (“That’s why”) haven’t been truthful, it was — it was the best I could give at the time.
Topics of Self-Awareness, Work, Individuality, Social interactions are extremely broad and ever-evolving; thus trying to convey them in a simple manner is a challenge, and it always will be. At the same time —this makes them necessary to explore.
Form your opinions. Know that I’m writing from my experience and thinking.
Let’s build upon each other’s experience and intuition.
Humans making sense of the world
- think, relatively logically, about the world,
- think, relatively logically, about the problems they care for,
- form solutions,
- find tools to use for, more or less, effective way of solving problems,
- use the tools in a scalable, transformable way and
- are able to evolve ideas.
To cut corners or to invest proper time to learn?
As tools, languages fade away, and new ones come into the play… As multi-field languages emerge (TypeScript — for Frontend and Backend development)… As your life interests and purpose evolve …
Remember to observe how you interact with the environment and continually re-calculate in which direction, and with what kind of activities you feel most at ease with yourself, looking long-term.
Be mindful of what you’re observing, what you’re learning about, how you are processing it, why did the guy made, or explained it, that way; what is another way of doing things; how would a similar language or thing upgrade or degrade environment in some aspects…
Human being, that is mindful in his actions, needs longer time to bootstrap his system of processing and acting on the World and seeing tangible effects. We are not here for 2–5 years, but rather for a few decades (or centuries), and we have enough time to do the things in the right way.
What would you rather be? A guy or girl going through life, cutting corners and never being satisfied with yourself as you didn’t press into anything ever? Or the one that goes with ferocious will and determination to figure out the secrets of life in every thing, no matter how big or little is it?
Feeling as you learn
We learn better when more of our senses are activated at the same time.
Input type, ranked from lowest to greatest involvement of senses:
- reading textual documentation,
- listening to audio lessons,
- watching video tutorials,
- journaling, alongside before mentioned items,
- hands-on experience: building as you learn, alongside before mentioned items.
The more you feel, the greater potential for understanding there is.
Document as you learn
For any new language, framework or tool, you learn — journal the evolution of your understanding.
If you can’t explain something in easy terms, you don’t understand it properly.
Share your journal on your website, for others to learn from your experience.
Writing a Journal isn’t as stressful, e.g. as writing a book, but it serves:
- you to recap what you have learned,
- others to learn from your findings.
Build as you learn
As you learn about any new technology or way of thinking— build a simple app, website.
Building, while learning, will test and showcase your understanding or a lack of, allowing you to progress even further.
Publish your work online so others can learn from it, use it and contribute to it.
Algorithms — chess for Technology enthusiasts
Most people get introduced to Algorithms while applying for a job, and the necessity to do it creates aversion towards it, for many people.
During all of your working life, you are working with algorithms, even while developing a ‘plain’ website. You are going through a list of steps and procedures to get a certain result —i.e. you use an algorithm. Algorithms most of the people work with, during their work life, are, relatively, simple.
Algorithms you’re involved with if you’re applying or working in a more advanced job are going to be, relatively, more advanced. More advanced algorithms have advanced ways of processing and transforming data while having additional constraints in mind (performance, memory consumption, …).
Don’t hate on algorithms, you use them everyday. Play with them, discover deeper realms of logical thinking. It will open you up, bring you a different perspective and benefit you in the long-term.
There is a lot of different types of algorithm problems. Play with the ones that vibe with you the most, and then branch out to other types. There are ad-hoc problems, graph problems, dynamic programming, … Pick the type you like. Develop an enthusiasm for them.
What you showcase with an algorithm implementation is: logical thinking, problem de-composition to smaller units and construction of the solution from the smaller units to form a working package; while having additional constraints in mind — like memory or speed.
It is a scalable and a reasonable way of checking the problem-solving capabilities of a person.
Algorithms and Data structures go hand in hand
You could have a great recipe, but if you don’t have the tools — you’re out of luck. (Or you could get a recipe to create the tools. :))
Our algorithm (the way we process and transform our data) uses data structures (variables: numbers, strings, arrays) to manage data between it’s steps.
There are more advanced data structures to hold the data and allow easier processing and transformation, e.g. stacks, queues, trees etc.
All of these “Advanced data structures” are extensions of the plain ones (numbers, strings, arrays, …), but with a feature added or removed to them.
Firstly, don’t identify yourself with the degree, the high school, or the college you went to. The educational system and the environment can give you certain perspectives on life, as any other activity. It’s up to you to process the information, conclude for yourself and lead yourself to whatever direction you feel makes most sense for you.
Looking from the history perspective— educational institutions are breeding you to become a valuable member of the workforce. Most of the time — they do not exist to further explore your soul and create a job tailored to you, but rather to transform you so you can fill the shoes of the existing needs in the workforce.
Nobody knows what kind of work we will do tomorrow. The same is true for you — you don’t know what you’ll want to work on tomorrow. Rather than trying to find a solution for your whole life, observe yourself, and adjust your actions as you change throughout life.
If you are applying anywhere, find something closest to your interests and people you want to meet there.
Differences between schools and teachers
There are amazing teachers across the World. But as with anything, they are far in between. Find the teachers and institutions that have the enthusiasm for the topic you are interested in.
- is one that bursts with enthusiasm for the topic he teaches,
- encourages you to think for yourself,
- asks you questions to nudge you towards the direction you’re already looking at, but you’re scared of making the first step.
Going to college is, in most cases (especially true for the technology field), more of a social experience, than a valuable educational investment for the future.
The college will connect you with different people and you’ll see what kind of characters you like. Some of the friendships will last for life. On that side, it is a marvelous endeavor.
While you’re there:
- start, and finish, a project, on your own, or with your friends,
- think about life and how you want to live,
- learn about anything interesting to you,
- have fun.
Don’t waste your time on things or people you don’t care about.
College and the technology industry
To work in the Technology Industry, in most cases, a college degree or any other paper for that matter is not a requirement. Your past experience, portfolio, and will are what matters.
There is a plethora of tutorials online. Create a project, open-source it, apply to your first job or create a job surrounding your idea.
Be able to play in an ever-changing World
Software Development evolves, as everything else. Fields previously inhabited by thousands of Developers are left in the dust; while others are being upgraded to form bigger, more encompassing fields.
Web Development, as well as Desktop App development, Mobile development… All those fields have a lifecycle of theirs.
It is necessary to learn how to learn to be able to play with emerging ideas as soon as possible.
New language or a tool, as a different perspective on the World
You want to be able to speak a decent amount of languages.
Every language has an ecosystem associated with it. Ecosystem has people in it, that gravitated to it based on the affection towards solving things in a certain way.
Thus, speaking another language will bring you slightly different perspective on the problem and ways of solving it.
Know where you are good
The world is so complex that nuisances of it pass by us in the grind of the day. For some that is more true than for others. The velocity of an individual’s life, and the configuration of problems one faces, has an impact on this.
There is no single point where you will stop and figure out what you’re good at. It is an ongoing re-calculation of your relationship to everything else. Moving in any direction gives you better glimpse of your relationship to the approaching situations, while those — you’re moving away from — echo from your memory.
What you could do is — nullify obstacles to the stillness that you feel right now, and see how the calculation of your status turns out. You should get a clearer picture of what you’re good at and what you’re interested in. Every position you are in has a plethora of perspectives and information you can extract and build upon.
Every job or effort could be done respectfully and “kak se spada” (Croatian for “as it should be done”). The world is made of many levels in many directions, and choosing what stack or configuration sits well with you — is what you’ll recalculate during your whole life.
It is important to constantly look at the world with curious eyes as that is the first step to bring you closer to what you are. People call this happiness, stillness, point of true service to yourself and others… However you call it, it seems a good idea to see how close to it you can get.
Drums, guitars, piano — different strokes for different folks
It is the same with anything you do. Being that Software Development, painting, writing, thinking… There are subtle differences in tools, ways of doing things.
Experiment with everything that makes sense for you.
Amaze yourself and others with the touch you add into the mix of everything you’ve ever witnessed.
Picking a Programming language
Building blocks of a Programming language
Language, being a natural language (like English or Croatian) or a programming language, have the building blocks that make up bigger structures like words, sentences, and in the end — building up to the stories, essays, books.
Scalable programming language
For a language to be scalable, just like you want your startup project to be, it needs to have a small number of reusable and mutable building blocks.
The most optimal situation is where you need to learn the smallest number of blocks that you can mutate (prefix, suffix, or any other type of mutation) and connect them in a certain way to express what you want.
Mutations that you could do on the blocks need to be as simple as possible and have a hierarchy of composition that allows us to construct emotional, scientific, or any other type of, state.
A language that is small in size, but modular and extendable is the one that is more logical than those that are not. Thus, that language is easier to learn and it has more chance of getting evolved as more people are able to play with it.
Programming language needs to allow you to express your thoughts in the easiest manner possible, and have those thoughts easy to extend and modify.
Find this useful?
👏 Clap so more people see the story.
❤️ Support your friends and colleagues at work — share this essay with them!
🚀 Use it as a, Company or Personal, Manifesto! Fork and Adapt on GitHub!