140

At what point should a developer be allowed to choose his tools? When they don't impact your team. Am I looking at this the wrong way? Absolutely. Yes, you have a short deadline. Yes, you could get it done faster in Rails. But the company as a whole needs to deploy and maintain the application. If the company has a stable of good C# developers, then it ...


126

I think you make a good point. Most of the programmers on this site are likely working professionals whose goal is pretty much to create quality software as quickly as possible. Reinventing the wheel fails this goal on two counts. Re-writing code that exists is wasted effort that could be used on the unique parts of your system and makes the project take ...


106

What does the Spring framework do? Should I use it? Why or why not? Spring is a framework that helps you to "wire" different components together. It is most useful in cases where you have a lot of components and you might decide to combine them in different ways, or wish to make it easy to swap out one component for another depending on different settings ...


102

If you get a set of requirements that are physically impossible to implement as the device does not support and cannot support the wanted functionality, you need to explain this to the person creating the requirements. You should be respectful and explain why the requirements are not possible to implement (i.e. the touch screen cannot distinguish between a ...


98

I'd say you have to talk to the team lead and say something like: I know you guys are a .NET shop, but I was actually hired for my Java/JRubyRails skills. I can build this new application in X amount of time using those tools that I already know. I could learn C#/mvc4 like you want, but it will take >> X amount of time. What do you want? This raises the ...


84

Your observation is correct, the SOLID principles are IMHO made with reusable libraries or framework code in mind. When you just follow all of them blindly, without asking if it makes sense or not, you are risking to overgeneralize and invest a lot more effort into your system than probably necessary. This is a trade-off, and it needs some experience to ...


64

First, what is dependency injection? Simple. You have a class, it has a private field (set to null) and you declare a public setter that provides the value for that field. In other words, the dependency of the class (the field) is being injected by an external class (via the setter). That's it. Nothing magical. Second, Spring can be used without XML (or ...


52

What advantage was gained by implementing LINQ in a way that does not cache the results? Caching the results would simply not work for everybody. As long as you have tiny amounts of data, great. Good for you. But what if your data is larger than your RAM? It has nothing to do with LINQ, but with the IEnumerable<T> interface in general. It is the ...


49

From my experience, when writing an app, you have three choices: Write code solely to fulfil the requirements, Write generic code that anticipates future requirements, as well as fulfilling the current requirements, Write code that only fulfils the current requirements, but in a way that's easy to change later to meet other needs. In the first case, it's ...


41

You were apparently hired because of your ability to adapt to "new" technologies. C# is no different, in that regard. Are you sure you don't want to take the opportunity to learn something new? ASP.NET MVC is very similar to Ruby on Rails, in many ways. You won't be at a snail's pace forever. If you already know ROR, ASP.NET MVC will be a cinch for you. ...


30

These requirements are not silly, stupid or ridiculous. This is in fact very important problem for users of touch screens, that people with larger fingers have it very difficult to pinpoint the target, which is often not understood by little-fingerers. However, if you find this requirements impossible to implement because device's sensors are not able to ...


29

Nice Question. Code may be represented by a DAG describing the inputs and outputs of each of the arithmetic operations performed within the code; this representation allows the compiler to perform common subexpression elimination efficiently. Most Source Control Management Systems implement the revisions as a DAG. Several Programming languages describe ...


29

It seems to me that you misunderstand abstractions and code reuse. The whole software development industry is built on abstractions. Just because not using them, i.e. avoiding using frameworks, libraries and in general code which is not written in-house, would increase the cost you need to produce a piece of software by hundred, thousand, probably even more....


29

Loosely coupling your application to its framework essentially means you are going to write a proxy framework. Writing that proxy framework is a lot of work, and if you ever switch to a new framework you'll have to do a lot of work to make the proxy framework support the new framework. Of course, different frameworks use different idioms and patterns, which ...


28

First of all, your understanding of dependency injection is not fundamentally wrong, but quite different from what most people mean when they use the term. What you describe is a rather strange and unconventional way to achieve testability. I'd advise you to move away from it, as other developers will be rather puzzled by that kind of code. Dependency ...


27

Batteries Included Java's Tooling It is just awesome: IDEs: even if some IDEs support JavaScript, the level of support just doesn't compare. Try to refactor JavaScript code on large codebases (say, 40K+ LOC) and weep. Unit-Testing: though that picked up over the last few years, it's also way more mature in the Java world. Continuous Integration and ...


27

It's more important to study the language than it is to study the framework. Learn the language well, and you'll use the framework well. In order of importance (most important first): Fundamental programming principles - Algorithms, data structures, etc. Language paradigms - OOP, Functional, etc. Language features. Syntax and frameworks.


26

1.) Why is Rails coded in Ruby? Rails was originally extracted from DHH's work on Basecamp, which was written in Ruby. Over time, the Rails core developers continued to extract and develop more features into Rails, and it eventually became a full-fledged framework. Since Ruby grew in power and expressiveness over the years, it continued to be a good fit ...


24

When you start a project and have a particular need, you have a choice: Either you implement your own solution from scratch, Or you use an existent library or framework. When implementing your own solution, you introduce several risks: The needs may evolve, requiring you to constantly write more and more code. Ultimately, the code you've originally ...


24

What advantage did Microsoft hope to gain by implementing it this way? Correctness? I mean, the core enumerable can change in between calls. Caching it would produce incorrect results and open the entire “when/how do I invalidate that cache?” Can of worms. And if you consider LINQ was originally designed as a means to do LINQ to data sources (like entity ...


23

I recommend reading the official answer to your question, Appropriate Uses For SQLite. Specifically, the "Situations Where Another RDBMS May Work Better" warns that SQLite does not support concurrent writing: SQLite supports an unlimited number of simultaneous readers, but it will only allow one writer at any instant in time. For many situations, ...


21

Frameworks can be tricky indeed. Problems can easily arise when a framework is too "opinionated", i.e. when it really prefers one particular style of application and all parts are geared towards supporting this particular style. For instance, if the framework completely abstracts the authentication process of a user by allowing you to just add one component,...


21

Arguments for staying with Java/JRuby Chances are, your boss wants you to produce. They hired you so that you could add value to the company. Ensure that they understand that by forcing you to use a framework that you aren't familiar with they will cause you to: Produce results at a slower rate Create lower quality code Even the best programmers require ...


21

For .NET it may depend on the deployment target. .NET 3.5 is supported in even early editions of Windows XP, whereas 4.5 is only supported on Vista and above. At my workplace we opted to stay on 4.0 because we still have workstations running on Windows XP Pro SP3 (which 4.0 supports). We cannot consider migrating until next year or so just because of that. ...


20

The abstraction of writing the SQL via a framework well, abstracts. Writing SQL by hand is not all that bad by itself, but you start to get issues with escaping and sanitizing and this turns into a mess. An abstraction layer can take care of all of this behind the scenes allowing your code to be clean and free of lots of mysql_real_escape_string() calls or ...


19

For why do you want to use Spring, You can read it on http://www.wrox.com/WileyCDA/Section/Why-Use-the-Spring-Framework-.id-130098.html In summary : J2EE applications tend to contain excessive amounts of "plumbing" code. Many code reviews repeatedly reveal a high proportion of code that doesn't do anything: JNDI lookup code, Transfer Objects, try/...


19

The answer depends a lot on the context. If you would like to gain more in-depth understanding of data structures by trying your hand at implementing a hash table, "reinventing the wheel" is the best thing you can do. If you are learning how to write compilers and need a symbol table, implementing your own hash map instead of reusing one from the standard ...


19

Ordinary constructor injection doesn't require a framework at all. The only thing you lose out on is the ability to centralize your dependencies in a configuration file. DI containers are an "enterprise software" pattern, used when the object graph is very large and complex. I suspect that 95% of applications do not require it.


19

The key of DI containers is the abstraction. DI containers abstract this design concern for you. As you may guess, it has a noticeable impact on the code, often translated into a fewer number of constructors, setters, factories and builders. In consequence, they make your code more loosely coupled (due to the underlying IoC), cleaner and simpler. Although ...


18

At what point should a developer be allowed to choose his tools? When said developer is the software lead. Certainly, you can (and should) make the case for using the different toolkit if you're concerned about productivity, but be prepared for an answer you won't like. There may be a damned good reason why your lead wants you to use a specific toolkit, ...


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