Well I'll throw in my two cents. 

Before I go into what I would offer for response, I partially agree with data 
models. But I think it is more about understanding normal forms of data, 
efficiency in storage and general database design. And I do not buy into the 
idea that 10% knowledge will get you 90% of the way (not that anyone said that, 
I'm just adding it in before someone uses that argument). If someone is not 
going to take the time and learn at least 75% of what it takes to model data, 
then library computing is not for them unless they work in a library that 
doesn't use databases. And no, knowing 75% of everything about Solr does not 
count. To me, that's like putting on your resume that you know how to use 
Firefox.

I think these are the critical things anyone should develop professionally. 

- learn to write a solid spec
- do not deviate from the spec until after the spec is complete
- be able to meet the spec
- spend at least twice as much time planning as you do implementing
- write small parts, release them often
- do not leave out the human - computer interaction/usability
- don't corner yourself into your comfort zone
- learn to delegate, know when to ask for help
- documentation is equally as important as the final product
- take risks
- reinvent the wheel

Just starting out puts you at an advantage to learn how to write a good spec 
because you might not be able to complete an entire project. This will force 
you to put it into a meaningful narrative that another geek can follow. Imagine 
being in the situation of two people in a car, the drive is blindfolded and you 
are not but have to tell them where to drive strapped into the passenger seat 
without the ability to touch any of the controls. If you leave out a step, 
things may go bad.

Make sure the spec is solid, there will be plenty of things left out that can 
be approached in version 2. But more importantly, don't let the scope creep 
your project into something different than the original spec. You can modify it 
to do more after. Don't create things that are gigantic in scope but only 
partially complete in all aspects and the main reason you started isn't even 
completed.

Set goals/deadlines/milestones and meet them. If you can't meet them, learn why 
so the next time you write a better project plan with realistic timelines. 
Don't pad your timeline. Set a timeline you think you will meet and learn why 
you did it quicker or didn't meet it so next time you set a timeline that 
matches closely. When someone asks you how long to do X, you'll know from 
experience. If you don't set timelines, you'll never know how longs take and if 
you move into management, your staff will have a field day telling you how long 
things take.

I typically spend 60% of a project planning, 30% coding and 10% bug 
fixing/tweaking. Again, set goals. Some of the most important deadlines are in 
the 60% planning phase. Just because it's planning doesn't mean you don't need 
deadlines.

Do not dwell on perfection. Start with the benchmark, "it's good enough to 
release if it at least does _this_". Then release additional parts often. 
There's a number of reasons why, the three I latch onto are: it will keep you 
excited about the project, negative feedback can be taken in before it requires 
massive change to adjust and it will generally show a lot of people that you 
are making progress. 

Make your stuff usable. Don't create an app that requires some obscure method 
of doing things. Pretend you are a user and ask yourself, is that really the 
right number of mouse clicks? Will people even see that button I spent 9 hours 
in photoshop shading? Maybe I don't need a javascript alert box for every 
single notification. For usability I point to video games, specifically first 
person shooters. Imagine if firing the weapon required holding the left shift 
key and clicking the mouse on a tiny submit button in the upper left and you 
aimed the gun using the number keys 8, 4, 6 and 2. I'm no expert, but I know 
I'd never buy a game from that publisher again. My point is that people want to 
do what feels natural with as few clicks as possible. Your goal should be to 
design stuff that doesn't require instruction. If you have to explain too much 
and get defensive after explaining your form for 45 minutes to people who still 
don't get it, you totally failed at usability, learn fr!
 om it. But consider usability a lot, why is the ignition on the right in your 
car? Why not control the gas pedal and brakes with your hands and steer with 
your feet?

Ok, I get it, the last time you took on the task you setup your database like 
_this_ and used _these_ PHP plugins and _here's_ my list of helper classes. 
It's ok to take a completely different approach, don't get into the habit of 
"cooking up recipes" and never deviating. Leave your comfort zone, try another 
language, don't stop learning. Believe it or not, PHP was not always around, 
people used to program in other things and got the same results. That would 
signal that PHP might not always be around or there may be better/newer things 
out there. You need to develop a knack for knowing what's a trend and what's a 
fad. I think this list helps with that a lot but develop instincts. 

Don't ask for help the day before your deadline. I promise that you knew you 
would not hit the deadline 25% of the way into it.If you catch it then and add 
more people to help, you may end up beating the deadline by 25%. If you wrote a 
good spec, they will be able to jump in and hit the ground running. Learning to 
delegate is not knowing which parts to hand off to someone else, it is being 
able to accept the end results they give even if they are not exactly how you 
would have done it. If they meet your spec and work, you delegated properly.

Documentation is king. If what you wrote is worthy of sharing, you must be able 
to document the install and within the code, explain what is going on where. 
Related to documentation, write good code. Use normal conventions and don't try 
and be cute. for(int i=0;i<20;i++), not for(int 
_myFirstIntegerVariable=0...Consider application lifecycle management but know 
when to care. You don't need to manage the life cycle of a form that takes user 
feedback and sticks it into a SQL table unless it is part of a larger framework 
that provides complex controls for the simple forms to use.

Take risks, it's ok to fail as long as you documented the whole thing. I've 
given entire presentation on "how not to code" something. 

If the wheel was never reinvented we would be driving cars that have rock 
wheels and require 20 gallons of gas to go a mile, possibly with steam engines. 
Take someone else's concept and make it better. That's an OK goal. It's better 
to join an existing project and make the project better but sometimes you have 
to do the whole thing yourself to give it meaning to which it may take on a 
life of its own, that's a great thing.


Two final opinions. 
1- Try to learn using the same tools and books as people around you. If you 
work somewhere that has a lot of people using Eclipse, learn to use Eclipse, if 
everyone uses Netbeans, use that. 
2- Talk to people who do what you want to be doing, just like you're doing now, 
don't stop.

Best of luck to you.

_______________________________________
Michael Friscia
Manager, Digital Library & Programming Services
Yale University Library
(203) 432-1856



________________________________________
From: Code for Libraries [[email protected]] on behalf of Anne Gresham 
[[email protected]]
Sent: Monday, November 28, 2011 11:07 AM
To: [email protected]
Subject: [CODE4LIB] Professional development advice?

Hi code4lib folks,

I'm in my final semester of library school and my first year as a baby
librarian. At school, I focused on systems and technology, and I'm currently
running a desktop and mobile site at work. I'm fine with HTML and CSS, and I
can fumble around in PHP, but I feel very under-prepared for the library web
developer career I want to have. I was wondering what skills/programming
languages/experience you think I should be seeking if I want to be able to
develop (good) interactive online resources/digital collections for library
patrons and/or staff.

Thanks for your help!

Anne Gresham
Reference Librarian
Springdale Public Library
479-750-8180 | [email protected]

Reply via email to