So this is a question that a friend asked me in an email. I though it was worth sharing.
Hey, how are you? I hope everything is going well for you. Im writing for advice or suggestions. I started taking classes for programming. I was wondering if there is anything languages I should really focused 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 little 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 other developer (even sometimes then) you are going to have to have a fair bit of knowledge about how to preform Creation, Removal, 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 server 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.
- 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
You should be able to use a class, id and element selector. Create a even layout for a page just with a style sheet and little to no inline css or element attributes on your html.
- You should know what the DOM is and be able to access DOM elements by id and name,
- Some jQuery because its so common
- JSON, What it is and how is it used
- Ajax what it is and how to use it.
- Object Extensions
- the difference between "==" and "===" when talking about comparison,
- what closures are and what the are good for
- Prototypical Inheritance
- What Underscore.js is
- Some basic knowledge about SPA applications. What they are, when to use them, what are some libraries in the wild.
- General code organization, possibly using tools like require.js
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 even node.js (special case)
Other Areas of Application Development
Often Desktop applications are written in a language like C#, vb6, vb.NET, Java, 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. 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 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/)
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.
- HTML CSS (go hand and hand)
- PHP Python Ruby (about the same level of difficulty)
- C# Java (about the same)
#3-#5 are beyond debatable.#2 is easy to learn the basics but has more than a fair bit of depth
In any case whatever you decide I'd recommend a few spots
For learning online
For lots of free bookshttp://programming-mother******.com/become.htmlhttps://github.com/vhf/free-programming-books/blob/master/free-programming-books.md
Asking Questions Online
For actually asking questions your best bet might be a chat room like an IRC 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 kind of hard 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
Okay so that's a lot to process... but it should be a good start. 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....Its hard but rewarding both financially and mentally and at times spiritually.