What I should begin with?
Tags: beginners, programming, setup, productivity
Published: 2023-05-03 19:05:43

## Where to start? 

That's a question many have already answered and yet many others like you (maybe) are still asking yourselves. Maybe your question is different, like "what if I have started with a different set of tools?" or "what if I have to start from scratch in 2023?". I will get you through the set of tools I use and how using them improves my productivity.

First of all, I will focus on PHP project development, using Laravel Framework. Also I will assume you are using Widnows and that you are kind of a beginner and in a way or another you don't have a clear idea on what your starter kit should look like. Please stay with me until the end, I'll have a reasoning for each decision taken.
- Development IDE: Apache Netbeans
- Terminal: Windows terminal, using Cygwin Bash
- Browser: Any chromium based browser
- Git: Cygwin git package

Optional features/tools:
- Virtualbox
- Vagrant / Homestead

You can use any of this tools or at least use the same reasoning method I will try to explain to make your own decision. Many of the features I will present are probably present in other similar tools.


## Development IDE
It's true you can use any text editor you prefer but my choice to use Netbeans for PHP development is based on how the tweaks I implemented work for me.
You can download it from [apache.org downloads](https://netbeans.apache.org/download/) and nowadays it has a 3 month cycle between updates. [VsCode] (https://code.visualstudio.com/) is also very popular and has a lot of features and extensions to meet your needs, I just prefer Netbeans.
The features I like are:
- Code templates. You can configure templates for each document type (html, php, javascript, etc). The respond instantly to your keystrokes so if you are fast typing you will like this one.
- Customization. There is not a lot you can customize visually, but at least there is a good dark theme that comes with the default install. Also, there are not a lot of plugins available.
- Remote connections. You can configure remote repositories which can be sync'd via SFTP (ssh) or regular FTP. There is a remote hosts manager and authentication can be done using user/password or key-pair authentication.

Features available I don't use or don't like:
- Git integration
- Composer integration
- Debug and profiling
- Class automatic import is mostly a hit/miss
- No native support for blade templates syntax or proper formatting

Let me be clear: all IDE's Ive used have implemented in one way or another all or almost all of the features I like, I just prefer the way they work in Netbeans. Please do not enter a debate with anyone on which IDE is better. Dedicate some time on each of the top recommendations and try to implement their productivity boost features and do not settle until you master these features. Those are the ones that will let you deliver your best.

## Cygwin Terminal
There are many terminals you can use like Windows Command Prompt or PowerShell, or maybe bash types like Git-Bash implementation. Over every one of these, I prefer Cygwin's bash implementation. I also made it possible to make it as the default terminal in Windows. It's easier to do this in Win11, but can be done in Win10 too.
You can download the Cygwin installer from [here](https://www.cygwin.com/). 
List of packages I install with it:

- OpenSSH
- Git
- Curl
- Make
- (optional) wget
- (optional) Vim / Nano

Again, this a matter of taste and preference. Other options as I mentioned are WSL, PowerShell and Git Bash. Be sure to try them if you have time and if you don't you can go straight to my recommendation.

## Virtualbox / Vagrant / Homestead
Homestead, as stated in the [Laravel Docs](https://laravel.com/docs/10.x/homestead), is "an official, pre-packaged Vagrant box that provides ..."  TLDR: everything you need to run a Laravel Application in your local pc as if it where a Linux Ubuntu based server.
The Homestead image is implemented in a VirtualBox vm using Vagrant as its vm manager.

I recommend that before going to production, try to run the application locally, but using Homestead. It will mimic a Linux environment and sometimes you will be able to catch some errors that will not show up using your local Windows machine.

That's it. You are ready to begin with your development. Please stay tuned as I will be posting tips and tricks that make me more productive using this tools.

**Follow-ups**
[My Netbeans Setup](https://dev.to/jcrodsolutions/my-netbeans-setup-3711)