Selecting your first programming language


Deciding What You Need


    Many times on forums and in chat rooms I hear the same question over and over. “What programming language should I learn?” The answer is different for every person out there that wants to pick up programming. These tips are here to help people who would like to start programming pick out their first language. So go grab a pen and some paper and get ready to think and jot down some notes.

    First you must really sit down and think about what you want to accomplish when programming. Do you want to make cool web applications, or maybe a quick windows application to calculate the amount of paint needed for a room? How about creating video games, or your own operating system. Maybe you want the option to try all these things, and if you want any of these things their is a programming language for you. You just need to figure out what your needs and wants are. Do some of your own research on some popular languages and find out what they offer.

    Next you must decide on the level of difficulty you are willing to try. Never be afraid to try something harder then you think you can handle. If it is too much for you, you will know early enough to pick out a new language and not waste too much time. Most languages are the same at their roots anyways. You will find this out once you learn how to program.

    Another thing you want to consider before picking out a language is compatibility. Do you need or want your application to work on Windows, Linux, and Mac? Or are you comfortable with just running on Windows or another environment? Most of the time this will be an easy choice. Since you are just starting out you will most likely just pick a language that will run on your current operating system.

    Are you going to be able to find a lot of information about your language? What types of books, internet tutorials, and documentation are there available for your language? You are going to need something to learn from and documentation is the main thing you will be looking to. Though it is always nice to have a good community around the language as well, most on-line communities are on forums or IRC. Remember that Google is your friend. Just look up your language on Google to find tutorials, and on-line community's, check Borders or Amazon dot com for books.

    Type of language is also important. There are three main types of languages (there maybe more). First is web languages. Web languages are the code that makes up the web. When you open your Internet browser such as IE or FireFox it reads this code and then displays the sites based on the instructions that are written behind the scenes. Next are interpreted languages. Many web languages also fall in this category. When a language is interpreted it means that the code is read by the computer as it is executed. This is unlike our next type called a compiled language. When a language is compiled it means that you must first pass the source code threw a special program called a compiler. The compiler takes the human readable source code and turns it into computer readable code of ones and zeros (AKA: machine language/code). The program can now be ran and tested.

    We will talk quickly about the level of a language. Computer do not understand source code they only understand machine code. When a language is said to be a low level language it means that the source code is more closely related to the machine code. If a language is high level it means it is closer to human readable language. The benefits of a lower level language is speed and power. The problem is you wouldn't want to write an entire game in a low level language because it would be large and hard to understand.

    Also do not stress to much over what language to pick. If you are just a hobbyist then pick whatever language you enjoy the most. Don't worry about what’s cool or the newest thing go with what works for you. If you want to become a programmer or get into the information technology field pick a language that is going to let you learn the most about programming. Odds are you are going to be learning new languages later on anyways. So as long as you have programming basics, and techniques down you will be able to learn a new language very easy. The most important part is to have fun! Enjoy what you are doing or why do it at all?


Language Reviews


    Now I will give some language reviews for some popular languages out there. I also cover some web languages. It should be noted that these are not actually programming languages. Some are scblockedripting and some are called Markup languages. Also to be noted this is not a full review of these languages. You should do more research on a language that might interest you in order to find out more.

    This is not a full list of languages! I tried to include many of the major languages but there are just so many that the list would just become to large and start to confuse beginners. For a larger list of languages check out the following links.

http://www.scblockedriptol.com/programming/choose.php
or as much as I hate wikipedia
http://en.wikipedia.org/wiki/Alphabetical_list_of_programming_languages

* = I personally recommend to hobbyist or average beginners
** = I recommend to students for more serious learning.

Web Applications

* HTML
Type: Markup Language
Geared for: Web Development
Difficulty: Very Easy
Compatibility: Works with any browser, and OS compatibility is not a worry when doing web design
documentation: Lots of great on-line tutorials. I see no need to buy a book when there are so many free on-line tutorials.
Links: w3schools
Side notes: All you need is notepad and a web browser.

* CSS
Type: Cascading Style Sheets
Geared for: Web Development
Difficulty: Easy
Compatibility: Works with most modern browsers
documentation: Lots of great on-line tutorials. You might find buying a book helpful.
Links: www.w3schools.com
Side notes: All you need is notepad and a web browser.

Javascriipt
Type: Interpreted / scblockedripting
Geared for: Web Development
Difficulty: Easy - Mild
Compatibility: Works with most modern browsers
documentation: Great on-line tutorials, but you may find a book helpful.
Links: www.w3schools.com
Side notes: This gives web designers a scblockedripting language to use with in there web pages. Can create pop up boxes and validate html forms.

PHP
Type: scblockedripting
Geared for: Web Development
Difficulty: Mild
Compatibility: Code is ran on server so browsers have nothing to do with this language.
documentation: Good on-line tutorials, may want a book for more complete learning process.
Links: www.w3schools.com
Side notes: Great for accessing databases. Because code is executed on the server the user can not view the source code, this adds a level of protection and security.

ASP
Type: scblockedripting
Geared for: Web Development
Difficulty: Mild
Compatibility: Code is ran on server so browsers have nothing to do with this language.
documentation: Good on-line tutorials, may want a book for more complete learning process.
Links: www.w3schools.com
Side notes: Microsoft technology. A powerful tool for creating dynamic and interactive web pages. Code is executed on the server, so the user can not view the source code, this adds a level of protection and security.


Computer Applications

* Python
Type: Interpreted - scblockedripting
Level: Very High
Geared for: Everything
Difficulty: Easy
Compatibility: Cross-platform
documentation: Great documentation, many books, and on-line tutorials.
Links: www.python.org
Side notes: easy to learn, and very powerful. You can do just about anything with this language. Great for beginners.

Perl
Type: Interpreted
Level: High
Geared for: General Purpose, Text Processing, CGI scblockedripts, Automating Tasks
Difficulty: Mild
Compatibility: Cross-platform
documentation: Many books, and on-line tutorials.
Links: http://www.perl.com/

Ruby
Type: Interpreted
Level: High
Geared for: General Purpose, Web scblockedripting
Difficulty: Mild
Compatibility: Cross-platform
documentation: Normal
Links: http://www.ruby-lang.org/en/
Side notes: The goal was to program in human style rather than adapting its mind to the computer structure.

VB / VB.net
Type: Compiled
Level: High
Geared for: Windows applications
Difficulty: Easy
Compatibility: Windows
documentation: Well supported by Microsoft and many books.
Links: http://msdn.microsoft.com/en-us/vbasic/default.aspx
Side notes: Not a great language, but easy to use and whip up a quick app. Not well respected by other programmers. Dot net is compiled differently. Research the dot net platform for more information.

** C / C++
Type: Compiled
Level: Middle
Geared for: Everything
Difficulty: Mild - Hard
Compatibility: Cross Platform
documentation: Tons!! Books, on-line, people, just tons!
Links: http://www.cplusplus.com/doc/tutorial/
http://www.cprogramming.com/
Side notes: Well respected language. Take the time to understand this language, it will pay off. There is a reason it is the industry standard.

* C#
Type: Compiled
Level: High
Geared for: General, The Dot Net Platform
Difficulty: Mild
Compatibility: Native to Windows, Cross Platform
documentation: No lack of books or developers to speak with.
Links: http://msdn.microsoft.com/en-us/vcsharp/aa336809.aspx
http://www.microsoft.com/express/vcsharp/
http://mono-project.com/Main_Page
Side notes: Not directly compiled to machine code. The mono project is working on making the language cross platform but does not have all features of the Microsoft dot net platform.

* Java
Type: Compiled
Level: High
Geared for: Everything and portability
Difficulty: Mild - Hard
Compatibility: Cross platform
documentation: Well documented
Links: http://java.sun.com/docs/books/tutorial/
Side notes: I have heard good and bad things about this language. Not a choice I would pick for a beginner.

** Assembly
Type: Assembled
Level: Low
Geared for: Special niches when needed
Difficulty: Very Hard
Compatibility: Each processor architecture has Its own version.
documentation: Normal
Links: http://webster.cs.ucr.edu/
Side notes: Has a big purpose in the programming of embedded systems (you name it, anything from washing machines to tv's). If you learn assembly for one architecture, than it isn't too difficult to code on different ones. You just have to learn a new instruction set.



3D Graphics or flash games 
Processing
Type: Byte Compiled
Level: Very High
Geared for: 3D images, animation, and interactions.
Difficulty: Mild
Compatibility: Java platform
documentation: Well documented
Links: http://processing.org/
Notes: A fun and interesting language to do 3D work.

Actionscript
Type: interpreted
Level: Very High
Geared for: 2d Flash animations and Flex 3D
Difficulty: Mild
Compatibility: Works were ever flash or flex is compatible.
documentation: Normal
Links: http://www.actionscript.org
Side notes: This is a popular language for this specific task.


Remember to have fun and learn all you can!