Tuesday, December 28, 2010

How To: Become a Professional Developer

Twitter = Discovery



That led to this article, Staging Servers, Source Control & Deploy Workflows, And Other Stuff Nobody Teaches You.

The first paragraph reads as follows:

I worked for almost three years as a cog in a Japanese megacorporation, and one of the best parts about that experience (perhaps even worth the 70 hour weeks) was that they taught me how to be a professional engineer. Prior to doing so, my workflow generally involved a whole lot of bubble gum, duct tape, and praying. I spent a lot of time firefighting broken software as a result, to the detriment of both my customers and myself. Talking to other software developers has made me realize that I’m not the only person who was never taught that there are options superior to bubblegum. If you aren’t lucky enough to work at a company that has good engineering in its very DNA, you’re likely to not know much about them.

I consider myself incredibly fortunate, I worked for a company, well, a friend, who had all these things in mind. Not all of the mentioned mechanisms were set up mind you; it had been pretty much a one or 2 person shop before I arrived, way back in 2002. They were on the road though. Rational was the source control tool. Rational was the documentation tool. Rational was the functional testing tool. SQLUnit was the database testing tool.

My boss was this guy, Tom Wurzbach.

When he offered me a job, he sent me this link:

http://asktom.oracle.com/pls/apex/f?p=100:1:0

I saw Tom in the title and thought it was a joke of some sorts. Little did I know.

I stayed at this company for just under 3 years. I am not proud of the way I left, but that's a whole other story. That was my longest IT stint to date (+1 year at the current, yippee!).

It took me about 2 years to start to realize what I had learned at that company. In fact, I'm still realizing things now that I learned way back then.

The title? How to become a Professional Developer? I know many who wouldn't call me a professional developer...

I'm going to list the things that I have done and read in my time at that first company. I believe that set a great foundation for me and has allowed me to do all sorts of things.

1
I mentioned AskTom. Funny story (of course). I was off reading some opinion site at work. I received an email from Tom, "What are you doing?" It was rhetorical of course, he knew exactly what I was doing. Please don't read personal stuff on company time.

Point taken.

After that, when I needed to take a break, I would read AskTom. Every day. If it wasn't AskTom, it was something else technical. It was mostly AskTom though. Lots of it. More than I care to remember. Actually, I would bet that I don't remember half of it, it's all been internalized.

2
Find a mentor be it in real life or virtual. I had one sitting in front of me and I had Tom Kyte virtually. The former I didn't realize (yes, long story) until I had gone, the latter, well, he's been a mentor to a great many of you out there.

3
Read. A lot.

Don't just read stuff you agree with, read opposing view points. Don't read about stuff that just works either...if you watch Derek Jeter, he makes it look so easy, like you could go out there and do the same thing. You can't. I promise. Strangely, I have gotten a whole lot out of The Daily WTF. Mr. Kyte even took the helm for a little while some years ago. Learning what not to do is just as important as what to do.

Read the manuals. Read the concepts guide. Read the documentation. I'm shocked when I go somewhere new and they don't have an internal Oracle library set up. What if oracle.com is down? What if it's slow?

Read the New Features guide. It doesn't take long. See what's available.

Some things you should read early and often:
- The Complicator's Gloves
- Big Ball of Mud
- How To Ask Questions The Smart Way
- Why Good Programmers Are Lazy and Dumb

4
Practice. I can't speak to other vendors, but you can download any software you want from Oracle. That's enterprise class software on your little old 'puter. I've had so many databases installed I can't count. I've always had a running database, just for that quick SQL statement (like how old am I in days), or just for a quick sanity check.

I've installed Oracle database version 8i through 11gR2, many, many times (only recently on a non-windows platform though).

I've installed and run Oracle Application Server 9i through 10g.

OBIEE? 10g and 11g.

JDeveloper.

SQL Developer.

Forms and Reports.

EBS even.

The point is, Oracle makes it super-easy to test-drive this stuff and learn it. You have no excuses, the means to your end are out there.

5
Test. I spent a good year at the first job writing nothing but SQLUnit tests. I hated it, every minute of it.

But guess what, it was good for me. You know why?

I had to build scripts to populate and teardown the database.
I had to build SQLUnit tests to login, because we used VPD and nothing worked without a valid login.
I had to build hundreds of little tests. 7 to 10 of them for each procedure or function.

What did all that testing buy me? Well, I know what errors are thrown when you pass in NULL. I know about no_data_found and a host of other errors.

If I were in charge and I got to hire a junior programmer, I would make them build test cases for their first year.

So I have 5 ways to become a professional developer. I have no doubt there are more and someday I'll probably add to the list. Feel free to find the comments and add your ideas on the topic.

1 comment:

rnm1978 said...

Hey chet,

Nice article, and some good points.

I'd add a couple of subpoints to "Read" :
- social media - I've found blogs (reading & writing) and twitter are just amazing. You get to interact with real experts and others who are passionate about the topic.
- Learn to manage your reading time. I've still not managed to do this! It's easy to skim the top of an RSS feed list and twitter list each day, but the time may be better spent reading a chapter from a book or the product documentation. Getting a balance between the sources is important IMHO.

Other things:
- Make Mistakes - learn from them and don't try to cover them up
- Enjoy sharing knowledge with people, don't horde it. Do presentations, write a blog, tutor someone. Take pride in being an expert, but don't be an asshole with it.
- Maybe another way of saying 'Experiment', but : Be curious. Don't be satisfied with just meeting requirements. Have an urge to find out "wouldn't it be cool if ... ". You'd be surprised how many "real" problems can be solved so much sooner through the in-depth knowledge that you accrue through hacking and tweaking and poking around.