A Retrospective

Well it’s that time of the semester again. Hope to pass everything with flying colors, graduate in 2 weeks, and move on with the next phase of my life: Young Urban Professional.

It’s been a whirlwind ride since 2013. I’ve had my ups and downs, periods of complete clarity and extreme stress but it seems the pendulum is steadying now. Countless hours in the computer labs, tutoring labs, and my laptop firing off program after program, assignment after assignment, almost certainly without fail. It feels like a mechanical process now, absolutely logical and constraint-aware. Creativity has its moments, and I do enjoy fiddling with new library calls, compound data structures, and language features. But 2 hours before a program is due is not the time to be creative unless I’m trying to pull a Leeroy Jenkins which is pretty rare honestly.

 

public class Java8Tester {
   public static void main(String args[]){
      Java8Tester tester = new Java8Tester();
        
      //with type declaration
      MathOperation addition = (int a, int b) -> a + b;
        
      //with out type declaration
      MathOperation subtraction = (a, b) -> a - b;
        
      //with return statement along with curly braces
      MathOperation multiplication = (int a, int b) -> { return a * b; };
        
      //without return statement and without curly braces
      MathOperation division = (int a, int b) -> a / b;
        
      System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
      System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
      System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
      System.out.println("10 / 5 = " + tester.operate(10, 5, division));
        
      //with parenthesis
      GreetingService greetService1 = message ->
      System.out.println("Hello " + message);
        
      //without parenthesis
      GreetingService greetService2 = (message) ->
      System.out.println("Hello " + message);
        
      greetService1.sayMessage("Geewhiz");
      greetService2.sayMessage("Isengard");
   }
    
   interface MathOperation {
      int operation(int a, int b);
   }
    
   interface GreetingService {
      void sayMessage(String message);
   }
    
   private int operate(int a, int b, MathOperation mathOperation){
      return mathOperation.operation(a, b);
   }
}

I’d like to say the next 5 or so years should be a time of aggressive expansion and high-risk, high-reward pursuits. I have a tendency to gravitate towards long term stability, steady but slow growth, and consistency over sheer power. I think I’ll need to position myself career-wise for big jumps in salary and responsibility as my twenties come to an end.

In terms of my technical trajectory, I’m moving towards a pure software engineering role. I think I’ll need to become familiarized with design patterns, anti-patterns, and the pros and cons of each. It’s probably a good idea for me to write the code myself to see what is happening under the hood. I also need to read a lot more code and see use cases for all these patterns, otherwise they just seem to be well-organized, modular code at face value and I don’t see any other purpose to using the patterns other than easily finding critical blocks of code when necessary, but I suppose the IDE handles all of that heavy lifting anyways? I’m able to simultaneously change the name of variables in a multi-file project in two keystrokes, so I imagine the bigger tools i.e. Eclipse, Jetbrains, should be able to do it at least as fast if not faster.

What’s probably going to rustle some jimmies of purists and career PC-heads is that so far I’ve been writing code on a pretty old laptop running about 2GB ram the past four years. It’s a complete base-level stock Dell, no bells or whistles just the cheapest thing you could buy 6 years ago. I imagine the speed increase will be pretty noticeable for my projects at work. But hang on, it’s actually the case that my school’s lab computers are running between 4-8GB ram on those systems and I have no issues on those machines unless it’s getting close to a deadline or generally after 5pm — that’s when many, many underclassmen hog all of the Linux VM cycles and typing a simple ‘ls’ command once logged in can take 10 seconds. So it really turns out that I’ve already gotten a little experience on slightly faster machines at school with not a whole world of difference (really bandwidth can only go so far on a distributed server).

 

Bleh. Gotta get back to work now. Two back-to-back exams followed by a quiz tomorrow. Going to be a hell of a busy week.