I regularly feel like I don’t know anything. I have been working as a software developer for around 8.5 years and I feel like a green newbie who just came out of University. The internet serves as the greatest asset to my professional life but also the greatest ego bruiser I have ever known.

I have worked for the same small company since my senior year in University. I have worked on projects developed in Ada, PHP, ColdFusion, Java, C#, VB 6, VB.Net, ASP, ASP.Net, and javascript/ecmascript. I’ve worked on projects that store data in MySQL, SQL Server, and Oracle including writing stored procedures, functions, and endless queries.

I’ve messed around with Ruby and Ruby on Rails. I’ve screwed with Perl a little. I’ve made some bad flash applications and participated in a couple small open source initiatives. Yet, through all of this I basically feel like I don’t know much at all.

I read a lot of blogs written by some smart people who seem to have done so much more with their careers and I wonder what I’m doing. I like the company I work for and I work with some very smart and talented people. I wonder, though, if some of those guys feel the same way I do at times - that we aren’t really advancing our knowledge. I wonder what it would have been like to have worked with some of the guys I read online. How much might I have learned and how much better would the software I write be?

I really love writing code yet I know the code I write could often be so much better. I’m not looking for a job but, when I see a want ad, I feel like I don’t know much. Even though I’ve not run into a single problem I haven’t been able to solve I still feel like an incompetent when reading the blogs of so many of these people.

So why do I keep reading them? Because I want to learn. I want to be better and dammit, like the shoe commercial says, I want my better to be better than theirs.

This isn’t ego but a sincere desire to be much better at what I do. I want to have a better understanding of how to structure different applications, I want to be able to write better code that is easier to maintain and is more performant. I want to have a better understanding of the core fundamentals of software development.

Right now I view these blog authors as my virtual mentors. I am trying to learn vicariously via their experiences. However, in a lot of ways this is a pretty poor way for me to learn. I learn best by doing and then discussing what I have done with others. The traditional “peer review” is, for me, the greatest learning tool I have encountered so long as I have a peer who can review the work; and therein lies the crux of my problem. I don’t really have people I can review things with.

I work for a small company and the people I most feel like I can learn from are also the busiest.

The difficultly, of course, is that rarely do I need someone to review something trivial. Instead I would like bigger more complex things to be reviewed. How do you do that though? How can you express a big complex idea concisely so that someone external to the project can get on board to the point where they can provide constructive feedback about your solution? I don’t know but I’d love to find a good answer.

Comments

Bill

Jesse,

Thanks for stopping by and commenting. I appreciate the input and insight.

The #1 item in your list is pretty much where I find myself with most things now-a-days. The IBM adage of “stop talking and start doing” seems like pretty sound advice really.

#2 is a little harder for me but I will make a better effort to do so somehow.

#3 well once I start doing #2 I’ll figure out a way to repeat it :O)

Thanks again

Jesse

Bill,

This is Jesse, the author of 20bits. Thanks for the link. :)

I’ll just say, I think you’re overestimating my success and intelligence. What I’ve done career-wise has come about because of three statements:

1. Just do it.
2. Meet interesting people.
3. Repeat until lucky.

Or, to boil it down to one sentence, be so good people can’t ignore you. Do anything and everything you can possibly think of doing. Blog, code, pontificate, share, educate, goad, etc. Talk to lots of people, the more interesting the better.

It doesn’t matter if you think it’s stupid, worthless, unproductive – just do it.

If you do this you’ll meet people who help you make things happen.

Anonymous

Bill,

Having been programming for over a 16 yrs myself what you come to realize is that most of the “new” stuff out there is just shit. Rehashes of tech invented in the 70s and/or personal pet projects of someone with a LOT of hype trying to sell a book or launch an IPO.

WebServices? They are just a rehash of socket communication, perhaps CORBA if you want structure.

XML? A standardized text file format.

Functional Programming? Lisp, 1960s i believe.

Rich Internet Application = Client / Server (1970s-1980s)

The only thing that has really changed is the ease of which these concepts are able to be developed and deployed. New APIs come around that make life easier for the programmer, but conceptually very little progress has happened.

I think most innovation happens in the games industry or large scale computer science like google or IBM. Microcomputers will ALWAYS be at the bottom rung of the technology stack, inheriting ideas and breakthroughs that happen on much larger systems.

So, don’t worry, nobody understands it all. Just relax in the knowledge that it’s all been done before, better.

I think the quote is: Those that do not understand Unix are doomed to reinvent it, poorly.

Bill

Thanks for the link to that post. I think it falls in pretty well with the advice I picked up from Thomas Lee’s blog post.

Anonymous

I think this article was written for you:
tactics tactics tactics

I’m only in my second year as a web developer, using soley microsoft technologies. I’ve actually worried about being in your position in few years time. Thing is web technologies don’t interest me that much, however stuff like assembly I find fascinating. I’ve started spending some of my free learning assembly probably for no purpose other than its interesting and I have a feeling I’m gonna be a better coder because of it. Once I’ve made my way through this assembly book I’m going to learn some lisp, its seems a lot smart people say it will improve me.
Its wierd, all the people I work with aren’t interested in assembler / lisp / general computer science like this, they reckon Im wasting my time with this stuff. I hope they are wrong.

Bill

Thanks to each of you for posting a comment. I appreciate your advice.

Like I said earlier I’ve dabbled in a couple open source projects but, perhaps, I really should find one that really interests me and dive into it.

As commentor Thomas Lee says on his blog I probably could learn a ton by reviewing other peoples code as opposed to having my own reviewed. I hadn’t really thought of it from that perspective.

Anonymous

Look you want something different. Before breaking though, or before it breaks into violent outrage ;) I’d suggest talking to all involved there when weekend is coming (they may be more relaxed), maybe they feel the same, and maybe what might be more important is, whether there are ways to “feel” that there can be a change.

Maybe its just not interesting enough in the long run.

Personally I opted for taking more risk (but I am not married and have no kids, so its no big deal if something fails).
Risks arent that fun, but at least one can be creative and pro-active without being afraid of anything.

Anonymous

Bill,

It seems like you’ve worked with several different technologies and have great breadth of experience, but I think you also need to focus on depth. In my experience, day-to-day web development in general, and ColdFusion in particular, will not take you there. Delve deeper. Try writing your own web framework in Java, for example. Write your own ORM. Pick up Lisp and try inventing a simple language and then writing compilers/shallow translators to the other frameworks you work with every day.

Abc

Mike Cantelon

I feel pretty similar. I don’t have the time to invest to achieve the level of knowledge I’d like to.

I would echo the sentiment others have expressed in comments: get involved with open source. I’ve found its not only made me a better programmer (very humbling), but also taught me a lot about myself and others and made me realize how useful my non-programming skills can be.

Anonymous

Hi Bill,

nobody should feel bad because of what
he is or knows. I know how you feel,
because I have similar feelings of not
beeing or doing enough. But I don’t
think that the solution is to do more,
because the fundamental reason for the
feelings isn’t how much you do or know,
it just seems so.

If I’m looking at me, than it’s more of
an inferiority feeling, which couldn’t
be compensated by anything in this
world. You can only overcome the
feeling, realize, that you don’t have to
feel this way. Why should we feel this
way? If you think about it, there’s no
valid reason. It’s only a believe,
nothing more.

If you enjoy your family, than this is
absolutely great. No reason to feel bad,
because you can’t learn or do something
in this time. You would only hurt
yourself.

You should do or learn things because
you enjoy them, and not in the
aspiration of beeing lucky or feeling
better in a far future. That doesn’t
work.

Greetings,
Daniel

Thomas Lee

Hi Bill,

I think I know how you feel.

Unfortunately the sort of growth that I crave I have to go seeking out for myself. I have a weird thing for programming language internals, but I work building web and desktop software. Needless to say, my position - while challenging and rewarding - doesn’t really lend itself to, say, compiler construction. :)

This is not a complaint, just an observation: I really do enjoy my job and the people I work with, but true growth on a technical level with stuff that I’m interested in has, predictably enough, only been possible on my own time.

The thing is there’s more to know in our profession/obsession than is realistically possible. This is actually a good thing if, like yourself, you have a desire to learn.

If you feel like you’re in a rut, pick something new - something you feel will be beyond your comprehension for the foreseeable future - and see how you go in truly understanding it. If you don’t have a lot of time to spare, then just be consistent to keep your mind fresh with the new ideas and concepts that you come to understand naturally through experimentation.

Keep rolling, even if you get frustrated. Things you once thought you would never understand might gradually creep within your grasp - even if you don’t grok the whole concept, you’ll learn much along the way.

Oh, and not to be a whore for the cause, but open source is a great way to expose yourself to bright, passionate people working on projects you may find interesting. Join a couple of dev mailing lists, and/or jump on IRC.

Anyway, hope I’m not completely off-base with how you’re feeling. Good luck. :)

Cheers,
T

Adam

This reminds me of the old saw, “Being an expert is like driving a Jeep; you still get stuck in the mud, but you’re further away from help.”

I don’t have an answer to your question about finding helpful peers, but if it’s any consolation I’m looking too.

Bill

Jespern,

Thanks for the comment. I don’t really have a problem with logic or understanding what to do with the code - it’s hard to explain my issue really

  • which is why I wrote this blog post about 10 times before just publishing this one.

You are right that I don’t really get to settle with one language much- but that is the nature of my job. We do work for a lot of different clients with different needs and they rarely share the same development environment.

I also realize there will always be people out there who are better - but I still want to push myself to get better and this post is really just my futile effort to express my sense of frustration.

I have heard a lot of good things about learning Lisp; but jumping into learning yet another language, at this point, seems counter productive, especially considering the fact that I admittedly don’t get to really delve deeply into any of the languages I already know (beyond Cold Fusion).

I view my job as a craft. There are apprentices, journeymen, and masters. I am somewhere in the middle of being a journeyman. But I want to be much better.

I feel like, in part becuase I have limited contact with others in my profession, that I don’t really have to opportunity to expand much while at work but I don’t want to sacrifice all of my post-work free time toward it (my daughters and wife are far too important).

This post really is just a lamentation of the fact I feel like I’m in a bit of a rut. I just didn’t express it very well.

jespern

Bill,

I’d like to say that I used to feel like you, and that I’m not that anymore, but I think what you’re describing is a thing that you never outgrow. There will always be someone who’s better at something than you. You just have to accept that, and admire them for that, instead of trying to compare yourself to them.

On the way to becoming a good programmer, I find that there is an important lesson that you must learn, regardless of which language you’re trying to master. Once you’ve overcome this obstacle, every language will make a lot more sense to you. There’s a fundamental principle to programming that has a lot to do with logic. There’s a difference between someone who knows what to write because he understands why he must write it, and someone who writes it because he read it in a book or on the internet. Personally I think that you get this from working in different languages with different paradigms. After working with Lisp, you tend to see things more clearly. After working with functional languages, you tend to see patterns in your imperative code. I’ve never written anything big in either, but both have taught me invaluable lessons in general.

You can achieve a lot on your own, if you are patient and observant. If you’re ever fortunate enough to know people who are interested in the same subject, they make for great peers to review your code. If you don’t, there’s always the option of contributing to an open source project, or even just reading their source code to see how they write things. You can be sure that they will be harsh on you and tell you what’s wrong with your code.

Being a successful programmer has to do with a lot more than being good at writing code as well. You can be pushing out lines of code in a steady stream, but none of that matters if you don’t know what to do with it. There’s other factors involved, such as management and most of all, experience. Who would you rather hire? A Ph.D in comp.sci or some guy with 5-10 years experience in development? And why? Notice I said development and not programming. They’re not the same.

From your list of things you have experience in, it seems like you never much settled on a single language. I’m all for having a wide experience in a myriad of languages, but to really get deep down in the trenches and pick up on some of those idiosyncrasies your favorite language might have, that some other language might not, you do need to settle. At least for a while.