I believe learning how to program is manageable in this day and age, with just about every answer being one google search away - there’s a multitude of free books, videos and even courses available online for any topic under programming, and even a website literally created to have people solve any kind of programming inquiry or problem you’ve had. Despite this, it’s not uncommon to hear people say how programming is difficult, and (for the extremes) how anyone who says otherwise is a liar.

Don’t get me wrong; while I do think it’s manageable, I still believe learning how to program can easily be made difficult due to a certain trend of circumstances - take it from someone who got a C in an introductory course to programming.

What’s easy to forget after learning numerous languages, frameworks and concepts is how daunting programming looks to someone not familiar with it. The start of anyone’s programming career, which mainly involves learning a programming language, can be daunting enough to weed a significant number of people away from the industry. For instance, take a look at the “Hello World” code of Java, a relatively common language both in the industry and as a coding language of instruction.

public class Main {
	public static void main (String args[]) {
		System.out.println ("Hello, World!");
	}
}

When I first typed this, I absolutely could not fathom what was going on, and could only infer what the code meant from cue words like println. When I checked google for the meaning of the rest of the syntax, I saw concepts such as classes, the main method, access modifiers, string arrays and even return in the simplest explanations among the top search results. Then again, no matter how simple an explanation could be for these concepts, it’d be daunting for anyone who just learned how to compile code to read about them, let alone remember them.

Eventually, I accepted that I would come across numerous concepts that would be cleared up in time, and how I simply had to stick it out until it’s appropriate to learn them. The practice of typing foreign syntax that “just worked” continued to the point where I did not know or care about what constituted a good, working code. My priorities then shifted from understanding every line of code I’ve written to just getting the program to compile. Afterall, I found it difficult to care about the syntax of my code when my course then focused on honing my problem solving skills, and gave me perfect marks in spite of submitting badly written code.

My main point in sharing my experience is to demonstrate a small subset of what a person has to juggle when beginning to learn how to program. Aside from learning the syntax of a language with no sense of familiarity whatsoever, new programmers are also expected to become accustomed to problem solving methods that aren’t common to life outside code (eg. Nested loops, recursion), to learn core concepts (eg. OOP), and to remember good coding practices (eg. usage of global variables, remembering built-in methods and data types, reading API). These standards, when unaccompanied by the guidance of a capable professor or tutor, do not only push a person to their learning limit - they also force him to stick through the constant feelings of frustration, inadequacy and being overwhelmed without any promise of things eventually getting easier. After all, it wouldn’t be unreasonable for people of any aptitude to expect the beginning and adjusting period of learning a practice to be simple and unaccompanied with a large amount of negativity.

What people don’t normally expect is how the learning curve, while unending, eventually becomes less steep - instead, thoughts of how programming “just isn’t for them” or “is just too hard” flow through their heads with the constant negativity they’re subjected to. Combine this with being exposed to people who seem to know what they’re doing with their code and seem to just “get” programming, and you’ll understand why it’s not uncommon for people to drop out of CS or programming early as a whole.

I’d like to conclude with a message to anyone currently in the process of learning how to program for the first time: the frustration is normal, no matter how fundamental knowing primitive data types, learning how to create method signatures or other basic concepts may be. People honestly don’t give enough credit to learning the basics as opposed to learning the more advanced concepts of programming, and that’s normal as well. The feeling of “not being good enough” or “not knowing enough” will eventually be remedied by getting the hang of programming as a whole, which can only be done over time. The indicator of a good programmer is not someone who knows the whole breadth and depth of all programming concepts, but someone constantly able to adapt to any kind of new technology that pops up in the industry.

That being said, relax! Programming is a one trick pony that makes you know less as you learn more - and the sooner you’re comfortable with coding and the uncertainty that comes with it, the better you’ll become at handling any kind of problem thrown at you in time.