87 Comments
- piper999, on 07/23/2008, -1/+76Deodorant fails to make the list for the 50th year straight I can't help but notice.
- burnfromwithin, on 07/23/2008, -2/+39Security, especially! I see way too many web apps where the developers do not understand the basic HTTP request/response format and its security implications. If you can't construct an HTTP request, you shouldn't be writing applications for the web! (And don't forget that HTTP is stateless!)
"What do you mean we can't authenticate by placing the username in the URL?" - kayfouroh, on 07/23/2008, -4/+25What is this, an O'Reilly storefront?
(Yes I know not all of the books are O'Reilly) - CCB0x45, on 07/23/2008, -0/+21As a software engineer, hopefully instead of just knowing some of these they will practice them. And to be fair, you don't really have to know about cloud computing unless you are doing development that requires it.
- DutchGuilder, on 07/23/2008, -2/+16Cloud computing = useless buzz. Does anybody really use AWS for anything that makes money?
- rnelsonee, on 07/23/2008, -0/+10And Amazon's S3 service, which offers little savings to its customers, has gone down several times this week, shutting down stores.
How could you leave optimization, verification and validation, agile development methods, and integrated development environments off this list but include BS about 'cloud computing'? - Eldoo77, on 07/23/2008, -1/+11Developers, Developers, Developers, Developers...
- zydeco, on 07/23/2008, -0/+8I closed the window the moment I saw "Design Patterns".
Go read http://www.codinghorror.com/blog/archives/000899.h ... for a counter point to Design Patterns. I wish more people thought about their code instead of using this crap as a crutch. - jsauter, on 07/23/2008, -1/+9So true...
- rblancarte, on 07/23/2008, -1/+8I agree that SOME of these things are important, and probably all of them are important for probably internet programming, but I don't use them all in my programming job (though I do firmware).
From this list, the concepts every SE should know:
Interfaces - Conventions and Templates - Layering - Algorithmic Complexity - Caching - Concurrency - CrazyDEX, on 07/23/2008, -0/+7not on the list... some of these are really just for interviews but still good to know:
Design Patterns: singletons, factories, etc... (get this book - Design Patterns: Elements of Reusable Object-Oriented Software [Addison-Wesley])
Object-Relational Mapping (Hibernate, et al.)
Good UI Design Fundamentals - Arguably this is outside the scope of SE, but unfortunately many PM's (who tend to be charged with this task in small to medium sized companies) have not delt with enough software to grasp what works and what doesn't. - DteK, on 07/23/2008, -1/+7most enterprise level applications will always need conventional sql written by a person and not generated by a framework to get the best performance as well as do those tricky things that you can only do by writing it yourself.
- jshare, on 07/23/2008, -0/+511. Scalability
12. Self-documenting code & good 'why' comments - debuggercll, on 07/23/2008, -0/+5I do.
- admdrew, on 07/24/2008, -0/+4Every software engineer?
- debuggercll, on 07/23/2008, -0/+4So she can sys admin with a cup of coffee in the other hand.
- NotRylock, on 07/23/2008, -0/+4People in the industry?
- TheSwashbuckler, on 07/23/2008, -0/+3wow, I used that data structures and algorithms book in college 25 years ago. Maybe some things never do change...
- GlitchEnzo, on 07/23/2008, -1/+4Agreed. Computer Science != Software Engineering
I received a degree in Software Engineering and I am a member of the Order of the Engineer.
I'm not trying to diss Computer Science. I have a lot of respect for Computer Scientists. I'm just saying that there is a distinction between them. - volz0r, on 07/23/2008, -2/+5Apparently the software engineer who wrote this isn't familiar with the difference between concurrent and parallel. Perhaps he should have changed item 7 to 'Parallel processing' because that's what the description reads like, even though he seems to mention concurrent processing a few times.
- GlitchEnzo, on 07/23/2008, -6/+9Most of these are pretty lame if you are not a WEB software engineer.
- bradleyland, on 07/23/2008, -0/+3It's not the author's fault that in many cases, an O'Reilly book is considered to be the best book on the subject.
- gclef, on 07/23/2008, -0/+3yes. spam.
http://www.sophos.com/security/blog/2008/07/1528.h ... - twigboy, on 07/23/2008, -0/+2i had the same feeling when i was reading it
the title of this should of been "Top 10 Concepts That Every Java Web Developer Should Know" - init100, on 07/23/2008, -1/+3So what you are saying is that security is only relevant on the web? That's the most stupid thing I've read today.
- databeast, on 07/23/2008, -3/+5you couldnt be more wrong.
- przemeklach, on 07/23/2008, -0/+2If you took a good software engineering program you would have covered all these topics in your first 2 years. If any of these topics seem foreign to you then your not really an engineer.
- Metasquares, on 07/23/2008, -0/+2Truly proven theorems are never invalidated.
- nnja, on 07/23/2008, -0/+2definitely agree with you on #12
- shaggyb, on 07/23/2008, -1/+3writing "tricky" things yourself I don't think would be necessary if following along with the methodology of this article.
FTA "A successful software engineer knows and uses design patterns, actively refactors code, writes unit tests and religiously seeks simplicity."
Simplicity != tricky - 32bytes, on 07/23/2008, -0/+1Cloud computing is a buzzword!
- TheSwashbuckler, on 07/24/2008, -0/+1It's not that they weren't invalidated, it's that they weren't improved upon...
- patm1987, on 07/23/2008, -0/+1I may have a slightly skewed opinion being that I mostly develop real-time simulations but:
1) Cache Coherency is something that seems to be rarely taught or explained, but has given me huge framerate boosts (the essential idea is that when you grab something from memory to be put on the cpu's cache, it doesn't grab just what you ask for, it grabs data from either side also so you can get huge speed boosts by storing data your algorithm will use in close proximity)
2) Data Driven Design. I'm a fan of objects and object oriented programming (my first real language was Java), but people take it too far. In many cases, it's much cleaner and more efficient to store what I like to call "properties" and rather than writing a player class, enemy class, enemy tank class, etc... you just pass these entities with properties attached through your main loop and algorithms either act or don't act based on whether or not they find the necissary properties.
3) Linear Algebra. You can do some impressive number crunching very quickly (and heavily parallelize it) with some basic linear algebra. As long as you can reduce what you need to a linear transformation (or a series of them) you will probably see a massive efficiency boost.
I disagree with 10 and 8 on that list also, but I'm probably not the type of "software engineer" that they're talking about. - Metasquares, on 07/23/2008, -0/+1Lots of these things are the domain of what is typically called a "web applications developer" these days. Traditional software engineering doesn't use things like cloud computing.
If you're a decent software engineer, you should already have an idea of what concepts you need to know (and should be actively using them), and thus would not need to take your skillset from lists such as this one. - tomarocco, on 07/23/2008, -0/+1I would say Relational Databases fit better that bill by a long shot.
- GlitchEnzo, on 07/23/2008, -3/+4If you are not working on web development you will pretty much never have to deal with these:
Relational Databases
Security
Cloud Computing
Caching
The closest one would be databases, but Software Engineers don't work on those - Database Developers do. - rideagain, on 07/23/2008, -0/+1he says on the intro that the GoF's design patterns are apparently too well known already to make the list.
- hobophobe, on 07/24/2008, -0/+1Let's be clear here. The modern web security model of every user needing to create separate credentials for every site is broken and should be replaced. We need a more viable authentication system with persistent identification and reputation across the web. OpenID is a step in the right direction in this regard, but it hasn't (so far) reached the level of adoption and hasn't been introduced very well to the average end-user as a solution to (many of) their problems.
Security, privacy, and data portability are the big ticket items that need a lot of focus, need to be solved, so that we aren't still messing with them 10 years from now as a kludge-ridden beast of hacks and half-implementations. - OBKenobi, on 07/24/2008, -0/+1They should do one of these for industrial floor maintenance engineers.
- junk, on 07/24/2008, -0/+1Great article. Along with scalabilty and self documenting code listed above I would add Service Oriented Architecture.
- linuxpenguin, on 07/24/2008, -0/+1Depending on what sort of software you mean. . . maybe not, actually. There's plenty of software that really isn't intended for you to do any real amount of "talking" with. You may not know about it, but it's there.
- linuxpenguin, on 07/24/2008, -0/+1Um, most of these things you learn about in your Computer Science classes - at least to some degree. Even at the basic level classes you learn the importance of writing secure code, not to let other methods use your variables directly, how to create and use interfaces, coding conventions, etc. - and later you learn about more advanced security, the complexity of algorithms and how to measure the maximum execution time of an algorithm, and other things.
By the way, most of these concepts don't apply in *all* situations - there's tons of software programs that wouldn't gain any benefit from hashing, cloud computing, caching, and relational databases. They might be good things to know about, but they're not always necessary to use. In fact, depending on what sort of programs you do. . . you might be best off to never use any of them - cloud computing and relational databases might not be so helpful if you're writing a game or a game engine. - MtheoryX, on 07/24/2008, -0/+1That's right! You should be writing everything in assembly, dammit.
- Fornbogi, on 07/24/2008, -0/+1In modeling, there are ways you can iterate towards the right solution. Firstly, never add methods that might be useful in the future. Be minimalist, get away with as little as possible. Secondly, don't be afraid to recognize today that what you did yesterday wasn't right. Be willing to change things. Thirdly, be patient and enjoy the process. Ultimately you will arrive at a system that feels right. Until then, keep iterating and don't settle.
So true so true... - thejwac, on 07/23/2008, -0/+1Any reading suggestions? I've been a systems level developer for a few years and want expand my horizons. I'm very interested in writing secure web applications.
- findhostcoupons, on 03/22/2009, -0/+1Thanks for providing all these concepts. No doubts that all professional software developers know all of them!
- Nepenthes, on 07/24/2008, -0/+1I will bet you $100 that the person in the photo - despite the hastily applied label - is in fact NOT a software engineer.
- KidKenosha, on 07/24/2008, -0/+1Absolutely. I tutor at the Australian National University (arguably the best software engineering program in Australia), and these are all first- and second-year topics (with the exception of "cloud computing", which is basically wishful-thinking ***** and doesn't occur in the real world). Some are first-year topics.
- GavinZac, on 08/09/2008, -0/+1That's not the interface they mean.
-
Show 51 - 87 of 87 discussions




What is Digg?
Digg is coming to a city (and computer) near you! Check out all the details on our