Becoming a Real Programmer

83
Becoming a real programmer. Jacques Woodcock @jacques_thekit Friday, October 19, 12
  • date post

    22-Oct-2014
  • Category

    Technology

  • view

    1.137
  • download

    2

description

 

Transcript of Becoming a Real Programmer

Page 1: Becoming a Real Programmer

Becoming a real programmer.Jacques Woodcock

@jacques_thekit

Friday, October 19, 12

Page 2: Becoming a Real Programmer

Becoming a real programmer.Jacques Woodcock

@jacques_thekit

Friday, October 19, 12

Page 3: Becoming a Real Programmer

Disclaimer

Friday, October 19, 12

Before we begin, a little disclaimer. I’m a PHP developer, so this presentation has a lot of reference to PHP specifics, though most the principles can be applied to other languages.

Page 4: Becoming a Real Programmer

Some Background

Friday, October 19, 12

I started doing web design in 2000,

Page 5: Becoming a Real Programmer

Some Background2000

Friday, October 19, 12

back when Dreamweaver was a Macromedia product

Page 6: Becoming a Real Programmer

Some Background2000

?Friday, October 19, 12

Google was only the 12th top visited site beat out by

Page 7: Becoming a Real Programmer

Some Background2000

12th

1st

Friday, October 19, 12

MSN

Page 8: Becoming a Real Programmer

Some Background2000

12th

2nd

Friday, October 19, 12

Yahoo, Ebay, AOL

Page 9: Becoming a Real Programmer

Some Background2000

12th

10th

Friday, October 19, 12

and GEO cities.

Page 10: Becoming a Real Programmer

Some Background

<html><head></head><body></body></html>

Friday, October 19, 12

Because I was a designer, that meant learning basic HTML coding principles by reading the source code written by

Page 11: Becoming a Real Programmer

Some Background2000

Friday, October 19, 12

Dreamweaver, and we all know Dreamweaver writes

Page 12: Becoming a Real Programmer

Some BackgroundInsert Photoof Poo here

Friday, October 19, 12

poo code.

Page 13: Becoming a Real Programmer

Some Background

HTMLJS

Friday, October 19, 12

This naturally lead me to wanting to understand more advanced ways to add interaction to the HTML I was writing, which lead to starting to study JavaScript.

Page 14: Becoming a Real Programmer

Some Background

HTMLJS

Flash

Friday, October 19, 12

At the same time, I was doing Flash animations, also a Macromedia product, and got highly interested in multimedia design as an extension of wanting to add interactions to the pages I was designing. At the time, Flash was the best way to add interaction and took a equal focus to JavaScript, and eventually most of the interaction focus.

Page 15: Becoming a Real Programmer

Some Background

HTMLJS

Flash

Friday, October 19, 12

Once you start this rabbit hole, you'll eventually want to start saving data and manipulating that data, so a couple years into my career I ended up working in a Cold Fusion shop which allowed me to learn my first backend technology.

Page 16: Becoming a Real Programmer

Some Background

HTMLJS

FlashColdFusion

Friday, October 19, 12

Finally, this rabbit hole lead me to learning the before mentioned languages but also ColdFusion,

Page 17: Becoming a Real Programmer

Some Background

HTMLJS

FlashColdFusion

Lingo

Friday, October 19, 12

Lingo

Page 18: Becoming a Real Programmer

Some Background

HTMLJS

FlashColdFusion

LingoActionScript

Friday, October 19, 12

ActionScript

Page 19: Becoming a Real Programmer

Some Background

HTMLJS

FlashColdFusion

LingoActionScript

PHP

Friday, October 19, 12

and PHP.

Page 20: Becoming a Real Programmer

The Old Philosophy

Friday, October 19, 12

But in doing all this, I had a basic philosophy of

Page 21: Becoming a Real Programmer

The Old Philosophy“I don't care how this works,

I just want it to work.”

Friday, October 19, 12

"I don't care how this works, I just want it to work." It was a very

Page 22: Becoming a Real Programmer

The Old Philosophy“Get R Done”

Friday, October 19, 12

"Get 'R Done" style of programming.

Page 23: Becoming a Real Programmer

The Old Philosophy“I don't care how this works,

I just want it to work.”

Friday, October 19, 12

I blame this mostly on the environment in which I learned these languages, agency life, but that really is a copout. Sure, this environment didn't really give me the luxury of spending time to fully

Page 24: Becoming a Real Programmer

To Grok =1) Understand (something) intuitively or by empathy.2) Empathize or communicate sympathetically; establish a rapport.

Friday, October 19, 12

grok things, but I could of done more myself. It also didn't help that many of the languages that I learned, if not all, and the time in which I learned them only exposed me to

Page 25: Becoming a Real Programmer

Procedural Programming =programming paradigm, derived from structured programming, based upon the concept of the procedure call.

Friday, October 19, 12

a procedural method of programming.

Page 26: Becoming a Real Programmer

The New Philosophy

Friday, October 19, 12

But about a year ago, I realized I was limiting my ability to accomplish the more ambitious tasks I was dreaming up, also my peer group was shifting as I was hanging out with more engineers as opposed to creatives. All this lead me to desire more understanding of the skill set that made me most my money. This only took 12 years.

Page 27: Becoming a Real Programmer

The New PhilosophyFully understand what I'm doing and the technology I'm using to

make it happen.

Friday, October 19, 12

So my new philosophy has been to "Fully understand what I'm doing and the technology I'm using to make it happen."

Page 28: Becoming a Real Programmer

The Path

Friday, October 19, 12

This is the manner I've employed in which to make this new philosophy happen.

Page 29: Becoming a Real Programmer

The PathGetting Involved

Friday, October 19, 12

First, I started getting involved in the community. To hang around people who understand the technologies I used and wanted to use. Also to find people who were curious about similar things I was curious about.

Page 30: Becoming a Real Programmer

The PathNashville PHP

Getting Involved

Friday, October 19, 12

I found most these people at the NashvillePHP user group, and the larger PHP community. At the time, I knew just about nothing, I still know little. But I never felt like an outcast or underneath anyone. It's been an amazing community to be a part of.

Page 31: Becoming a Real Programmer

The PathPHP Mentoring

Getting Involved

Friday, October 19, 12

In the PHP community there is an initiative called PHP Mentoring which pairs up mentors with apprentices. To me, this is the best way to learn technology. I don't believe you need to go to college for a degree to do 80% of what the programming industry does. Even if you do, your real learning won't start until you get into the marketplace.

Page 32: Becoming a Real Programmer

Learning New Technologies

Friday, October 19, 12

After getting involved next, you need to know what technologies you actually need to learn.

Page 33: Becoming a Real Programmer

Learning New Technologies

Friday, October 19, 12

You won't find these in isolation, thus the importance of getting involved. Even then, a lot of what you learn is personal choice, not because of some standard. So being exposed to as many ways a possible to solve a program and the technologies used is the best way to make an informed decision on what you should learn.

Page 34: Becoming a Real Programmer

Tools Every PHP Developer Should Know

5Mr. PHP

Friday, October 19, 12

Still, there are good guidelines that you can refer to such as Cal Evan's "5 Tools Ever PHP Developer Should Master". In this article Cal explains that the 5 tools ever PHP developer should master are:

Page 35: Becoming a Real Programmer

Framework1

Friday, October 19, 12

A framework: PHP is full of frameworks. So many that you’d probably never learn them all.

Page 36: Becoming a Real Programmer

Version Control2 GitSVNJiraMany others...

Friday, October 19, 12

Version Control: PHP works with all the major version control options that other languages also can use.

Page 37: Becoming a Real Programmer

Entity Relationship Diagram (ERD)3

Friday, October 19, 12

Entity Relationship Diagram (ERD): Databases can get ridiculously massive, easily.

Page 38: Becoming a Real Programmer

Debugger4

Friday, October 19, 12

A Debugger: Going through code 1 line at a time sucks. Use a debugger.

Page 39: Becoming a Real Programmer

Unit Tester5

Friday, October 19, 12

Finally a Unit Tester: Write tests to insure your code works in all use cases or go you’ll be going through your code line by line again.

Page 40: Becoming a Real Programmer

1. Framework2. Version Control3. ERD4. Debugger5. Unit Tester

Mr. PHP

Friday, October 19, 12

So that was1. A Framework2. A version Control System3. An ERD tool (Entity relationship Diagram)4. A Debugger5. A Unit Testing Tool

Page 41: Becoming a Real Programmer

1. Framework2. Version Control3. ERD4. Debugger5. Unit Tester

Mr. PHP

Friday, October 19, 12

All of these things are very important to learn, though I don't fully agree that learning a Framework and an ERD are on my top 5 tools, but still it's a good starting point. The ERD is an arguable point, but the Framework I'm pretty firm about for this reason:

Page 42: Becoming a Real Programmer

1. Framework2. Version Control3. ERD4. Debugger5. Unit Tester

Mr. PHP

Friday, October 19, 12

Frameworks are great for saving you time and effort, but unless you already understand the language you'll always be limited to what you can accomplish.

Page 43: Becoming a Real Programmer

1. Framework2. Version Control3. ERD4. Debugger5. Unit Tester

Mr. PHP

Friday, October 19, 12

Not only that, you'll never be able to maintain that framework or fix issues with it when they arise, and they do arise. I liken it to buying a car: If you don't know how that car works you'll always be reliant on someone else to fix and maintain it, thus making you only a user and not an engineer.

Page 44: Becoming a Real Programmer

1. Framework2. Version Control3. ERD4. Debugger5. Unit Tester

Mr. PHP

Friday, October 19, 12

Paul M Jones said a really smart thing once, and if you know Paul you know he always does, "Everyone should write a framework once, then throw it away." The idea being that by writing your own framework, you understand truly what goes into your application's codebase, what problems can arise and how to fix them.

Page 45: Becoming a Real Programmer

1. Basic Sys Admin2. Command Line3. Version Control4. Debugger5. Unit Tester

Not Mr. PHP

Friday, October 19, 12

So what would my list look like?1. Basic Sys Admin Skillz2. Command Line3. Version Control4. Debugging5. Unit Testing

Page 46: Becoming a Real Programmer

Learning New Technologies

Friday, October 19, 12

So what have I focused on learning over the past year? Well, since I already knew PHP I focused on other gaps I had in my toolbox.

Page 47: Becoming a Real Programmer

Learning New Technologies

Friday, October 19, 12

First was to get my basic system admin skills up to par. I won't say this should be your first thing to learn, but it is a skill that all good developers should have and will need at some point.

Page 48: Becoming a Real Programmer

Learning New Technologies

Friday, October 19, 12

It's like learning your OS environment and just as important. To just learn an application that runs on the OS as opposed to the OS and it's applications is like just learning how to use IE on Windows. A lot of shit is going to go bad and you're not going to have any idea of why.

Page 49: Becoming a Real Programmer

Learning New Technologies

LAMP Stack

Friday, October 19, 12

The ultimate goal of learning basic sys admin tasks is to be able to setup and maintain your own development stack. In PHP that's

Page 50: Becoming a Real Programmer

Linux

Learning New Technologies

Friday, October 19, 12

Linux,

Page 51: Becoming a Real Programmer

Apache

Learning New Technologies

Friday, October 19, 12

Apache,

Page 52: Becoming a Real Programmer

MySQL

Learning New Technologies

Friday, October 19, 12

MySQL or equivalent,

Page 53: Becoming a Real Programmer

PHP

Learning New Technologies

Friday, October 19, 12

and PHP.

Page 54: Becoming a Real Programmer

Environment Learning New Technologies

Friday, October 19, 12

Next you need to consider your development environment. While learning the sys admin stuff, it's a good time to evaluate your whole development environment.

Page 55: Becoming a Real Programmer

Environment Learning New Technologies

Command Line

Friday, October 19, 12

I believe most people should expose themselves to the command line at some point in their career, preferably early. This is the gateway to fully understanding how your computer works and harnessing and manipulating it's power. I believe this so much that I push for new developers to learn from the command line, not the OS's GUI.

Page 56: Becoming a Real Programmer

Environment Learning New Technologies

Command Line

Friday, October 19, 12

Next in the environment is the Command LineAlso my push for command line usage comes from my desire for efficiency. GUIs use a ton of RAM, and I'd rather save that RAM for executing tasks, not writing them.

Page 57: Becoming a Real Programmer

Environment Learning New Technologies

Virtual Machine

Friday, October 19, 12

Next up is a Virtual MachineI personally like to keep my computer as clean and independent as possible from my dev environments so I like to setup a virtual machine and install my stack and application into it. Ben Ramsey has a good post on this. I also did my own post. You can find in the resources of this deck.

Page 58: Becoming a Real Programmer

Environment Learning New Technologies

Virtual Machine

Friday, October 19, 12

You can use VirtualBox, which is free, or Parallels or VMWare or any VM software to accomplish this. Configuration will be unique to each solution though, so make sure to do a bit of research to see which you like best.

Page 59: Becoming a Real Programmer

Environment Learning New Technologies

Integrated Development Environment (IDE)

Friday, October 19, 12

Now that we have an environment, we need to choose an IDEBack in 2000, I started with Dreamweaver. Because I came from the visual world, Dreamweaver was the best solution for me at the time, though because most GUI IDEs suck horribly at writing clean code, I ended up having to learn how to write most my HTML by hand.

Page 60: Becoming a Real Programmer

Environment Learning New Technologies

Integrated Development Environment (IDE)

Friday, October 19, 12

From there, I moved to Coda and really enjoyed it, but I found as I was moving to understanding the command line even further while learning the LAMP stack management, that Coda separated me to far from the command line. So I moved to VIM, which is an amazingly powerful and lightweight IDE which you can spend years learning and becoming more efficient with.

Page 61: Becoming a Real Programmer

Environment Learning New Technologies

Source Control

Friday, October 19, 12

Finally, I needed something better for source control, something remote. So I picked up Git, though I'm still a newb. Again, I use Git from the command line, though there are GUIs, mainly because my terminal interface is now my OS environment and also to save RAM.

Page 62: Becoming a Real Programmer

Environment Learning New Technologies

OSX

Terminal App

VM VirtualBox

CentOS

Apache

MySQLPHP

VIM

PHP Application

GIT

Friday, October 19, 12

So my environment is made up of the follow:- OSX is my main OS- Terminal App as my primary tool- VirtualBox Running CentOs for my Development Server! I’ve also run Ubuntu 11 on Parallels - VIM for my IDE- Git and GitHub for source control

Page 63: Becoming a Real Programmer

Philosophy Learning New Technologies

Friday, October 19, 12

Once you have a solid development environment, you can start focusing on the real important stuff, cause now that your tools are solid you can do solid work. So let’s talk about your development philosophy a now.

Page 64: Becoming a Real Programmer

Philosophy Learning New Technologies

Object Orientated Programming

Friday, October 19, 12

First thing first. If you are a procedural developer as I was, like a number of PHP developers are, you need to start studying object oriented programming. There are so many reasons to do this, but none more important than it is the right way to write your application. From efficiency to organization to reduction in duplication, there are so many reasons.

Page 65: Becoming a Real Programmer

Philosophy Learning New Technologies

Object Orientated Programming

Friday, October 19, 12

Now, this is not an easy thing to do by yourself and in fact, it's almost impossible to get all the nuances of OOP without having someone with experience walk you through it. This is why PHP mentoring has been really important to me. The one-on-one time with someone who knows all about this topic, as well as others, insures I fully understand what I'm trying to grok.

Page 66: Becoming a Real Programmer

Philosophy Learning New Technologies

Design Patterns

Friday, October 19, 12

Along with understanding OOP comes learning about design patterns. Model View Controller is one pattern you've probably heard of, but there are many many more. To understand how to properly solve a programming problem it helps to have a good understanding of the different patterns and what types of problems they are good at solving.

Page 67: Becoming a Real Programmer

Philosophy Learning New Technologies

Design Patterns

Friday, October 19, 12

I recommend the Design Patterns Elements for Reusable Object-Oriented Software by the gang of 4. It's a pretty complex book with a lot of complex topics. I recommend reading it with someone else or at least finding someone you can talk about the topics with.

Page 68: Becoming a Real Programmer

Philosophy Learning New Technologies

Test Driven Development

Friday, October 19, 12

Now I don't fully buy into test driven development, I do however believe in testing even if I don't always execute this perfectly, but it is a very useful tool to insure your code is lightweight and works.

Page 69: Becoming a Real Programmer

Philosophy Learning New Technologies

Test Driven Development

Friday, October 19, 12

Test Driven development is about writing your tests first, then writing the classes and methods. All tests will fail first and then you refactor by making the test work, then breaking them, then getting to work again until you have the simplest solution to your problem.

Page 70: Becoming a Real Programmer

Support Learning New Technologies

Friday, October 19, 12

So as you code, you'll find the need for support tools to help execute all these practices. Depending on what language you develop in, your tools will be different, but for PHP here a couple I use.

Page 71: Becoming a Real Programmer

Support Learning New Technologies

Standards Sniffer

Friday, October 19, 12

A standard sniffer insures you are writing code that complies with a coding standard, such as in PHP there are Pear, PSR2.0 and many others. The standard sniffer will review your code for formatting compliance.

Page 72: Becoming a Real Programmer

Support Learning New Technologies

Standards Sniffer

Friday, October 19, 12

The reason you do this is so when you work with other people or with a team, all code that is written looks the same, allowing anyone on the team to easily pick up where someone else left off and finish the work.

Page 73: Becoming a Real Programmer

Support Learning New Technologies

Testing; Unit and Functional

Friday, October 19, 12

Each language has built in testing tools. Use these, make sure your code works in all use cases. Break it and then fix it and then break it again and then fix it again. There is nothing more important than the knowledge that the code you've written works, even when changes are made.

Page 74: Becoming a Real Programmer

Future Technologies

Friday, October 19, 12

So this is a start. There is so much more that I want to learn and need to learn. I just wanted to spend a sec highlighting these.

Page 75: Becoming a Real Programmer

Future Technologies

Continuous Integration

Friday, October 19, 12

Continuous integration is a process for combining your development, build, quality control and testing, and launching of your application. It’s about automation of repetitive tasks in development.

Page 76: Becoming a Real Programmer

Future Technologies

Python

Friday, October 19, 12

At some point I want to play with Python because of it’s differences to PHP, and also because some concepts I have would be better solved with a less web focused language.

Page 77: Becoming a Real Programmer

Future Technologies

Selenium

Friday, October 19, 12

Selenium

Page 78: Becoming a Real Programmer

Future Technologies

Nonrational Database

Friday, October 19, 12

At some point I want to experiment with a nonrational database as I’m quite familiar with standard SQL-rational database.

Page 79: Becoming a Real Programmer

Future Technologies

Nonrational Database

Friday, October 19, 12

iOS, I have a few concepts that would be best suited on such an interactive medium, plus because I come from the UX/UI world, I’ve always been fascinated with the iOS platform for that reason.

Page 80: Becoming a Real Programmer

So many more...

Friday, October 19, 12

The list actually goes on from there, as you can tell, I’m curious.

Page 81: Becoming a Real Programmer

Continue Learning

Friday, October 19, 12

Finally, it's important to keep learning. Stay hungry for knowledge. This will not only give you some sense of fulfillment but will also insure you stay employable as a programmer.

Page 82: Becoming a Real Programmer

Always be learning.

Friday, October 19, 12

Our industry changes almost daily. To stay competitive you much keep up with these changes.

So always be learning.

Page 83: Becoming a Real Programmer

Resourceswww.nashvillephp.orgwww.phpmentoring.orghttp://blog.calevans.com/2009/02/09/5-tools-every-php-developer-should-master/http://benramsey.com/blog/2012/03/build-php-54-on-centos-62/http://jacqueswoodcock.tumblr.com/post/21849873018/installing-apache-and-php-5-4-on-a-clean-ubuntu-installhttp://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/

Friday, October 19, 12