So, we keep getting people dropping by asking for help with their various coding projects, or asking which language to learn. This thread is designed to serve as a general discussion thread for all programming, coding, or development discussion. You're free to create a new thread about a specific problem, but I'd like to see if we can keep a thread going where discussion is fairly open and relaxed. It shall also serve as a reference point for relevant resources.
First, a few ground rules;
- The normal forum rules still apply here.
- Discussion should always be related to development in some way, but this encompasses coding, design and other related areas.
- It's completely fine to discuss new advances.
- Good resources will be added here, and corrections are appreciated.
- Discussion on every development language is welcome. There's no exceptions to this.
- You're welcome to provide code samples.
Language - Which one should I choose?
So, you want to get into software development? The first question you're likely to ask is "Which language is better?". The short answer is that there is no clear winner. Each language has strengths and weaknesses. With those strengths lies potential, and with those weaknesses lies challenge. You use the strengths to overcome the weaknesses. What makes the difference is how you work with them.
Finding a language that's right for you is more important than going with what other's suggest. We can only advise you based on our experience, and while it's a good idea to listen, in the end it's your decision. What sort of coder are you? Do you prefer a language you can read as if it's plain English, or are you great with equations and prefer a more complex language that's potentially going to give a bigger pay-off in the end? Most importantly, do you have any experience, even at the basic level, in any other language?
Framework - What's the difference?
There's many different development frameworks out there. The one that you're probably used to dealing with in your everyday software is known as Winforms. Winforms is used for creating generic grey Windows GUI applications with buttons, edit boxes, labels, etc. Another framework that produces similar style applications is known as VCL. It's essentially the same as Winforms, except it's used in a different language.
Nowadays, there's multiple 'modern day' frameworks focused on making interfaces more interactive and interesting through the use of multimedia, effects, styling, and animations. WPF is one of the most common ones, but there are others such as Firemonkey. These frameworks are typically more focused on making the user experience a pleasant one than older frameworks were.
Starters - Where do I begin?
You first need to decide what area you're targeting. Are you wanting to target Windows, Apple OS X, Linux, etc? Or are you wanting to target iOS, Android, Windows Mobile, etc? Most people will want to target one of the desktop operating systems, with Windows being the most common for the majority of beginners, and thus we'll discuss that here.
You can go 1 of 2 ways; Console, or GUI. It's my personal belief that if you start with GUI development, you'll be set for the rest of your development days. Console generally has more starter resources, but GUI allows you to experiment and tweak with a visual design. For some people, they don't care for design, but others are inspired by it. Getting started depends on which route you want to go down. If you choose the console route, this list of starter examples would be a good place to start.
If you choose the GUI route, you'll want to find a project that you can dive into and build from the basics. For example, one of the earliest GUI 'experiments' you can do is changing the text of a label based on what you typed into a text box. The basic idea is that once you start to piece together a basic understanding, you'll be able to build up your knowledge at a speed that's suitable for you.
Data - It's all about the data!
Most programs are about displaying data in some form. This varies immensely from simple text labels right up to huge database applications dealing with potentially thousands of fields of data. There's many types of data, but I'll cover the most common ones here;
String - This is the most commonly used data type, and is used for holding strings of text.
Integer - This is used for holding numerical data and is suitable for most calculations you'll have to deal with.
Int64 - This is a 64-bit integer which is ideal for when you need to deal with numbers larger than a normal integer can handle.
Single/Double/Extended - These are Floating Point data types used for very heavy calculations (amongst other things).
Boolean - This is used as a True/False data type and is commonly used when performing logical checks within your code.
Data - But wait, THERE'S MORE!
The data types above are the basics. There's more advanced ones, but one in particular that's unique above the others isn't a data type in itself, but rather a 'container' for data. They are called arrays. Arrays are quite simple in their usage and manipulation, but are extremely useful when you know how to use them. To put it simply, an array is a list of data where you can access individual items from the array through code. For example, I might have an array that looks like this;
Each item in that array has an index value. Generally speaking, the first item (in this case, Vauxhall) will have an index of 0. From my code, I can read or write to any item in the array simply by knowing it's index value. This is extremely handy when you need to store data that you've retrieved from elsewhere so that you can use it later. The beauty of arrays is that they can store almost any type of data, and that they can be either a fixed length, or designed to be dynamically resizeable. You can even put one array within another, but that's a more advanced topic.Code:'Vauxhall', 'Renault', 'Toyota', 'Honda', 'Dodge'
Resources - Languages and Frameworks
Languages on Wikipedia
Frameworks on Wikipedia
VCL - Available with: Object Pascal, C++ (Embarcadero)
Winforms - Available with: C, C#, C++ (Microsoft), Visual Basic.NET
WPF - Available with: C#, C++ (Microsoft)
Firemonkey/Firemonkey2 - Available with: Object Pascal, C++ (Embarcadero)
Online Courses and Tutorials
Computer Programming Courses - WiBit (Various Languages)
Higher Education - Computing and Development - Udacity (Language Neutral)
Code Academy (Various Languages)
Perl tutorials - EDX (Perl)
Introduction to Computer Science and Programming - MIT (Python)
QT Tutorials - Youtube (Multiple Languages)
Net.Tuts+ - Various Languages
Smashing Magazine - UX, UI, Design, etc
PHP Academy - PHP, HTML5, SQL, Java, JS
Code Editors and IDE's
Java editor/IDE - Eclipse (Java)
Visual Studio Express - Microsoft (Multiple Languages, .net)
RAD Studio - Embarcadero (C++, Delphi)
Misc. Online Resources
StackOverflow - Q&A site for almost every language!
Programming Motherfucker - Resources for a great number of languages