Scott Hanselman

Stop saying learning to code is easy.

June 18, 2016 Comment on this post [70] Posted in Musings
Sponsored By
WoC in Tech Stock Photos used under CC

(The photo above was taken at the Microsoft NYC office of three amazing young developers working on their apps.)

I saw this tweet after the Apple WWDC keynote and had thought the same thing. Hang on, programming is hard. Rewarding, sure. Interesting, totally. But "easy" sets folks up for failure and a lifetime of self-doubt.

When we tell folks - kids or otherwise - that programming is easy, what will they think when it gets difficult? And it will get difficult. That's where people find themselves saying "well, I guess I'm not wired for coding. It's just not for me."

Now, to be clear, that may be the case. I'm arguing that if we as an industry go around telling everyone that "coding is easy" we are just prepping folks for self-exclusion, rather than enabling a growing and inclusive community. That's the goal right? Let's get more folks into computers, but let's set their expectations.

Here, I'll try to level set. Hey you! People learning to code!

  • Programming is hard.
  • It's complicated.
  • It's exhausting.
  • It's exasperating.
  • Some things will totally make sense to you and some won't. I'm looking at you, RegEx.
  • The documentation usually sucks.
  • Sometimes computers are stupid and crash.

But.

  • You'll meet amazing people who will mentor you.
  • You'll feel powerful and create things you never thought possible.
  • You'll better understand the tech world around you.
  • You'll try new tools and build your own personal toolkit.
  • Sometimes you'll just wake up with the answer.
  • You'll start to "see" how systems fit together.
  • Over the years you'll learn about the history of computers and how we are all standing on the shoulders of giants.

It's rewarding. It's empowering. It's worthwhile.

And you can do it. Stick with it. Join positive communities. Read code. Watch videos about code.

Try new languages! Maybe the language you learned first isn't the "programming language of your soul."

Learning to programming is NOT easy but it's totally possible. You can do it.

More Reading


Sponsor: Big thanks to Redgate for sponsoring the feed this week. How do you find & fix your slowest .NET code? Boost the performance of your .NET application with ANTS Performance Profiler. Find your bottleneck fast with performance data for code & queries. Try it free!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Hosting By
Hosted in an Azure App Service
June 18, 2016 5:23
"Sometimes you'll just wake up with the answer." I can totally relate to that.
June 18, 2016 5:32
Great post, Scott. In recent years have seen a lot of entry-level developers come on the market who say that they have no passion for it, did it because they thought it would be easy, and are disappointed when they see the real world. Those people are likely to either languish in entry-level positions, or pursue different lines of work, in time. We have the hardest time finding those who are passionate and will stay with us for longer periods of their career, anymore.
June 18, 2016 5:52
I tried 5 times and gave up. I mean I really, really tried. Just like I never could take the time to understand Chinese or Spanish, it is the same with C++ and Java. Its just not for me and I believe that's ok. There are other areas of computing I am good at. Whether it is troubleshooting, PC/Hardware Repair or explaining how something works. Is beneficial to learn about code? It probably is, but I don't think you should be forced to learn it. Steve Jobs didn't learn it and I think his vision probably has done more for computing than most computer scientist out there.

We can go into the details too: Graphical User Interfaces, a networked workstation that offered object oriented programming, mobility with the iPod and iPhone. Of course, all of this would not be possible without writing a single line of code, but you can write code but not have a decent vision.

For me, I will stay on the side lines and watch in amazement. I might try out Swift just to see how attractive is.
June 18, 2016 6:04
Very informative to new programmers, even if I disagree with part of it. Yes, PARTS of programming are hard, bit not the parts most people think. Developing the solution from a vague client concept is hard. Dealing with moving goalposts is hard. Dealing with team members who have different coding styles is hard. Dealing with unrealistic expectations is hard. Writing the actual CODE is the easy part.

I've been doing this for over 30 years and I STILL struggle at times - mainly with the politics, but it's still a struggle.

But an amazingly rewarding one... at times...:-)
June 18, 2016 6:22
I'm 40 and I'm pretty good at the basics of programming, but can I still get somebody to do your first positive point?

- You'll meet amazing people who will mentor you.

I feel like I read code, I watch videos, I follow the step by step guides but I can't get past this beginner level of coding and knowledge of knowing exactly what is happening with the code, to take the next step.
June 18, 2016 6:38
Great post.

I also agree that code itself is difficult. All of the things Jon Biddell mention above are challenging as well. However I do disagree with his point that the code part is easy. I am confronted with challenges on a daily basis:


  • third party libraries failing to function as documented. If they're documented at all.

  • Tooling/compilers literally failing due to compiler bugs or bugs in the IDE (you do have a functioning IDE for this tech, right?) How can a new person know the difference between a compiler bug and their own mistake?

  • The infinite idiosyncrasies of browsers across the absolute MASSIVE field of devices people use the web on. If you do web development on any serious level and don't find yourself confronted with annoying issues once a week you're either a savant or not working enough. And the fixes here are never obvious.

  • Memory management issues. You haven't had a good time until you've had to resolve a heap fragmentation issue.

  • Threading. Need I say more?



I think, as engineers, we have a tendency to take for granted our ability to read and write code. It's a bit like your native spoken language. You intuitively understand how it works. It is basically impossible to externalize yourself from that bubble and truly grasp what it's like to learn from scratch. You don't remember. You can't.
June 18, 2016 7:07
I've heard from some respected developers that it's preferable to teach kids about systems before/instead of teaching them to code. Does that ring true with you? I'm not sure how to go about that. If you've worked with younger kids (6-12), what are some approaches other than the variety of robot/turtle programming games?
June 18, 2016 7:38
In general, Coding is easy and rewarding for people that like and know how to code as Math is easy and rewarding for mathematicians.

If you don't like to code it will not be easy, like if you don't like math they won't be easy either.

On the other hand if teached correctly almost 95% of the students by their freshman year in college would be proficient coding and in computer science, in the same way that almost 95% would also be proficient in advanced calculus.

Would all 95% that are proficient in advanced calculus become Nobel Laureates in physics or pursue a Ph.D. in math, physics or engineering, no. Would all 95% who are proficient coding get a degree in electrical engineering and computer science, neither.

But no subject is that difficult that someone can not become proficient at it if taught correctly (on the other hand if not done properly many (most) students will most probably will simply end hating anything resembles that subject.

Maybe they won't code much ever after but will have a background that will allow them with further inquiry critically assess the quality work and productivity of "professional" developers or better computer scientists.
June 18, 2016 7:46
To me programming is an art and it requires talent as well. It is not easy because we need to learn it and than master it. Without a good determintion to learn coding can be frustrating. However, coding is something anyone can understand and it must be practical to learn it. Patience is the key to learn coding.
June 18, 2016 7:47
Totally agree with that! Maybe coding is easy but how to code with best practices to be efficient and the same time human readable it's a diary challenge. Don't stop studying and... https://www.youtube.com/watch?v=1k8craCGpgs
June 18, 2016 7:58
This isn't a fair analogy because learning to program is MUCH harder; but to me, this is like saying "hey, just make a pull request" to an intermediate or even experienced enterprise programmer. There IS a lot of overhead and understanding necessary to "just make a pull request" that not everyone has exposure to on a daily basis.
June 18, 2016 8:19
Could not agree more. I get driven nuts by a developer friend who keeps declaring that Javascript is easy. Easy for pro's, yes. Beginners, no. I had a couple of faulty starts with programming. Two separate books (back in 90s) had example code that was so broken, that I thought it was me. I finally happened upon a book whose code worked. Very annoying. Nearly drove me away.
June 18, 2016 8:26
And we should tell them that there's an excellent chance their job will be sent overseas or given to H1-B visa holders, and that they need to have a backup career plan so they can do something else when they "age out" of acceptability for development jobs.
June 18, 2016 9:11
- Parent of 3 kids, all boys, professional programmer for 16 years; and teaching them to use a computer for problem solving but not for a career in programming.

Ted
June 18, 2016 10:59
What "learning to code" means has changed so much in the 40+ years since I got hands-on at highschool with a 12-key card-punch and a copy of McCracken. When the initial threshold of success is a line-printer graph of a sine wave or the like, positive reinforcement comes easily. Nowadays with so much software around in daily life, the bar for something that feels like a first success is that much higher, and you're probably doing it in web browser where you have to work with multiple languages from the outset.

Most people who will be saying that learning to code is easy will have benefited from having gotten aboard the train that much earlier, and will be the sort of person for whom coding is indeed easy.

June 18, 2016 11:20
I've been programming for 30 years and there was a time when it was relatively easy. You could do a 3 month course, get a job and be productive in a team straight away.
These days if you write a web app you would need to know for e.g. Html, Css, JavaScript, C#, Sql with all the frameworks,libraries & patterns like MVC, Entity Framework, Bootstrap etc. As fast as you master something it changes or is redundant.
Just learning your IDE, source management and staging/deployment environments etc. is a challenge in itself.
If I was having to start from "zero" today, I'm not sure I wouldn't be quickly overwhelmed and simply give up.

June 18, 2016 11:31
I couldn't agree more with this post Scott. I'm only going to re-iterate what's been said in the post but like many developers, we all come up against difficulties when coding whether you're an expert in the field or not. It's an endless cycle of learning new things and for most, it is a good kind of challenge.

I do feel bad for those who are given the wrong impression around coding though. Setting them up with high expectations and then them hitting the real world can be quite demotivating. All I can add is, if you've hit this step, keep going. You started learning to code for a reason, it might be difficult but it's worth it!
June 18, 2016 11:47
Another big thing is that coding attracts certain types of people and honestly the nature of it lends itself to various psychosis that make it both easier and harder simultaneously.

For example, I have extreme OCD. That's a double edged sword. It gives me the ability and thought process to make amazing things - but it also frequently makes it very hard to keep going and solve problems, depending on very random and often uncontrollable factors.

A lot of older programmers became such because they had passion and a way of thinking that lends itself to the environment. There's absolutely a certain level of what could almost be called masochism required to really get deep into it.
June 18, 2016 13:00
@Steve Gilham, @Darryl: Full Ack! I started coding in the early 90s while I was in elementary school. At the time, we had MS DOS and QBasic and starting was easy and rewarding, because you had one language, not that much overhead and success was easy. There were also some games (I'm sure most folks here remember Gorilla and Nibbles) and me and my friend spent many afternoons to mod those games and add new levels and capabilities.
So for me, coding is really easy now but I had the benefit of a comparable easy start. At that time, the difference between the learner and the advanced pro developer were not that big and the stack was similar for everyone. Now, you have different target platforms (small embedded IoT devices, smart phones, tablets, computers, gaming consoles, cloud applications), different stacks and frameworks, connected applications that consume APIs that run in the cloud, etc. It is also very difficult to stay up to date with all technologies, because every "direction" is constantly evolving at huge speed and the day has not enough hours to keep up with everything.

I see this problem every day at work, because currently I am mentoring two new developers on our team who came straight from university but do not have the technological background yet. They do not have problems with basic programming constructs or the syntax of the languages but do have problems with the structure of the code and the necessary frameworks. Solutions for their problems are easy most of the time (for an advanced developer) but they do not have the skill yet to see it immediately. So I am trying to guide them to the process without giving them the answer directly (so let them make the mistakes first and then discuss the problems with the code and get them on track for a working solution).
June 18, 2016 14:02
Coding is not easy for, say, 98% of people. I worked in the field for 35 years, and actually started in 10th grade in 1968. Most people could never be good at coding no matter how hard they tried. The reasons are (not in any particular order): very high attention to detail, ability to create and remember complex logic structures, and the ability to see the essence of the data needs of a specific situation, understanding performance (speed) issues, handling of errors and other exceptional situations, and making the software's interactions with people easy to understand, consistent, complete, and enjoyable e.g. nice imagery, just the right amount of text, etc.

Add to that keeping up with languages and frameworks, and receiving specifications that need more work, and some of the other issues others have mentioned. No one will learn to do any significant kind of code unless they love and are gifted at problem-solving creativity, logic design, extreme attention to detail, and sitting quietly at a computer for hours every day.
June 18, 2016 14:30
Completely agree!

I've been teaching myself Python/Django since January and Javascript since last month. It's very hard, but incredibly satisfying when I get something to work or fix a seemingly intractable bug. Every day I look at code or work on a new tutorial I learn something new. Very cool!

And you're right about trying other languages. Really starting to enjoy Javascript. Might be my missing glass slipper! Shh, don't tell Python...
June 18, 2016 18:12
"it's totally possible. You can do it."

Exactly.

When people say it's easy, I think that's what they're trying to say but are doing it wrong. Maybe communicating is hard too...
June 18, 2016 18:28
This post resonates with me a lot. I'm a software engineer, so is my husband. We both have been doing it for about 5 years.

I have always had trouble shaking the feeling that you were supposed to be innately good at coding or something. My husband can be told to do some google-interview style puzzle question and he will write it right out with best possible run time, significantly faster than I could. He's good at these sorts of things, and by comparison I'm really not. So I have always thought to myself "I'm bad at code." As such, for years I assumed that I would never be good enough for one of the "cool tech companies." Because I was bad at code. Because it was hard for me and code is easy for people who are good at it.

But this: "You'll meet amazing people who will mentor you."

At CodeMash last January I met Matt Johnson (the guy who does the date time stuff, I think you know him Scott). And he looked at me and must have thought to himself "well, this one isn't terrible, she just needs to be pushed a bit." Or something like that. IDK. Anyways, he got me involved in OSS, so I'm a collaborator on Moment.js now. And I love it.

And about two months ago I went back to Matt and said "hey, can I come work at Microsoft like you do?" And he said "sure, you'll be good at that."

Long story short, next month my family is moving from Minnesota to Redmond so that I can go work in Open Source Programs at Microsoft. I was good enough for one of the cool tech companies, or so it would seem.

Someone just had to tell me that I was able to do that. Because coding is hard for everyone.
June 18, 2016 18:49
I retired last year after 40 years developing software. Solving problems with software was the most rewarding career I could've imagined for myself. There were a lot of difficult problems to solve and staying "current" meant a lot of work - especially with all of the historic changes to the industry in that forty years. On my last day of work, I was still retiring bugs from the list. Management just didn't look like fun. Try it, I say. Give it an honest effort and you'll know whether it's for you or not.
June 18, 2016 19:03
I think the whole purpose for the "coding is easy" mantra is that we want to tell non-developers that the barrier is not so high. Of course it is difficult. People pay lots of money for other people to code. The thing is that it is not this alien thing with strange characters and inexplicable key combinations. It is easy to explain most people the code of a program that adds two numbers, and that's the whole point of "coding is easy". "Don't be scared, come by, you'll understand."
June 18, 2016 19:30
Nice post, but I would say that coding is easy, the hard part is to master it. Today we have a lot of IDEs that helps a lot in the making of code, even more in some of them you don't even have to code to get a final result. Beside that point, if you want to create a code that prints something, it can be really easy or create one that counts to 10 or something, and if you think about it, you are actually coding. Of course it escalates REALLY quickly when you want to do something more and at that point it gets really frustrating with the solutions, the bugs and even more with the magic behind the computer that we can't explain (I think that everyone that made code can releate to the fact that sometimes we code something that works and we don't know why).

So for me, create code is not that hard and is approachable by anyone (as you said) but you should always know that is going to be has hard as your project expect it to be, even more I would like that the clients know this when they ask you to change something....

PD: sorry for the bad English, I'm not native for the language.
June 18, 2016 21:01
I really don't think the problem is if we say that it's easy or not, the question is what we put in to "easy"
As far as I see it there are two challenges:
*First*: If you aren't interested you are not going to learn it. We are trying to push coding as the ultimate solution to everything but not everyone has an interest. If you don't like problem solving programming is probably not for you (although my experience is that most kids love problem solving if they can just try solving it THEIR way, and not the way grownups tell them to do it)
*Second* We teach that "easy" equals "without effort". It doesn't. Especially things like coding takes effort, effort and time. It doesn't necessarily mean it isn't easy, it just takes time and focus. Many things takes time however it doesn't mean it can't be easy if you know what you are doing. Pulled pork is not a dish you can cook in 15 minutes, it takes time, yet it is very uncomplicated to make it. Still, most people wouldn't dream about making it a weekday, not because it is difficult as such but because it takes time. Coding takes time and effort and a whole lot of other things - but it doesn't mean it is difficult - at least not to someone who has the time, the chance to switch off any other distraction, the interest and the will to solve problems.

When people hear "easy" and think "fast" or "without effort" they are going to be very disappointed, just like the article says. However if we stop thinking of "easy = quick" the attitude will change.
June 18, 2016 22:59
The canonical text on that subject: http://norvig.com/21-days.html
June 19, 2016 0:21
I've been programming for close to 20 years now, and I have to disagree. I've experienced the evolution of technology and tools for a generation, and I've witnessed how much the bar to programming has been lowered. The measure is not really about how complicated programming is at its extremes, it's about where the median bar lies. That bar is now really low.

Yes, there are parts of the industry that require extreme programming skill. Security, highly distributed systems, NLP / AI. There are plenty of really complicated aspects to programming.

But if you looked at that list 10 years ago, it would also include: web programming, game engine development, etc. -- thanks to technology, we have easy to use web frameworks that abstract almost all of our work, and game engines like Unity that basically remove the engine as a programming concern for most games. Those things are now becoming much easier for developers to manage.

The reality is that not all programming involves AI (and the bar is getting lowered there too). You don't need a team of senior developers to build your typical social media site anymore, and there are plenty more positions that junior devs can fill and still be productive. Give a junior dev Unity and they can probably build you a working game. Give them Rails and they'll build you a reasonably well architected website (with all the bells and whistles). You would never see that kind of thing a decade ago. So when someone says "programming is easy", they don't mean we can solve P=NP, but they do mean that there are plenty more roles for developers to get involved.

And frankly, pretending that programming will be perpetually hard is an exclusionary mindset that makes industries old and stale. Software engineers are problem solvers, right? Well then, if programming is hard, it's only "hard" because you want it to be. Making programming easier is a solvable problem-- it's one that has slowly been solved over decades, and will continue to be as new tools and tech lower the bar even more.
June 19, 2016 3:26
Hey Scott, this was a very well written point of view. And inspirational too.

To me, coding is like sitting in front of a jig-saw puzzle - spread out across the kitchen table.

Finding pieces that fit together is rewarding. Having that happen often can make it seem easy. But then you find out that you've just been sort of lucky. Then it's on to the harder pieces to put together. Then you find out that you've got some real challenges.

Over time, as I've gained experience, this dynamic hasn't changed much. My satisfaction comes from the fact that my projects have become much harder & complicated. And somehow, I still manage to code, test and deliver delight to my customers.

For the youngster's out there thinking of learning to code: Give it a try. You won't know if you like it unless you do.
June 19, 2016 5:13
I also love when I wake up with the answer to a coding (or general tech) issue. I feel like my brain kept going while I was too tired to stay awake. Great job brain!
June 19, 2016 6:17
For me coding is a creative process filled with challenges and opportunities to grow. I am 62 years Young and can't see myself not coding.
June 19, 2016 9:18
Hey Scott. I guess you know why Apple is promoting as much ppl to start coding: they need new apps as e sales regarding apps is dropping. So they tell everybody to start coding. For the same reason they introduced subscriptions.

Don't get me wrong: I agree with your post and it would be very good if we get more good programmers! We have good programmers here in Switerland but need way more.
June 19, 2016 11:29
Laying bricks is easy. Building houses isn't.
June 19, 2016 12:27
From a beginners perspective, the logic of coding seems relatively understandable and is covered by many many training resources.

What I have found much harder is understanding how everything fits together, when to use what tools etc.

After looking at quite a few books, I found one which really resonates: Automate the boring stuff with Python : practical programming for total beginners. The best thing about this book is that it allows you to do real life useful things and also things that are much more exciting than printing Hello World.
Rob
June 19, 2016 12:58
"Sometimes you'll just wake up with the answer."

That is completely false, you always wake up with the answer...
June 19, 2016 18:37
I'm totally on board with what you're saying ScottScott. Everyone else who's commented has a good perspective on this. You may have inadvertently overlooked something however in your post...

The picture you chose to title this post has been associated with your post all over Facebook and Google+. The picture depicts 3 young women with router laptops, presumably coding. I'm concerned that the visualvisual, along with the title, might read that these women don't actually know how to code and are deluding themselves into thinking is "easy". I'm not a self-identified feminist, but I think it's important to see this as a non-gender issue, and that by using a more blended visual with a diverse demographic, it would send a more balanced message to new learners.

Taking a devil's advocate position, I would see that the message could possibly be seen as "women are naive about how difficult coding is", and a young woman might be discouraged after seeing that. For me I think it's important to send the best possible message without unintended messages, especially in this male-dominated field.
June 19, 2016 22:49
Thank you! I would add that the complexities and challenges of programming know no prejudice. The language and the machine do not care about the programmer's race, color, religion, sexual orientation or gender. Even better, the joy of persevering to a working solution is also provided without prejudice.
June 20, 2016 0:56
This post is a disappointing reply to those who say "coding is easy". I agree with those here that it is.

Coding is two things: (1) Problem-solving; AND (2) implementation. The hard part is the 1st and some commenters have pointed that out. This is also the case for all parts of life.

The 2nd part is easy, but unfortunately it is what this post actual spoke about and what everyone who is agreeing with the proposition that "coding is hard" is referring to. If you are going to bring up "poor documentation", or "buggy 3rd party libraries", then by analogy you are saying: What is hard about fixing your house is: "having/using the wrong/poor tool", "plastic parts", and "mismatching parts". Every time I go to change a light fixture, take off a door to paint, or replace a window's screen, nothing is easy. The reason is that the "environment" is not identical to the directions or just the act of adding/removing changes something. Generally, the new light fixture is of different width, or the new bolts are of different size/length or threading from the existing junction/electrical box, the wiring has some issue, or I simply mismeasured, etc.

So, I respect my electrician, plumber, handy man not because they have and know how to use the right tools and know the right parts and pieces, but because they know how to take my desired change, and make it happen, solving the inevitable issues one finds with actually building something.

It is very disappointing that this is rarely recognized. And this is why those of us who want to say "programing is for everybody/coding is easy" are disappointed in y'all: "Coding" to us -- what we mean to say -- is problem-solving, not tool usage, and we believe everyone can and ought to be (much) better problem-solvers. "Coding" seems hard when you dont know the mechanics because you cant get your ideas easily implemented. Learning how to use the tools just takes time. What is hard is solving the problem well and thats what we want to teach everyone.

Get on board.
June 20, 2016 1:04
NOW you tell me.

For those who posted and are curious how to get better - seek out a Meetup/user group nearby. You can learn a lot from a book and/or online but nothing beats sitting with someone and having them help you 1:1.

Jim
June 20, 2016 2:24
There were 90 students in my college who started Computer Science at the same time as me. 60% of them failed the very first programming course and switched fields.

Code is a lot more than just variables, loops and conditions. Saying that code is easy is like saying that just because anyone can learn to write basic sentences, they can also write a novel.

I gave a free coding workshop for non-programmers once and it went well. Most people were able to follow along and many completed the final assignment. The first steps are easy but it gets hard really quickly, just like in every field.
June 20, 2016 5:11
Thank you for saying this. I cringe every time I hear a politician talk about retraining displaced factory workers or coal miners as computer professionals. I firmly believe that some could make the transition but most wouldn't. Just like you could train a group of people to paint pictures, you would not succeed in turning them all into artists (myself included). You have to have a seed of talent and the passion to grow that talent. If you're missing the seed or the passion your chance of succeeding is very slim and your chance of being happy doing it is even slimmer.
Jay
June 20, 2016 9:57
I think the whole "coding is easy" talk is merely part of the effort to reduce the already prevalent notion of difficulty surrounding around STEM topics. I don't think many people will learn that you are a programmer and think that is is easy by any means. I say a little white lie like "coding is easy" is worth it to get more children/adults to give it a go. Those that fall out and complain they were duped haven't lost much, but those that do stick with it will benefit greatly.


Sam Smith
Technology Evangelist and Aspiring Chef.
www.innorix.com/en/DS
June 20, 2016 13:36
"Sometimes you'll just wake up with the answer."

Just did that, this morning (pesky XML namespaces!)
June 20, 2016 14:31
"Laying bricks is easy. Building houses isn't."

Nailed it.

June 20, 2016 15:00
Like so much else in life (acting, writing, playing soccer etc.), learning to do something is fairly easy, but learning to do that same thing *well* can often take a lifetime to master, if even then.
June 20, 2016 16:08
To claim writing software was easy is the same as saying maths or physics were easy. They are, for some, but not for the majority of people.

Everyone knows a little maths or physics, but there's a major difference between "knowing some maths" and being proficient maths. Also, people proficient in maths or physics will specialize at some point, because there's just too little time to suck it all in. Same goes for coding, you're either a jack of all trades or a master in your field of expertise, can't have it all sadly.

And contrary to what some posters said, implementation isn't easy either, all the time new frameworks appear and although you have a clear idea of what you need to build, you'll struggle with syntax and semantics of the new framework more often than not.

This coming from a guy who's got 35 years experience and is currently taking the Angular2 deep dive with a native client/server coding background.



June 20, 2016 16:12
Things are possible in programming but not EASY.
June 20, 2016 17:04
"Painting is easy when you don't know how, but very difficult when you do." - Edgar Degas
June 20, 2016 17:16
The problem with to learn to program is that it is like a video game, every now and then you level up and find that what you know doesn't work any more. After a lot of time spent teaching I boiled it down to "The Five Knows of Programming".


  1. Know what the computer does.

  2. Know how to create a program.

  3. Know how to automate a task that you yourself can perform.

  4. Know how to think like a computer.

  5. Know how to structure and manage your solutions.



The first two levels can be very easy to do, particularly with modern tools. By "Know level three" you can take something you would be able to do yourself and write a program do perform that action. One example I use when teaching is deciding whether or not you can see a particular movie. If your age is lower than the rating for that movie, you can't go in. When you write the program you can imagine yourself selling tickets and deciding whether or not people can come in.

Level 4 is quite different. You have to let go of how you would do a task and try to think how you could make a computer do it. Sorting is a classic example of this. If you gave me 20 numbers to put in descending order I'd be able to do it, but I'd not really be able to tell you how I did it. To write a program to sort 20 numbers you would make it do the task in a way that a human never would (for example bubble sort). This is the hardest part of programming. Up until you hit level 4 you can think you are doing very well. Ifs and loops make sense, as do variables. And you've even written the odd program. And then wham, you suddenly find that you can't do it. And I mean really can't do it. This can be very painful and demoralising.

People who break through Level 4 and stop learning in danger of staying there and writing code that is very hard to maintain and manage. And some folks have talked about a level 6, where you can communicate with others about what you have built and what you want to build.

I've always sold computer programming as hard to do, and very hard to do well. It's something you should never stop learning how to do. But it is the most empowering thing you can learn.
June 20, 2016 18:29
Coding is easy. Architecture, design, writing supportable code, writing enterprise level code, etc... is hard.
June 20, 2016 19:26
I would put in a disclaimer, coding is hard but most people can do at least some of it with effort. But being a programmer, being a professional with a career of using code, writing code that does specific things, in specific ways that are often dictated by others, with attention to current best practice with test-ability and re-usability and maintainability...? No, that is VERY hard. I've told more than one parent that approached me and said my child is interested in computers (I'm a Scout Leader) do you think they can do it? A long nuanced answer follows, yes they 'might' but you actually need to have more than just good math marks which is usually how the conversation opens. Really to be a programmer requires a certain mental 'mode' that frankly not everyone has and I don't believe you can 'force'. So, yes by all means have your child take high school | university intro programming and see how they like it - but just taking the courses does not a programmer make. Pay attention to their interest, their frustration tolerance, flexibility, satisfaction when they succeed. Understand that programming has a large mental management component as well as it's obvious technical skill requirement.

Thanks Scott!
June 20, 2016 19:35
I'm programming since my childhood, which is past for 30 years now, but I must say that the difficulty today is the massive amount of possible options to start. In the past, you had Basic as a starting point and later got eventually to some higher level languages like C, Pascal or etc. Today there are a lot more languages, IDE's, libraries and so on that it is not that easy to understand the very basics since much is hidden in the background. When getting into trouble it's becoming quite hard to understand a real problem which is hidden behind a wall of library and automatically generated IDE code. That is also frustrating for the professional and I guess it's even more for entry level people who are wondering why things are happening by magic without an obvious cause. The increased complexity of systems is really hard to handle. Although I think the new little computing sets like Raspberry or Arduino give back at some point a better understanding, since they're quite limited platforms. That may helps to focus on a real problem instead of being blown away by the vast number of options when starting a simple programming project. At least, without real affinity and also certain talents as it comes with all learning subjects you can't get above a certain level of knowlegde and understanding. But luckily by using the amazing amount of web resources erveryone can get fairly good knowledge about coding and it certainly helps a lot looking behind the "magic" of todays technologized world and unraveling it.
June 21, 2016 6:08
Thank you so much for clearing all of this out, i my self struggled with the concept of programming is easy, i hear it alot i believed it, and i was in for one hell of a shock. but lucky for me i love it so i just pushed on.
June 21, 2016 15:27
This article changed my attitude about telling people"programming is easy," but probably not in the way the author intended. Those who are committed to becoming programmers will hit the hard parts...and fight their way through. Those who aren't committed will give up. And this is how it should be. Programming is not a gentle community hugfest. It is an epic battle of man vs machine. And I want hardcore hackers with battle scars on my team!😎 So, go ahead and tell people "programming is easy"... it'll separate the men from the boys quicker.
June 21, 2016 16:03
Programming is easy...compared with dealing with people.

Thats why I'm a programmer and not a manager! :-)
June 21, 2016 16:31
Coding is easy.

Developing software is not easy.

Being able to understand and communicate the distinction between the two is also not easy.
June 21, 2016 18:52
My answer to how to think well is always the same:

Read non-fiction, specifically philosophy


All the "great" philosophers built large complex, (rather) self-consistent systems -- ethical and moral systems -- and that is ALL a program/system is and should be.

Want to design better large complex systems? Read Mill, Dewey, Chomsky.

Want to be able to implement such systems? Become an expert with tools, by using them everyday.

Both are effort: The 1st the mental effort required to learn, the 2nd the will-power to put in the time.
June 21, 2016 18:52
Great points, Scott. Thanks for saying what needed to be said.

Looks like there's a typo here:

"Learning to programming is NOT easy but it's totally possible."

Maybe you meant "Learning to program"?
June 22, 2016 1:09
Short videos for easy to remember and free videos Free to learn JavaScript and angular. https://watchandcode.com
June 22, 2016 11:10
To be fair, learning to code badly is fairly easy - that's why so many people do it
June 22, 2016 21:08
Leaning to code is easy. You can do it in 10 minutes with the right help. Learning to build a production-quality and maintainable application; now that is hard. Even professionals that have been at it for years are bad at it.
June 27, 2016 18:41
Basically, coding is easy. we have to learn it with enthusiasm. I am an android developer and developed a movie app called cinema box. it is really good. Cinema box 2016 is very popular.
June 28, 2016 16:55
The act of "learning" the basics of coding is a somewhat arbitrary and simple thing to do. A few days/weeks and you can get the basics of how code works and some of the terminology (if you knock it into your head during that period).

However, those who are claiming that "coding is easy" are more interested in selling you a course than they are actually producing valuable coders. Pretty much everyone who is legitimately claiming that it's "easy" is selling you some kind of online programming course that teaches you the absolute basics and then shoves you out the door into the wider world. It's disingenuous and dishonest, but we as a community are partially to blame by sometimes underselling the difficulty in an effort to engage more people.

I think the "coding is easy" camp is a dangerous one and serves to grossly undervalue the capabilities and impact of the craft. I personally don't want to see a skill like software engineering/development going the route of graphic design, whereby everyone hiring thinks it's something that any old monkey can do and therefore there is no value (and there is an over-abundance of people trying to get into the field).
June 30, 2016 19:04
I think the whole point is: Learning how to code is easy, but learning how to code well is not - and you'll usually not be able to create cool stuff without knowing how to code well.
July 04, 2016 13:45
Nothing is easy as you know more about it!
July 05, 2016 14:25
I usually say that getting into code is easy, but that it can also be complex and frustrating. I don't want to scare people away from trying it, so I think it's important to make it sound as little frightening as possible.

I also often say that learning to code is not harder than learning a language or learning an instrument, it's even likely to be easier. I like to compare it to something that people might have already have experience in so that they get a realistic view of what they are getting into.
July 07, 2016 4:15
Even coding can be difficult. A newbie co-worker confronted another syntax error and said: "These computers are so persnickety." And programming is hard for many because to computers are *very* different from people. Techniques that work successfully with people: flattery, B.S., etc., do not work at all.
July 07, 2016 12:18
Try new languages! Maybe the language you learned first isn't the "programming language of your soul."


A particularly good piece of advice in a post filled with good advice. I'd add something to the effect of, "if it's really not working now, don't give it up forever - you might just need a few more years of mental development."

Things I didn't get at age 20 make more sense now in my mid-30s. How many other people failed to really learn how to program when they were younger but were able to a decade or two later?

I did ok as a CS undergrad, but would definitely not claim to have become a useful programmer in either C++ or Java. SQL worked out well enough, though.

I wound up as a sysadmin and years later, started using PowerShell a bit, then a LOT (get-stuff | where-object | select-object ... a bit like SQL). I'm sticking my toes into other things to support my PowerShell habit, like Ruby (GitLab and Jekyll are great)

What does it say about me that the programming language of my soul appears to be one built for Windows automation? :)

July 20, 2016 11:31
It's fantastic to have good mentors, and I have been lucky to have had some really good ones.

The best mentors tend to be really open about the fact that they don't know everything. They may even let you choose a route they wouldn't take, if they think you'll learn from the experience.

For my part, I learn by questioning everything. It's not that I don't trust my mentors, but I have to prove them to myself in order to learn.

I'm now at a point in my career where I mentor other developers. The good ones always question me, the really great ones make me question myself.

Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.