So this is a question that a friend asked me in an email. I thought it was worth sharing.

“Hey, how are you? I hope everything is going well for you. I’m writing for advice or suggestions. I started taking classes for programming. I was wondering if there is anything languages I should really focus on or any reading material you suggest?”

Okay here goes….  

 

 

 

 

 

 

Rule of Thumb

It depends on what you want to do. However, the key thing is to remember when starting out is Depth over Width. With that I mean learn one (or more than likely two) programming language well and its concepts will transfer to other languages. When starting out it is better to just learn how to do one very well that it is to know a bit of a lot of different programming languages. After you have a pretty solid understanding of the core fundamentals of a language, its inclinations for certain architecture decision, design patterns, data structures, and general methods of code reuse, etc…. So, in short, you can “think” in that language pretty well.

Talkin’ Bout Some Relations… Database relations that is



To add to this, early in your career you will more than likely need to know something about relational database management system. Those bad boys are used to store the data that you would be playing with and unless you are building tools for another developer (even sometimes then) you are going to have to have a fair bit of knowledge about how to perform Creation, Read, Updating and Deletion queries using a special type of programming language. More than likely this will be a dialect of SQL short for Structured Query Language. As to which SQL there is some debate but I’m of the opinion that MySql or Microsoft SQL would serve you well in the beginning as this is what I have seen most commonly in the wild (and are freely available).(this can vary by location so if you have your heart set on a particular location I’d do some research by looking at the job sites and querying for SQL or database and see what shows up )In any case you should know something about relational databases.

Major Areas of Specialization

Web of Lies

In some cases just learning one language deeply is not practical. This is especially true for web development. Noting that IMO the additional web languages you work with aren’t all that hard in comparison to learning other programming languages. Speaking in overly broad terms and possibly making a number of generalizations I’d say that if you are aiming to be a web developer (even just starting out) I’d expect you to know the following.

HTML

  • You should be able to stub out a basic HTML page with a header, body, form, a couple of input elements
  • Stub out a table
  • Uses for a div
  • Uses for a span
  • Uses for an anchor tag

CSS

You should be able to use a class, id and element selector. Create an even layout for a page just with a style sheet and little to no inline CSS or element attributes on your HTML.

Javascript

  • You should know what the DOM is and be able to access DOM elements by id and name,
  • Some jQuery because it’s so common
  • JSON, What it is and how is it used
  • Ajax what it is and how to use it.

Javascript – bonus

  • Object Extensions
  • the difference between “==” and “===” when talking about comparison operators
  • what closures are and what the are good for
  • Prototypical Inheritance
  • General OOP concepts and Design Patterns and how to apply them in javascript. I.E. how do I make a method or property private
  • What Underscore.js\Lodash is
  • Common pitfalls in javascript
  • Applying Functional Programming concepts with Javascript
  • Some basic knowledge about SPA (Single Page Applications Applications). What they are, when to use them, what are some libraries in the wild.
  • General code organization, possibly using tools like require.js

Eloquent Javascript is a solid free resource for learning the fundamentals of Javascript.

Javascript Update 7/2017

Javascript has been a moving target for the past few years and this is in no small part due to the advancements in node.js and related tech. SPA tech is more popular than ever and more developers are going “full-stack” javascript.  This means Javascript on the front-end via spa and on the backend using node.js with a framework like express.js. Additional tools for making life easier as a javascript developer have been developed and encouraged. Some are newly minted javascript standard tech and others are enhancements to the language or entirely different languages.

With all that said, if you are a web developer or aspiring to be one. I’d recommend you understand the fundamentals of the Javascript language, the basics of node.js, express.js, get exposure to MongoDB, es6, a js framework like react or angular and a js task runnner\packaging tooling such as webpack or gulp. Even if you don’t specialize in full stack javascript, knowing the basics of what I have listed will allow you to use, learn and support code that leans heavy on javascript.


There are a ton of places to go learn these skills if you don’t already know them. Additionally, you will want to have a good grasp of a server side language like PHP, Java, C#, Ruby, Python or Javascript with Node.js.

Other Areas of Application Development

Often Desktop applications are written in a language like C#, VB6, Vb.Net, Java, Objective C, C++ or some other language with a SQL database back end. Not as many as there were in the late 90’s due to the growing popularity of the web but are still around and need developers to support them.

The Tiobe index is one kind of indicator for the popularity of programming languages
(does not necessarily reflect the industry as a whole but you can’t go too bad from learning one or two of the languages on the list)

Mobile development

 

Mobile development is mainly done with Java ( for Android) or Objective-C (for iPhone) but can also be done with web knowledge to some extent and work on both (http://phonegap.com/)

 

 

 

 

Mobile Development Update 7/2017

The native mobile landscape has changed a bit since this was written. Swift is an easier language for working with IOS and Mac applications and Kotlin is a programming option for working on Android as well as any applications that are typically associated with the JVM and Java. Both languages are designed for functional programming which is seeing a large surge in interest in the past couple years and for good reason.

 

Easy to Hard

I listed some languages in order of easiest to most difficult from my experience, This is highly speculative and just my opinion.

  1. HTML CSS (go hand and hand)
  2. SQL
  3. PHP Python Ruby  (about the same level of difficulty)
  4. C#  Java (about the same)
  5. Vb.NET 
  6. C
  7. C++

 

#3-#5 are beyond debatable.
#2  is easy to learn the basics but has more than a fair bit of depth

Research

In any case, whatever you decide, I’d recommend a few spots

For FAQs

For learning online

For lots of free books

 

Advanced Book Listing

List of Ebooks Recommended for Developers voted by users on Stack Overflow

 

Asking Questions Online

For actually asking questions your best bet might be a chat room like an IRC server or slack channel. Otherwise, I don’t suggest starting out asking stuff at a place like StackOverflow just because they aren’t really that friendly to newbies* and its difficult to find places that are. Maybe user groups on facebook or google plus might be better but those are kind of hit and miss as well…..

 

note StackOverflow is an awesome resource, just not the greatest place to start out asking questions. That being said if you
are going to ask about something on SO I’d recommend you look at this on StackOverflow and this article from Jon Skeet, the record holder for most rep on so

 

Facebook Group Links and Resources

Slack Channel Links and Resources

IRC Links and Resources

Remember Remember…..

Okay, so that’s a lot to process… but it should be a good start. The biggest thing to remember again is to pick one language and area and stick with it until it becomes easy…. Which takes a considerable amount of time. Also don’t just read about the field or language actually make stuff, not big stuff but small simple things….. really small simple things and finish those small simple things and share them so others can critique.

Best of luck to you in programming….
It’s hard but rewarding both financially and mentally and at times spiritually.