philosphy

My philosphy is that beginner programmers should learn to write a program very easily, and ways to problem solve and research new information. Not learn about the interals of computers in-depth.

Most beginners do not need to learn why the CPU works. Because that flame of wanting to know more about computers is not lit yet, it takes time to develop a knack or a habit for researching knowledge.

At worst it could intimidate the programmer into leaving the field, due to how complex cpus are. At best, it’s another piece of useless knowledge that the programmer won’t utilize until years later…

Learning should be simple, easy and fun. Atleast at first, after you develop a love for the field then learning could become progressively complex.

Anyways I am done rambling, let’s move onto the cons:

a very old language

C++ is a very old language, for those who don’t know it was created in 1985. 1985. That’s 36 years ago.

To put that in perspective, here are a few technological advances that we need but always take for granted:

  • Internet: 1991
  • Google: 1998
  • Firefox: 2002
  • StackOverflow: 2008

But languages can adapt, and improve over time - but you’ll notice among my critisms, a lot of the pitfalls of C++ come from it being old.

no standard compiler

This is not an issue because of C++ per say, C doesn’t have this feature. Other languages(at the time) did not have a standard comiler.

But evolution to programming languages often puts C++ to shame as an introductory language. Most languages nowadays are platform agnostic and behaviour is always predictable among different platforms.

A side effect of having no standard compiler is having different results with different enviroments(e.g works on linux doesn’t work on windows). I remember finishing an assignment in C++ and submitting it, only later I discovered it doesn’t work due to different compilers behaviour.

no gui by default

No one besides experienced computer users considered a CLI as a program. Therefore when introducting an aspiring computer scientist, their first experience should be writing a GUI application.

Not writing a CLI program.

low-level

Beginner Programmers should not learn low-level languages, for the following reasons:

  • mostly unsafe
  • complex
  • manual memory management

Why should beginners know how to manage memory, or make their applications safe. Or operate overload their own object. It’s unneccessary unless the beginner has a passion for the low-level stuff.

an alternative

I think Javascript is the ultimate beginner’s language. For the following reasons:

  • safe
  • simple
  • garbage collected
  • most answered questions on stackoverflow
  • highly portable
  • resources everywhere

You might be saying: ‘Oh no next generation of developers are going to be the worst generation.’ - And that is not true, I recommend javascript as a beginner’s language only.

As a production language I highly advise against it. I think labeling it as a beginner’s language would inspire more programmers to develop into more niche languages.

And since experienced programmers rarely stick with their first languages, an influx of javascript developers should not happen.

In-case it does, the requirement for efficient javascript developers would increase dramatically; causing better frameworks, libraries and ultimately better software.

everywhere IDE

One subtle unintended powerful feature is having an IDE everywhere. Since javascript is a browser script language, you could open up a browser and develop anywhere. You could even develop on a website.

and I call it an IDE cause most browsers have autocompletion, syntax highlighting, powerful debugging, and performance measurement

an example of not to do

Because Javascript is hard to maintain by default, it would give beginners a sort of benchmark to compare their skill to…

So later when beginners advance more, they would know what not to do. C++ sort of throws dust in the eyes of beginner, cause it’s not clear what you’re not supposed to do.

The beginner’s concern with C++ is:

  • not having an unsafe application
  • not having memory leaks
  • optimizing performance

Which are issues a beginner should not worry about.

resources