Professional Standards: Theory
I’m writing this post with the hope it kick-starts a conversation on the importance of theory in our craft. Specifically, “Is theory still important? If so, to what extent?”. I’m even willing to give on the actual definition of “theory” (mine is below) in order to create a larger conversation. However, over the last several years, I’ve observed what I believe to be a negative trend in the general level of theory candidates are able to discuss. This, plus a continued lack of theory on the part of management requires that I stop and examine this topic. By sharing my viewpoint I’m hoping others weigh in with theirs. I’d truly like to understand how others in my field perceive this issue, and whether or not they see the same problems I do. I should say also, that five years ago, a post of this kind would have seemed ludicrous to me.
On to the discussion.
I spend a lot of time interviewing software engineers, for my company and those I work with through Pruf. In doing so, I’ve learned that every organization values a set of skills specific to their culture, even my own. Some believe knowledge in database design as paramount, others anchor their belief system in things like object oriented programming. Honestly, I’ve seen everything from algorithms to real world experience as the core of an organization’s interviewing process. In some circles, it’s as direct as, “can you get things done?”.
For me, it’s largely about theory.
And just so we’re all on the same page, when I say theory, I truly mean a set of principles on which the activity of software engineering is based. The tricky part here is what we, as a profession, allow for in the “set of principles” part of that definition. In my world, this all begins with object oriented programming. Please note, I did NOT say it ends with (this becomes important later). In my humble opinion, software engineering as a craft, has a world of knowledge built on top of object oriented programming large enough for everyone’s personal approach to building applications. However, it does assume you’re interested, and for me, THIS IS THE KEY.
Given this belief, I start EVERY interview by trying to understand what level of theory a candidate has related to software engineering. I like to begin with Design Patterns, and if that goes well, move into the principles of design. I hope to hear something close to the SOLID principles but will take ANY reference to Fowler, Evans, Lohtka, Neward, et. al. I can list quite a few names here, and don’t really care where your belief system begins and/or ends, I simply care that you truly get the importance of study/research in our field AND ARE INTERESTED ENOUGH TO READ MORE.
Sadly, I’ve noted a general decline in theory over the last several years, and when I engage candidates on the topic, senior engineers in particular, it rarely ends well. Worse, I tend to get a lot of resistance, some of it strong, from candidates who minimize theory based questions with responses like, “ah, book questions, I was not aware that was important for this position”, and “I don’t really know the book name for it, but I know what it looks like when I see it”. My favorite by far has to be, “Design Patterns? Well yes I use them, even when I don’t know I’m doing it”. In fact, this trend, collectively, has even achieved a common reference by candidates, “book knowledge”. More concerning than their having a common name for this, is their also sharing a common disdain for something they themselves qualify as “Book Knowledge”. As an exclamation point on this, I would say for every 20 interviews I do, I MIGHT speak to 3 or 4 people who actually have “book knowledge”.
Why is this so important to me? Well, I consider theory as directly related to knowledge, and simply stated, knowledge, in any form, is important.
It’s hard for me to believe I’m even writing this pot, but I’ve actually had arguments with candidates on the value of theory/reading. One candidate even argued with, “when you’re coding, knowing patterns is just not important”. What do you say to something like this?
More devastating, for me anyways, is to ask a candidate what they’re reading currently, only to get vague answers back like “blogs” or “MSDN”. It’s not that these are bad answers, it just shouldn’t be your ONLY answer. Furthermore, I’d like to discuss the things you’re reading on those blogs, and MSDN, but many candidates are unable to cite specific topics or articles.
Many even attempt to argue problem solving as the key skill necessary for programmers with statements like, “just put me in front of the keyboard and I’ll show you”, or, “I’m a problem solver, give me a problem and I’ll show you”. I accept that problem solving is a key part of our profession, but isn’t problem solving somewhat related to your knowledge base? Aren’t you likely to be more efficient, and cost effective, with a larger pool of knowledge? Why not stand on the shoulder of giants? More importantly, if you truly don’t believe in that “book larnin’ thang”, why even go to college?
It could be me. Maybe I’m just not getting it, but in my mind, claiming to be a senior level programmer without a focus on theory, or “Book Knowledge”, is akin to claiming you can win the Daytona 500 because you’ve driven yourself to work for ‘x’ years. If your knowledge base regarding the craft of programming ends with a basic understanding of the Gang of Four, you are not a senior. Factory and Singleton ARE NOT the only two patterns in the programming tool bag.
This trend so disturbs me, that I’ve spent countless hours pondering the issue. Dissecting it, grappling with it philosophically. I’m a long time opponent of efforts to standardize our field with testing and certifications, however, I can’t help but wonder if it wouldn’t address some part of this problem. Would we as a profession, discipline or craft be better off if we could require some level of “book knowledge”?
To what extent should we, as a discipline, expect more? I know many employers don’t require continued education in our field, and many software engineers in the corporate world aren’t challenging each other with theory as it’s simply not how they’re being measured each day. Sadly, many corporate environments don’t provide even good mentoring or structure for things as simple as code reviews. Shouldn’t WE find a way to push our field forward anyways? Wasn’t it frustration of a similar nature that lead to the Agile movement?
So, I guess I have to ask, am I being an elitist? Are my expectations unrealistic? Why is it very few seem to find value in “book knowledge”? Furthermore, how can someone ethically or morally ask for 100K+ a year in one breath then denounce “book knowledge” in the next?
Right or wrong, I plan to continue my focus on theory. As an employer I can coach just about any software engineering skill but I can’t make you WANT to learn. If you’re not doing this for yourself, why would I ever believe you’ll do it for me?
I’ll end with this thought.
Would you ever see a doctor who’d not read Grey’s Anatomy or passed the Medical exam? How about an accountant who’s not reading the PUBLISHED changes to tax law? Didn’t minds like Einstein and Bertrand Russell read modern research or that of their peers? Show me surgeon who’s got a job BUT DOES NOT read, or in many cases publish, new research material and I’ll drop this argument.
Ultimately, if we don’t behave like a profession, why should we expect to be treated like one? Isn’t this a problem WE can solve? Is it even a problem?
Been a busy month!!
Yes, things have been quiet on the API for the last several weeks. As with all great plans, ours were changed by a sudden increase in client work. We’re thrilled in the unplanned growth, and very excited about some of our new business relationships. Beyond our clients, we’ve got a whole list of items we’re working on. Over the next several weeks you’ll see a stream of posts detailing this work, but thought I’d preview some of the noteworthy items.
First, we’re trying to wrap up critical deliverables on Pruf as we approach our next major milestone. Tim and team have been working overtime, literally, in an attempt to keep the effort moving. This is the longest running internal project, and I couldn’t be happier about its development. The next month is going to see some incredibly cool features released into the wild, all while we go live with several clients in Florida, Texas and hopefully New York.
Second, I’ve been working to get our newest pet-project out of prototyping state, and into a testable ‘alpha’. Again, I’ll commit an entire post or three to this product, but in summary, we’ve built a continuous deployment tool for the Azure platform. It’s our hope that we’ll be the first to bring full fledged continuous deployments to the Azure world. We’ll keep you posted, but you’ll be able to follow along at TheBuildGrid shortly.
Third, we’re working with UNF to develop an interning delivery system for local business. I don’t want to give a ton of detail on this yet as we’re still very early, but I can say that UNF is truly amazing in its desire to help students. We’re very excited about this opportunity and looking forward to whatever develops.
Fourth, we’ve brought on a Marketing/Sales person in Jeremy Vaughan. He’s been an incredible influence in our culture and really pushed us step up our game. Add to this, the assistance of Jen Hyde, and I’m not sure I’ve ever been this busy before.
Having said all of this, we’re now looking to add some talent to the team. We’re looking for all levels, especially interns, so if you interested, reach any one of the PCG team on Twitter and well get the ball rolling.
Jax Code Camp - WTF???
aight. this post is going to be inflammatory. as a result, i’m posting on my personal blog, and not on my company’s site. i’m going to call someone out in this post, and as a result, he won’t be able to delete my question. this post is pure opinion and i’m simply trying to figure out why more people aren’t asking these questions.
first, let me say that i’m a huge fan of the “spirit” driving code camps. i think it’s great that people are willing to spend time shaping presentations and code samples to share with those willing to learn.
those who’ve worked with me and my guys know we love to share knowledge. we’re big on mentoring and have a real interest in seeing jax become THE technical powerhouse in the southeast. we do absolutely everything we can to support local, and some not so local, events as we believe this is good for everyone.
with that out of the way, i can safely say, i’m not the biggest fan of the current jaxcodecamp events.
last year, as part of our mypruf launch, we wanted to sponsor at a level which would allow us to get a table and engage the conference attendees. when we requested the information, it came as a huge surprise to us, that it required a $1500.00 donation to get a table. now, what we REALLY wanted to do, was get two tables, side by side, so we could generate a much larger conversation. with a total price tag of $3,000.00, we decided to reach to the organizing committee and see if they’d be willing to work with us. after several weeks of committing to do so, they were finally overridden by the jaxdug president, Bayer White. when asked, he made it clear that if he did it for us, he’d have to do it for everyone else. so, we got one table, selected an area of the lobby where we’d not likely have ‘neighbors’, and worked with the space. now the interesting part for me, was that i was going to get a booth for pottsconsultinggroup as well. having had this experience, i decided not to.
my second shock came when i went to write the check, and was asked to make it out to flowfocus, Bayer White’s personal company. what?? let me get this right, i’m going to write a check to Bayer White and trust that it goes where it needs to? if jaxdug is running this, why am i not writing this check to jaxdug? what? it’s not structured as a non-profit? how in the hell is it taking donations from people? why is no one asking questions about this? why in the hell is this even being run by jaxdug?? so, again, i just went along with it.
my last unpleasant surprise came when at the end of code camp, Bayer presented the money to a large organization as a gift. it’s not that i have a problem with donations, but i make them as a matter of personal choice. jax code camp should not be an avenue to building good will as a charitable or philanthropic organization, it should be wholly focused on creating the type of experience for its attendees and speakers they deserve. honestly, with the kind of money that’s been donated in recent years, our community could have a much better online experience, better facilities, BETTER FOOD, etc..
so, again this year, i reached out to Bayer personally and asked about the possibility of lowering the cost of sponsorships, and again was told no. and yes, you still make checks out to flowfocus. really??
why is this a problem for me?
well, since then, i’ve gone to three other code camps (south florida, orlando and tampa), add gas and hotel, and they’re combined costs were still cheaper than one table at jaxcodecamp. the real kicker, is that ALL of them gave us a discount when simply asked to. further, as a result, we were able to bring more people to the conference.
i’ve also begun asking at every conference i can find, what sponsorship levels are, and at what point would i get a booth. i would encourage those interested in the topic to do the same. i think you’ll find that we are significantly more expensive the all other florida code camps, and higher than many other technical conferences. hell, in one case, i could have purchased a round-trip ticket, a night’s hotel, conference attendance, the sponsorship for a booth AND STILL it would have been cheaper than one table at jaxcodecamp.
so now i gotta ask, why the hell are the sponsorship levels so expensive? if we’re donating leftovers, and we’re not going to invest in the local community, why are we requiring such high donation levels for a FREE community event held at the local university? shouldn’t we be focused on improving the overall experience? why are we not focused on increasing the number of technology/startup sponsors? other code camps are pushing forward with format changes, content rules. why are we not raising the bar for ourselves? how many presentations this year will be 101 level shit?
hey Bayer, wtf??
the real kicker? i’ll be going either way to support my colleagues in their presentations, participate in the conversation(s) and help jax push forward in technology. hell, i may even present myself. but what i won’t be doing, is giving my money to Bayer again this year.
keeping it real
one of the first suggestions i make to people working at pcg is to establish a personal brand. in my opinion, it’s a critical part of selling yourself forward and developing the kind of personal focus that builds a professional resume. having said that, i’ve put this off myself, allowing my company’s brand to mutate as mine.
recently, we started working with the vaughan consulting group and jeremy MADE me do this. in addition to the blog, i’ve acquired the twitter tag for @hackmp. it’ll take some time to get a real design together, but really excited about building my brand for the first time.
why //hackmp? well, for the .net devs out there, visual studio has a hack tag (//hack) that can be used to mark your source code. this tag allows you to identify all hacks using the todo feature in vs. at some point in my career, many years ago, i adapted this so i could sort my hacks out from all others. i was, in essence, owning up to my hacks. thanks to b2berry for connecting me to my own brand. bad ass.
in all honesty, i should have done this a long time ago. in setting this up, i’ve also realized how liberating it will be to post what i want and not worry about the repercussions. wonder what pete’s gonna say…and poor, poor jeremy.
as i ruminate on this, i begin to see all the stuff i’d like to talk about.
…this could be fun.
one side note before the deluge…i don’t capitalize when i type unless i’m giving proper focus/credit and i use ellipses for dramatic pause. we’ve all got faults.