SlideShare a Scribd company logo
1 of 83
Download to read offline
Becoming a real programmer.
      Jacques Woodcock




    @jacques_thekit

Friday, October 19, 12
Becoming a real programmer.
      Jacques Woodcock




    @jacques_thekit

Friday, October 19, 12
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.
Some Background




Friday, October 19, 12


I started doing web design in 2000,
Some Background       2000




Friday, October 19, 12


  back when Dreamweaver was a Macromedia product
Some Background        2000


                                       ?
Friday, October 19, 12


Google was only the 12th top visited site beat out by
Some Background       2000
   1st


   12th

Friday, October 19, 12


MSN
Some Background       2000
   2nd


   12th

Friday, October 19, 12


Yahoo, Ebay, AOL
Some Background       2000
   10th


   12th

Friday, October 19, 12


and GEO cities.
<html>
    Some Background
                           <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
Some Background       2000




Friday, October 19, 12


Dreamweaver, and we all know Dreamweaver writes
Some Background
                         Insert Photo
                          of Poo here




Friday, October 19, 12


poo code.
HTML
                                      JS
    Some Background




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.
HTML
                                      JS
    Some Background                  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.
HTML
                                        JS
    Some Background                    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.
HTML
                                        JS
    Some Background                   Flash
                                    ColdFusion




Friday, October 19, 12


Finally, this rabbit hole lead me to learning the before
mentioned languages but also ColdFusion,
HTML
                             JS
    Some Background        Flash
                         ColdFusion
                           Lingo




Friday, October 19, 12


Lingo
HTML
                              JS
    Some Background         Flash
                         ColdFusion
                            Lingo
                         ActionScript




Friday, October 19, 12


ActionScript
HTML
                              JS
    Some Background         Flash
                         ColdFusion
                            Lingo
                         ActionScript
                             PHP




Friday, October 19, 12


and PHP.
The Old Philosophy




Friday, October 19, 12


But in doing all this, I had a basic philosophy of
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
The Old Philosophy
                                    “Get R Done”




Friday, October 19, 12


"Get 'R Done" style of programming.
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
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
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.
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.
The New Philosophy
                         Fully 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."
The Path




Friday, October 19, 12


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




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.
Getting Involved The Path
                                     Nashville PHP




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.
Getting Involved The Path
                                   PHP Mentoring




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.
Learning New Technologies




Friday, October 19, 12


After getting involved next, you need to know what
technologies you actually need to learn.
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.
5         Tools Every
                                          PHP
                                          Developer
                                          Should Know




       Mr. 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:
1                 Framework




Friday, October 19, 12

A framework: PHP is full of frameworks. So many that you’d probably never learn them all.
2                 Version Control
                            Git
                            SVN
                            Jira
                            Many others...




Friday, October 19, 12

Version Control: PHP works with all the major version control options that other languages
also can use.
3
                         Entity Relationship Diagram
                         (ERD)




Friday, October 19, 12

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




Friday, October 19, 12

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




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.
1. Framework
                                    2. Version Control
                                    3. ERD
                                    4. Debugger
                                    5. Unit Tester




       Mr. PHP
Friday, October 19, 12


So that was
1. A Framework
2. A version Control System
3. An ERD tool (Entity relationship Diagram)
4. A Debugger
5. A Unit Testing Tool
1. Framework
                                     2. Version Control
                                     3. ERD
                                     4. Debugger
                                     5. 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:
1. Framework
                                   2. Version Control
                                   3. ERD
                                   4. Debugger
                                   5. 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.
1. Framework
                                       2. Version Control
                                       3. ERD
                                       4. Debugger
                                       5. 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.
1. Framework
                                   2. Version Control
                                   3. ERD
                                   4. Debugger
                                   5. 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.
1. Basic Sys Admin
                                   2. Command Line
                                   3. Version Control
                                   4. Debugger
                                   5. Unit Tester




       Not Mr. PHP
Friday, October 19, 12


So what would my list look like?
1. Basic Sys Admin Skillz
2. Command Line
3. Version Control
4. Debugging
5. Unit Testing
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.
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.
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.
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
Learning New Technologies




                         Linux
Friday, October 19, 12


Linux,
Learning New Technologies




                              Apache
Friday, October 19, 12


Apache,
Learning New Technologies




                                    MySQL
Friday, October 19, 12


MySQL or equivalent,
Learning New Technologies




                                            PHP
Friday, October 19, 12


and PHP.
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.
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.
Environment Learning New Technologies
                Command Line




Friday, October 19, 12


Next in the environment is the Command Line
Also 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.
Environment Learning New Technologies
                Virtual Machine




Friday, October 19, 12


Next up is a Virtual Machine
I 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.
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.
Environment Learning New Technologies
                Integrated Development
                Environment (IDE)



Friday, October 19, 12


Now that we have an environment, we need to choose an IDE
Back 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.
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.
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.
Environment Learning New Technologies

                          PHP Application


                                         PHP   MySQL


                         Apache                        GIT   VIM


                          CentOS

                    VM VirtualBox


                          Terminal App
                                                                   OSX

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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Future Technologies
                               Selenium




Friday, October 19, 12


Selenium
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.
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.
So many more...




Friday, October 19, 12


The list actually goes on from there, as you can tell, I’m
curious.
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.
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.
Resources
     www.nashvillephp.org
     www.phpmentoring.org
     http://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-install
     http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/
     0201633612/




Friday, October 19, 12

More Related Content

Similar to Becoming a Real Programmer

Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2rusersla
 
Documentation for developers
Documentation for developersDocumentation for developers
Documentation for developersMichael Marotta
 
HTML Prototyper's Toolbox
HTML Prototyper's ToolboxHTML Prototyper's Toolbox
HTML Prototyper's ToolboxJon Hadden
 
Design Your First Word Press Theme In Minutes Word Camp Birmingham Brett Bume...
Design Your First Word Press Theme In Minutes Word Camp Birmingham Brett Bume...Design Your First Word Press Theme In Minutes Word Camp Birmingham Brett Bume...
Design Your First Word Press Theme In Minutes Word Camp Birmingham Brett Bume...Brett Bumeter
 
RubyMotion: Put your Dreams in Motion with Ruby
RubyMotion: Put your Dreams in Motion with RubyRubyMotion: Put your Dreams in Motion with Ruby
RubyMotion: Put your Dreams in Motion with RubyAstrails
 
Remix South: Advanced Interaction Design
Remix South: Advanced Interaction DesignRemix South: Advanced Interaction Design
Remix South: Advanced Interaction DesignDave Malouf
 
10 Years of the Cathedral and the Bazaar
10 Years of the Cathedral and the Bazaar10 Years of the Cathedral and the Bazaar
10 Years of the Cathedral and the BazaarHaggen So
 
Design Types
Design TypesDesign Types
Design Types1&1
 
JS-Everywhere - LocalStorage Hands-on
JS-Everywhere - LocalStorage Hands-onJS-Everywhere - LocalStorage Hands-on
JS-Everywhere - LocalStorage Hands-onBrice Argenson
 
Working With Social APIs - SoMeT12
Working With Social APIs - SoMeT12Working With Social APIs - SoMeT12
Working With Social APIs - SoMeT12Mario Vasquez
 
Multiplatform, Promises and HTML5
Multiplatform, Promises and HTML5Multiplatform, Promises and HTML5
Multiplatform, Promises and HTML5C4Media
 
Adapt and respond: keeping responsive into the future
Adapt and respond: keeping responsive into the futureAdapt and respond: keeping responsive into the future
Adapt and respond: keeping responsive into the futureChris Mills
 
CloudFoundry-summit-2015-a-look-back
CloudFoundry-summit-2015-a-look-backCloudFoundry-summit-2015-a-look-back
CloudFoundry-summit-2015-a-look-backKrishna-Kumar
 
JavaScript DOM Manipulations
JavaScript DOM ManipulationsJavaScript DOM Manipulations
JavaScript DOM ManipulationsYnon Perek
 
Internship dotCloud
Internship dotCloudInternship dotCloud
Internship dotCloudJill Mee
 
Raspberry pi: Aprende raspberry pi con Linux por peter membrey y david hows.
Raspberry pi: Aprende raspberry pi con Linux por peter membrey y david hows.Raspberry pi: Aprende raspberry pi con Linux por peter membrey y david hows.
Raspberry pi: Aprende raspberry pi con Linux por peter membrey y david hows.SANTIAGO PABLO ALBERTO
 

Similar to Becoming a Real Programmer (20)

Firefoxos bcndevcon
Firefoxos bcndevconFirefoxos bcndevcon
Firefoxos bcndevcon
 
Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2
 
Documentation for developers
Documentation for developersDocumentation for developers
Documentation for developers
 
HTML Prototyper's Toolbox
HTML Prototyper's ToolboxHTML Prototyper's Toolbox
HTML Prototyper's Toolbox
 
Design Your First Word Press Theme In Minutes Word Camp Birmingham Brett Bume...
Design Your First Word Press Theme In Minutes Word Camp Birmingham Brett Bume...Design Your First Word Press Theme In Minutes Word Camp Birmingham Brett Bume...
Design Your First Word Press Theme In Minutes Word Camp Birmingham Brett Bume...
 
RubyMotion: Put your Dreams in Motion with Ruby
RubyMotion: Put your Dreams in Motion with RubyRubyMotion: Put your Dreams in Motion with Ruby
RubyMotion: Put your Dreams in Motion with Ruby
 
Remix South: Advanced Interaction Design
Remix South: Advanced Interaction DesignRemix South: Advanced Interaction Design
Remix South: Advanced Interaction Design
 
Let's interface
Let's interfaceLet's interface
Let's interface
 
10 Years of the Cathedral and the Bazaar
10 Years of the Cathedral and the Bazaar10 Years of the Cathedral and the Bazaar
10 Years of the Cathedral and the Bazaar
 
Symfony and eZ Publish
Symfony and eZ PublishSymfony and eZ Publish
Symfony and eZ Publish
 
Design Types
Design TypesDesign Types
Design Types
 
JS-Everywhere - LocalStorage Hands-on
JS-Everywhere - LocalStorage Hands-onJS-Everywhere - LocalStorage Hands-on
JS-Everywhere - LocalStorage Hands-on
 
Working With Social APIs - SoMeT12
Working With Social APIs - SoMeT12Working With Social APIs - SoMeT12
Working With Social APIs - SoMeT12
 
Multiplatform, Promises and HTML5
Multiplatform, Promises and HTML5Multiplatform, Promises and HTML5
Multiplatform, Promises and HTML5
 
Adapt and respond: keeping responsive into the future
Adapt and respond: keeping responsive into the futureAdapt and respond: keeping responsive into the future
Adapt and respond: keeping responsive into the future
 
Liberated Accessibility
Liberated AccessibilityLiberated Accessibility
Liberated Accessibility
 
CloudFoundry-summit-2015-a-look-back
CloudFoundry-summit-2015-a-look-backCloudFoundry-summit-2015-a-look-back
CloudFoundry-summit-2015-a-look-back
 
JavaScript DOM Manipulations
JavaScript DOM ManipulationsJavaScript DOM Manipulations
JavaScript DOM Manipulations
 
Internship dotCloud
Internship dotCloudInternship dotCloud
Internship dotCloud
 
Raspberry pi: Aprende raspberry pi con Linux por peter membrey y david hows.
Raspberry pi: Aprende raspberry pi con Linux por peter membrey y david hows.Raspberry pi: Aprende raspberry pi con Linux por peter membrey y david hows.
Raspberry pi: Aprende raspberry pi con Linux por peter membrey y david hows.
 

Recently uploaded

FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 

Recently uploaded (20)

FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 

Becoming a Real Programmer

  • 1. Becoming a real programmer. Jacques Woodcock @jacques_thekit Friday, October 19, 12
  • 2. Becoming a real programmer. Jacques Woodcock @jacques_thekit Friday, October 19, 12
  • 3. 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.
  • 4. Some Background Friday, October 19, 12 I started doing web design in 2000,
  • 5. Some Background 2000 Friday, October 19, 12 back when Dreamweaver was a Macromedia product
  • 6. Some Background 2000 ? Friday, October 19, 12 Google was only the 12th top visited site beat out by
  • 7. Some Background 2000 1st 12th Friday, October 19, 12 MSN
  • 8. Some Background 2000 2nd 12th Friday, October 19, 12 Yahoo, Ebay, AOL
  • 9. Some Background 2000 10th 12th Friday, October 19, 12 and GEO cities.
  • 10. <html> Some Background <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
  • 11. Some Background 2000 Friday, October 19, 12 Dreamweaver, and we all know Dreamweaver writes
  • 12. Some Background Insert Photo of Poo here Friday, October 19, 12 poo code.
  • 13. HTML JS Some Background 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.
  • 14. HTML JS Some Background 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.
  • 15. HTML JS Some Background 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.
  • 16. HTML JS Some Background Flash ColdFusion Friday, October 19, 12 Finally, this rabbit hole lead me to learning the before mentioned languages but also ColdFusion,
  • 17. HTML JS Some Background Flash ColdFusion Lingo Friday, October 19, 12 Lingo
  • 18. HTML JS Some Background Flash ColdFusion Lingo ActionScript Friday, October 19, 12 ActionScript
  • 19. HTML JS Some Background Flash ColdFusion Lingo ActionScript PHP Friday, October 19, 12 and PHP.
  • 20. The Old Philosophy Friday, October 19, 12 But in doing all this, I had a basic philosophy of
  • 21. 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
  • 22. The Old Philosophy “Get R Done” Friday, October 19, 12 "Get 'R Done" style of programming.
  • 23. 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
  • 24. 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
  • 25. 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.
  • 26. 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.
  • 27. The New Philosophy Fully 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."
  • 28. The Path Friday, October 19, 12 This is the manner I've employed in which to make this new philosophy happen.
  • 29. Getting Involved The Path 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.
  • 30. Getting Involved The Path Nashville PHP 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.
  • 31. Getting Involved The Path PHP Mentoring 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.
  • 32. Learning New Technologies Friday, October 19, 12 After getting involved next, you need to know what technologies you actually need to learn.
  • 33. 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.
  • 34. 5 Tools Every PHP Developer Should Know Mr. 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:
  • 35. 1 Framework Friday, October 19, 12 A framework: PHP is full of frameworks. So many that you’d probably never learn them all.
  • 36. 2 Version Control Git SVN Jira Many others... Friday, October 19, 12 Version Control: PHP works with all the major version control options that other languages also can use.
  • 37. 3 Entity Relationship Diagram (ERD) Friday, October 19, 12 Entity Relationship Diagram (ERD): Databases can get ridiculously massive, easily.
  • 38. 4 Debugger Friday, October 19, 12 A Debugger: Going through code 1 line at a time sucks. Use a debugger.
  • 39. 5 Unit Tester 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.
  • 40. 1. Framework 2. Version Control 3. ERD 4. Debugger 5. Unit Tester Mr. PHP Friday, October 19, 12 So that was 1. A Framework 2. A version Control System 3. An ERD tool (Entity relationship Diagram) 4. A Debugger 5. A Unit Testing Tool
  • 41. 1. Framework 2. Version Control 3. ERD 4. Debugger 5. 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:
  • 42. 1. Framework 2. Version Control 3. ERD 4. Debugger 5. 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.
  • 43. 1. Framework 2. Version Control 3. ERD 4. Debugger 5. 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.
  • 44. 1. Framework 2. Version Control 3. ERD 4. Debugger 5. 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.
  • 45. 1. Basic Sys Admin 2. Command Line 3. Version Control 4. Debugger 5. Unit Tester Not Mr. PHP Friday, October 19, 12 So what would my list look like? 1. Basic Sys Admin Skillz 2. Command Line 3. Version Control 4. Debugging 5. Unit Testing
  • 46. 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.
  • 47. 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.
  • 48. 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.
  • 49. 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
  • 50. Learning New Technologies Linux Friday, October 19, 12 Linux,
  • 51. Learning New Technologies Apache Friday, October 19, 12 Apache,
  • 52. Learning New Technologies MySQL Friday, October 19, 12 MySQL or equivalent,
  • 53. Learning New Technologies PHP Friday, October 19, 12 and PHP.
  • 54. 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.
  • 55. 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.
  • 56. Environment Learning New Technologies Command Line Friday, October 19, 12 Next in the environment is the Command Line Also 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.
  • 57. Environment Learning New Technologies Virtual Machine Friday, October 19, 12 Next up is a Virtual Machine I 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.
  • 58. 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.
  • 59. Environment Learning New Technologies Integrated Development Environment (IDE) Friday, October 19, 12 Now that we have an environment, we need to choose an IDE Back 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.
  • 60. 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.
  • 61. 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.
  • 62. Environment Learning New Technologies PHP Application PHP MySQL Apache GIT VIM CentOS VM VirtualBox Terminal App OSX 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
  • 63. 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.
  • 64. 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.
  • 65. 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.
  • 66. 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.
  • 67. 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.
  • 68. 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.
  • 69. 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.
  • 70. 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.
  • 71. 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.
  • 72. 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.
  • 73. 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.
  • 74. 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.
  • 75. 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.
  • 76. 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.
  • 77. Future Technologies Selenium Friday, October 19, 12 Selenium
  • 78. 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.
  • 79. 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.
  • 80. So many more... Friday, October 19, 12 The list actually goes on from there, as you can tell, I’m curious.
  • 81. 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.
  • 82. 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.
  • 83. Resources www.nashvillephp.org www.phpmentoring.org http://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-install http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/ 0201633612/ Friday, October 19, 12

Editor's Notes

  1. \n
  2. \n
  3. Before we begin, a little disclaimer. I&amp;#x2019;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. \n
  4. I started doing web design in 2000,\n
  5. back when Dreamweaver was a Macromedia product\n
  6. Google was only the 12th top visited site beat out by \n
  7. MSN\n
  8. Yahoo, Ebay, AOL\n
  9. and GEO cities. \n
  10. Because I was a designer, that meant learning basic HTML coding principles by reading the source code written by \n
  11. Dreamweaver, and we all know Dreamweaver writes\n
  12. poo code.\n
  13. 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.\n
  14. 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. \n\n
  15. Once you start this rabbit hole, you&apos;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. \n
  16. Finally, this rabbit hole lead me to learning the before mentioned languages but also ColdFusion, \n
  17. Lingo\n
  18. ActionScript\n
  19. and PHP.\n
  20. But in doing all this, I had a basic philosophy of \n
  21. &quot;I don&apos;t care how this works, I just want it to work.&quot; It was a very \n
  22. &quot;Get &apos;R Done&quot; style of programming. \n
  23. 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&apos;t really give me the luxury of spending time to fully \n
  24. grok things, but I could of done more myself. It also didn&apos;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 \n
  25. a procedural method of programming. \n
  26. 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. \n\n
  27. So my new philosophy has been to &quot;Fully understand what I&apos;m doing and the technology I&apos;m using to make it happen.&quot;\n
  28. This is the manner I&apos;ve employed in which to make this new philosophy happen. \n
  29. 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. \n
  30. 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&apos;s been an amazing community to be a part of. \n
  31. 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&apos;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&apos;t start until you get into the marketplace. \n
  32. After getting involved next, you need to know what technologies you actually need to learn. \n
  33. You won&apos;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.\n
  34. Still, there are good guidelines that you can refer to such as Cal Evan&apos;s &quot;5 Tools Ever PHP Developer Should Master&quot;. In this article Cal explains that the 5 tools ever PHP developer should master are: \n
  35. A framework: PHP is full of frameworks. So many that you&amp;#x2019;d probably never learn them all. \n
  36. Version Control: PHP works with all the major version control options that other languages also can use. \n
  37. Entity Relationship Diagram (ERD): Databases can get ridiculously massive, easily. \n
  38. A Debugger: Going through code 1 line at a time sucks. Use a debugger.\n
  39. Finally a Unit Tester: Write tests to insure your code works in all use cases or go you&amp;#x2019;ll be going through your code line by line again. \n
  40. So that was\n1. A Framework\n2. A version Control System\n3. An ERD tool (Entity relationship Diagram)\n4. A Debugger\n5. A Unit Testing Tool\n
  41. All of these things are very important to learn, though I don&apos;t fully agree that learning a Framework and an ERD are on my top 5 tools, but still it&apos;s a good starting point. The ERD is an arguable point, but the Framework I&apos;m pretty firm about for this reason:\n
  42. Frameworks are great for saving you time and effort, but unless you already understand the language you&apos;ll always be limited to what you can accomplish. \n
  43. Not only that, you&apos;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&apos;t know how that car works you&apos;ll always be reliant on someone else to fix and maintain it, thus making you only a user and not an engineer. \n
  44. Paul M Jones said a really smart thing once, and if you know Paul you know he always does, &quot;Everyone should write a framework once, then throw it away.&quot; The idea being that by writing your own framework, you understand truly what goes into your application&apos;s codebase, what problems can arise and how to fix them. \n
  45. So what would my list look like?\n1. Basic Sys Admin Skillz\n2. Command Line\n3. Version Control\n4. Debugging\n5. Unit Testing\n
  46. 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. \n
  47. First was to get my basic system admin skills up to par. I won&apos;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.\n
  48. It&apos;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&apos;s applications is like just learning how to use IE on Windows. A lot of shit is going to go bad and you&apos;re not going to have any idea of why. \n
  49. The ultimate goal of learning basic sys admin tasks is to be able to setup and maintain your own development stack. In PHP that&apos;s \n
  50. Linux, \n
  51. Apache, \n
  52. MySQL or equivalent, \n
  53. and PHP. \n
  54. Next you need to consider your development environment. \nWhile learning the sys admin stuff, it&apos;s a good time to evaluate your whole development environment. \n
  55. 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&apos;s power. I believe this so much that I push for new developers to learn from the command line, not the OS&apos;s GUI. \n
  56. Next in the environment is the Command Line\nAlso my push for command line usage comes from my desire for efficiency. GUIs use a ton of RAM, and I&apos;d rather save that RAM for executing tasks, not writing them. \n
  57. Next up is a Virtual Machine\nI 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.\n
  58. 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. \n\n
  59. Now that we have an environment, we need to choose an IDE\nBack 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. \n
  60. 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. \n
  61. Finally, I needed something better for source control, something remote. So I picked up Git, though I&apos;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.\n
  62. So my environment is made up of the follow:\n- OSX is my main OS\n- Terminal App as my primary tool\n- VirtualBox Running CentOs for my Development Server\nI&amp;#x2019;ve also run Ubuntu 11 on Parallels \n- VIM for my IDE\n- Git and GitHub for source control\n
  63. 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&amp;#x2019;s talk about your development philosophy a now. \n
  64. 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. \n
  65. Now, this is not an easy thing to do by yourself and in fact, it&apos;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&apos;m trying to grok. \n
  66. Along with understanding OOP comes learning about design patterns. Model View Controller is one pattern you&apos;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. \n
  67. I recommend the Design Patterns Elements for Reusable Object-Oriented Software by the gang of 4. It&apos;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. \n
  68. Now I don&apos;t fully buy into test driven development, I do however believe in testing even if I don&apos;t always execute this perfectly, but it is a very useful tool to insure your code is lightweight and works. \n
  69. 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. \n
  70. So as you code, you&apos;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. \n
  71. 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. \n
  72. 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. \n
  73. 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&apos;ve written works, even when changes are made. \n
  74. 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.\n
  75. Continuous integration is a process for combining your development, build, quality control and testing, and launching of your application. It&amp;#x2019;s about automation of repetitive tasks in development. \n
  76. At some point I want to play with Python because of it&amp;#x2019;s differences to PHP, and also because some concepts I have would be better solved with a less web focused language. \n
  77. Selenium \n
  78. At some point I want to experiment with a nonrational database as I&amp;#x2019;m quite familiar with standard SQL-rational database.\n
  79. 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&amp;#x2019;ve always been fascinated with the iOS platform for that reason. \n
  80. The list actually goes on from there, as you can tell, I&amp;#x2019;m curious. \n
  81. Finally, it&apos;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. \n\n\n
  82. Our industry changes almost daily. To stay competitive you much keep up with these changes. \n\nSo always be learning. \n
  83. \n