I live and breathe applied mathematics. Challenge problems are what I thrive on.
As such, programming comprises the vast majority of the “work” that I do. Theories are nothing without evidence, and my laboratory is the computer. I am a computational scientist, being trained as a mathematician.
Programming has enabled me to do so much more than the research I perform as part of my dissertation work.
One can argue that my most marketable skill after graduation will be my software development experience.
Simply put, being able to program has opened up endless possibilities.
After learning the first language, picking up others is much easier.
I did not have formal instruction; rather I picked up style and knowledge piecemeal as I took on projects that interested me.
What I have come to realize is that computers are really stupid.
The way I learned programming–as a tool, rather than a language with which to instruct dumb machines–made computers seem utterly magical.
They are not.
Computers are profoundly stupid.
I finally came to understand that everything on a computer is pretty much just text files. All those fancy programming languages are just text files that in turn interpret other text files.
All those applications are just layers and layers of text files referencing one another and communicating with the brains of your computer.
Programming has opened up a door to the world of machines.
This is our superpower as humans.
I learned to program as a problem-solving tool. This was life-changing on its own, and I fully encourage every student studying a science to learn some kind of programming language, even if only to familiarize oneself with the modality of thinking.
But I have to point out the inadequacy of all the “hiding of complexity” that occurs during the teaching of a programming language. I think it is worth spending a little time reviewing some very core fundamentals of how a computer operates.
These skills generalize to all languages, and should be able to enable a student to know just enough to be able to use the internet to search for what they need.
Learning what question to ask is half the battle
And I realize now that I spent so much wasted time in my life asking the wrong questions because I did not really understand how a computer works.
That’s all I was missing: the knowledge that computers are DUMB.
And this finally brings me to the topic I want to discuss at length: how can we bridge the gap between the use of programming as a problem solving tool and the use of it as a means of communication with your machine.
For this reason, I encourage everyone to pick up a UNIX distribution and learn how to set up a programming environment in one to achieve whatever goal one may have.
I realize this is a big ask for busy students, and the learning curve can be steep if there isn’t some amount of hand-holding and guidance. But …
it has a 10X reward,
(I promise)