Becoming a real programmer. Jacques Woodcock @jacques_thekitFriday, October 19, 12
Becoming a real programmer. Jacques Woodcock @jacques_thekitFriday, October 19, 12
DisclaimerFriday, October 19, 12Before we begin, a little disclaimer. I’m a PHP developer, so this presentation has a lot ofreference to PHP speciﬁcs, though most the principles can be applied to other languages.
Some BackgroundFriday, October 19, 12I started doing web design in 2000,
Some Background 2000Friday, October 19, 12 back when Dreamweaver was a Macromedia product
Some Background 2000 ?Friday, October 19, 12Google was only the 12th top visited site beat out by
Some Background 2000 1st 12thFriday, October 19, 12MSN
Some Background 2000 2nd 12thFriday, October 19, 12Yahoo, Ebay, AOL
Some Background 2000 10th 12thFriday, October 19, 12and GEO cities.
<html> Some Background <head> </head> <body> </body> </html>Friday, October 19, 12Because I was a designer, that meant learning basic HTMLcoding principles by reading the source code written by
Some Background 2000Friday, October 19, 12Dreamweaver, and we all know Dreamweaver writes
Some Background Insert Photo of Poo hereFriday, October 19, 12poo code.
HTML JS Some Background FlashFriday, October 19, 12Once you start this rabbit hole, youll eventually want to startsaving data and manipulating that data, so a couple years intomy career I ended up working in a Cold Fusion shop whichallowed me to learn my ﬁrst backend technology.
HTML JS Some Background Flash ColdFusionFriday, October 19, 12Finally, this rabbit hole lead me to learning the beforementioned languages but also ColdFusion,
HTML JS Some Background Flash ColdFusion LingoFriday, October 19, 12Lingo
HTML JS Some Background Flash ColdFusion Lingo ActionScriptFriday, October 19, 12ActionScript
HTML JS Some Background Flash ColdFusion Lingo ActionScript PHPFriday, October 19, 12and PHP.
The Old PhilosophyFriday, October 19, 12But in doing all this, I had a basic philosophy of
The Old Philosophy “I dont care how this works, I just want it to work.”Friday, October 19, 12"I dont care how this works, I just want it to work." It was avery
The Old Philosophy “Get R Done”Friday, October 19, 12"Get R Done" style of programming.
The Old Philosophy “I dont care how this works, I just want it to work.”Friday, October 19, 12I blame this mostly on the environment in which I learned theselanguages, agency life, but that really is a copout. Sure, thisenvironment didnt really give me the luxury of spending timeto fully
To Grok = 1) Understand (something) intuitively or by empathy. 2) Empathize or communicate sympathetically; establish a rapport.Friday, October 19, 12grok things, but I could of done more myself. It also didnt helpthat many of the languages that I learned, if not all, and thetime 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, 12a procedural method of programming.
The New PhilosophyFriday, October 19, 12But about a year ago, I realized I was limiting my ability toaccomplish the more ambitious tasks I was dreaming up, alsomy peer group was shifting as I was hanging out with moreengineers as opposed to creatives. All this lead me to desiremore understanding of the skill set that made me most mymoney. This only took 12 years.
The New Philosophy Fully understand what Im doing and the technology Im using to make it happen.Friday, October 19, 12So my new philosophy has been to "Fully understand what Imdoing and the technology Im using to make it happen."
The PathFriday, October 19, 12This is the manner Ive employed in which to make this newphilosophy happen.
Getting Involved The PathFriday, October 19, 12First, I started getting involved in the community. To hangaround people who understand the technologies I used andwanted to use. Also to ﬁnd people who were curious aboutsimilar things I was curious about.
Getting Involved The Path Nashville PHPFriday, October 19, 12I found most these people at the NashvillePHP user group,and the larger PHP community. At the time, I knew just aboutnothing, I still know little. But I never felt like an outcast orunderneath anyone. Its been an amazing community to be apart of.
Getting Involved The Path PHP MentoringFriday, October 19, 12In the PHP community there is an initiative called PHPMentoring which pairs up mentors with apprentices. To me, thisis the best way to learn technology. I dont believe you need togo to college for a degree to do 80% of what the programmingindustry does. Even if you do, your real learning wont startuntil you get into the marketplace.
Learning New TechnologiesFriday, October 19, 12After getting involved next, you need to know whattechnologies you actually need to learn.
Learning New TechnologiesFriday, October 19, 12You wont ﬁnd these in isolation, thus the importance of gettinginvolved. Even then, a lot of what you learn is personal choice,not because of some standard. So being exposed to as manyways a possible to solve a program and the technologies usedis the best way to make an informed decision on what youshould learn.
5 Tools Every PHP Developer Should Know Mr. PHPFriday, October 19, 12Still, there are good guidelines that you can refer to such asCal Evans "5 Tools Ever PHP Developer Should Master". Inthis article Cal explains that the 5 tools ever PHP developershould master are:
1 FrameworkFriday, October 19, 12A 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, 12Version Control: PHP works with all the major version control options that other languagesalso can use.
3 Entity Relationship Diagram (ERD)Friday, October 19, 12Entity Relationship Diagram (ERD): Databases can get ridiculously massive, easily.
4 DebuggerFriday, October 19, 12A Debugger: Going through code 1 line at a time sucks. Use a debugger.
5 Unit TesterFriday, October 19, 12Finally a Unit Tester: Write tests to insure your code works in all use cases or go you’ll begoing through your code line by line again.
1. Framework 2. Version Control 3. ERD 4. Debugger 5. Unit Tester Mr. PHPFriday, October 19, 12So that was1. A Framework2. A version Control System3. An ERD tool (Entity relationship Diagram)4. A Debugger5. A Unit Testing Tool
1. Framework 2. Version Control 3. ERD 4. Debugger 5. Unit Tester Mr. PHPFriday, October 19, 12All of these things are very important to learn, though I dontfully agree that learning a Framework and an ERD are on mytop 5 tools, but still its a good starting point. The ERD is anarguable point, but the Framework Im pretty ﬁrm about for thisreason:
1. Framework 2. Version Control 3. ERD 4. Debugger 5. Unit Tester Mr. PHPFriday, October 19, 12Frameworks are great for saving you time and effort, butunless you already understand the language youll always belimited to what you can accomplish.
1. Framework 2. Version Control 3. ERD 4. Debugger 5. Unit Tester Mr. PHPFriday, October 19, 12Not only that, youll never be able to maintain that frameworkor ﬁx issues with it when they arise, and they do arise. I liken itto buying a car: If you dont know how that car works youllalways be reliant on someone else to ﬁx and maintain it, thusmaking you only a user and not an engineer.
1. Framework 2. Version Control 3. ERD 4. Debugger 5. Unit Tester Mr. PHPFriday, October 19, 12Paul M Jones said a really smart thing once, and if you knowPaul you know he always does, "Everyone should write aframework once, then throw it away." The idea being that bywriting your own framework, you understand truly what goesinto your applications codebase, what problems can arise andhow to ﬁx them.
1. Basic Sys Admin 2. Command Line 3. Version Control 4. Debugger 5. Unit Tester Not Mr. PHPFriday, October 19, 12So what would my list look like?1. Basic Sys Admin Skillz2. Command Line3. Version Control4. Debugging5. Unit Testing
Learning New TechnologiesFriday, October 19, 12So what have I focused on learning over the past year? Well,since I already knew PHP I focused on other gaps I had in mytoolbox.
Learning New TechnologiesFriday, October 19, 12First was to get my basic system admin skills up to par. I wontsay this should be your ﬁrst thing to learn, but it is a skill that allgood developers should have and will need at some point.
Learning New TechnologiesFriday, October 19, 12Its like learning your OS environment and just as important. Tojust learn an application that runs on the OS as opposed to theOS and its applications is like just learning how to use IE onWindows. A lot of shit is going to go bad and youre not goingto have any idea of why.
Learning New Technologies LAMP StackFriday, October 19, 12The ultimate goal of learning basic sys admin tasks is to beable to setup and maintain your own development stack. InPHP thats
Learning New Technologies LinuxFriday, October 19, 12Linux,
Learning New Technologies ApacheFriday, October 19, 12Apache,
Learning New Technologies MySQLFriday, October 19, 12MySQL or equivalent,
Learning New Technologies PHPFriday, October 19, 12and PHP.
Environment Learning New TechnologiesFriday, October 19, 12Next you need to consider your development environment.While learning the sys admin stuff, its a good time to evaluateyour whole development environment.
Environment Learning New Technologies Command LineFriday, October 19, 12I believe most people should expose themselves to thecommand line at some point in their career, preferably early.This is the gateway to fully understanding how your computerworks and harnessing and manipulating its power. I believethis so much that I push for new developers to learn from thecommand line, not the OSs GUI.
Environment Learning New Technologies Command LineFriday, October 19, 12Next in the environment is the Command LineAlso my push for command line usage comes from my desirefor efﬁciency. GUIs use a ton of RAM, and Id rather save thatRAM for executing tasks, not writing them.
Environment Learning New Technologies Virtual MachineFriday, October 19, 12Next up is a Virtual MachineI personally like to keep my computer as clean andindependent as possible from my dev environments so I like tosetup a virtual machine and install my stack and applicationinto it. Ben Ramsey has a good post on this. I also did my ownpost. You can ﬁnd in the resources of this deck.
Environment Learning New Technologies Virtual MachineFriday, October 19, 12You can use VirtualBox, which is free, or Parallels or VMWareor any VM software to accomplish this. Conﬁguration will beunique to each solution though, so make sure to do a bit ofresearch to see which you like best.
Environment Learning New Technologies Integrated Development Environment (IDE)Friday, October 19, 12Now that we have an environment, we need to choose an IDEBack in 2000, I started with Dreamweaver. Because I camefrom the visual world, Dreamweaver was the best solution forme at the time, though because most GUI IDEs suck horriblyat writing clean code, I ended up having to learn how to writemost my HTML by hand.
Environment Learning New Technologies Integrated Development Environment (IDE)Friday, October 19, 12From there, I moved to Coda and really enjoyed it, but I foundas I was moving to understanding the command line evenfurther while learning the LAMP stack management, that Codaseparated me to far from the command line. So I moved toVIM, which is an amazingly powerful and lightweight IDE whichyou can spend years learning and becoming more efﬁcientwith.
Environment Learning New Technologies Source ControlFriday, October 19, 12Finally, I needed something better for source control,something remote. So I picked up Git, though Im still a newb.Again, I use Git from the command line, though there areGUIs, mainly because my terminal interface is now my OSenvironment and also to save RAM.
Environment Learning New Technologies PHP Application PHP MySQL Apache GIT VIM CentOS VM VirtualBox Terminal App OSXFriday, October 19, 12So 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 TechnologiesFriday, October 19, 12Once you have a solid development environment, you canstart focusing on the real important stuff, cause now that yourtools are solid you can do solid work. So let’s talk about yourdevelopment philosophy a now.
Philosophy Learning New Technologies Object Orientated ProgrammingFriday, October 19, 12First thing ﬁrst. If you are a procedural developer as I was, likea number of PHP developers are, you need to start studyingobject oriented programming. There are so many reasons todo this, but none more important than it is the right way to writeyour application. From efﬁciency to organization to reduction induplication, there are so many reasons.
Philosophy Learning New Technologies Object Orientated ProgrammingFriday, October 19, 12Now, this is not an easy thing to do by yourself and in fact, itsalmost impossible to get all the nuances of OOP withouthaving someone with experience walk you through it. This iswhy PHP mentoring has been really important to me. The one-on-one time with someone who knows all about this topic, aswell as others, insures I fully understand what Im trying togrok.
Philosophy Learning New Technologies Design PatternsFriday, October 19, 12Along with understanding OOP comes learning about designpatterns. Model View Controller is one pattern youve probablyheard of, but there are many many more. To understand howto properly solve a programming problem it helps to have agood understanding of the different patterns and what types ofproblems they are good at solving.
Philosophy Learning New Technologies Design PatternsFriday, October 19, 12I recommend the Design Patterns Elements for ReusableObject-Oriented Software by the gang of 4. Its a prettycomplex book with a lot of complex topics. I recommendreading it with someone else or at least ﬁnding someone youcan talk about the topics with.
Philosophy Learning New Technologies Test Driven DevelopmentFriday, October 19, 12Now I dont fully buy into test driven development, I dohowever believe in testing even if I dont always execute thisperfectly, but it is a very useful tool to insure your code islightweight and works.
Philosophy Learning New Technologies Test Driven DevelopmentFriday, October 19, 12Test Driven development is about writing your tests ﬁrst, thenwriting the classes and methods. All tests will fail ﬁrst and thenyou refactor by making the test work, then breaking them, thengetting to work again until you have the simplest solution toyour problem.
Support Learning New TechnologiesFriday, October 19, 12So as you code, youll ﬁnd the need for support tools to helpexecute all these practices. Depending on what language youdevelop in, your tools will be different, but for PHP here acouple I use.
Support Learning New Technologies Standards SnifferFriday, October 19, 12A standard sniffer insures you are writing code that complieswith a coding standard, such as in PHP there are Pear,PSR2.0 and many others. The standard sniffer will review yourcode for formatting compliance.
Support Learning New Technologies Standards SnifferFriday, October 19, 12The reason you do this is so when you work with other peopleor with a team, all code that is written looks the same, allowinganyone on the team to easily pick up where someone else leftoff and ﬁnish the work.
Support Learning New Technologies Testing; Unit and FunctionalFriday, October 19, 12Each language has built in testing tools. Use these, make sureyour code works in all use cases. Break it and then ﬁx it andthen break it again and then ﬁx it again. There is nothing moreimportant than the knowledge that the code youve writtenworks, even when changes are made.
Future TechnologiesFriday, October 19, 12So this is a start. There is so much more that I want to learnand need to learn. I just wanted to spend a sec highlightingthese.
Future Technologies Continuous IntegrationFriday, October 19, 12Continuous integration is a process for combining yourdevelopment, build, quality control and testing, and launchingof your application. It’s about automation of repetitive tasks indevelopment.
Future Technologies PythonFriday, October 19, 12At some point I want to play with Python because of it’sdifferences to PHP, and also because some concepts I havewould be better solved with a less web focused language.
Future Technologies SeleniumFriday, October 19, 12Selenium
Future Technologies Nonrational DatabaseFriday, October 19, 12At some point I want to experiment with a nonrational databaseas I’m quite familiar with standard SQL-rational database.
Future Technologies Nonrational DatabaseFriday, October 19, 12iOS, I have a few concepts that would be best suited on suchan interactive medium, plus because I come from the UX/UIworld, I’ve always been fascinated with the iOS platform forthat reason.
So many more...Friday, October 19, 12The list actually goes on from there, as you can tell, I’mcurious.
Continue LearningFriday, October 19, 12Finally, its important to keep learning. Stay hungry forknowledge. This will not only give you some sense of fulﬁllmentbut will also insure you stay employable as a programmer.
Always be learning.Friday, October 19, 12Our industry changes almost daily. To stay competitive youmuch keep up with these changes.So always be learning.