The following post shares some of the tools I currently use for PHP development and learning PHP. The list is dynamic and shifts as my knowledge shifts. I'll try to update it as I make changes to my preferences. After all, the decisions to use one tool over another are highly personal. You may disagree or agree with my choices, and I'd love to know your reasoning. This list was inspired by Tom McFarlin's list.
Why publish another list?
There are almost a dozen reasons for writing this post and most likely that quantity is the motivation to complete the list and make it public. To avoid overwhelming and distracting from the post, I grouped the reasoning into three categories. They are included so that you can appreciate the importance of making this list. I'd love for you to make a list and provide a link to it in the comments. Skip the section if you don't care about why it exists.
Reason #1: Sharing can be cathartic
I'd like to repeat one reason above and expand on it. I'm very aware that my programming knowledge is very limited. Understanding these limitations helps motivate me to improve. By sharing my knowledge then I'm forced to review why I'm doing each step. Reviewing and repeating is a great thought exercise.
I received a scathing private message about a year ago. It wasn't the only one and the message was ill-received. The person was a jerk, but I didn't feel like entertaining the person.
There was a time in my past that I'd argue with the person, however, now I want to hide my head in shame. To avoid these types of mean-spirited poo dumps, private messaging is disabled. Simply stated, too many people were being rude. Maybe it's easier to toss insults when you don't know the other person, therefore, this list is a way to steer the conversation to a positive. If we can bring things out into the open then the positive will win out.
This list is also an opportunity to read from others regarding their choices. The early 90's was all about sharing links. In my view, it is sad when bloggers shifted to SEO practices of inner linking and started ignoring other bloggers.
The List
Coding Hardware: MacBook Pro, iPads, and iPhone
Tux Reports earns revenue and this leads to the need for keeping audit-ready tax records. I've worked from the context that keeping business hardware separate from personal is necessary for ease of auditing and this is why certain hardware is used for writing code while other equipment is for school.
A MacBook Pro is hooked to an Apple monitor. This is the number one place that I type and practice coding. This is not the tool used to read other code. I use the iPad to read other people's code. This was done initially so that I stopped the practice of copying someone else's code into my editor.
An OS upgrade to Sierra was devastating. MAMP 3 failed to start, and sites were moved. This happened at the worst moments while I was preparing to leave for school related training. It's why this machine is backed up now on the iCloud. It was easy to click and set it up.
The iPhone is used for reading coding sites when I'm not at my desk.
Personal Hardware
Integrated Development Environment (IDE)
When I first started opening up PHP files, I used textMate and Coda 2. It was a slow process. It was a rough way to start. Things changed when I started to use PhpStorm and learned to use comments to understand XenForo information.
It's important to keep a directory or subdirectories for re-usable code snippets. For example, I finally have a WordPress plugin bootstrap file that is worth keeping separate. There are also snippets of code for a WordPress login and functions for grabbing XenForo information. I keep some of this code on Github.
PhpStorm 2016.2 Help :: Creating Gists
MAMP-Pro
I tried setting up PHP and Apache on the MacBook Pro early in the process of creating XenWord. It is far easier to use MAMP-Pro. Sites are easy to setup; switching between PHP versions is a click; and it's possible to setup Nginx rather than just Apache. It's great for focusing on the code and not building sites.
FileZilla sFTP
I've used FileZilla for years. I can't recall ever using anything else. I originally used because of website management: uploading and downloading files. Now I use FileZilla whenever I need to upload a file.
Most of the uploading of WordPress plugins is done through the /wp-admin panel. The same is becoming true of XenForo.
PhpMyAdmin
PhpMyAdmin is included with MAMP. My focus has been to learn PHP and not MySQL. Most of my energy using PhpMyAdmin happened while trying to understand WordPress meta tables.
Screenshots
Screenshots are taken with Jing. If I want to fuss with them then I use Adobe Photoshop. Many of the images used on Tux Reports are from Pixabay. I've bought images online but they are only good for a post or two.
Videos
I used to spend a lot of time fussing with videos. I purchased a great microphone and even have a greenscreen. Yep. I don't do that any longer. Instead, Apple's QuickTime is fast. And I stopped editing. It is what it is. The videos are not high production quality and that's fine with me right now. It's the content that is important.
Staging has recently been on my mind. @MattW set up a sub domain for testing. I'll fuss around with it soon enough.
Browser
My browser is Google chrome. This is because I have different users set. There is a home account, a work account, and a political project I did for 1.5 years. My most common extensions installed are oneTab. My favorite feature is the inspect because I can change view port. Using the incognito tab is handy when testing out the website as a visitor.
Debugging
I'm in the very early stages of learning how to debug. Xdebug is set and my favorite way to learn is to use var_dump. XenWord used to include kint but that turned out not to be handy for me. I could use print_r but var_dump is made pretty in MAMP.
PHP unit testing is a 747 right now. I don't even feel the breeze. I set it up a year ago and spent hours. I decided my code is too coupled to WordPress right now. I'll first refactor and try again.
Frameworks
Two Frameworks stick out for me.
Laravel was recently installed. I was able to build a quick website in less than an hour. It was fun. It also helped me understand MVC patterns a little better.
CodeIgniter was used to build an aggregator years ago. That work was abandoned as impractical.
Versioning
For years, I used PhpStorm to upload to BitBucket. Instead SourceTree is my choice - SourceTree | Free Git and Hg Client for Mac and Windows
Repositories
I prefer BitBucket. I have a private repository for XenWord. I also use BitBucket to read XenForo code when not at home. I uploaded a copy and run through it while traveling.
GitHub -- there is a private repository, and gists
Composer is a package manager and recently installed so that I could practice using the Framework Laravel. Basically I installed to grab laravel and to learn autoloading. I haven't spent much time learning autoloading.
Keep Notes
OneNote was introduced in 2003. I've used it for writing my dissertation, for keeping personal notes, and lately for keeping notes about plugin ideas and coding ideas. Code snippets are not done well in OneNote. I'd love a way to do it.
Basically I use OneNote to try to keep trying to tell myself - "Remember this when you sit down to code next time."
Resources
This list is far from exhaustive. I tend to see a site and forget about it later. I tried to use OneTab to keep separate lists. I don't have a good solution. Instead, I'm listing sites I tend to go to first instead of using a search engine.
Conclusion
I hope this list is thought provoking in a kind way. Maybe you have a better list, disagree with a choice, or see something missing that I should try in order to improve my workflow. Please feel free to share your thoughts.
This list was started four or five days ago in my head, typed out in OneNote, and expanded once placed on this site. I'll keep updating it as time passes. Hyperlinks are missing in many places. I'll add them
Why publish another list?
There are almost a dozen reasons for writing this post and most likely that quantity is the motivation to complete the list and make it public. To avoid overwhelming and distracting from the post, I grouped the reasoning into three categories. They are included so that you can appreciate the importance of making this list. I'd love for you to make a list and provide a link to it in the comments. Skip the section if you don't care about why it exists.
Reason #1: Sharing can be cathartic
- By sharing the tools then I can avoid making mistakes that I made early in the learning cycle; I copied code off the internet rather than trying to understand it and write my own code. In other words, I'm trying to move from Cowboy Coding >> Unconscious Incompetence >> Conscious Incompetence (See the 2009 DevThoughts article).
- I grew (very) tired of hiring people who claimed they were an expert only to discover their lack of knowledge. Yes, I can read StackExchange and StackOverflow too.
I'd like to repeat one reason above and expand on it. I'm very aware that my programming knowledge is very limited. Understanding these limitations helps motivate me to improve. By sharing my knowledge then I'm forced to review why I'm doing each step. Reviewing and repeating is a great thought exercise.
- Spent hours writing, rewriting registration then login. Read completeLogin method. Over several evenings, Searches found similar code.
- 99% perspiration.
- So much happens away from the desktop .
I received a scathing private message about a year ago. It wasn't the only one and the message was ill-received. The person was a jerk, but I didn't feel like entertaining the person.
There was a time in my past that I'd argue with the person, however, now I want to hide my head in shame. To avoid these types of mean-spirited poo dumps, private messaging is disabled. Simply stated, too many people were being rude. Maybe it's easier to toss insults when you don't know the other person, therefore, this list is a way to steer the conversation to a positive. If we can bring things out into the open then the positive will win out.
This list is also an opportunity to read from others regarding their choices. The early 90's was all about sharing links. In my view, it is sad when bloggers shifted to SEO practices of inner linking and started ignoring other bloggers.
The List
Coding Hardware: MacBook Pro, iPads, and iPhone
Tux Reports earns revenue and this leads to the need for keeping audit-ready tax records. I've worked from the context that keeping business hardware separate from personal is necessary for ease of auditing and this is why certain hardware is used for writing code while other equipment is for school.
A MacBook Pro is hooked to an Apple monitor. This is the number one place that I type and practice coding. This is not the tool used to read other code. I use the iPad to read other people's code. This was done initially so that I stopped the practice of copying someone else's code into my editor.
An OS upgrade to Sierra was devastating. MAMP 3 failed to start, and sites were moved. This happened at the worst moments while I was preparing to leave for school related training. It's why this machine is backed up now on the iCloud. It was easy to click and set it up.
The iPhone is used for reading coding sites when I'm not at my desk.
Personal Hardware
- Windows 10 machines
- A beautiful touch screen sits in the kitchen for looking up recipes.
- Nexus 7 tablet
- This sits next to my large comfy chair downstairs. It's for reading - nontechnical sites.
- iMac due to screen sizes as retired to personal
- This is for school work and never business. It was retired when the speed became an issue.
Integrated Development Environment (IDE)
When I first started opening up PHP files, I used textMate and Coda 2. It was a slow process. It was a rough way to start. Things changed when I started to use PhpStorm and learned to use comments to understand XenForo information.
- PhpStorm
- This is my go-to editor. The code completion grabbed my attention, eventually code sniffing helped me find errors before saving the file, and I spent the first weeks trying to get all green checkmarks in files.
- Important keystrokes -- I recently learned to use the alt click for making multiple cursors and the command slash is one of the most useful keystrokes. The last one quickly comments and uncomments code.
- Important addons - code hints, sniffing
- WordPress coding standard
- PHPDoc completion has helped me write better code comments.
- Atom
- I recently docked Atom. This is a useful editor when I'm trying to create a new file outside of any of my projects. All of the XenForo DevLogs are done in Atom. Sometimes seeing the code in a different way is helpful.
- Codeanywhere
- I used codeanywhere to store early version of XenWord. It was painful to setup XenForo and lately I've abandoned this approach.
It's important to keep a directory or subdirectories for re-usable code snippets. For example, I finally have a WordPress plugin bootstrap file that is worth keeping separate. There are also snippets of code for a WordPress login and functions for grabbing XenForo information. I keep some of this code on Github.
PhpStorm 2016.2 Help :: Creating Gists
MAMP-Pro
I tried setting up PHP and Apache on the MacBook Pro early in the process of creating XenWord. It is far easier to use MAMP-Pro. Sites are easy to setup; switching between PHP versions is a click; and it's possible to setup Nginx rather than just Apache. It's great for focusing on the code and not building sites.
FileZilla sFTP
I've used FileZilla for years. I can't recall ever using anything else. I originally used because of website management: uploading and downloading files. Now I use FileZilla whenever I need to upload a file.
Most of the uploading of WordPress plugins is done through the /wp-admin panel. The same is becoming true of XenForo.
PhpMyAdmin
PhpMyAdmin is included with MAMP. My focus has been to learn PHP and not MySQL. Most of my energy using PhpMyAdmin happened while trying to understand WordPress meta tables.
Screenshots
Screenshots are taken with Jing. If I want to fuss with them then I use Adobe Photoshop. Many of the images used on Tux Reports are from Pixabay. I've bought images online but they are only good for a post or two.
Videos
I used to spend a lot of time fussing with videos. I purchased a great microphone and even have a greenscreen. Yep. I don't do that any longer. Instead, Apple's QuickTime is fast. And I stopped editing. It is what it is. The videos are not high production quality and that's fine with me right now. It's the content that is important.
Staging has recently been on my mind. @MattW set up a sub domain for testing. I'll fuss around with it soon enough.
Browser
My browser is Google chrome. This is because I have different users set. There is a home account, a work account, and a political project I did for 1.5 years. My most common extensions installed are oneTab. My favorite feature is the inspect because I can change view port. Using the incognito tab is handy when testing out the website as a visitor.
Debugging
I'm in the very early stages of learning how to debug. Xdebug is set and my favorite way to learn is to use var_dump. XenWord used to include kint but that turned out not to be handy for me. I could use print_r but var_dump is made pretty in MAMP.
PHP unit testing is a 747 right now. I don't even feel the breeze. I set it up a year ago and spent hours. I decided my code is too coupled to WordPress right now. I'll first refactor and try again.
Frameworks
Two Frameworks stick out for me.
Laravel was recently installed. I was able to build a quick website in less than an hour. It was fun. It also helped me understand MVC patterns a little better.
CodeIgniter was used to build an aggregator years ago. That work was abandoned as impractical.
Versioning
For years, I used PhpStorm to upload to BitBucket. Instead SourceTree is my choice - SourceTree | Free Git and Hg Client for Mac and Windows
Repositories
I prefer BitBucket. I have a private repository for XenWord. I also use BitBucket to read XenForo code when not at home. I uploaded a copy and run through it while traveling.
GitHub -- there is a private repository, and gists
Composer is a package manager and recently installed so that I could practice using the Framework Laravel. Basically I installed to grab laravel and to learn autoloading. I haven't spent much time learning autoloading.
Keep Notes
OneNote was introduced in 2003. I've used it for writing my dissertation, for keeping personal notes, and lately for keeping notes about plugin ideas and coding ideas. Code snippets are not done well in OneNote. I'd love a way to do it.
Basically I use OneNote to try to keep trying to tell myself - "Remember this when you sit down to code next time."
Resources
This list is far from exhaustive. I tend to see a site and forget about it later. I tried to use OneTab to keep separate lists. I don't have a good solution. Instead, I'm listing sites I tend to go to first instead of using a search engine.
- WordPress.stackexchange
- Laracasts, Lynda, TreeHouse
- Twitter (never Facebook because FB is for friends and family)
- wptavern
- Tom McFarlin
Conclusion
I hope this list is thought provoking in a kind way. Maybe you have a better list, disagree with a choice, or see something missing that I should try in order to improve my workflow. Please feel free to share your thoughts.
This list was started four or five days ago in my head, typed out in OneNote, and expanded once placed on this site. I'll keep updating it as time passes. Hyperlinks are missing in many places. I'll add them