Skip to content
View UncleSniper's full-sized avatar
Block or Report

Block or report UncleSniper

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
UncleSniper/README.md

Hi, I’m @UncleSniper. (If you played Quake 3 back in the day, you might know why I'm called that...) I'm an old school programmer all about writing tools, libraries, and frameworks for software developers (as opposed to end users). I genuinely believe that the current landscape of such tools is an outright embarrassment to the software engineering community (no yes offense). These days, I'm mostly looking to fix up the Java ecosystem in a way that allows you to get away from...

  • ...magic, first and foremost. I'm a strong believer in understanding what you do. Thus, if you don't understand a software component to the degree that you could write it yourself if it didn't exist, IMNSHO, you have no business using it. (The one exception to this is the compiler/linker portion of the toolchain, and even there, you should have at least a rough grasp on what those do.) By semi-extension, if something is "automatic", it is to be regarded with severe scepticism. Spring and JPA, I'm looking at you! (Also, so-called IDEs qualify. That thing where it auto-completes the expression you're writing (as with suggesting the correct fields/methods after typing a '.')? You have no idea how it does that (which (statistically) you don't)? Then don't use that IDE. Trust me, it will end up biting you — if nothing else, then in the sense that you will end up asking me to solve the problems you have with your "IDE", despite the fact that I don't use it. I'm not kidding; like 30% if my work time is wasted on just that.)
  • ...static provision of wiring. Simply put, if something involves reflection (especially annotations other than @Override and possibly @Deprecated), the author is very likely doing something wrong (unless they are implementing something like an IoC container — and no, Spring doesn't count, see the "bad wiring" rule below). (Naturally, you have even less business using @SuppressWarnings, unless you actually grasp the implications, which (statistically) you don't.) Spring and JPA, I'm looking at you! Similarly, if the documentation/reference of something mentions "the classpath", stay the frak away from it. Every "logging framework" ever (other than juslog), I'm looking at you! (Of course, Spring is even worse with its "classpath scanning", which is even less of a thing than "the classpath".) I'm serious; y'all need to understand how Java class loading works.
  • ...description of structure in anything other than (non-reflection!) values. If, for instance, the JSON/XML serialization of your object arises from the fields (or getters) of its dynamic type, something is very wrong. If you understand OOP (which (statistically) you don't), this should be obvious: The descriptive should conform to a proper abstraction you explicitly issue — from a scope of your choosing.
  • ...bad wiring, especially "type-based injection". There is no such thing as "the Foo" — if your object requires a Foo, you should explicitly tell it which one. If there is an @Inject or @Autowired in your code, you're doing it wrong (with the exception of jogdl2, which is yet to be implemented — and yes, I'm the exception; deal with it). The IoC container has no way of knowing which object to inject (unless qualifiers are used, but even then, the "static provision of wiring" rule applies).
  • ...singleton "abstractions". If there is only one (non-abstract) class implementing your interface, you're doing something wrong. (Granted, you might be trying to make it easier for testcases to mock the mechanism in question, but still, if there is no chance of other implementations in the future, something is wrong. Unit tests are called that for a reason. If the interface has no business existing, you can still write your tests accordingly.)
  • ...restrictive assumptions. Your webapp will not "always" take its data from a database. Trust me. Similarly, the "frontend" of your application will not always be a user looking at the rendition of an HTML page in their browser. Trust me. I've seen applications faking HttpServletRequest objects to get around such bad assumptions made earlier.
  • ...monolithic applications. If your whole application is in a single JAR, something is very wrong. By extension, DLL hell. If some "framework" pulls in a component you might not need, something is very wrong.
  • ...web "MVC". If your "controller" returns a "model and view", you don't understand MVC. Even worse if you return a "model" and rely on "the framework" to perform the view portion by "automatically" turning the returned object into JSON/XML. Spring, I'm looking at you!

I'm quite aware that 99.999999% of you are pouting (and very likely mad at me) right now. Nonetheless, really consider the above. I should hope you will find I'm right.

Popular repositories

  1. jogdl jogdl Public

    Java implementation of the OGDL (Object Graph Description Language) IoC container

    Java 2

  2. vim-scripts vim-scripts Public

    Vim Script

  3. arceye-termio arceye-termio Public

    Text matrix UI abstraction for Java

    Java

  4. arceye-utils arceye-utils Public

    Random collection of Java utility classes

    Java

  5. arceye-uxterm arceye-uxterm Public

    UNIX style terminal bindings for arceye-termio

  6. arceye-winterm arceye-winterm Public

    Windows console bindings for arceye-termio