Tag Info

Hot answers tagged

61

Disclaimer: I am an architect in an agile environment but, as Helmuth von Moltke the Elder says, "No battle plan survives contact with the enemy". In other words, practicalities mean that the exact letter of the guidelines cannot always be followed. Most of the points raised above are followed as best the team can. However, principle 1 (The teams that code ...


35

Let's assume that all specifications are in place and the organization is working perfectly. You've assumed the two biggest "bottlenecks" in the software development processes don't exist (from my personal experiences).


9

One aspect of experienced programmers who move from an IDE to a console / xterm environment, is finding a replacement for the indexing of source code objects (function names, variables). I believe the general term used for Microsoft's Visual Studio is Intellisense or something like that. In the Unix/Linux world, such as vim, one tool used if ctags or the ...


9

Disclaimer: I am not an agile coach/architect - this is what I've seen in agile projects that I've worked on and I think it works well. I don't think it's quite defined by Agile how you do architecture - agile focusses on development methodologies and practices. UML on the other hand is just a language to communicate your architecture which is beyond agile ...


8

Even in your hypothetical, perfect world, there are some issues I can see: Probably the most important, from my own point of view, is dealing with customers. In my own experience, the business has to deal with customers who frequently try to change the project while it's being developed. In some instances, they have tried to wing a change request as a bug ...


7

Books like http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 should be witness enough to how large, legacy poor quality code bases are common in the industry. My guess at why you have not heard or seen, and, more importantly, you will never likely hear about them until you work on one of them yourself, is, nobody seems capable ...


6

I don't intent to be part of VIM vs. IDE debate. I guess that is personal pref. But i use a lot of VIM and here is why i find it very powerful to use vim Two parts of the answer: A. Most things VIM allows most thing you can do with IDEs,(i am not trying to put every feature but just a few non-obvious that make vi look limiting) you can go traverse the ...


5

You're asking if it is important to include all links in RSS - look at other huge services - nytimes.com displays only 25 links in it's feed. It's up to RSS readers software to fetch your feed often enough to get all I guess.


5

The nice thing about the PageRank algorithm is that it can be solved iteratively in a distributed way, within the MapReduce framework. However, the working data for Pagerank on ~5M nodes and ~50M edges should fit perfectly well in 4GB ram, never mind 48GB.... Specifically, you don't need to store all data for each web page in memory -- instead, you should ...


4

Stepping through the code can be great at determining functionality. But I have found the more complex an application is, the more likely you are to be bounced around in the debugger and get completely lost. I would focus on understanding the business rules of a particular piece of functionality of the application. Ideally, focus on the simplest part. ...


4

On February 3, 2013, Michael Meeks, one of the LibreOffice developers, is giving a talk in a couple of days entitled, "LibreOffice: cleaning and re-factoring a giant code-base, or why re-writing it would be even worse." It sounds like exactly what you're asking for: a discussion of what they've done to take " a poorly-understood, gigantic code-base ...


3

I've actually been through a fairly significant refactoring three times in my career. Code has a tendency to decay, so if your code base is around long enough, a large refactor is pretty much unavoidable. All my examples were on private code bases, which might explain why public examples are hard to find. The first time was an application which, believe ...


3

In my opinion, Vim gives you a very strong editor with basic features, but it's up to you to spice it up with scripts/addons you'll most likely use in your projects. These will probably be different depending on whether you mostly edit scripts, documentation, or files that need to be compiled. As an example, I use zencoding for the occasional html/css ...


3

I do all my programming in vim. I actually find it easier than any IDE I've used. You can have multiple files open at the same time, even on the same screen (look up tabs and windows). I'm usually working in X, so I have several (6) xterm screens open: one for c files in vim (several in tabs), another for headers in vim (also tabs), and non-vim windows: ...


3

I'm not sure what you mean by "the organization is working perfectly", but even in a fantastic organization, the biggest bottleneck in any sizable project is communication. Mythical Man Month points out how, as a project team grows, communication combinations explode, almost guaranteeing errors and missed information.


3

In my experience the major "bottleneck" is the learning process. When your hypothetical company sets out to develop the next Microsoft Word there is a huge gap between what you need to know and what you actually know. The size of the gap depends on many factors, it may be in technology or the domain. You've touched on some of these issues in your ...


2

From what I've seen thus far at work, a large source of bottleneck comes simply from bugs and the human error that created them. Just think about the time it takes to debug the code, find a fix for the problem, and then retest the new solution. Now imagine if that fix caused another subtle bug. It can be a major stream of pain and thus slows down the ...


2

Learn about source control, and how to follow 'house style' if there is one, i.e. don't fight the man if the man wants you to use tabs over spaces, put in or leave out semicolons, and so on.


2

You're basically asking "what's the best way to write commercial software", and if you ask 5 guys you'll get 8 answers. Therefore, the best answer I can give to such a broad question (not sure it's "overly broad" and thus a candidate for closure, and thus I will try to answer) is: IT DEPENDS. It depends on how many developers are working together. In a ...


2

Creating big software is a hard thing to do properly, and folowing good practices is very important. A good start is to design the system properly. Partition it as much as possible, and create good interfaces (that's why hardware engineers are some times very good architects). Common concepts apply there as well (code repository, unit testing the code, ...


2

Most overwhelming systems, in my experience, have at least a few key parts that seem scariest. I pick one and try to understand just that one. Knowing that key part makes it easier to understand its related parts. My favorite approach to doing this is to use a sequence diagram. To me, a sequence diagram provides me with the picture I need to understand how ...


2

Take a look at using a generic base repository that contains some of the common functionality between all repositories. interface IRepository<T> { void Save(); T GetById(int id); int GetCount(); } From this you can create custom repositories for each action. interface IUserRepository : IRepository<UserPosts> { UserPosts ...


1

From personal experience working on a multi-million line code base I have found a few strategies that seem to work. Look at all of the bugs (even closed ones) and try to break them down into categories. Specifically to try break them down by the component that they belong to. If they belong to more than one component note that they do. Once you have done ...


1

It will depend on how much data you are actually working with (how big is a node?), but typically code like this really benefits from running as close to the data as possible. It should certainly be possible to run this on a high-end home computer (something with lots of RAM and some SSDs), or you could potentially set up a small cluster (say 3-4 machines) ...


1

Like you, I always step through the lines in the code base to get a basic feel. I know how you feel, one time I got hired in the 10th iteration of a large scale web project. Its architecture was one of the prototype's for http://webformsmvp.com/ . So it was totally new and we we're using commerce server 2007 too, no one in the country had experience with ...


1

How can I follow the code to low level functionality in order to get a better grasp of what is going on at a high level? Short answer: you can't. Longer answer: Any non-trivial application is going to be too big very soon for you to try and understand it in a bottom up manner. This gets worse as soon as a framework and/or patterns like observers are ...


1

Take your time, learning a new code base takes lots of time. Get familiar with the language the code is written in, and the style used to write that code, if you aren't already familiar with it. Learn about the code before learning the code, with large code bases its nearly impossible to remember exactly what every piece of code does, and its pointless ...


1

After talking with other people at work and digging around on my own, I have found that naming makes or breaks the approach of many small methods, and some trust that your co-worker is not crazy. The principle of least surprise is very important. With more objects is more places to introduce code and side effects. If you want to surprise someone, more ...


1

Many large-scale applications have been (of mine, at least, two ;) , and my guess is, many more will be written completely in Vim. IDEs as such are still a rather modern innovation, so to speak. However, plain vanilla vi (ouch) or Vim are a bit lacking. Knowing Vim and thinking in some of its ways help a bit, and plugins help a lot, for which www.vim.org is ...


1

I think Brandon Moretz has the best answer. But I want to add that getting the first version out of a large project isn't all that hard. I personally have never failed to do that. What I have failed to do was create the first version in a way such that that the second, third etc version and or bug fixes and or minor feature enhancements can also be ...



Only top voted, non community-wiki answers of a minimum length are eligible