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.

Friday, December 17, 2010

Fun Day

Today was the day of my presentation.

Around 4:30 this morning, as I was trying to fall asleep, I had wondered whether I would wake up or not in time. I did, but it took me 2 hours to wake up from not sleeping much. I was a tad nervous. Fortunately I didn't have to get up in front of people, I just had to talk into the phone. The downside to that is that I was just talking into a phone.

I'm probably what you would call a "people person" and over my many moves as a kid, reading people is something I do fairly well. Not seeing them puts me at a disadvantage...but I digress.

The topic of my presentation was twitter and how it can be used to help you professionally. More precisely (and named by Ms. Malone), Professionally Speaking in 140 Characters or Less: How Twitter Can Help Your Career. I've benefited greatly from my use of twitter, I just want to share that with others in the hopes they they can find value out of it. A popular misconception of twitter is that people twit about taking a shit. Well, I haven't seen one person tweet about that...although I'm sure someone has. I like to think that I follow a classy bunch of folks.

Anyway, here is the final presentation, if you would like to download it. Here's the prezi twitter presentation, but it will be changing if not completely trashed.



While riding the high of my first presentation in almost 3 years, @surachart posted this:



A couple of months ago I had been contacted about a profile for Oracle Magazine. I wonder if this was the one?



Page can be found here. Online version of the magazine can be found here.

So, it was a super cool day for me. I celebrated by having 2 Sierra Nevada India Pale Ales (and unlocking 2 new badges) and then falling asleep (crashing) around 9:30 PM.

Tuesday, December 14, 2010

Video: Exadata Hybrid Columnar Compression

I think these videos are a great introduction to new features. Keep 'em coming.

Monday, December 13, 2010

OBIEE 10g: Replace Column or Table in LTS

Even though I'm working hard on learning 11g, I still find little things in 10g that help.

Case in point, I was going through and trying to clean up the physical and BMM layers. Our physical model will now be shared between multiple projects. So how best to do that?

Using aliases along with naming conventions and display folders can help. By doing this, I will be able to "unhook" the source table from any and all joins. The goal is to keep these free...the aliases will be used to join to their respective tables (aliases).

The naming will be something like:
Dim_<source_table_name>_<subject_area>
Fact_<source_table_name>_<subject_area>
Outrigger_<source_table_name>_<subject_area>
Bridge_<source_table_name>_<subject_area>
To further organize them, I will put them in a Display Folder.



I'm just going to create one called "New."

I'm using the SH schema here, so it should be easy to follow along.

Next up, I'm going to create aliases for all my tables. For the sake of brevity and my sanity, I'm only going to use SALES, PRODUCTS, and TIMES.



When I initially started to clean things up, I would screenshot the Column Mappings section of the Logical Table Source. Fun right? There has to be a tool for this. Sure enough...

OK, this post has been sitting here all day...I'm cutting to the chase now.

So I've hooked up (joined) all my new tables. Now I just want to replace them. I could do it by hand, but what fun would that be. Here's the source for SALES.



If you go to Tools -> Utilities, you'll see this screen and the fun little tool we'll use for this exercise:



Now make sure you select "Replace whole table." On the left side, select the table you want to replace, on the right side, select the table you will replace it with.



Hit Next.



Blah blah blah, which translates into the column mappings. Since we are replacing the source table with a copy of itself, this part is easy.

Here you get a nice summary of what the tool will actually be doing.



Hit Next and voila!



Now, what does this buy you?

Since you are now sharing your physical layer with multiple Subject Areas, you've added a layer of abstraction to protect yourself. Let's say a new column was added to SALES. After you've updated your physical layer, you are now free to either keep the others the same or add it to that particular Subject Area. For my (mythical/theoretical) example, I just need that new column in one Subject Area, so I'll just need to pull that into the BMM and I'm done.

An even better example would involve joins. Maybe Subject Area 1 is based on one particular set of joins and the others are not. This should allow you to easily handle this kind of scenario.

I do apologize for this post breaking up as it did. I had the best intentions in the world this afternoon. Hopefully I got the gist of the tool across, if not, yell at me and I'll update it later.