This Q&A is part of a biweekly series of posts highlighting common questions encountered by technophiles and answered by users at Stack Exchange, a free, community-powered network of 80+ Q&A sites.

G1i1ch asks:

Lately I've been getting professional work, hanging out with other programmers, and making friends in the industry. The only thing is I'm 100% self-taught. It's caused my style to extremely deviate from the style of those that are properly trained. The techniques and organization of my code are different.

It's a mixture of several things I do. I tend to blend several programming paradigms together like Functional and OO. I lean to the Functional side more than OO, but I see the use of OO when something would make more sense as an abstract entity—like a game object. Next I also go the simple route when doing something. When in contrast, it seems like sometimes the code I see from professional programmers is complicated for the sake of it! I use lots of closures. And lastly, I'm not the best commenter. I find it easier just to read through my code than reading the comment. And most cases I just end up reading the code even if there are comments. Plus I've been told that, because of how simply I write my code, it's very easy to read it.

I hear professionally trained programmers go on and on about things like unit tests, something I've never used before so I haven't even the faintest idea of what they are or how they work. Lots and lots of underscores "_", which aren't really my taste. Most of the techniques I use are straight from me, or a few books I've read. Don't know anything about MVC, I've heard a lot about it though with things like backbone.js. I think it's a way to organize an application. It just confuses me though because by now I've made my own organizational structures.

It's a bit of a pain. I can't use template applications at all when learning something new like with Ubuntu's Quickly. I have trouble understanding code that I can tell is from someone trained. Complete OO programming really leaves a bad taste in my mouth, yet that seems to be what EVERYONE else is strictly using.

It's left me not that confident in the look of my code, or wondering whether I'll cause sparks when joining a company or maybe contributing to open source projects. In fact I'm rather scared of the fact that people will eventually be checking out my code.

Is this just something normal any programmer goes through or should I really look to change up my techniques?

Related: "Are in-code comments 'code smell?'"

Answer: Challenge Yourself (41 Votes)

asfallows replies:

"In fact I'm rather scared of the fact that people will eventually be checking out my code."

Good. Being conscious that people are going to look at your code will make you try harder.

Programming has become an incredibly large field. There are dozens of topics, tools, niches, and specializations, some of which are whole careers unto themselves. There is a vast amount to learn and know, and when you work with other programmers, there will always be stuff you know that they don't and stuff they know that you don't. This is a good thing.

If you are worried that your experience is incomplete, there are plenty of steps you can take to amend that through formal education and collaboration with trained experts. But it sounds like you're afraid there's some quantifiable milestone after which people say "Okay, now that I've mastered that, I'm officially a programmer." There is no such milestone. I've definitely had moments where I thought "yeah, now I'm getting somewhere" after I learned something new, but there's no magic list of things you must know and do to call yourself a programmer.

I know a lot of things about programming, I've used a dozen languages in lots of projects, and yet the subset of programming knowledge I can call my own is tiny. And I like that. Frankly, a programmer isn't something you are. A programmer is something you are constantly learning to be.

Take honest inventory of your skills, your strengths and weaknesses. Get feedback from people with more experience than you. Look for positions that line up pretty well with where you think you are—but don't be afraid to go for jobs that are a little outside your current mastery. If you only take jobs you already know everything about, you'll never learn at work.

See Also: "Why isn't rich code formatting more common?"

Answer: Get with the Program (14 Votes)

Robert Harvey replies:

When you begin developing applications in cooperation with other developers, some of these personal style foibles are going to get in the way.

If you begin working at a shop that uses underscores, you are going to use underscores. Everyone, regardless of their previous background, follows the shop standard for coding style.

Unless your coding style is extremely obvious, you'd better get used to writing clear, concise comments explaining how your code works, so that other developers can follow it.

If you don't know anything about unit tests, buy a good book. There are plenty of good books on unit testing out there. Same with MVC.

Professional software developers know how to play well with others, without littering the sandbox. The very best ones know how to read and write code regardless of style.

Answer: Don't Just Type There, Do Something (2 Votes)

Purmou replies:

As many people have pointed out, you can never become a master programmer. You can never really master any language. I laid out my entire programming foundation on HTML 4.01, and lo and behold, HTML5 threw itself in my face like an apple pie. The same happened with CSS3. Everything is just constantly evolving, improving—and I don't think there is such thing as a programmer who is not self-taught.

To some extent, we all learn things on our own—they don't teach you everything when you go to college for computer science or software engineering. A lot is left in your hands. And even then, every programmer acquires their own unique style over time. Sure, there are methods and standards when it comes to "good code," but there is still variation from person to person, and another program shouldn't tell you that your way is wrong.

I think there is a certain camaraderie to be upheld among programmers, and that is one of tolerance and respect, as cheesy as it may sound, towards each other and our methods.

"I have trouble understanding code that I can tell is from someone trained," you say.

Any decent programmer, though, would add comments in their code—it is the slightest of courtesies, and not every programmer may know it, but the collective work of us as colleagues is based on what we all do and how we contribute to the cloud that is programming.

You also write, "it's left me not that confident in the look of my code, or wondering whether I'll cause sparks when joining a company or maybe contributing to open source projects."

It's important to know that on an individual basis, it is also an endlessly growing/improvement process. You will probably never again code the way you do right now. I know that in the past six years that I've dipped into programming, my techniques (and even indentation and visual layout habits) have changed drastically, and they constantly are.

Another important thing is to always be confident in your code. If there is something wrong, another programmer will no doubt have constructive revisions to make. Sure, there will be a few who won't, and there will be a few who will toss away code they don't like, but it's all part of a truly remarkable learning process.

That's also what Stack Overflow and this site are for—so we can learn from each other, ask each other about ways to do specific things, and just be helpful to each other in this growing internet culture, community, and climate. So, it is in all of our best interest to continue on our neverending journey down self-taught lane, and to make the best of this great community we've all chosen to take part in.

Think you know how to make your code style more professional? Disagree with the opinions expressed above? Bring your expertise to the original post at Stack Exchange, a network of 80+ sites where you can trade expert knowledge on topics like web apps, cycling, scientific skepticism, and (almost) everything in between.