When did language appear?
According to articles cited on Wikipedia, language would have first evolved around 50,000 to 150,000 years ago.
Given how we've evolved from single cells into multicellular organisms, there is likely a point we reached where communication between cells had to occur in order to get things done (e.g., survive).
As we got more and more complex, some specialized communication developed itself (e.g., nerves) so that some cells were responsible for decision and communication while others were responsible for doing.
With the apparition of the brain, decision making centralized in a single location away from the parts it controls.
For a while those systems might have been reactive, animating us but not giving us any control over those actions.
We reached a stage where large multi-cellular organisms were living together and still had to communicate with one another. Using chemical/electrical signaling was not an option anymore, so we made use of gestures and sound.
Why do we have an internal voice?
A study found that this internal voice is reported most frequently for self-regulation (e.g., planning and problem solving), self-reflection (e.g., emotions, self-motivation, appearance, behavior/performance, and autobiography), and critical thinking (e.g., evaluating, judging, and criticizing).
This inner dialogue is a form of internal collaboration with oneself.
Neural imaging seems to support Vygotsky's theory that when individuals are talking to themselves, they are having an actual conversation.
I would be tempted to say that we have an internal voice because language is our way to survive. It allows us to process information coming from the world and turning it into actions. Although our ancestors most likely did not have advanced language as we do today, they had some form of language they could use to communicate. Much like cells in the body communicate with each other through chemical/electrical signaling, this internal voice is our way to communicate with ourself.
How can I be systematic in applying processes?
The first step is to always make your processes explicit. Write the various steps you go through while doing something. First, simply write down those steps as you do them. Then indicate the dependencies between the steps. You may notice that some steps can be done earlier in the process if all their dependencies are already completed.
As you write down more and more of your processes, make sure that you can easily refer to them. If possible, keep them in a centralized location where it is easy for you to edit them. In my case, I write my processes in this blog.
When you begin doing something which you've never done before, create yourself a document and write down the steps you are doing as you do them. Once you are done with the task, save your document.
When you begin doing something for which you already have a process in place, open up your process document and quickly glance at it. Start going through the process without using the document and jot down what you do. After you are done, look at what you did and compare it against the existing process. Is it the same or has something changed? Did you forget to do something? Did you do something new? Did you change the order of some of the steps? Apply the changes you think are useful to your process and repeat this discovery phase a few times.
After you've established a process, you can simply open the process document and follow it. If you notice that some steps are still missing, do add them to the document. If you version control your processes, you will be able to observe how it evolves over time.
One benefit of making your processes explicit is that it allows you to stop doing them for an extended period of time. When you need to do them again, you can simply look at them again and know what you need to do. It is also beneficial if you work in a team where you could delegate some of those processes to other people.
- Write a draft
- Expand the points of the draft
- Review the grammar with https://www.grammarly.com/
- Use keywords services to find topics that may be related and interesting to cover
What tools do I use daily at work?
- Notion.so I use Notion.so to track my day to day tasks and their progress. I also use it to write down any idea I have during the day that I would like to explore at some point in the future. I've described my task management system in more details.
- JIRA I work in a corporate environment, which means that we need to track tasks and assignments through a shared system. That system is JIRA. I don't particularly like JIRA after having used redmine for 5+ years and liking it. JIRA is slow, complex and cumbersome, which makes me avoid it at all costs. It's a shame, given that task management is one of the most important things in a software development business.
- Visual Studio Code I use VS Code to take notes throughout the day as well as to edit files from time to time.
- PyCharm My current job is mostly about writing python code, and PyCharm is the best IDE to do that. I use it to implement new functionality, write tests and debug issues. It is highly customizable which makes using it a joy. I also make use of the run/debug configurations regularly to test a variety of cases over the lifetime of the projects I work on. Finally, because I've used PHPStorm in the past, transitioning from PHPStorm to PyCharm was easy and painless.
- iTerm2 I spend a good part of my day interacting with various CLIs. I use a Mac and the terminal simply doesn't cut it for me and I prefer interacting with GUI tabs over having a tmux.
- Chrome Anyone doing software development spends a large portion of their time online looking for solutions to their problems/questions. I use Chrome mostly to use the Google suite, to use Jira/Confluence or to look at reports generated by the tool I work on.
- Google suite (Gmail, Docs, Sheets, Slides) I work in a collaborative environment which means writing and reading documents to share ideas, data, requirements and notes with others.
- Slack Working with others means communicating with others. While it's possible to talk directly to my teammates, sometimes it is more respectful to simply send them an instant message asking them to come to see you when they are available. Slack also allows communication with people in other teams, as well as people that are in separate offices.
- GitHub We use git exclusively at work as a way to do version control. We use GitHub as our central location to share our repository, as well as to do code reviews.
- Drone Whenever I push code to GitHub, Drone makes sure that a variety of tasks are executed to ensure code quality: linting, code formatting, type checking, unit/function/integration tests and documentation building. Having a build system reduces the time between faulty code is pushed to GitHub and the code being fixed.