It’s really just about typing
Everyone should program, or well perhaps not everyone, just as not everyone should ride a bike, or drive a car, or browse the internet. Nor will everyone program even if they could, just as not everyone wants to read a book or figure out how to pay their taxes online. But in this day and age, we take it as given that most functioning adults should gain skills such as the ability to drive a car, be literate, or put together a PowerPoint presentation. In a historical sense all of the above used to be exclusive domain of specialists, who were privileged to know such elusive arts such as the how to read the written word, operate a model-T or type on a typewriter. But as the utility of such skills grew in an economic sense, skills such as typing became an assumed skill. And people, as they always have done adapted. And as more people adapted the adaptation process for others became easier. As reading and writing became more important, society produced teachers to educate the masses. When cheap automobile production was possible, not only did cars proliferate but more user-friendly features for using a car proliferated. Automatic transmission wasn’t a thing until a gear system was invented.
I don’t think I need to convince you that in our time the computer is the technology that defines our era. Conceived of less than a century ago, the contraptions have made their way into almost every facet of our lives. And for the vast majority of us literally nothing in our lives have been left untouched by computers and it’s single greatest byproduct: the internet. Like many pieces of technology before it, computers have gone through stages of development. They started out as expensive, bulk, and cumbersome contraptions that required teams of scientists to operate. Then in the past 10-20 years we’ve seen them make their way into our homes, and more recently into our pockets. And what we can do with these comparatively cheap computers would blow away any of computers available even 30 years ago. Though most of us unfortunately only tap into a small fraction of what our computers can actually do. But I don’t think it’ll stay that way, potential even if only tapped lightly can be so revolutionary that it can become commonplace overnight.
Most computer users interface with their machines as consumers. You open a program that was likely designed by a large company and you work within the confines of what this particular company has given you. Overtime if you are diligent, you become aware of and master the outer limits of what is available with a program but that’s where it stops. You’re out of luck at that point, you either have to search for a new program or hope that said company will create the features you’re hoping for. Learning the basic building blocks of computer programs, vastly expands what you can do with your machine. I’m not advocating that we all learn how to compile binary, what I hope to draw your attention to is that programming languages like python, JavaScript, and a host of others that are not cryptic languages that only a select few can comprehend. But comprehensible and dynamic tools that are not out of the realms of most people’s understanding. Very early, dare I saw, primitive languages were as incomprehensible as a move-able type printing press would be to a modern person. But today, modern programming languages like python, JavaScript, R, and many others are powerful yet comprehensible and I feel that no one has rung the bell to the general public, you too can take part in the revolution that is modern programming.
For the underemployed living in their parent’s spare room
When deciding to create this blog I thought of people very much like myself. 20 somethings without any clear path towards how to make a living in this post-modern world. To you all let me say, being literate and productive in theworld of technology will bring you out-sized benefits no matter where you end up. In the end to build a great website or application requires no degree, no family inheritance or any kind of permission. To create a website or applicationone needs only the willingness and patience to begin such an undertaking. The path forward in the grand sense is purely meritocratic. If you happened upon my blog as a young person struggling to carve a place in this digitized world, knowthat I’m on your side. By learning the tools of this era you are on the right side of history. You like your ancestors had to jump through hoops to make life workable, had to learn new skills make life work. If you’re older than all Iwould say is that the saying “you can’t teach an old dog new tricks” has likely never interacted with an old dog that happens to be hungry. They’ll learn a new trick or two when needed. I’m pretty certain that most people could benefit fromexpanding their skill set to include some amount of programming. The world doesn’t necessarily need more software developers. Instead I firmly believe that no matter what your station, you have something that you’re good at that could inform the creation of an application, or impact the design of a website. By learning to program you’ll be cutting out the need for an intermediary to translate your ideas into code. If you opt to go down the career path of as a full time developer, that I’m rooting for you. But if you’re looking to just put together a simple website for your family’s company or doing some data analysis for a cause or project your passionate about, I am cheering for you even more. We tend to discount the small ways we can all make our world a better place. You don’t need to develop the next Facebook to make a difference, and really the world might be a better place if we all made our own blogs and profile pages.
Where to start
While in university, I briefly filtered with programming. A short trip through the google trail left me overwhelmed. The number of programming languages and the many facets that they flowed through left me overwhelmed. Front end and back-end languages, object oriented and scripting languages, vim vs Emacs. The programming world is replete with choices and paths to take. There’s really no right way to learn how to program, if your product does something useful and does it well consistently, its a good product. How you learned how to do it isn’t of much significance. But starting out it’s easy to freeze in the face of all your choices on how to move forward.
What I would suggest is to start a project. Make it small, make it useful, make it personal, make it expandable.
Start small, one web page, a few nice charts from a dataset. It’s easy to underestimate how long things will take and the errors and hang ups you may encounter are unknowable. You may be used to only performing tasks that have set timeframes. Especially when starting out, I found that I was constantly surprised by how difficult simple tasks seemed and how easy seemingly more difficult tasks were. If you find yourself feeling frustrated in your programming journey, shrink the scope of the problem your trying to solve. The beautiful thing about code is that even the most complex programs are nothing more than a collection of small tasks. An big problem can be broken down into it’s components and worked out piecemeal and by starting with a small project you can more clearly see that.
A ship in harbor is safe, but it’s not what ships were made for. Starting out you’ll definitely be nervous about someone actually looking at your pathetic first project. But feedback is vital to improvement, plus knowing that what you’re making will perhaps one day be used by others will keep you motivated. My first projects were all volunteer services done for NGOs and charitable organizations. While I wasn’t being paid to do any of the work, I did want to give them something useful in a timely manner. With that all in mind, I found it easier to push away distractions and the temptation to leave things half done. Also when looking for ways to expand upon the projects I immediately had sources for inspiration when I would ask the NGOs what else I could add to make the projects better. So I would highly suggest making your learning projects be actual production ready applications. They can by all means still be the product of a beginner but still with an end use in mind.
Learning any new skill takes time. And learning to program, is pretty open ended when it comes to time commitment. I personally accept and believe that I’ll need to keep on learning every moment I keep on programming. Therefore I suggest getting started by doing a project about something you care about. Lest you grow bored of whatever project you’re creating. I would say it’s less of a priority than making something others will use. But if you can make an online dashboard for the fantasy football league you’re really into, then you can cut the inevitable frustation with your joy of football! My first programming project was a data analysis project, I have always loved statistics, maps, charts and the like and creating my own made the hours I spent writing code a joy rather than a chore. It’s fair enough to ask yourself weather or not the finished product will bring you joy.
As you may have noticed watching your operating system continuously update, programs take a long time to develop. And really it’s fool hardy or lazy to look at a piece of code and think of it as something etched into stone. Programs and applications are constantly rewritten and expanded upon. Your first project should be too. If you’re doing some data analysis and you get to a point where you think you’ve uncovered all the data has to tell. It’s time to add more data and mine more correlations. If your machine learning algorithm’s accuracy is stellar, it’s time to integrate it into a online service. If you were learning how to play an instrument, you don’t just stop with one song or one genre if you really want to master the music. The same goes for programming, plus thinking up new features or extensions to your project gives you obvious new paths in your learning.
I personally learned to program for blogs and other free resources. This blog is nothing more than a homage to the people who put their experience into content that I freely consumed. Even if this blog is an incomprehensible heap of text. I feel compeled to create if nothing else than to offer a humble homage to those who’s material helped me get to where I am today. Feel free to reach out to me on github or linkedin if you have any comments or questions and I’ll do my best to help you out.