On Our Way Back!

So as a few of you may have noticed, this site has been down for about a year now. But you don’t have to worry any longer! We are moving forward and redesigning the site over again. Stay tuned for the latest updates and a new design coming soon. Please excuse the mess though until we get where we need to be. We have restored the database for you to at least read some of the old posts we had before the site was taken offline.

Thank you for everyone’s support and concerns while we had our downtime. Hopefully, we can make it up to you with some great content that will hit the website soon.

Tools of a Web Developer

Work Tools

 

In my last post, Web Development Setup, we discussed my web development setup. We went through a quick, general overview of the hardware and software I use on a daily basis. In this post, we will follow up on the software I use, diving deeper into those tools that I use the most.

This is not a list of the best software tools, but rather a list of the best software tools for me currently. You should always try out new tools and learn new ways to increase your software development productivity. What works for me may not work for you. With that said, you should feel free to try out some of the tools I use, as you may find something of interest in the list below.

 

Development Stack

Before we get into the tools I use for web development, I want to go over the web stacks I am currently using and learning. I have been using HTML and CSS for years. I am in no way an expert but am proficient with both technologies.

I have been playing around with JavaScript, mostly tinkering and creating small projects for personal learning. Recently I have been using JavaScript at work as well, just for the front-end of our web application and our few sites. I do not use much jQuery, except sometimes at work while doing development for our Ruby on Rails application.

As I just mentioned, I work with Ruby on Rails at my current place of employment. I have been working with Ruby and Rails for almost 4 months now. I learned the basics of both about a month before I started working as their sole Web Developer. Personally, I believe this is position is my biggest tool for learning, as every day I create new pieces of software I would not have ever done on my own. It pushes me to learn at a faster rate, allowing me to basically learn while being paid.

At home, I generally have dedicated my time to working with Ruby and Rails. For both development and production, I use Linux. We use Apache and Passenger on our production server. So a quick overview of my current web development stack is HTM, CSS, JavaScript and Ruby on Rails on the Linux platform.

 

Editor of Choice

As you may recall from my last post, Web Development Setup, I use Vim as my current editor of choice. I have noticed many in both the Ruby on Rails and JavaScript community using Vim. That’s not to say everyone, but it does seem to be one of the more popular choices.

Many people though still find Vim hard to use. Even myself included at one time. I’ve been using Vim full-time for a little over a year. Before that, I used Sublime Text for most of my development work. I previously found Vim hard to work with, and it would often do unexpected things, at least for someone who didn’t know what he was doing.

One day, though I decided to use it as my sole editor for at least one month. If after the month I was not happy, I would move back to Sublime Text, or possibly try out a few other editors. The first week was hard, but after that I started getting used to navigating through files with ease.

Every time I needed to do something in Vim, like replace all instances of a word with another, I would look up how to do it the Vim way. Although this slowed me down at first, over time I needed to look up less and less. Most of the common things I need to do with an editor, I can do instantly with Vim now. I very rarely have to touch my mouse now while editing files.

By itself, Vim is not the prettiest, nor the most feature-filled editor around. With a few plug-ins, you can change not only Vim’s look but its functionality as well. To install plug-ins, I use Vundle. Vundle is a plug-in manager for Vim. It does require some setup but is relatively easy to get installed.

For syntax checking, I use Syntastic which is a Vim syntax checking plug-in. For Syntastic, you will need to install linters for the languages you will be using. I currently am using Tidy HTML5PrettyCSS, and ESLint. For auto-completion, I use YouCompleteMe. For Ruby and Rails, Vim-Ruby and Vim-Rails, both of which add some nice features while developing Ruby and Rails applications.

Another amazing plug-in is Airline, which provides a fast status and tab line for Vim. Emmet was one of my favorite plug-ins for Sublime Text and is available for Vim as well. For my color scheme, I have tried a few but I always come back to Solarized Dark. This is just a sample of my favorite plug-ins. Feel free to check out my full vimrc.

 

Tmux.. Briefly

I won’t go into Tmux for long, as I really only have a basic understanding of it. Tmux is a terminal multiplexer, which basically allows you to attach to and detach from terminal sessions. This allows for you to leave a session open while not connected. This can be useful for many different reasons.

The reason I use Tmux though is because it allows you to have split terminals within the terminal you’re working in. This is especially useful while connected to a remote server through SSH. I frequently need multiple terminals open and connected to a single remote server.

With Tmux, I am able to establish on SSH session, start Tmux and add panels as needed. You can add, remove, switch, adjust the size, and more with Tmux. If you’re interested in learning more about Tmux, I recommend checking out tmux: Productive Mouse-Free Development, an amazing book that will turn you into a Tmux pro.

 

Remote Solutions

Of course, no Web Developer’s toolkit would be complete without SSH. As much as you and I both love SSH, I have to let you in on a little secret. I have been a little unfaithful with another, Mosh, the mobile shell. With a standard SSH connection, if your Internet connection drops out or you change IP addresses, your connection will drop out and you will be disconnected.

With Mosh, you will find the terminal session restored as soon as you are reconnected to the Internet. Hopping wireless networks? No problem, Mosh has you covered. Close the lid on your laptop, open it up at home, and magically your terminal session to that remote server is still active. Well maybe it’s not magic, it’s Mosh. I have found this tool useful in countless situations and provides SSH with a modern twist. This is truly SSH on steroids.

To run Mosh, you will need to install it both on the remote machine and the local machine. So if you cannot install applications on the remote machine, you will need to stick to SSH for connection. On any machine you do have access to install applications, I highly recommend adding Mosh to your list of connection methods.

Continuing Development

I am constantly learning new things and picking up new development tools. Learning is one of the most important tools any developer can have. It keeps you relevant and valuable. It’s just plain fun too.

To check out my learning style, take a look at my post on Self-Taught JavaScript. For places to continue learning, check out 7 Free Sites to Help You Master Programming and JavaScript Learning Resources. If you have any recommendation on learning new tools or technologies, feel free to leave your suggestions in the comment section.

Honestly, the tools listed above account for about 90% of my development process. Of course, there are others as well, but I either do not use them on a regular basis, or I am still learning them. There are also the basics I didn’t mention, bash, grep, irb, scp, and others. I used those tools on a regular basis before I was a Web Developer, and have not mentioned them here.

In general, Linux and its vast amount of tools provide developers with an amazing assortment of options. To learn about some of the most commonly used command line tools, visit my post on Command Line Basics for Developers. I would love to hear what tools your using in your development process. Leave a comment below with your favorite tools.

 

Web Development Setup

Tools

 

This post we will go over my current development setup. Taking a look over everything from hardware to software, you will gain insight into how I work and the pieces that help me in my daily struggles as a budding developer. Although this setup works for me, everyone will have their own preferences and my setup review is in no way meant to suggest its superiority over other setups.

 

The Physical Beast

My development computer, is a decent machine, although with slightly older pieces at this time. It contains enough horsepower for every purpose I have conceivably been able to through in its path. Considering I do mostly web development work, this computer will last me a good while, with maybe a few upgrades along the way.

Custom-Built Rig

The Inner Beast

For software, I have a few favorite pieces that are tried and true, having yet to fail me in my time of development. I use to jump around between Linux distributions, mostly consisting of Fedora and openSUSE, but also mini vacations off to other Linux utopias. That was until I found Arch Linux. For the past year and a half, I have used the same Arch Linux installation on my machine. This machine is running vanilla Arch Linux while my laptop and work computers both run Antergos, which is an easy-to-install distribution based on Arch Linux. Everyone should go through a few vanilla Arch Linux installations first before using Antergos in my opinion, as the experience will teach you how Arch Linux works. When you need something setup quick though, and you want the flexibility and power Arch Linux provides, Antergos delivers.

Desktop Utopia

There was a time, not too long ago, when I would insist KDE was the desktop to use for everyone, and nothing would change my mind. Now I am not so sure. Although KDE is nice, I feel it does not fit my needs as well any longer. It still is an amazing project, but I am no longer as dogmatic, at least in regard to desktop environments. Everyone has their own desktop environment needs, and mine have been filled by Gnome. The simplicity of Gnome causes it to stay out of your way while it provides features comparable to most other modern desktop environments. Powered by Arch Linux, I am provided with the most up-to-date software, giving me the newest features in development.

Distro Mania

As I already mentioned, I use Arch Linux and Antergos. The main advantage here is up-to-date software, including the kernel and development tools. Installing Arch Linux proves an amazing experience, frustrating at first, but beneficial in many ways. It allows for a deeper understanding of how Linux works and how to configure individual pieces of the Linux environment. I have been through the install a few times, and although I may not configure those exact pieces on a daily basis, it has provided insight into configuration and setup of most Linux software, in general, making server setup easier and quicker. I highly recommend becoming familiar with setting up a Linux system this way. It will provide experience for future development endeavors.

Development Tools

For my actual development environment, I use vim, with the occasional tmux session. I frequently use ssh and/or mosh, an alternative to ssh allowing a persistent connection, even when most ssh connection would drop out. Even with modern Internet connections, issues arise causing packet loss or disconnects wich destroy an ssh connection. Mosh, on the other hand, will reconnect your session when the connection is restored, even when your IP address changes. This is especially useful when using a laptop and moving from location to location.

The Real Deal

In the end, the thing that matters the most is how productive you can be. I choose vim as my daily driver, but you may pick emacs or sublime, or even something else. That is perfectly fine. Don’t get caught up in the holy wars of development tools, it really doesn’t matter. As long as you know your tools and can produce results, they are just a means to an end. Continue to learn other tools, look for ways to improve your current setup and always keep coding.

Getting Your First Web Developer Job

Worker

Getting the Job

I have done some development work at my previous job, mostly small applications, random additions to existing code, HTML, CSS, etc.. Mostly, though, I had done standard I.T. work. Helpdesk, managed services, data center, and most other random things those in the I.T. field do. Never enough coding to make me happy though. I event went back to school, enrolling in a local community college, pursuing an associate’s degree in computer science with the intention of transferring to a local university with a pretty decent computer science department.

 

I now am currently employed as a Web Developer now, at least for the past week or so. Full-Time. Not I.T. with occasional “programming” assignments, but a full-fledged Web Developer. I work mostly with Ruby on Rails which, of course, includes the standard HTML, CSS and JavaScript sprinkled throughout. With little experience professionally as a developer, and none what-so-ever with Ruby or Rails, no degree, and very few contacts in the developer community, how did I land this job?

 

Knowing When to Quit

Persistence. After almost two years at my last employer, I knew I wanted to be a software developer, specifically a web developer. I.T. was great, don’t get me wrong, I learned a lot at my previous employer. More than I ever did on my own. I brought value to my previous employer as well, creating new positions for myself and expanding the revenue for the company. I even learned SharePoint administration and some basic SharePoint development within a short time to meet a clients needs. My future was pretty secure there, at least from my perspective.

 

Although I loved the company and the people I worked with, on most occasions, I was still not happy. I made an O.K. amount of money, not as much as I could, but considering other things, probably the most the company could afford and at least a lot more than my previous employer paid. I lived about a fifteen-minute drive from work, so the commute was enjoyable. There was an on-call rotation, and sometimes work never seemed to end, but still I had something special. Either way, every day I found myself asking why? Why did I continue on? Helping people with a computer issue, installing a new server or developing a project plan all seemed like interesting ways to make a living, didn’t it?

 

I dreaded going to work most mornings, though. Solving an issue or planning a project never included much more that “googling” the answer. Most things were repetitive in the end, at least to some extent. I didn’t need to think things through, it was like I was a zombie eating through the problems, no sense of what was really important. I’m not saying I.T. is not important, but for me the thrill had ended. My job was no longer fun, I didn’t have a chance to learn new and exciting things. The process had become boring for me.

 

Moving On

I had to find something else. I had already started school, looking to get a degree in computer science. With no previous college credits, it was taking to long. At my age with no college education before, it seemed like a lost cause. Don’t get me wrong in the past two years I have learned a lot from school. Not much about computer science, but still I have gained something from going back to school. The problem is time and happiness. I am 31 years old currently, with a lot left to do to before receive my degree. I have a family. I have responsibilities. Most importantly, I wasn’t happy.

 

Even when I first started looking for a programming job, I knew I would never find one. Every position I applied for wanted three years experience in five different programming languages. That was just for entry-level or junior software developer positions. Still I applied, more than likely to hundreds of job offerings. I actually lost count. I signed up for all the job sites, received vast amounts of emails every day. Still I continued applying. I started attending developer meet ups, even listened to a few others stories on how they could not find employment as a developer, at least for those just starting out.

 

Staying Persistent

Here I am, after at least three months of actively seeking employment as a developer, with a new job as a Web Developer and of all thing in Ruby on Rails, of which I know very little. How did I get here? How did I earn the right to be called a Developer and actually get paid to do it? The only thing I could, be persistent. I persisted when most others wouldn’t. Someone will give you a chance, you just have to be in the right place in the right time. So make sure you’re everywhere at all times.

 

Putting in application after application was, of course, a start, but continuing to do this was a key factor. Many people I have meet who were attempting to become a developer with little experience seemed to be pessimistic, believing they would never be good enough to be employable. They were beaten down, oppressed by their own minds telling them they were not good enough, unless of course they had experience. Of course, how could one gain the experience needed to be a developer.

 

I am sure all these would-be developers would actually be very successful in the software fields they dreamed of. How, though, after a much longer time than myself did they not find employment in their dream career? They lacked persistence. They were actually their own worst enemy, telling themselves they were not good enough or would never make it. Would you hire someone who thought they couldn’t do the job? No wonder they couldn’t find employment.

 

Hopefully, I am not coming off as harsh, I actually hope those I have met that are looking for first-time developer jobs can find the employment they are looking for… and deserve. Hopefully, they learn to become so persistent and self-confident that their next application to a prospective employer causes the employer to ask “Can we afford not to hire this candidate”?

 

Knowing the Right Answers

As a budding developer, don’t think you need to know everything. Learn how to solve problems. How to resolve questions. How to think. Once you have the basic understanding of programming, your worth a lot. You can do things most others can’t. Sure you have to learn as you go, but that’s what this field is. You will spend the rest of your software development career learning and understanding things you didn’t know before. The best part is, these employers expect you to learn on the job. They know you’re going to “google” the answer, post a question on a forum, or read the API documentation. No one really cares, as long as you can find the answer.

 

At my last place of employment, one of the questions was “What is a computer technician’s best friend” or “If you were on your own, what is your troubleshooting process”? Both questions should lead to the same answer, “google” or “search it” or some other similar answer. Does it differ so much for those in the software development industry? Or any industry for that matter. If you can resolve the issue or create the solution, aren’t you doing your job?

 

I am not saying you should just be a copy and paste kind of programmer, you need to be able to understand the issue and the possible solutions. Once your at that point in your development career, don’t be afraid of your lack of knowledge in some technology stack. Be confident, let your perspective employers know you can resolve their problems, because you can. Even if you have to research it first. Persist. For yourself, to yourself. Continue learning and never give up. Grab your future and take charge of your life. No matter how long a road it is, or how hard it is to achieve.

 

Command Line Basics for Developers

Bash Terminal

 

 

Terminal Power

The command line, or terminal, is one of the tools you will use most in your development career. Learning how to use the command line will not only increase your productivity, it will give you insight on how your machine operates. Plus it’s what all the cool kids are doing!

In the sections below, we will go over the basics needed for most common development roles. I have gone over the basic commands briefly but have provided a slightly more in-depth dive into those I believe require additional explanation or examples. This is not meant to be an exhaustive list, but rather a gradual introduction to the most common commands a developer will be using in his or her daily routine.

 


 

The User Basics

These commands are the common user commands that even non-developers should know. They are used so frequently, you are likely to already know them, but I have included them for those new to the command line, and as a refresher for those that do know them.

 

pwd

To print out the directory you are currently in, use the pwd command. This is the directory you are currently in.

$ pwd
/home/user

 

 

cp

To copy a file, use the cp command. The first file will be copied to the second file location. If the second file already exists, the file will be overwritten, so be careful when copying files.

$ cp filename1 filename2

 

 

mv

To move a file, use the mv command. It looks very similar to the cp command. When you want to rename a file, use the mv command.

$ mv filename1 filename2

 

 

rm

To delete a file, use the rm command

$ rm filename

 

To remove all file recursively, including directories, use the -r option. A safer method is to prompt before each removal, using the -i command in conjunction with the -r command.

$ rm -ir projects
rm: descend into directory 'projects'? y
rm: remove regular empty file 'test'? y
rm: remove directory 'projects'? y

 

 

mkdir

To create a directory, use the mkdir command.

$ mkdir newdir

 

 

rmdir

To remove an empty directory, use the rmdir command. If the directory is not empty, use rm -r to remove the directory and everything it contains.

$ rmdir newdir

 

 

cd

To change the directory you’re in, use the cd command followed by the directory.

$ cd /path/of/directory

 

The root of the filesystem is /.

$ cd /
$ pwd
/

 

The tilde, ~, can be used as a shortcut to your home directory so you do not need to type out the full /home/username when changing to a directory in your home directory.

$ cd ~/Documents
$ pwd
/home/user/Documents

 

To move to the top level of your home directory, use just the cd command with no additional options.

$ cd
$ pwd
/home/user

 

./ refers to your current working directory. The command below will change your directory to the projects folder inside the current directory.

$ cd ./projects
$ pwd
/home/user/projects

 

../ refers to the parent directory of your current working directory. The command below will change your directory to the parent directory of the current folder.

$ pwd
/home/user/projects
$ cd ../
$ pwd
/home/user

 

 

ls

The ls command allows you to list the contents of the current directory.

$ ls
Desktop    Dropbox   Public
Documents  Music     Videos
Downloads  Pictures  test.txt

 

By itself, ls will provide you with what you are looking for most of the time. If you need additional information, such as permissions of the files, use the -l option.

$ ls -l
drwxr-xr-x 1 user users 136 Jan 22 10:34 Desktop
drwxr-xr-x 1 user users 308 Feb 14 08:52 Documents
...
-rwxr-xr-x 1 user users   1 Mar 10 20:45 test.txt

 

Hidden files, filenames starting with a dot, are excluded from the output of ls. To include hidden files as well, use the -a option. This will print out all files in the current directory including hidden files in the long format.

$ ls -a
.bash_history  Desktop    .gnupg
.bash_logout   Downloads  .java
.bash_profile  Dropbox    Music
.bashrc        .gnome     Pictures
...

 

The first column shows the permissions of each file. The very first character can be either a - or d. This lets us know if the file listed is a directory, d, or file, -. The next nine characters refer to the permissions of the file, grouped in sets of three. The first set of three permissions is for the owner, the second is for the group, and the third is for everyone else. Each grouping consists of three characters, rwx. Each letter stands for the permission granted, r for read, w for write, and x for execute.

The second column listed by ls -l is the owner. Column three is the group. The fourth column is the size of the file. The remaining columns, excluding the last, is the date and time the file was last modified. Finally, the last column is the name of the file being referenced.

 

 


 

The Developer Basics

We dive now into commands that most developers find useful. This is not to say these commands are not useful to the normal user, but they tend to be used more frequently by developers and system administrators. There are plenty of other useful commands as well, but the selection below represents those most frequently used.

 

find

The useful tool, find as the name suggests, finds files based on some parameters. By itself, find will list all the files in the current working directory including subdirectories. You can also specify the directory in which to run the find command on as shown in the below command that will list out all files in the Project folder of the current user.

$ find ~/Project
/home/user/Projects/test
/home/user/Projects/test/test.txt
/home/user/Projects/index.html

 

An optional argument -name will allow you to search for files with a specified name.The command below will list all files with the name data.json in the current user’s project directory.

$ find ~/project -name data.json
/home/user/project/data.json
/home/user/project/extra/data.json

 

Wildcards, such as the * character can also be used in the name of the file being searched for. The following command will locate all .png files in the current working directory and all subdirectories. The . refers to the current directory.

$ find . -name *.png
./img/car.png
./img/people.png
./pane.png

 

The above command will only match files ending in .png but not .PNG. To match disregardless of letter case, use the -iname argument as in the following command. Including the -not argument will invert the search match listing all files that do not match the search pattern provided.

$ find . -iname *.png
./img/car.png
./img/dart.PNG
./img/people.png
./img/zebra.Png
./pane.png

 

 

grep

The grep command is used to sort through input and locate matching patterns. Supplying a pattern and file, grep will locate each line in the specified file containing the pattern. Common optional arguments include the following

-i for ignore case
-v for invert match
-n for line number

The command below will return all lines that do not include hello from the test.txt file with the appropriate line number.

$ grep -ivn hello test.txt
2:I just saw a cat!
3:The cat was eating a bat.
4:No, not a bat but a nat.
5:And the nat did not get away.

 

Regular expressions can be used in the pattern to search for. We will not go over regular expressions in detail here, but a quick Google search can provide you with a number of resources on the topic. Brackets [] around a set of characters will match any single one of the supplied characters. The following will return all lines that contain bat, cat or nat in text.txt file.

$ grep [bcn]at test.txt
I just saw a cat!
The cat was eating a bat.
No, not a bat but a nat.
And the nat did not get away.

 

Adding a ^ to the beginning of the character list inside the brackets will match anything except the characters inside the brackets. The following will return all lines that contain bat, nat, etc., but will exclude those containing only cat.

$ grep [^c]at test.txt
The cat was eating a bat.
No, not a bat but a nat.
And the nat did not get away.

 

A dot will match any single character. The following will match any line containing food, feed, fffd, etc. in the test.txt file.

$ grep f..d test2.txt
feed
food

 

Using anchors in grep, you can specify if a line should start or end with a specific string.

^string will match any lines beginning with string.
string$ will match any lines ending with string.

$ grep ^Hello test.txt
Hello there!
$ grep away.$ test.txt
And the nat did not get away

 

 

ssh

Secure Shell or ssh allows you to authenticate, connect, and execute commands on a remote computer through the command line. It is one of the most important commands to know as a web developer. To connect to a computer with ssh enabled, open your terminal and type in the following command.

ssh username@servername-or-ip

 

The default port for ssh is 22. If ssh is setup to accept connections on a different port, use the following command to connect.

ssh -p port username@servername-or-ip

 

You will need to enter the user password once the connection has been established. Once connected you will have control of the remote computer and will be able to run commands as needed. You can optionally use ssh keys to authenticate your connection to the remote computer. ssh keys provide more security than password authentication. To create an ssh key, follow the below steps.

  1. Generate a new ssh key:
    ssh-keygen -t rsa
  2.  Enter file in which to save the key (/home/username/.ssh/id_rsa):
    press Enter
  3.  Enter passphrase (empty for no passphrase):
    Enter a passphrase or press Enter for no passphrase
    The passphrase provides an additional level of security. You will need to enter the passphrase each time you connect to the remote computer. On Linux, many distributions contain a utility called ssh-agent which will save the passphrase securely, removing the necessity to re-enter the passphrase each time you connect. If you have ssh-agent running, add the ssh key:
    ssh-add ~/.ssh/id_rsa
  4. Copy the public key to the remote computer.
    ssh-copy-id username@servername-or-ip
$ssh-keygen -t rsa
Generating public/private rsa key parr.
Enter file in which to save the key (/home/user/.ssh/id_rsa): [press Enter]
Enter passphrase (empty for no passphrase): [enter passphrase or press Enter]
Enter same passphrase again: [enter passphrase or press Enter]
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Spq1OI9/EGFEsQBJexCr65/alWdz/nrVw++7B38BGw user@linux
The key's randomart image is:
+---[RSA 2048]----+
|==o+.            |
|..=.. .          |
| ... . .         |
|. .     .    .   |
|.     oSS.    E  |
| .  .*=o+ .  +.. |
|.   ==o+ .  o oo.|
|. . o+  o  ....oo|
| oo+..o..o+ .+...|
+----[SHA256]-----+
$ ssh-copy-id username@servername-or-ip

 

You can now connect to the remote computer through ssh without your password. If you did use a passphrase you will need to enter that if you are not using ssh-agent or another method of storing passwords such as a keychain.

 

scp

Secure Copy or scp is used to copy files from one computer to another securely. It works similarly to the cp command used to copy files locally on your computer. From your local computer, the following command will copy test.txt located in your home folder to /home/username folder on the remote computer.

$ scp ~/test.txt username@servername-or-ip:/home/username

 

To copy a file from the remote computer to your local computer, use the following command where /path/to/file is the location of the file or files and /dir/to/save/to is the destination directory to copy the file or files to.

$ scp username@servername-or-ip:/path/to/file /dir/to/save/to

 

You can even use scp to copy files between to remote computers as shown below.

$ scp user1@servername1:/path/to/file user2@servername2:/path/to/file

 

 

git

Git is another extremely usefully utilities that you will need to use as a developer. Although there are other version control systems available, by far the most popular is Git. If you currently use another version control system, it will still be to your benefit to learn the basics of Git in order to contribute to projects that do use git, whether those projects are open source based or work related. Before you start using Git, you should set up your username and email within Git to allow it to properly label you commits.

$ git config --global user.name "Your Name"
$ git config --global user.email "Your Email"

 

Creating a new repository for Git is easy. Move to the top level directory of your project and initialize the directory as a Git repository.

$ cd /path/to/project
$ git init
Initialized empty Git repository in /path/to/project

 

If you would like to work on a project from another location, such as one on github.com, use the clone command to make a local copy of the specified project, in this case a Rabit Hunt game project.

$ git clone https://github.com/bmb330/Rabbit-Hunt.git
Cloning into 'Rabbit-Hunt'...
remote: Counting objects: 86, done.
remote: Total 86 (delta 0), reused 0 (delta 0), pack-reused 86
Unpacking objects: 100% (86/86), done.
Checking connectivity... done.

 

Once you have initialized or cloned a project, you can view the status of the project files using the status option, which can provide information on modified, new, and deleted files.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

 

To add files to staging in Git, use the add option. You can add individual files, multiple files or all files.

$ git add script.js
$ git add index.html script.js
$ git add .

 

To commit your changes in staging to the project, use the commit option. Adding the -m option to commit allows you to provide a commit message on the command line.

$ git commit -m "short description of this commit"

 

To push your changes to a remote repository, you will use the push command. To push back to a remote repository labeled origin use the command below. Origin refers to the original remote repository, for instance if you cloned your project from github.com it would refer to the cloned project. You should only push to your github.com repository using this method. If you wish to submit patches to another project, fork the project on github.com, clone the project to your local machine, commit changes back to your fork, then create a pull request on GitHub.

$ git push origin master

 

 


Final Thoughts

With these few commands above, you are well on your way to a solid understanding of some of the most useful developer tools available to you. If you have any suggestions for commands you find useful, please leave a comment below with an example use case. Also, feel free to sign up for the LinuxMaster.me Newsletter to receive updates on new posts and upcoming projects.

 

 

JavaScript Learning Resources

Coding

Resource Organization

In my previous post Self-Taught JavaScript Bootcamp using Trello, I discussed my plan for learning JavaScript. If you haven’t had a chance to read through that post, you may want to check it out before continuing as it contains the structure for setting up your self-taught JavaScript course.

Although the list below contains many of the best online resources, there are plenty of others that you could substitute or add in, allowing a better fit for your personal learning style. I have included materials that also may be redundant. If you have mastered the material in a section already, feel free to skim over or skip it altogether. As I go through each section in my plan, if I already have a good understanding, I skim through the just to be sure there is nothing else I could learn from the material. In many cases though, working through the material already covered merely provides a reinforcement of that topic and provides the ability to grasp the concepts even better.

I have organized the learning material into sections. Each section is laid out in a general order based on the level of difficulty. When learning something new, especially a programming language, I recommend using different resources such as websites, videos, books, and podcasts. Using multiple types of learning resources allows you to cover more ground and have a well-rounded learning experience.

The lists are organized by type. Using my Trello JS Board, I move one or two items of different kinds over to my “Working On” list. For example, I would work on the Udacity: JavaScript Basics course while working through the Eloquent JavaScript book. It is important to note that you must work through the problems in each resource. Reading and watching videos is not enough, you must program. The exercises under each resource will provide you with the ability to write out the code and work through problems, helping you to retain what you have learned.

 

Websites

The websites section contains links to sites that provide articles or learning paths regarding JavaScript. Some of the sites reference other sites, books, or videos. I like to follow along and learn from others as they have already been through the trenches and may know a better way.

Books

Although a few of these books are free, most must be purchased. You do not need to buy all of them; most will cover some of the same topics. I would suggest at least one of the first three books to get started.

 

Podcasts

I don’t listen to many podcasts specifically for JavaScript. Here are a few that I have found useful. Any suggestions for podcasts would be appreciated.

 

Videos

Videos are an excellent way to quickly pick up a topic. Learning from others as they walk through the code is a great way to advance your understanding of the material. Just make sure to follow along. Don’t just watch the video, code with the video!

 

Miscellaneous Tools and Frameworks

This section is more of an optional section. Pick and chose what you want to learn and go for it. It contains sites with practice exercises, framework documentation, and testing tools.

 

Wrapping Up

The above resources are an excellent way to get started in programming with JavaScirpt. Hard work and long hours of pushing out your code will bring you to the next level. These links are only meant to be a starting place for those interested in learning how to code with JavaScript. The program assumes some knowledge of HTML and CSS, although an extensive knowledge of HTML and CSS is not required for the material.

Feel free to leave comments or suggestions below. If I missed your favorite resource, post a link below and why you believe it should be included. Let me know how your progress is going, I would like to hear your story on how it is working for you, what changes you made or additional resources you used. Don’t forget to share this with others if you find it helpful. Also, if you haven’t yet, check out the article on using Trello to organize your JavaScript bootcamp.

 

Self-Taught JavaScript Bootcamp using Trello

JS Dev Board
JS Dev Board

 

Getting Enrolled

Over the past few months, I have been teaching myself JavaScript. Unfortunately, I have more resources than time to complete them. I currently work full time and do not have the option of attending a programming boot camp. Even though I have grasped some of the aspects of JavaScript, I felt like I needed a more structured approach, similar to the structure of one of these boot camps. Obviously, with months of resources bookmarked, I had enough information to create my own self-paced, self-taught, JavaScript boot camp.

 

Feeling comfortable with HTML and CSS, I have included a few resources for those topics, to build on the solid foundation I currently have in those technologies. The main focus is JavaScript and as such, majority of the material will cover some aspect of JavaScript. The finished board can be seen here.

 

Trello Blank Board
Trello Blank Board

 

Boarding It Up

First thing is to create a Trello account here. Once that’s done, creating a board is simple. Click on the gray “Create new board…” card on the right. A popup will appear, asking for a title for the new board. Once the title is filled in, click on the green “Create” button to create the board in Trello. Trello redirects the page automatically to the newly created board. At first the board is empty, but lists can be created by typing a list name in the gray “Add a list…” box and clicking the green “Save” button or pressing enter.

 

I have created a total of six lists as follows:

  1. JavaScript
  2. Frameworks & Tools
  3. Done
  4. Up Next
  5. Working On
  6. Daily

 

Cards can be created under the lists on the Trello board by clicking the “Add a card…”, typing a card title and hitting enter. Cards can be moved from one list to another by dragging them to the desired location.

 

Cards can have checklists added to them by clicking on the desired card, clicking on “Checklist” on the righthand side, typing a checklist title and finally clicking the green “Add” button”. Items can then be added to the checklist. Once you have a checklist setup, you can later check off each item as you complete them. This is a great way to break larger tasks down into smaller pieces. If you find yourself adding too many items in a checklist, consider breaking the associated card into multiple cards as this helps with managing your study load.

 

Cards can also be labeled by color, in order to easily distinguish their purpose. On my board I have the following labels set with the following names:

  • Green: website
  • Yellow: book
  • Orange: podcast
  • Red: video
  • Purple: practice
  • Blue: tool

 

JS Dev Board Lists
JS Dev Board Lists

 

Lesson Lists

The first list, “JavaScript”, is the main queue of learning objectives. It includes all the types of objectives listed earlier. I personally like to list mine in order of type, such that all websites are first, then books, followed by video courses, etc. Within that, I organize the objectives further by listing them in order of what I want to complete first. This organization allows me to easily spread out where I learn from, as I don’t want to concentrate only on videos, or only read books. I want to have a well-rounded understanding of JavaScript. Splitting up the type of resources will assist with retaining what what is being learned, while providing additional perspectives on each subject.

 

Like the first list, “Frameworks and Tools”, the second list on my board, provides an additional learning queue. The reason for this secondary queue is to split up the primary and secondary goals. While the first list includes the core JavaScript track, this list provides additional add-ons to the course. These include AngularJS, Ember, Node and more. I have separated these due to the fact that they are not essential, and I may choose some and not all of these learning modules. For example, I may choose to learn Angular after furthering my general JS knowledge, but completely ignore Ember. Basically these are fillers and nice-to-haves, as where the first list covers things every JavaScript developer should know.

 

List three is the “Done” list. This is where cards are placed once they have been completed. Pretty simple right?

 

The “Up Next” list is the fourth in our lineup. This section includes one or two cards of different types. Example, a book and a video, or just a book card. It allows you to quickly see what the next lesson is, providing motivation to move forward without seeming daunting.

 

The fifth list, “Working On”, is where the action happens. This list should be limited to no more two card, each of a different type. This allows for a focused approach, as concentration is not spread around multiple items but still allows the flexibility for more than just one learning method at a time. If a learning module is difficult, it may be beneficial to work on that one objective only, as to allow yourself to focus on the task at hand.

 

The sixth and final list is the “Daily” list. This list includes things that should be attempted daily. Recommendations include programming related podcasts, programming koans, and other similar coding exercises.

 

JS Dev Board
JS Dev Board

 

Making It Work

Bootcamps require focus. With all the Trello cards laid out nicely on the Trello board, most of the hard work is done. Our plan has been set into place, just like in a real boot camp, allowing for greater concentration the current learning objective. The biggest issue now is sticking to this outline. Providing a set schedule each and every day is important.

 

Repetition is the secret to staying on task. Every day, set a time when you can focus and complete a piece of your “Working On” cards. Set a requirement, such as a specific amount of time or a certain number of checklist items completed. Mark of the items as you go along and once a card is completed, move it to the “Done” list. Every day that you are successful, check it off on your calendar. After a few successful days, you will gain confidence when seeing those checks. This gives you the drive to keep going.

 

If you do miss a day, don’t get discouraged. Just get back to your schedule as planned. Nobody’s perfect, so don’t be too hard on yourself. Try not to miss two days in a row though, especially when you are first starting out as two days quickly turns into weeks if you’re not careful.

 

Another advantage of a bootcamp is support. Support from other learners and from the mentors involved. Finding someone to answer questions or look over your code when it’s not working can seem daunting at first. The best way to find the support needed is to network with local developers. Recently I joined a local meetup for JavaScript developers called charmCityJS. Not only where the talks presented in an educational manner, but every person I spoke with was friendly and helpful. Meetups are a great way to find others interested in programming and provide an amazing support system for both new and experienced programmers.

 

In the post to follow, I will go over the material I have put together for my own personal, self-taught, JavaScript bootcamp. Check back soon for the complete list in my next blog post.

 

7 Free Sites to Help You Master Programming

E-Learning

Picking the Right Path to Success

 

With the exploding popularity of programming, there are more sites on learning to program than ever. A Google search of “programming courses” return a total of 154 million results. Adding “free” to the search reduces it to 106 million search results. With the vast number of options, how is one to know which option is right for them? Busy schedules require that time be set aside to learn how to program. With 106 million options for free programming courses, how can you be sure you are selecting the right one, and more importantly, how can you be sure you’re not wasting your time. The following list will provide seven exceptional resources for learning to program.

 

Picking one or two of these to start with and sticking with it will provide a wealth of information and increased programming ability. The courses can be completed on any operating system, although we here at LinuxMaster.me recommend using Linux as it is robust, capable, and is used for many backend applications. As with all things Open Source, it allows you to read, modify and change the code. This provides a valuable learning environment that you can bend to your needs. Check out our post, Linux Distributions Made Easy, to find the right distribution for you. Not sure what Linux is, check out A Brief History of Linux.

 

The Odin Project

 

Free to use and Open Source, the Odin Project allows those learning to contribute to the project as well as learn from the site. The project provides a structure that is easy and fun to follow. The courses consist of Web Development, Ruby, Rails, HTML5, CSS3, JavaScript, and jQuery. The final section even discusses how to go about finding employment with your new found skills. In each course, the Odin Project goes over the material and providing additional outside references when needed. There are projects along the way, and student submitted projects are linked to in each project section. Try working on your project first before looking at others code, as this will increase your ability to think through problems — something every programmer needs to develop.

 

The project also encourages coding with others, also known as pair programming. The community aspect can be seen in the comment below each course step. Have a question, just post a comment at the bottom of the page. This is a great way to communicate, especially as it does not require you to visit another page for assistance. Overall, the Odin Project has a lot of potentials and working through the projects will give you a good amount of examples to put in your portfolio. Having said that, for those new to programming, you will want to supplement this resource with additional materials as it is not an all-inclusive solution. For those seeking structure but still able to pull from outside resources, possibly including another course in this lineup, the Odin Project can be a great choice.

 

The Odin Project website
The Odin Project

Free Code Camp

 

Another well-structured option for learning web development is Free Code Camp. Based on the popular boot camp model but unlike most boot camps, Free Code Camp is as the name suggests, free. The courses are based online and incorporate external courses to for most of their actual challenges. Challenges are anywhere from 2 to 120 minutes to complete, with most being between 30 to 60 minutes in length. This allows you to block out your time and gives an idea of how long it should take you to complete each challenge. The camp covers Web Development and includes HTML, CSS and JavaScript for both front-end and back-end development. If you’re interested in a JavaScript specific learning plan, this may be the choice for you. Allowing students to concentrate on fewer languages is a smart move, especially for those new to programming.

 

One of the major advantages of Free Code Camp is the community support. The camp has chat rooms where students can engage with others, discussing things from projects to setting up pair programming with one another. This early interaction is a great help to budding developers, allowing students to learn from one another. The goals of the camp are to provide the students with a thousand hours of programming experience, much more than standard boot camps. With the first 100 hours on challenges and 900 coding for non-profits in need, the design for this camp is a recipe for success if you can stay focused for that long. If you’re interested in a JavaScript focused path and helping non-profits along the way, Free Code Camp may be for you.

 

Free Code Camp website
Free Code Camp

Codecademy

 

Codecademy is an interactive learning experience for those who want to jump right into the action. They offer courses in HTML, CSS, JavaScript, jQuery, PHP, Python, and Ruby. They also have courses covering APIs for GitHub, Box, YouTube, and more. For those looking for a quick introduction to any of these topics, Codecademy is an amazing resource that will show you the basics of the technologies you’re interested in. One thing Codecademy does not teach is theory, which can be covered by some of the other educational resources in this list.

 

With each course consisting of multiple problems to work through, you will cover a lot of information quickly. This allows you to quickly jump in and start coding. Codecademy will get you coding fast while offer helpful hints along the way. There is a lot of hand holding through the process and I would recommend supplementing this resource with one of the others on this page, or a book on the programming language you’re interested in. Codecademy is an awesome resource as well for those who already have programming experience in another language who would like to add a new programming to their arsenal.

 

Codecademy site
Codecademy

Academic Earth

 

For those interested in a more academic teaching approach, Academic Earth provides classes directly from a few top name universities. Not only for those interested in programming, classes range from art to social science. The classes at Academic Earth consists of the more traditional in-class style teaching, as many of the computer science based courses are recorded from university courses. Outside of the individual courses there is no specific order, so for those interested in following a plan it may be wise to choose a different online site with more guidance. Courses are also offered in languages other than English, allowing this educational treat to expand beyond the United States.

 

With little structure inside Academic Earth itself, you will need to find your own support. Some of the courses listed are actually links to outside sites, which may include some sort of communication between learners, and possibly instructors. If you have an understanding of the topics you would like to study, Academic Earth can provide free, university-level education that may be unavailable otherwise. For ideas on how to structure your own learning with Academic Earth, pull a course list from one of the university degrees in computer science and work through their recommended classes while skipping the rest. This would provide most of what the university teaches, minus the interaction with teachers and students. With its wide selection of different universities, Academic Earth provides those without a computer science degree the ability to succeed.

 

Academic Earth website
Academic Earth

Coursera

If the previous educational site doesn’t provide what you need, check out Coursera. Like Academic Earth, Coursera provides university level courses but unlike some of the other competition, they provide verified certificates for a fee. This is a great way for learners to show off their new skills both to current and prospective employers. Courses are drawn from various top name universities around the United States. Topics range from Arts to Statistics. With such a large number of courses, the site provides an easy to navigate course selection for those searching the catalog.

 

One of the advantages of Coursera is the structure. Students have homework, quizzes and other assignments with due dates. This will keep you on track, especially useful for those who have a hard time motivating themselves. Assignments are designed to be assessed by your peers, which in turn means you are helping to grade other classmates work. Going over other people’s assignments after you have done yours will provide a wonderful insight into how others think, and possibly introduce you to new ideas. There is also heavy interaction with other classmates through the use of the discussion forums in each class. This open forum allows for fellow learners to interact and communicate with one another, something that is key in the learning process. It is hard to loose with a system like Coursera’s.

 

Coursera website
Coursera

edX

 

Similar to Coursera, edX provides a rich experience with some of the best free education on the Internet. Courses are pulled from different universities and cover a large range of topics. Courses provided by edX generally have a free track and a verified certificate option, similar to Coursera’s approach. Many of the universities involved in edX are well recognized in the computer science field. Harvard, Berkeley, and MIT are a few of the prominent members of the team.  The course catalog is simple to use and most courses are easily found with little effort.

 

edX courses are designed in a way to engage the learner while providing the necessary information. The courses are well thought out and students have multiple types of interaction with the coursework. Through reading, videos, quizzes and assignments, students are taught in a modern fashion. Personally, I find the edX courses to be of outstanding quality and is one of my top choices when it comes to online learning. Currently, the Linux Foundation has a course for those learning Linux on the edX site called Introduction to Linux.  With the vast amount of highly polished courses available at edX, it is worth taken a look at for your programming education needs.

 

edX website
edX

Udacity

 

Udacity is another favorite. Unlike the other educational platforms listed above, Udacity has created an ideal learning environment. Students can learn for free or enroll for a certificate or nano degree for a fee. Udacity has partnered with major tech companies to provide you with the skills and knowledge to pursue your programming dreams. With support from companies like AT&T and Google, you can see why this education platform is growing fast. Students can learn Python, Java, JavaScript, web, Android and iOS development. Although not as wide of a selection as other online educational sites, Udacity focuses in and provides a solid learning experience.

 

The courses are laid out in sections broken down into short instructional videos. After a few videos, students have an assignment or quiz to take. This helps out a lot, as you are constantly applying the things you have just learned. I found this technique to work extremely well for me. Following along with the lessons, students create actual applications as they go along, slowly building up to the final stage of the course project. This iterative approach is great to show how things can be broken down into pieces and also helps the students learn the information presented. Udacity is my number one resource for learning online at this time. With their fun and interactive teaching methods, Udacity is a win for those looking to learn programming from a non-traditional method.

 

Udacity website
Udacity

Which Course is Right for Me?

 

With a great selection of resources to teach yourself programming, which one should you choose? Personally, I recommend sticking with one or two, as not to spread you time out too thin, especially if you are working full time. To decide on which educational site to use, pick a course from each to test out. Go through a section in each and then decide which works best for you. If you have enough information above, pick one based on your learning style and just go for it. Once you’re started though, stick with it. One of the big downfalls of online learning is there is no one to hold you accountable. Create a schedule to do the course work and watch the videos. If you tend to procrastinate, take a look at How Not Creating Goals is Costing You. Sticking with it is the most important aspect.

Finding a balance of studying and practice is also important. Take the time to practice what you learn. You may think you’re absorbing all the information, but without practice it will not stick. Creating side projects will only strengthen what you have been studying. Also, participate in the forums or group discussions if available. This will get you to start thinking more about what you are learning. You may even help someone else out by answering their questions. Even newbies can provide insight to questions, and talking through a problem will generally cause all parties to think more about the subject at hand. If you have any questions about the sites above, post it in the comments section below.

 

 

Linux Distributions Made Easy

What is a Linux Distribution

A Linux distribution, also sometimes called a Linux distro, is a collection of software, packaged with the Linux kernel and generally including a package management system and configurations that allow for an out-of-the-box user experience. This does not necessarily mean each distribution is easy to use, as some are designed to be used by more advanced users and may require manual setup of critical system software or advanced management of the system. Still, many are designed for ease of use, and provide a simple way to have a fully functional Linux system up and running in no time. Most distributions include an easy to use installation software, allowing users to boot from a DVD or USB drive. We will cover some of the most popular distributions in the rest of this section.

RHEL/CentOS/Fedora

Fedora Desktop
Fedora Desktop

Red Hat Enterprise Linux, also known as RHEL, is a commercial distribution that is widely used by businesses and remains one of the most successful commercial Linux distributions in existence today. Red Hat Enterprise Linux is a commercial product and can be purchased along with technical support. CentOS, a Linux distribution based on Red Hat Enterprise Linux aims to provide a free enterprise operating system that strives to remain compatible with Red Hat Enterprise Linux. For those looking to learning Red Hat Enterprise Linux, CentOS provides a great starting point and is now officially a part of Red Hat, although it remains a separate product. The community edition of Red Hat is known as Fedora. Fedora is known for bleeding edge software and incorporating innovative technologies in each release. It is not intended as an enterprise operating system, although some people may use it for enterprise-grade tasks. A major similarity between Red Hat Enterprise Linux, CentOS, and Fedora are their use of the RPM package management system. RPM stands for Red Hat Package Management and is used to install application packages. We will discuss RPM and other package management systems in greater detail in a future lecture. Red Hat, CentOS, and Fedora all use Gnome as the default desktop environment.

SLES/openSUSE

openSuse Desktop
openSuse Desktop

SUSE has a long history and is one of the older Linux distributions. Currently, the community edition is referred to as openSUSE while the commercial edition is called SUSE Linux Enterprise. SUSE is a distribution that has had a focus on the KDE desktop environment, although recently they have had some great Gnome desktop integration in their distribution. Most Windows users and admins will appreciate SUSE and KDE. SUSE provides a configuration tool called YAST which allows for configuration of the many aspects of the systems, similar to Control Center. KDE provides a familiar feel for former Windows users, allowing them to transition easier to the Linux environment. Personally, I used SUSE for my desktop in my early days and still find it to remain one of the most well put-together and polished distributions. I have moved to another distribution but recommend giving this distribution a try for anyone that is seeking a complete desktop environment and is coming from a Windows background. SUSE uses RPM for their package management, although packages are different in some cases from Red Hat based operating systems.

Debian/Ubuntu

Ubuntu Desktop
Ubuntu Desktop

Debian is a Linux distribution that puts an emphasis on stability. Debian has been around for a long time, almost as long as SUSE. Its vision has been to be an open operation system following the GNU and Linux way. Debian has one of the largest package repositories, meaning you will more than likely find the software you are looking for. Due to its focus on stability, some packages may be an older version considering other distributions, and this may be an issue for some users that need the newer features. In a server use case though, this may be exactly what you are looking for. Ubuntu, a derivative of Debian, uses the Unity desktop. The Unity desktop has similarities to the Mac operating system and will feel somewhat familiar to Mac users, although it is not the same. Ubuntu and its derivatives are some of the most widely used distributions in use today. Ubuntu is developed by Canonical and is focused on Desktop, Cloud and Mobile operating systems as their belief is in the convergence. Being one of the more popular distributions, you will find most applications on Ubuntu, sometimes even first. The deb package format is the default format for all Debian and Ubuntu based distributions. Apt-get is used to manage packages, as well as Ubuntu’s Software Center, which can be used to locate and install new packages.

Linux Mint

Linux Mint Desktop
Linux Mint Desktop

Linux Mint is a derivative of the Ubuntu operating system. It includes two main desktop environments, Cinnamon, and MATE. Cinnamon is a fork of the Gnome desktop and provides a more traditional desktop than Gnome, which seeks to be more modern. MATE currently uses an older technologies for implementing its desktop, GTK+ 2, as where Gnome and Cinnamon use GTK+ 3. Due to this reason though, MATE runs extremely well on older hardware and has a traditional look and feel as a desktop. Although Linux Mint contains other desktops, the most popular are Cinnamon and MATE. Linux Mint is a great distribution for those new to Linux, similar to Ubuntu and provides a solid foundation being built on Ubuntu. It uses deb packages as such.

Arch Linux

Arch Linux Desktop
Arch Linux Desktop

Arch Linux is my preferred distribution at this time due to the fact it is a rolling distribution and only includes those things that you actually install. Arch Linux is installed manually and is not for a first time Linux users. Although I use this distribution, I would not recommend it to anyone enrolled in this course, as this is an introductory course on Linux. Once you have some more experience, you may wish to experiment with Arch Linux and I would recommend it then, as a good way to learn more about the Linux operating system. Distributions based on Arch Linux include Antergos and Manjaro, of which Antergos is closer to “pure” Arch Linux.

Other Distributions

There are many good and bad distributions I have not gone over in this lecture as we would be talking about distributions for longer than the entire course and then some. You may wish to visit distrowatch.com and explore some of the other options available to you. I recommend sticking to one of the distributions listed here, as they are some of the most popular and widely used distributions, both for personal and commercial use. With that in mind though, Linux does provide a wide selection to fill your needs, and you may find a Linux distribution that fits your needs or personality better than the ones covered here.

Non-Linux/BSD

On a side note, there are other free and open source operating systems other than Linux. One of the more popular alternatives are the BSD operating systems. The BSD family includes but is not limited to FreeBSD, PC-BSD, OpenBSD, and NetBSD. Mac OS X is based on BSD as well. These are all great operating systems, and depending on what you need to do, may fit you better than Linux. For this blog though, we will stick with Linux, although some topics covered will be the same or similar for the BSDs.

A Programming Blog to Follow: Simple Programmer

Simple Programmer, What is It?

The Simple Programmer is a spectacular resource for those looking for blogs regarding programming, whether beginner or advanced. The blog provides general purpose information for those interested in programming, from a free blogging course to getting people to buy your product. The blog will not teach you how to program, but will provide the ability to become a better developer. The range of topics covered provides an amazing starting point for developers, and the free blogging course is the inspiration for LinuxMaster.me.

John Sonmez Twitter Page
John Sonmez Twitter Page

Who Writes It?

The author of Simple Programmer is John Sonmez. He is a Software Developer and Blogger who focuses on important aspects of software development including the business side. He has also created courses for Pluralsight. You can learn more about John on his site, Simple Programmer, or by following him on Twitter.

John Sonmez Pluralsight
John Sonmez Pluralsight Page

Why Should I Read This?

The Simple Programmer blog offers valuable tips for programmers of all experience levels. John, the author of Simple Programmer, is an experienced software developer, creator of instructional videos and has written a book. This is to name just a few of his accomplishments. He has a proven track record, which is one reason that developers or those aspiring to be such should follow his blog. His free blogging course also provides some great information on how to get started and continue running an amazing blog for those interested. It is highly recommended to write about things experienced to make one’s self better. Giving help back to the community is also a plus of running a blog, providing ideas and inspiration to others.