Development Resources

IntelliJ IDE

I recommend using the various forks of the IntelliJ IDEA IDE. IntelliJ is quickly becoming the most popular IDE for many languages and there are versions of IntelliJ out there for most of the popular ones. You can get free licenses for these IDEs using your student email address here.



As software engineers (and programmers in general), you should be familiar with using some sort of version control system (VCS) to keep your code, track changes, and collaborate. Git is currently the most popular VCS and is commonly used by many organizations in the industry. Do not confuse Git with Github. Github is privately-owned site that hosts Git repositories for the public. While Github is a great place to store your repositories, there are alternatives including creating your own Git server on your own machine.

If you are just starting with Git, you should first get comfortable with the following commands: init, checkout, commit, push, and pull.


Web Development

The following links are specific to the development of web applications. It is assumed you have basic understanding of Linux from the command line.

LAMP Stack

A LAMP stack provides the various server processes needed for hosting a web server. These services include:

The LAMP stack (or whichever method you use to serve your web pages) will need to be installed on a server. This can be a physical machine or a virtual machine on your workstation. In order for the websites hosted on this machine to be publically-viewable (i.e., accessable as a standard website), the machine must either have a public IP address or use network address translation (NAT) so the machine's router (which should have a public IP address) can direct public traffic to the machine. The method for setting up NAT to direct traffic to your webserver varies depending on the router. If you cannot use the tutorial below, contact me for help. As an alternative, you can simply have the webpage accessable only from the host machine.

When installing these packages, it is best to use the link below to install them separately. You can find guides that attempt to install them as a single package, but those are generally more difficult to customize.

As an alternative, if you are using the Laravel framework (see below), you can set up a Homestead. More information on Homesteads are available in the Laravel section.



Apache is the web server process which serves your website's pages. The service allows you to set up multiple "virtual servers" from the same machine so you can host multiple websites. Once you've installed Apache, you should get used to enabling and disabling sites from the files in /etc/apache2. You should also be able to update your web pages by modifying their corresponding files in your website's root directory (ususually in /var/www). If you are using an IDE to modify these files, you need to set it up to use a protocol such as sftp to transfer the IDE's project files to the website's root directory on the webserver. For IntelliJ, you can specify this when starting or importing a new project.



MySQL is currently the most poopular open source relational database system. You will use this database to store information for your web application (e.g., users, posts, items, etc). Data is stored as rows in tables (something like a spreadsheet) for easy retrieval. In order to interact with the MySQL database, your application will need to make queries to it using the SQL language or an Object-Relational Mapping (ORM).

To start with interacting with your database, get used to the following query types: SELECT, INSERT, UPDATE, and DELETE



PHPMyAdmin is a web-based graphical interface for MySQL. If you are uncomfortable with using the command line to access and view your database, this is a viable alternative. PHPMyAdmin allows you to access most of the command line functionality through a web browser and provides quick visual access to your tables.

It is important to note that without extra measure, PHPMyAdmin can pose security vulnerabilities to your site (as with any tool that provides alternate access to services). If you chose to use PHPMyAdmin, take extra precautions to secure its web page.



PHP is a commonly-used scripting language for creating dynamic websites. If you are familiar with Perl (or any C-like language), PHP should not be difficult to pick up.



HTML is the basic markup language with which webpages are built. When putting together webpages using other scripting languages, the ultimate result must be in HTML. HTML includes various tags (similar to XML) that give the browser information about how to render the webpage's contents. For the most part, HTML is simple to pick up and you can probably get started right away with creating webpages.



Generally speaking, JavaScript is a client-side programming language for manipulating webpages after they have been served. This is useful when a webpage needs to update frequently, but doesn't need to interact with the server to do so. For example, Apache might serve a webpage that includes a table with dozens of rows of data. If you want the table to be sortable by clicking on the headers, it would be a waste of server time to send a request each time you want to re-sort the data. Instead, you can send some JavaScript code along with the webpage that runs in the client's browser and takes care of sorting withing querying the server.

JavaScript is not necessary for a website, but can help improve performance. It is an asynchronous language, so being familiar with callbacks helps.

Recently, JavaScript has also been used to create server-side code (e.g., NodeJS) as well.



Laravel is a popular Model View Controller (MVC) framework for PHP. It provides an organized file structure for your website as well as various libraries to make developing in PHP easier and more organized. Laravel includes an Object-Relational Model (ORM) library called Eloquent which interfaces directly with your database allowing you to make calls and construct relationships using program-level constructs (objects). Laravel also includes a basic authentication system and out-of-the-box support for a REST API.

The documentation below offers the option of using a Vagrant Homestead instead of a standard LAMP stack. It is up to you whether you choose this route or not. Generally speaking, this approach is great for developmental purposes, but should not be used for a production site.



An alternative approach for creating web-based applications involves the use of a Representational State Transfer (REST) API to serve simple JSON or XML objects to the client and the client using client-side code (usually in JavaScript) to interpret that data and render a web page. The idea is to move much of the load from the server to the client. This also allows for Single Page Applications (SPAs) in which the server serves only a single page along with an entire JavaScript application to manipulate that page based on the information retrieved from the REST API.

This is an advanced topic and is not necessary unless you want to try somethign new.