The Getting Started Questions

Tuesday, August 29, 2017

FullSizeRenderI hear a common set of questions from beginning programmers who feel they are struggling to get started.

- Why is programming so hard?

- How long does it take to be a good programmer?

- Should I consider a different career?

It is difficult to give a general answer to these questions, because the answers depend on the characteristics of the questioner.

I was fortunate to be a beginner when I was 13 years old. My parents saw a Texas Instruments 99/4A computer on sale at a department store and, on a whim, made a purchase. I find it ironic that department stores don’t sell computers anymore, but you can use a computer to buy anything you can find at a department store (as well as the junk bonds issued by those stores).

Despite all the improvements in the hardware, software, languages, and tools, I think it is harder to get started today than it was in the early days of the personal computer. Here are three reasons:

1. Applications today are more ambitious.  ASCII interfaces are now user experiences, and even the simplest modern app is a distributed system that requires cryptography and a threat model.

2. Expectations are higher. Business users and consumers both expect more from software. Software has to be fast, easy, available, and secure. 

3. Information is shallow.There’s plenty of content for beginners, but most of the material doesn’t teach anything with long term value. The 9 minute videos that are fashionable today demonstrate mechanical steps to reach a simplistic goal.

In other words, there is more to programming these days than just laying down code, and the breadth of knowledge you need keeps growing. In addition to networking, security, and design, add in the human elements of communication and team work. This is similar to the point in time when, to be a good physicist, you only needed to grasp algebra and geometry.

My suggestions to new developers are always:

1. Write more code. The more code you write, the more experience you’ll gain, and the more you’ll understand how software works. Write an application that you would use every day, or try to implement your own database or web server. The goal isn’t to build a production quality database. The goal is to gain some insight about how a database could work internally.

2. Read more code. When I started programming I read every bit of code I could find, which wasn’t much at the time. I remember typing in code listing from magazines. These days you can go to GitHub and read the code for database engines, compilers, web frameworks, operating systems, and more.

3. Have patience.  This does take time.

As for the career question, I can’t give a yes or no answer. I will say if code is something you think about when you are not in front of a computer, than I recommend you stick with programming, you’ll go far.


Comments
gravatar Naveen Bhat Tuesday, August 29, 2017
Very well written article! Two of my takeaways - "The 9 minute videos that are fashionable today demonstrate mechanical steps to reach a simplistic goal." This is the exact reason why beginners feel difficulties when they write their own code. "if code is something you think about when you are not in front of a computer, than I recommend you stick with programming, you’ll go far." I think this is one of the best advise for beginners.
gravatar Erwinroots Tuesday, August 29, 2017
Excellent!
gravatar Steffen Wednesday, August 30, 2017
I don't agree with the try to write your own webserver or database part. Why not embrace being a high level programmer? Understanding different datastructures is one of the things that seperates a good programmer from a mediocre one, and just getting your feet wet with C or C++ might be what you need to understand objects and references, that's how I got the hang of it. (you'd be surprised, but it's something I have seen many experienced developers struggle with) When it comes to writing code, in pretty much any language you can do 90% when you know 20%. The writing of code might be the first challenge, but it is definitely one of the easiest. Writing good code might be a little bit harder, but you don't need to be all that experienced before you will realize that understanding the problem and the conceptual solution makes writing the actual code almost a formality. - putting thought and effort into the code might raise the quality, but then quality at this level, with the right concepts behind it, mostly translates into readability and maintainability. - something that mostly have value when working with others. I will agree that the daunting part of starting today is there are so very many things to know, and if you have a project in mind to start with that touches too many things, you can basically forget it. One step at a time, don't start with a singlepage application backed by a webapi using a sql server. - yes it might well be where you end up, thats all very common stuff, but that would be starting with at least 5 languages and 2 frameworks. At least!
gravatar Tim Franke Tuesday, September 5, 2017
I agree that starting out today is more challenging than the "early years". To create a web application, you need to learn the syntax for any number of technologies and frameworks. You also should attempt to pick the best one for your project. I think that's the hardest part of it all. My current dilemma is that I want to write an MVC app with SignalR and some kind of 2-way databinding framework. The problem is that I have read a dozen different blogs and still don't have a good idea of what pitfalls are ahead of me. The ignorance (lack of knowledge/experience) of the multitude of different frameworks leads to a self-perpetuating insecurity of whether or not you chose the best one. I still don't know if using Knockout or Aurelia or some other framework is better or worse. I've decided to write my project in both just to see which I like better. I think they will both perform in equivalent ways.
gravatar Joseph Majase Sithole Tuesday, October 10, 2017
Great article indeed... Programming is more like mathematics or any subject which requires a lot of practice, some people find it easy and to some it's very hard. It really depends on individuals. Through lots of practice, one gains experience and it becomes easy to even learn new patterns and programming languages on your own. Passion and Practice!!!
gravatar Charlie Barker Wednesday, October 11, 2017
I can't believe you didn't make mention of Stackoverflow :-) Learning the mechanics of programming from a book called how to learn Vb6 in 30 days is much more difficult than googling for answers. Learning the art of designing and coding systems is something that comes with time and experience and learning from a good set of peers.
Comments are closed.

My Pluralsight Courses

K.Scott Allen OdeToCode by K. Scott Allen
What JavaScript Developers Should Know About ECMAScript 2015
The Podcast!