public class Lesson2_MethodsAndArguments

{

void Methods()

{

So far, everything we’ve been doing has been in the Main method. However, one of the features of good code writing is that methods are kept small and organized. One method may call another, and another, and another, with each one achieving a specific task.

}
 

void AccessModifiers()

{

If meant to be accessible by another class (file), the method declaration should begin with the public modifier. The default access level is private which means the method can only be called from within the same class.

}
 

void Static()

{

Static is a more advanced concept, yet it is always used in the Program class for any methods called via Main. Static means that the method belongs to the Type of the class, not to a particular object instantiation. We will return to it at a later point.

}
 

void MethodName()

{

The method name can be anything, but it is good to make it a clear description of what the method does. Method names cannot have spaces or special characters, so most .NET programmers use either PascalCase (capitalize every word) or camelCase (capitalize every word except the first).

}
 

void ParametersAndArguments()

{

When creating a method, you can pass variables to it by way of parameters listed in parentheses. When calling the method, these same variables are referred to as arguments.

}

}

public class Lesson1_BasicsAndLogic

{

/* These projects can be done in both dotnetfiddle.net and VS Code, but for the sake of immediacy, examples using DotNetFiddle have been embedded.*/

void UsingStatements()

{

Every file in C# uses using statements at the top of the page to import types and classes from other sources. If you try to copy something from one of these projects and get an error, check to see if there is a using statement you need to add. Often, the IDE will tell you what to add. For starters, you always need using System;

}

void Variables()

{

A variable is a saved instance of a type or class object. The simplest variable declaration is

var message = "Hello World!";

Note how this is used in the example below to pass the variable content to Console.WriteLine:

C# is intelligent enough to know that message is of Type string, since we assigned it to a string value. Try deleting the “Hello World” line above and replacing with var message = 43; or var message = true;. Notice that true is a boolean value (true/false), but "true" would be treated as a string, and likewise 43 is an integer (number), but "43" would be a string. This is important to remember, because even though they can all be printed to the console, you can’t do math with a string, or ask whether a string is true or false.

}

void BasicTypes()

{

The basic types in C# are important to know, as these will represent much of the data we pass around a program. There are many types in .NET, but we will stick to the most common and useful.

}

void Math()

{

Performing math in C# is relatively straightforward, as can be seen by the example below. Try your hand at changing the formulas.

Did the last answer surprise you? Remember, all of our variables were declared as whole numbers, or integers, and so the answer will also be an integer. If you want the accurate decimal equivalent, at least one of the numbers in the division problem must be a double. Try replacing the 7 in line 21 with 7.0. This is a common mistake for beginning programmers, so be aware.

}

void StringConcatenation()

{

There are several ways to combine strings. Concatenating or interpolating is convenient, but if adding a lot of pieces together, using a StringBuilder is more effecient.

}

void IfElse()

{

Many times, a program must make a decision based on some user action, such as clicking a button. This is where boolean values and If/Else logic comes into play.

}

void Loops()

{

The loop is an important concept in programming, as it allows us to call a block of code multiple times. There are while and do while loops, but the more useful ones are for and foreach:

}

}

public class Lesson0_HelloWorld

{

public void ASimpleProgram()

{

The first program most coders learn to write is a “Hello World”. This simple program is very short and easy to understand. Below is an interactive example, using dotnetfiddle.net, a useful online C# compiler.

Here is the same program with comments for each line. Notice that a comment is created with two forward slashes. Anything written in the line after the two slashes will be ignored by the compiler.

Use one of the frames above to try changing the code that is printed. It should update as soon as you begin typing. If you have trouble running here, you can try to open a new tab to dotnetfiddle.net.

}

private void RunningLocally()

{

There are two Integrated Development Environments (IDEs) recommended for C#/.Net programming. While you can do a lot with dotnetfiddle.net, at some point you will find yourself wanting to create larger programs, and you will want to have an IDE.

Visual Studio is a full-featured IDE, which is used to create pretty much all Windows software on the market today, as well as a large amount of mobile and web projects. It is now available for Mac as well as Windows (although these are really still separate programs, so certain features may not be the same). While VS Community Edition is completely free, it is a very large program, and probably too much for starting out.

Visual Studio Code, despite it’s related name, is actually a much smaller program, with more focus on code writing/editing, and less features to support large projects. This actually makes it ideal for small projects and websites. VS Code is available for Windows, Mac, and even Linux.

// There is actually a third wonderful .NET editor, Jetbrains Rider. However, it doesn’t have a free version.

Download and install Visual Studio Code. If you are running on Windows, we will make a settings change to use the bash shell, so that the commands will be the same across platforms (skip to the next paragraph if you are on Mac/Linux). Go to File->Preferences->Settings and add this line between the curly braces in User Settings:

"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe"

Now, press Ctrl+` or use the menu View->Integrated Terminal to open the terminal window. Let’s create a new folder for working in. (For more info on terminal commands, see our Back in the Day post). Navigate to a place where you can create a folder, such as cd /Users/username/Documents/ (add c:/ to the beginning of the path for Windows). Make a folder with mkdir Projects and enter that folder (cd Projects

We will install one more piece of software, the .NET Core runtime, which is the cross-platform implementation of .NET. Once installed, return to VS Code, and type dotnet new console -o HelloWorld into the terminal.

Now use the VS Code File->Open Folder menu command and select your newly created HelloWorld folder. You should see something like this:

As you can see, this is essentially the same program that was written in DotNetFiddle, with a few variations. The namespace creates an encapsulation for multiple files/classes to be able to reference themselves, but have protection from other linked files. The `Main method now takes a string array of arguments, although currently they are not being used. We’ll show you what this is for later.

To run the program with .NET Core, you need to type the following command into the terminal: dotnet run. The computer should think for a moment (compiling your code), and then return “Hello World!”. If you make changes to the Program.cs file, such as updating the text to print, make sure you save the file before running again.

}

}

public class GettingStarted

{

public void SelectingALanguage()

{

There are dozens of modern programming languages to choose from, and they all have their advantages and disadvantages. I’m going to share my preferences, feel free to disagree. However, at least to get started, this site will focus on one language.

}

void ObjectOrientedProgramming()

{

The most popular form of modern programming is Object-Oriented Programming (OOP). OOP models everything in code as objects, which can have features (fields, properties) and abilities (methods, functions). For example, a Person class can be created to store a user, with properties such as FirstName, LastName, and PhoneNumber. Another class could be a RegisterUser class, with methods likeCreateNewPerson. For reasons of readability and maintainability, classes are often separated into data objectsdata structures, like Person, with few or no methods, and functional classes, like RegisterUser.

 

There are many websites with information about programming languages. I like this one, with it’s descriptive links and tree graph.

}

void FunctionalProgramming()

{

There is another model, known as Functional Programming (FP), that is gaining recognition and use. However, it does not currently have the deep history and proven usability for many different applications that OOP does. FP is especially useful for math-intensive programming, as opposed to User Interface (UI)-focused projects. In addition, the two models can be used together in large projects. This site will begin with OOP, but FP is mentioned for completeness.

}

void SelectC#()

{

There are many OOP languages, and no one language is the “best.” They vary widely in syntax, functionality, support

My go-to OOP language, that I find easy to read, powerful, and useful across any type of application, is C#, which runs on the .Net platform. C# and .Net code can currently run on any major operating system (Windows, Mac, iOS, Android, Linux), and will soon be able to be used in the browser, in place of or alongside javascript.

A few features of C#, besides being cross-platform compatible:

  • Static Typing: Every variable, field, parameter, and property in C# is a defined class type. This allows the IDE and compiler to know even before running code if there is an unsafe action, such as sending a text string where a number is expected.
  • Encapsulation: There are clear boundaries in C#, such as the curly braces {} that show the start and end of each namespace, class, and function, parentheses () around all parameters and arguments sent to each function, and the semicolon ; that declares the end of a line of code. Some languages prefer to use only line breaks, spaces, and indents to identify these boundaries, but I find the use of these character boundaries easier to read.
  • Support: C# is the first-class language of Microsoft, and has been in development and support for nearly 20 years. It is constantly being improved and updated, and I have no doubt that it will still be a first-class language 20 years from now.

This site will walk you through using C#. However, if you find anything confusing, or want more detail, check out Microsoft’s site Get Started with .NET and C#.

}

}

public class BackInTheDay

{

public void BackInTheDay()

{

// A Brief History of Computer Programming, and a Look at One Place to Get Started

When I was a kid, personal computers were new, exciting, and very, well, BASIC. Since earlier computers were designed by and for businesses and governments, it seemed logical that the thing to do with a computer was learn how to program that computer.

}

void Commodore64()

{

Try opening the emulator by clicking the image above, and typing in the following (note: on my keyboard I have to press Shift+2 to get quotes. I can’t remember if this was the placement on the old Commodore or not):

  1. 10 PRINT “HELLO WORLD!”
  2. RUN

We had GOTO statement loops, IF/THEN conditionals, and I remember having a lot of fun creating different screen art and quiz-games with just text. Since there weren’t a lot of possibilities, there also wasn’t a ton of We’re not going to dive into ancient BASIC here, but if you’re interested, check out https://en.wikibooks.org/wiki/BASIC_Programming.

}

void ModernUIs()

{

Coming back to programming as an adult, I was overwhelmed by the complexity of modern code. I bought books, watched videos, and googled for hours on end to try to make sense out of how to create an app or website.

While this approach definitely does work, there were many frustrating days of confusion. For example, to get started writing a new iOS app in Swift (which seemed like a nice, easy language), I had to learn about Storyboards, ViewControllers, Views, Delegates, and so on. Even a simple “Hello World” app would require multiple files.

Most of this complexity and confusion to getting started comes from the User Interface (UI), which has grown from the all-caps text on the Commodore into a graphical canvas with nearly limitless possibilities. There are wonderful WYSIWYG tools available, such as the Xcode Storyboard, which allows you to drag and drop controls like labels, buttons, and text fields.

“Hello World” is possible on iOS with no lines of code written at all!

Behind the scenes, however, the layout code is in the XML format, and it’s not so easy…

Can just about anyone make a new app? Definitely. However, I can attest to the fact that jumping in head-first this way can get you in trouble later. Using a tool like Storyboard does not prevent problems/errors, but it does limit your understanding of them and how to fix them. I’m not suggesting an app developer should ignore the tool, simply that they truly understand what they are doing. After several years of tinkering, I can read that XML, and it makes it much easier to know what is really going on in my UI.

}

void BusinessLogic()

{

Apart from the complexity, UI design actually has little or no bearing on the functionality of a program. Instead it is about display and ease of use. Separate from this is the Business Logic, which is where we use math, perform functions, and react to user actions and inputs. This was the heart of BASIC and early computer programs, before they got pretty graphics.

Wouldn’t it be nice if there were a way to separate the UI design from the Business Logic, so newcomers could first learn how a computer calculates, responds, processes?

}

void CommandLine()

{

Luckily, there is a way to write in modern programming languages with no UI to worry about. A Command Line Interface (CLI) takes us back to the old-school method of typing text to execute commands. These commands are executed by a shell program, that runs atop the operating system, and are accessed on most modern machines via a terminal emulator (Terminal in MacOS and Linux, Command Prompt in Windows).

}

void UsefulCommands()

{

Before doing any command-line programming, however, it’s necessary to at least know your way around the interface. Both Linux and MacOS use the BASH shell by default, and so they use the same set of keyword commands. The Windows Command Prompt, however, inherits from MSDOS, and has slightly different syntax.

(BTW, Windows 10 users can now also use Bash, so if you want one cross-platform solution, start there)

Commands Bash Terminal Windows Command Prompt Comments
 Change Directory

(Navigate)

cd cd You can go one folder “deeper” by typing just the folder name (e.g., cd Documents), or type in the entire path (e.g., cd C:/Users/Tim/Documents). To go “up” one level, use cd ..
List Files in Current Directory ls dir Lists all the files and folders in your current directory.
Make Directory mkdir mkdir Creates a new folder at your current location. mkdir NewFolder
Remove Directory rmdir rmdir Deletes a folder.
Copy File cp copy Follow the command with the file name to be copied and the new file name. You can include paths.

}

}