I'm having problems bringing the software engineering I learned in school into my projects at my job.

The patterns are all easy enough to apply, but coming up with architectures and general class structures is tough for me. It's so open ended and I never know how to approach my projects, with the exception of any project that cleanly fits the MVC architecture.

I've been working on some increasingly larger projects. The end product works because I know testing well, but getting there is hell and going back to add features is worse. My work usually degrades into planning from the applications entry point and thinking through the use cases. This works eventually, but I end up with low cohesion and tightly coupled code. I had enough experience coming out of school to start in a job with more responsibilities than entry level programmers, so I don't have the benefits of learning from a more experienced team.

The problem is I'm very inefficient. My boss said once that if I get these projects out faster and with the same level of testing I can make more.

So I have to teach myself software engineering. I've read a lot of books, but they are a little too abstract; I need something concrete. Where should I go to learn real project software engineering?

EDIT: It may help to know that I sometimes end up with clean code. It either just takes me a really long time to get there, or I give up and hack it cause I know it will work. Most people will say this comes with experience, but there must be some place I can go that says: if your project is like this this and this, try these architectures.

3 Answers 3


Buy a book.

Patterns of Enterprise Application Architecture.

You might also want to start using the Seperated Interface Pattern together with an inversion of control container since it forces you to decouple your code.

Working against interfaces also makes unit tests a lot easier and to refactor parts of your code.


I had enough experience coming out of school to start as a Sr. level programmer (after all, a lot of older sr. level programmers don't know this stuff), so I don't have the benefits of learning from a more experienced team.

I completely and wholeheartedly disagree with what's being said here. The exact problem you're describing is one in which you just need experience. You may be a talented developer, you may have a lot of modern and updated skills, but "senior level" is a measure of experience.

The problem is I'm very inefficient.

This is because you're relatively new to the trade. Nobody comes out of school as an expert. There are things you can't learn in school and can learn only from years of experience. You're going to write some bad code along the way. We all do. You're going to learn those lessons. This is fine. Having learned those lessons is what makes a developer "senior level."

For example, take a look at the industry-accepted design patterns in the gang of four book. These weren't written as an academic exercise. They weren't written because the people who wrote them were smarter than other developers. They were written because people spent years in the industry solving problems and improving their craft, eventually arriving at re-usable patterns.

You have to go through the same thing. There's a lot of industry knowledge already laid out that you can learn, but don't expect to be an expert right away. Skill takes time.

  • I agree. I'm "sr. programmer" in the sense that I'm senior to the other 2 programmers. Not by my definition. I'm terrible compared to the real sr programmers. That being said, there has to be a resource that gives pointers for this that I'm unaware of. I get that I'll learn better where to use architectures in practice, but surely there is a place that will list out the common architectures for common problems or common approaches. I disagree with the programmers that say this must come from experience only, if I knew of MVC in the beginning I would have used it alot sooner for web apps.
    – justausr
    Commented Dec 15, 2011 at 15:02
  • 1
    @justausr: The best resources I've found for personal growth in the trade (second only to experience on a good team) are books. I linked to one, jgauffin linked to another. These books will internally reference more books, and so on. Martin Fowler, Bob Martin, Kent Beck, etc. There's no shortage of great books from great authors. Don't just read them, apply them. Read a little, think about it, blog about it, write code to demonstrate it, read more, rinse, repeat.
    – David
    Commented Dec 15, 2011 at 15:05
  • 1
    if I knew of MVC in the beginning I would have used it alot sooner for web apps Your comment implies that used some other method that you found inferior in the past, and now you are using MVC and have noticed recognizable benefits. This IS experience, and more experience like this is what makes a Sr. Developer.
    – maple_shaft
    Commented Dec 15, 2011 at 15:08
  • right, but I wouldn't have invented MVC on my own. I would have discovered some other architecture that is probably less effective in code separation. I still need the experience, the books that have been suggested are good for what I want. The one mentioned in this post seems to be what I wanted.
    – justausr
    Commented Dec 15, 2011 at 15:18

I had enough experience coming out of school to start as a Sr. level programmer

I am not sure if this is your ego running away with your common sense or if you are just being naive? Maybe both. Learning academic principles is completely different than actually living through a situation where a good process clearly helped you or the team or an anti-pattern cost you dearly. You realistically don't know and can't claim to be an expert at anything.

My boss, being pretty savvy, knew this and hired me in between entry level and sr level pay

This sounds terribly conceited... please consider revising this.

Where should I go to learn real project software engineering?

Your there. Real software engineering isn't anything like what you experienced in Academia, it is the process of engineering software in conformance with good practices, standards and quality to solve real world problems.

This does not include pontification on the pro's and con's of Djikstras algorithm for a few milliseconds of performance, nor other various academic forms of mental masturbation. You need to learn through direct experience what things work, what things don't work, and what can be done with limited resources and time.

  • I've been programming for 5 years before school. I applied to a job that said "Sr. .net developer". I'm not great, I just was saying that I got a job that requires slightly more experience than most people get right out of school... That was said to explain that I have the responsibility of a "Sr programmer" in my bosses view so I am trying to work with that. My boss was savvy because he knew I don't know what a sr level programmer knows so he hired me for less pay than he planned on for the position. Don't be so rude by making assumptions.
    – justausr
    Commented Dec 15, 2011 at 15:09
  • and the rest of the post pretty much lays out why I'm not good. Not sure how you got that I'm conceited
    – justausr
    Commented Dec 15, 2011 at 15:11
  • 3
    @justausr I have been coding since I was 11 years old. This doesn't mean that I have 17 years experience. I am not trying to point out that you are not good, I am trying to point out that you do not know as much as you think you do. Once we think that we are smart and that we know a lot, we learn less. Being humble, and believing that we know nothing is the only thing that helps us learn and grow.
    – maple_shaft
    Commented Dec 15, 2011 at 15:16
  • not everyone graduates college at 22. I worked for a while and went back. I guess I worded it wrong, I was trying to get across that I don't know very much and need help fitting my bosses expectation of a more sr programmer.
    – justausr
    Commented Dec 15, 2011 at 15:21
  • 2
    My experience in hiring people just out of school is that, regardless of their degree, they are Jr. Programmers. They may be able to come up with a neat algorithm, but can they deal with 200,000+ lines of legacy code that is already in production? No, they can't. OTOH, give me someone with a H.S. diploma who has 4 years of in-the-trenches coding experience (commercial or hardcore OSS) and I'll probably be a happy manager. Commented Dec 15, 2011 at 18:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.