“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.
- 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 an 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 it’s 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 operators
- what closures are and what the are good for
- Prototypical Inheritance
- What Underscore.js\Lodash is
- 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
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 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.
- 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
- My list of online learning sites
- 10 places where anyone can learn to code
- Top 10 Websites to Learn Coding (Interactively) Online
- what are the best sites for learning programming
- codility.com programmers (Advanced)
For lots of free books
Advanced Book Listing
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
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.